From 23f7a35dae4d1eba80346e79af7f3e4cc99b05f7 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Sat, 26 Dec 2009 00:24:00 +0000
Subject: [PATCH] aze

git-svn-id: http://svn.net-core.org/repos/t-engine4@148 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/engine/Entity.lua                        |  7 +-
 game/engine/ai/talented.lua                   |  4 +-
 game/engine/interface/ActorAI.lua             |  5 ++
 game/engine/interface/ActorTalents.lua        |  9 ++-
 game/engine/resolvers.lua                     | 10 +++
 game/modules/tome/class/NPC.lua               |  6 --
 game/modules/tome/class/Player.lua            |  2 +-
 game/modules/tome/class/interface/Combat.lua  | 15 ++--
 game/modules/tome/data/damage_types.lua       | 14 ++++
 .../grids.lua => general/grids/basic.lua}     |  0
 .../modules/tome/data/general/npcs/vermin.lua | 40 ++++++++++
 .../tome/data/general/{ => objects}/egos.lua  |  0
 .../general/{ => objects}/massive-armor.lua   |  0
 .../data/general/{ => objects}/objects.lua    |  8 +-
 .../data/general/{ => objects}/shields.lua    |  0
 .../data/general/{ => objects}/staves.lua     |  2 +-
 .../data/general/{ => objects}/swords.lua     |  2 +-
 game/modules/tome/data/talents.lua            |  1 +
 game/modules/tome/data/talents/misc/npcs.lua  | 55 +++++++++++++
 game/modules/tome/data/timed_effects.lua      | 13 +++
 .../tome/data/zones/ancient_ruins/npcs.lua    | 80 -------------------
 .../tome/data/zones/ancient_ruins/objects.lua |  1 -
 .../tome/data/zones/ancient_ruins/zone.lua    | 41 ----------
 .../tome/data/zones/tower-amon-sul/grids.lua  | 53 +-----------
 .../tome/data/zones/tower-amon-sul/npcs.lua   | 24 ++----
 .../data/zones/tower-amon-sul/objects.lua     |  2 +-
 26 files changed, 172 insertions(+), 222 deletions(-)
 rename game/modules/tome/data/{zones/ancient_ruins/grids.lua => general/grids/basic.lua} (100%)
 create mode 100644 game/modules/tome/data/general/npcs/vermin.lua
 rename game/modules/tome/data/general/{ => objects}/egos.lua (100%)
 rename game/modules/tome/data/general/{ => objects}/massive-armor.lua (100%)
 rename game/modules/tome/data/general/{ => objects}/objects.lua (63%)
 rename game/modules/tome/data/general/{ => objects}/shields.lua (100%)
 rename game/modules/tome/data/general/{ => objects}/staves.lua (95%)
 rename game/modules/tome/data/general/{ => objects}/swords.lua (94%)
 create mode 100644 game/modules/tome/data/talents/misc/npcs.lua
 delete mode 100644 game/modules/tome/data/zones/ancient_ruins/npcs.lua
 delete mode 100644 game/modules/tome/data/zones/ancient_ruins/objects.lua
 delete mode 100644 game/modules/tome/data/zones/ancient_ruins/zone.lua

diff --git a/game/engine/Entity.lua b/game/engine/Entity.lua
index a45ff5672f..085ac21fa0 100644
--- a/game/engine/Entity.lua
+++ b/game/engine/Entity.lua
@@ -128,8 +128,8 @@ end
 -- @param file the file to load from
 -- @param no_default if true then no default values will be assigned
 -- @usage MyEntityClass:loadList("/data/my_entities_def.lua")
-function _M:loadList(file, no_default)
-	local res = {}
+function _M:loadList(file, no_default, res)
+	res = res or {}
 
 	print("Loading entities file", file)
 	local f, err = loadfile(file)
@@ -157,8 +157,7 @@ function _M:loadList(file, no_default)
 			if t.define_as then res[t.define_as] = e end
 		end,
 		load = function(f)
-			local ret = self:loadList(f, no_default)
-			for i, e in ipairs(ret) do res[#res+1] = e end
+			self:loadList(f, no_default, res)
 		end,
 		loadList = function(f)
 			return self:loadList(f, no_default)
diff --git a/game/engine/ai/talented.lua b/game/engine/ai/talented.lua
index ed61c6166a..033ef53760 100644
--- a/game/engine/ai/talented.lua
+++ b/game/engine/ai/talented.lua
@@ -4,8 +4,8 @@
 newAI("dumb_talented", function(self)
 	-- Find available talents
 	local avail = {}
-	local target_dist = core.fov.distance(self.x, self.y, self.ai_target.actor.x, self.ai_target.actor.y)
-	for i, tid in ipairs(self.talents) do
+	local target_dist = math.floor(core.fov.distance(self.x, self.y, self.ai_target.actor.x, self.ai_target.actor.y))
+	for tid, _ in pairs(self.talents) do
 		local t = self:getTalentFromId(tid)
 		if not self:isTalentCoolingDown(t) and target_dist <= self:getTalentRange(t) and self:preUseTalent(t, true) then
 			avail[#avail+1] = tid
diff --git a/game/engine/interface/ActorAI.lua b/game/engine/interface/ActorAI.lua
index e4a39faaea..bfcea37f31 100644
--- a/game/engine/interface/ActorAI.lua
+++ b/game/engine/interface/ActorAI.lua
@@ -93,3 +93,8 @@ end
 function _M:runAI(ai)
 	return _M.ai_def[ai](self)
 end
+
+--- Returns the current target
+function _M:getTarget(typ)
+	return self.ai_target.actor.x, self.ai_target.actor.y, self.ai_target.actor
+end
diff --git a/game/engine/interface/ActorTalents.lua b/game/engine/interface/ActorTalents.lua
index 7a63e5e5ae..2ca5556a27 100644
--- a/game/engine/interface/ActorTalents.lua
+++ b/game/engine/interface/ActorTalents.lua
@@ -58,6 +58,7 @@ function _M:newTalent(t)
 	table.insert(self.talents_def, t)
 	t.id = #self.talents_def
 	self["T_"..t.short_name] = #self.talents_def
+	print("[TALENT]", t.name, t.short_name, #self.talents_def)
 
 	-- Register in the type
 	table.insert(self.talents_types_def[t.type[1]].talents, t)
@@ -175,7 +176,7 @@ function _M:learnTalent(t_id, force)
 	end
 
 	-- Auto assign to hotkey
-	if t.mode ~= "passive" then
+	if t.mode ~= "passive" and self.hotkey then
 		for i = 1, 12 do
 			if not self.hotkey[i] then
 				self.hotkey[i] = t_id
@@ -197,8 +198,10 @@ end
 function _M:unlearnTalent(t_id)
 	local t = _M.talents_def[t_id]
 
-	for i, known_t_id in pairs(self.hotkey) do
-		if known_t_id == t_id then self.hotkey[i] = nil end
+	if self.hotkey then
+		for i, known_t_id in pairs(self.hotkey) do
+			if known_t_id == t_id then self.hotkey[i] = nil end
+		end
 	end
 
 	if t.on_unlearn then t.on_unlearn(self, t) end
diff --git a/game/engine/resolvers.lua b/game/engine/resolvers.lua
index 0544a009e3..ce34bf7c62 100644
--- a/game/engine/resolvers.lua
+++ b/game/engine/resolvers.lua
@@ -25,3 +25,13 @@ end
 function resolvers.calc.mbonus(t)
 	return rng.mbonus(t[1], resolvers.current_level, 50) + (t[2] or 0)
 end
+
+--- Talents resolver
+function resolvers.talents(list)
+	return {__resolver="talents", list}
+end
+function resolvers.calc.talents(t, e)
+	local ts = {}
+	for i, tid in ipairs(t[1]) do ts[tid] = true end
+	return ts
+end
diff --git a/game/modules/tome/class/NPC.lua b/game/modules/tome/class/NPC.lua
index 2735450490..0ac3d99e21 100644
--- a/game/modules/tome/class/NPC.lua
+++ b/game/modules/tome/class/NPC.lua
@@ -31,9 +31,3 @@ function _M:tooltip()
 	local str = mod.class.Actor.tooltip(self)
 	return str..("\nTarget: %s\nUID: %d"):format(self.ai_target.actor and self.ai_target.actor.name or "none", self.uid)
 end
-
---- Tries to get a target from the NPC
--- This simple returns current AI target for NPCs
-function _M:getTarget(typ)
-	return self.ai_target.actor.x, self.ai_target.actor.y
-end
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index c03ac1e860..8991bf678b 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -112,7 +112,7 @@ function _M:getTarget(typ)
 		game:targetMode("exclusive", msg, coroutine.running(), typ)
 		return coroutine.yield()
 	end
-	return game.target.target.x, game.target.target.y
+	return game.target.target.x, game.target.target.y, game.level.map(game.target.target.x, game.target.target.y, Map.ACTOR)
 end
 
 --- Quick way to check if the player can see the target
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 1225dabdd4..0110f82114 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -38,14 +38,16 @@ The ToME combat system has the following attributes:
 - armor penetration: reduction of target's armor
 - damage: raw damage done
 ]]
-function _M:attackTarget(target)
+function _M:attackTarget(target, damtype, mult)
+	damtype = damtype or DamageType.PHYSICAL
+	mult = mult or 1
 	local speed = nil
 
 	-- All weaponsin main hands
 	if self:getInven(self.INVEN_MAINHAND) then
 		for i, o in ipairs(self:getInven(self.INVEN_MAINHAND)) do
 			if o.combat then
-				local s = self:attackTargetWith(target, o.combat)
+				local s = self:attackTargetWith(target, o.combat, damtype, mult)
 				speed = math.max(speed or 0, s)
 			end
 		end
@@ -54,7 +56,7 @@ function _M:attackTarget(target)
 	if self:getInven(self.INVEN_OFFHAND) then
 		for i, o in ipairs(self:getInven(self.INVEN_OFFHAND)) do
 			if o.combat then
-				local s = self:attackTargetWith(target, o.combat)
+				local s = self:attackTargetWith(target, o.combat, damtype, mult)
 				speed = math.max(speed or 0, s)
 			end
 		end
@@ -62,7 +64,7 @@ function _M:attackTarget(target)
 
 	-- Barehanded ?
 	if not speed then
-		speed = self:attackTargetWith(target, self.combat)
+		speed = self:attackTargetWith(target, self.combat, damtype, mult)
 	end
 
 	-- We use up our own energy
@@ -90,9 +92,7 @@ print("=> chance to hit", hit)
 end
 
 --- Attacks with one weapon
-function _M:attackTargetWith(target, weapon)
-	local damtype = DamageType.PHYSICAL
-
+function _M:attackTargetWith(target, weapon, damtype, mult)
 	-- Does the blow connect? yes .. complex :/
 	local atk, def = self:combatAttack(weapon), target:combatDefense()
 	local dam, apr, armor = self:combatDamage(weapon), self:combatAPR(weapon), target:combatArmor()
@@ -100,6 +100,7 @@ function _M:attackTargetWith(target, weapon)
 	-- If hit is over 0 it connects, if it is 0 we still have 50% chance
 	if self:checkHit(atk, def) then
 		local dam = dam - math.max(0, armor - apr)
+		dam = dam * mult
 		dam = self:physicalCrit(dam, weapon)
 		DamageType:get(damtype).projector(self, target.x, target.y, damtype, math.max(0, dam))
 	else
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index 22b07a2403..8d33baccbc 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -117,3 +117,17 @@ newDamageType{
 		end
 	end,
 }
+
+-- Poisoning damage
+newDamageType{
+	name = "poison", type = "POISON",
+	projector = function(src, x, y, type, dam)
+		DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam / 6)
+		dam = dam - dam / 6
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target then
+			-- Set on fire!
+			target:setEffect(target.EFF_POISONED, 5, {src=src, power=dam / 5})
+		end
+	end,
+}
diff --git a/game/modules/tome/data/zones/ancient_ruins/grids.lua b/game/modules/tome/data/general/grids/basic.lua
similarity index 100%
rename from game/modules/tome/data/zones/ancient_ruins/grids.lua
rename to game/modules/tome/data/general/grids/basic.lua
diff --git a/game/modules/tome/data/general/npcs/vermin.lua b/game/modules/tome/data/general/npcs/vermin.lua
new file mode 100644
index 0000000000..88f092f397
--- /dev/null
+++ b/game/modules/tome/data/general/npcs/vermin.lua
@@ -0,0 +1,40 @@
+local Talents = require("engine.interface.ActorTalents")
+
+newEntity{
+	define_as = "BASE_NPC_VERMIN",
+	group = "vermins",
+	display = "w", color=colors.WHITE,
+	can_multiply = 2,
+	body = { INVEN = 10 },
+}
+
+newEntity{ base = "BASE_NPC_VERMIN",
+	name = "white worm mass", color=colors.WHITE,
+	level_range = {1, 15}, exp_worth = 1,
+	rarity = 4,
+	autolevel = "warrior",
+	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
+	max_life = resolvers.rngavg(5,9),
+	energy = { mod=0.9 },
+	combat = { dam=5, atk=15, apr=10 },
+	stats = { str=10, dex=15, mag=3, con=3 },
+	combat_armor = 1, combat_def = 1,
+
+	talents = resolvers.talents{ Talents.T_CRAWL_POISON },
+}
+
+
+newEntity{ base = "BASE_NPC_VERMIN",
+	name = "green worm mass", color=colors.GREEN,
+	level_range = {2, 15}, exp_worth = 1,
+	rarity = 5,
+	autolevel = "warrior",
+	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
+	max_life = resolvers.rngavg(5,9),
+	energy = { mod=0.9 },
+	combat = { dam=5, atk=15, apr=10 },
+	stats = { str=10, dex=15, mag=3, con=3 },
+	combat_armor = 1, combat_def = 1,
+
+	talents = resolvers.talents{ Talents.T_CRAWL_POISON },
+}
diff --git a/game/modules/tome/data/general/egos.lua b/game/modules/tome/data/general/objects/egos.lua
similarity index 100%
rename from game/modules/tome/data/general/egos.lua
rename to game/modules/tome/data/general/objects/egos.lua
diff --git a/game/modules/tome/data/general/massive-armor.lua b/game/modules/tome/data/general/objects/massive-armor.lua
similarity index 100%
rename from game/modules/tome/data/general/massive-armor.lua
rename to game/modules/tome/data/general/objects/massive-armor.lua
diff --git a/game/modules/tome/data/general/objects.lua b/game/modules/tome/data/general/objects/objects.lua
similarity index 63%
rename from game/modules/tome/data/general/objects.lua
rename to game/modules/tome/data/general/objects/objects.lua
index 9e1f2de448..29bcdc18c1 100644
--- a/game/modules/tome/data/general/objects.lua
+++ b/game/modules/tome/data/general/objects/objects.lua
@@ -1,7 +1,7 @@
-load("/data/general/staves.lua")
-load("/data/general/swords.lua")
-load("/data/general/shields.lua")
-load("/data/general/massive-armor.lua")
+load("/data/general/objects/staves.lua")
+load("/data/general/objects/swords.lua")
+load("/data/general/objects/shields.lua")
+load("/data/general/objects/massive-armor.lua")
 
 newEntity{
 	name = "& Staff of Olorin",
diff --git a/game/modules/tome/data/general/shields.lua b/game/modules/tome/data/general/objects/shields.lua
similarity index 100%
rename from game/modules/tome/data/general/shields.lua
rename to game/modules/tome/data/general/objects/shields.lua
diff --git a/game/modules/tome/data/general/staves.lua b/game/modules/tome/data/general/objects/staves.lua
similarity index 95%
rename from game/modules/tome/data/general/staves.lua
rename to game/modules/tome/data/general/objects/staves.lua
index 8b9616177f..3b22d9e95b 100644
--- a/game/modules/tome/data/general/staves.lua
+++ b/game/modules/tome/data/general/objects/staves.lua
@@ -6,7 +6,7 @@ newEntity{
 	encumber = 5,
 	rarity = 3,
 	desc = [[Staves designed for wielders of magic, by the greats of the art.]],
-	egos = "/data/general/egos.lua", egos_chance = resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_STAFF",
diff --git a/game/modules/tome/data/general/swords.lua b/game/modules/tome/data/general/objects/swords.lua
similarity index 94%
rename from game/modules/tome/data/general/swords.lua
rename to game/modules/tome/data/general/objects/swords.lua
index 9c9e7a7b0d..9d62bfb4cd 100644
--- a/game/modules/tome/data/general/swords.lua
+++ b/game/modules/tome/data/general/objects/swords.lua
@@ -6,7 +6,7 @@ newEntity{
 	encumber = 3,
 	rarity = 3,
 	desc = [[Sharp, long, and deadly.]],
-	egos = "/data/general/egos.lua", egos_chance = resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_LONGSWORD",
diff --git a/game/modules/tome/data/talents.lua b/game/modules/tome/data/talents.lua
index 0a7400032e..367577b5b9 100644
--- a/game/modules/tome/data/talents.lua
+++ b/game/modules/tome/data/talents.lua
@@ -1,3 +1,4 @@
 load("/data/talents/misc/misc.lua")
 load("/data/talents/spells/spells.lua")
 load("/data/talents/physical/physical.lua")
+load("/data/talents/misc/npcs.lua")
diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
new file mode 100644
index 0000000000..640833b4e9
--- /dev/null
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -0,0 +1,55 @@
+-- race & classes
+newTalentType{ type="physical/other", name = "other", hide = true, description = "Talents of the various entities of the world." }
+newTalentType{ type="spell/other", name = "other", hide = true, description = "Talents of the various entities of the world." }
+newTalentType{ type="other/other", name = "other", hide = true, description = "Talents of the various entities of the world." }
+
+-- Multiply!!!
+newTalent{
+	name = "Multiply",
+	type = {"other/other", 1},
+	cooldown = 3,
+	range = 20,
+	action = function(self, t)
+		print("Multiply *****BROKEN***** Fix it!")
+		return nil
+--[[
+		if not self.can_multiply or self.can_multiply <= 0 then return nil end
+		-- Find a place around to clone
+		for i = -1, 1 do for j = -1, 1 do
+			if not game.level.map:checkAllEntities(self.x + i, self.y + j, "block_move") then
+				self.can_multiply = self.can_multiply - 1
+				local a = self:clone()
+				a.energy.val = 0
+				a.exp_worth = 0.1
+				a.inven = {}
+				if a.can_multiply <= 0 then a:unlearnTalent(t.id) end
+				print("multiplied", a.can_multiply, "uids", self.uid,"=>",a.uid, "::", self.player, a.player)
+				a:move(self.x + i, self.y + j, true)
+				game.level:addEntity(a)
+				return true
+			end
+		end end
+		return nil
+]]
+	end,
+	info = function(self)
+		return ([[Multiply yourself!]])
+	end,
+}
+
+newTalent{
+	short_name = "CRAWL_POISON",
+	name = "Poisonous Crawl",
+	type = {"physical/other", 1},
+	cooldown = 2,
+	range = 1,
+	action = function(self, t)
+		local x, y, target = self:getTarget()
+		if math.floor(core.fov.distance(self.x, self.y, x, y)) > 1 then return nil end
+		self:attackTarget(target, DamageType.POISON, 1)
+		return true
+	end,
+	info = function(self)
+		return ([[Multiply yourself!]])
+	end,
+}
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index 2af1bb3d0b..7228408203 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -56,6 +56,19 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "POISONED",
+	desc = "Poisoned",
+	type = "magical",
+	status = "detrimental",
+	parameters = { power=10 },
+	on_gain = function(self, err) return "#Target# is poisoned!", "+Poison" end,
+	on_lose = function(self, err) return "#Target# stops beign poisoned.", "-Poison" end,
+	on_timeout = function(self, eff)
+		DamageType:get(DamageType.NATURE).projector(eff.src, self.x, self.y, DamageType.NATURE, eff.power)
+	end,
+}
+
 newEffect{
 	name = "FROZEN",
 	desc = "Frozen",
diff --git a/game/modules/tome/data/zones/ancient_ruins/npcs.lua b/game/modules/tome/data/zones/ancient_ruins/npcs.lua
deleted file mode 100644
index 1815be1235..0000000000
--- a/game/modules/tome/data/zones/ancient_ruins/npcs.lua
+++ /dev/null
@@ -1,80 +0,0 @@
-local Talents = require("engine.interface.ActorTalents")
-
-newEntity{
-	group = "dragon",
-	name = "dragon of death",
-	display = "D", color_r=255,
-	level_range = {3, 10}, exp_worth = 1,
-	rarity = 4,
-	autolevel = "warrior",
-	ai = "simple",
-	max_life = 100,
-	life_rating = 10,
-	max_mana = 1000,
-	max_stamina = 1000,
-	energy = { mod=0.5 },
-	has_blood = true,
-	stats = { str=15, dex=8, mag=12, con=14 },
-	combat = { dam=8, atk=10, apr=2, def=4, armor=6},
-}
---[[
-newEntity{
-	group = "dragon",
-	name = "baby dragon",
-	display = "d", color_r=128,
---	faction = "poorsods",
-	level_range = {1, 4}, exp_worth = 100,
-	rarity = 2,
-	autolevel = "caster",
-	ai = "simple",
-	max_life = resolvers.rngavg(20,30),
-	max_mana = 1000,
-	max_stamina = 1000,
-	energy = { mod=0.3 },
-	has_blood = {nb=3, color={50,255,120}},
-	combat = { dam=5, atk=6, def=2, apr=1, armor=2},
-}
-]]
-newEntity{
-	group = "icky things",
-	name = "white icky",
-	display = "i", color=colors.YELLOW,
-	level_range = {1, 7}, exp_worth = 1,
-	rarity = 1,
-	autolevel = "caster",
-	ai = "dumb_talented_simple",
-	ai_state = { talent_in=12, },
-	max_life = resolvers.rngavg(10,20),
-	max_mana = resolvers.rngavg(50,60),
-	energy = { mod=0.3 },
-	has_blood = {nb=3, color={50,255,120}},
-	combat = { dam=5, atk=6, def=2, apr=1, armor=2 },
-	stats = { str=10, dex=7, mag=14, con=10 },
-	talents = { Talents.T_MANATHRUST, Talents.T_FREEZE, Talents.T_FLAME }
-}
-newEntity{
-	group = "goblin",
-	name = "small goblin",
-	display = "g", color=colors.GREEN,
-	level_range = {1, 7}, exp_worth = 1,
-	rarity = 1,
-	autolevel = "warrior",
-	ai = "dumb_talented_simple",
-	ai_state = { talent_in=6, },
-	max_life = resolvers.rngavg(10,20),
-	max_stamina = resolvers.rngavg(50,60),
-	energy = { mod=0.3 },
-	has_blood = true,
-
-	body = {
-		INVEN = 1000, MAINHAND = 1, OFFHAND = 1,
-		FINGER = 2, NECK = 1, LITE = 1,
-		BODY = 1, HEAD = 1, HANDS = 1, FEET = 1,
-		TOOL = 1,
-	},
-	equipment = resolvers.equip{ {type="weapon", subtype="longsword"}, {type="armor", subtype="massive"}, {type="armor", subtype="shield"}, },
-	drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} },
-
-	stats = { str=14, dex=12, mag=8, con=13 },
-	talents = { },
-}
diff --git a/game/modules/tome/data/zones/ancient_ruins/objects.lua b/game/modules/tome/data/zones/ancient_ruins/objects.lua
deleted file mode 100644
index 6e9e5075c3..0000000000
--- a/game/modules/tome/data/zones/ancient_ruins/objects.lua
+++ /dev/null
@@ -1 +0,0 @@
-load("/data/general/objects.lua")
diff --git a/game/modules/tome/data/zones/ancient_ruins/zone.lua b/game/modules/tome/data/zones/ancient_ruins/zone.lua
deleted file mode 100644
index ba5d139cfe..0000000000
--- a/game/modules/tome/data/zones/ancient_ruins/zone.lua
+++ /dev/null
@@ -1,41 +0,0 @@
-return {
-	name = "ancient ruins",
-	level_range = {1, 5},
-	level_scheme = "player",
-	max_level = 5,
-	width = 50, height = 50,
-	all_remembered = true,
-	all_lited = true,
---	persistant = true,
-	generator =  {
-		map = {
-			class = "engine.generator.map.Roomer",
-			nb_rooms = 10,
-			rooms = {"simple", "pilar"},
-			['.'] = "FLOOR",
-			['#'] = "WALL",
-			up = "UP",
-			down = "DOWN",
-			door = "DOOR",
-		},
-		actor = {
-			class = "engine.generator.actor.Random",
-			nb_npc = {20, 30},
-			ood = {chance=5, range={1, 10}},
-			adjust_level = {-1, 2},
-		},
-		object = {
-			class = "engine.generator.object.Random",
-			nb_object = {100, 100},
-			ood = {chance=5, range={1, 10}},
-		},
-	},
-	levels =
-	{
-		[1] = {
-			generator = { map = {
-				up = "UP_WILDERNESS",
-			}, },
-		},
-	},
-}
diff --git a/game/modules/tome/data/zones/tower-amon-sul/grids.lua b/game/modules/tome/data/zones/tower-amon-sul/grids.lua
index 66de5a3213..bc1ca76f54 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/grids.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/grids.lua
@@ -1,52 +1 @@
-newEntity{
-	define_as = "UP_WILDERNESS",
-	name = "exit to the wilds",
-	display = '<', color_r=255, color_g=0, color_b=255,
-	change_level = 1,
-	change_zone = "wilderness",
-}
-
-newEntity{
-	define_as = "UP",
-	name = "previous level",
-	display = '<', color_r=255, color_g=255, color_b=0,
-	change_level = -1,
-}
-
-newEntity{
-	define_as = "DOWN",
-	name = "next level",
-	display = '>', color_r=255, color_g=255, color_b=0,
-	change_level = 1,
-}
-
-newEntity{
-	define_as = "FLOOR",
-	name = "floor",
-	display = '.', color_r=255, color_g=255, color_b=255,
-}
-
-newEntity{
-	define_as = "WALL",
-	name = "wall",
-	display = '#', color_r=255, color_g=255, color_b=255,
-	block_move = true,
-	block_sight = true,
-}
-
-newEntity{
-	define_as = "DOOR",
-	name = "door",
-	display = '+', color_r=238, color_g=154, color_b=77,
-	block_sight = true,
-	door_opened = "DOOR_OPEN",
-}
-
-newEntity{
-	define_as = "DOOR_OPEN",
-	name = "open door",
-	display = "'", color_r=238, color_g=154, color_b=77,
-	block_move = false,
-	block_sight = false,
-	door_closed = "DOOR",
-}
+load("/data/general/grids/basic.lua")
diff --git a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
index 1815be1235..319130dec6 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua
@@ -1,3 +1,8 @@
+load("/data/general/npcs/vermin.lua")
+--load("/data/general/npcs/skeleton.lua")
+--load("/data/general/npcs/.lua")
+
+--[[
 local Talents = require("engine.interface.ActorTalents")
 
 newEntity{
@@ -17,24 +22,6 @@ newEntity{
 	stats = { str=15, dex=8, mag=12, con=14 },
 	combat = { dam=8, atk=10, apr=2, def=4, armor=6},
 }
---[[
-newEntity{
-	group = "dragon",
-	name = "baby dragon",
-	display = "d", color_r=128,
---	faction = "poorsods",
-	level_range = {1, 4}, exp_worth = 100,
-	rarity = 2,
-	autolevel = "caster",
-	ai = "simple",
-	max_life = resolvers.rngavg(20,30),
-	max_mana = 1000,
-	max_stamina = 1000,
-	energy = { mod=0.3 },
-	has_blood = {nb=3, color={50,255,120}},
-	combat = { dam=5, atk=6, def=2, apr=1, armor=2},
-}
-]]
 newEntity{
 	group = "icky things",
 	name = "white icky",
@@ -78,3 +65,4 @@ newEntity{
 	stats = { str=14, dex=12, mag=8, con=13 },
 	talents = { },
 }
+]]
diff --git a/game/modules/tome/data/zones/tower-amon-sul/objects.lua b/game/modules/tome/data/zones/tower-amon-sul/objects.lua
index 6e9e5075c3..5e34214923 100644
--- a/game/modules/tome/data/zones/tower-amon-sul/objects.lua
+++ b/game/modules/tome/data/zones/tower-amon-sul/objects.lua
@@ -1 +1 @@
-load("/data/general/objects.lua")
+load("/data/general/objects/objects.lua")
-- 
GitLab