From 6bf7dae96ee9c805d6a201eec9890cf2ab6b8151 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Fri, 14 Dec 2012 19:50:41 +0000
Subject: [PATCH] Big Arena improvments, including UI

git-svn-id: http://svn.net-core.org/repos/t-engine4@6081 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/engines/default/engine/ai/simple.lua     | 125 +++--
 game/modules/tome/ai/shadow.lua               |   4 +-
 game/modules/tome/ai/tactical.lua             |   6 +-
 game/modules/tome/class/NPC.lua               |   6 +-
 .../tome/class/generator/actor/Arena.lua      | 440 ++++++++++--------
 game/modules/tome/class/uiset/Minimalist.lua  |  65 ++-
 game/modules/tome/data/chats/arena-start.lua  |  44 +-
 game/modules/tome/data/chats/arena.lua        |  29 +-
 game/modules/tome/data/damage_types.lua       |   2 +-
 .../tome/data/general/events/cultists.lua     |   2 +-
 game/modules/tome/data/general/npcs/ant.lua   |   2 +-
 .../data/general/npcs/aquatic_critter.lua     |   2 +-
 .../tome/data/general/npcs/aquatic_demon.lua  |   2 +-
 game/modules/tome/data/general/npcs/bear.lua  |   2 +-
 game/modules/tome/data/general/npcs/bird.lua  |   2 +-
 .../tome/data/general/npcs/bone-giant.lua     |   2 +-
 .../modules/tome/data/general/npcs/canine.lua |   2 +-
 .../tome/data/general/npcs/cold-drake.lua     |   2 +-
 .../tome/data/general/npcs/construct.lua      |   2 +-
 .../tome/data/general/npcs/elven-caster.lua   |   2 +-
 .../tome/data/general/npcs/elven-warrior.lua  |   2 +-
 .../modules/tome/data/general/npcs/faeros.lua |   2 +-
 .../modules/tome/data/general/npcs/feline.lua |   2 +-
 .../tome/data/general/npcs/fire-drake.lua     |   2 +-
 .../tome/data/general/npcs/gwelgoroth.lua     |   2 +-
 .../data/general/npcs/horror-corrupted.lua    |   6 +-
 .../modules/tome/data/general/npcs/horror.lua |  20 +-
 .../data/general/npcs/horror_temporal.lua     |   6 +-
 .../tome/data/general/npcs/losgoroth.lua      |   2 +-
 .../tome/data/general/npcs/major-demon.lua    |   2 +-
 .../tome/data/general/npcs/minor-demon.lua    |   2 +-
 .../tome/data/general/npcs/minotaur.lua       |   2 +-
 .../data/general/npcs/multihued-drake.lua     |   2 +-
 game/modules/tome/data/general/npcs/mummy.lua |   2 +-
 game/modules/tome/data/general/npcs/naga.lua  |   2 +-
 game/modules/tome/data/general/npcs/ooze.lua  |   2 +-
 .../tome/data/general/npcs/orc-gorbat.lua     |   2 +-
 .../tome/data/general/npcs/orc-grushnak.lua   |   2 +-
 .../tome/data/general/npcs/orc-rak-shor.lua   |   2 +-
 .../tome/data/general/npcs/orc-vor.lua        |   2 +-
 game/modules/tome/data/general/npcs/orc.lua   |   2 +-
 game/modules/tome/data/general/npcs/ritch.lua |   2 +-
 .../modules/tome/data/general/npcs/rodent.lua |   2 +-
 .../tome/data/general/npcs/sandworm.lua       |   2 +-
 .../tome/data/general/npcs/shertul.lua        |   2 +-
 .../tome/data/general/npcs/skeleton.lua       |   2 +-
 .../tome/data/general/npcs/snow-giant.lua     |   2 +-
 .../modules/tome/data/general/npcs/spider.lua |   8 +-
 .../tome/data/general/npcs/storm-drake.lua    |   2 +-
 .../tome/data/general/npcs/sunwall-town.lua   |   2 +-
 game/modules/tome/data/general/npcs/swarm.lua |   2 +-
 .../tome/data/general/npcs/telugoroth.lua     |   2 +-
 .../modules/tome/data/general/npcs/thieve.lua |   2 +-
 game/modules/tome/data/general/npcs/troll.lua |   2 +-
 .../tome/data/general/npcs/undead-rat.lua     |   2 +-
 .../tome/data/general/npcs/vampire.lua        |   2 +-
 .../tome/data/general/npcs/venom-drake.lua    |   2 +-
 .../modules/tome/data/general/npcs/vermin.lua |   2 +-
 game/modules/tome/data/general/npcs/wight.lua |   2 +-
 .../tome/data/general/npcs/wild-drake.lua     |   2 +-
 game/modules/tome/data/general/npcs/yaech.lua |   2 +-
 .../tome/data/general/npcs/ziguranth.lua      |   6 +-
 .../tome/data/general/stores/basic.lua        |  51 ++
 .../data/talents/psionic/thought-forms.lua    |   6 +-
 .../spells/advanced-necrotic-minions.lua      |   8 +-
 .../data/talents/spells/necrotic-minions.lua  |  20 +-
 .../modules/tome/data/timed_effects/other.lua |   2 +-
 .../tome/data/zones/arena-unlock/npcs.lua     |   6 +-
 game/modules/tome/data/zones/arena/npcs.lua   |  73 ++-
 game/modules/tome/data/zones/arena/zone.lua   |  85 ++--
 .../tome/data/zones/blighted-ruins/npcs.lua   |   2 +-
 .../data/zones/crypt-kryl-feijan/npcs.lua     |   2 +-
 .../tome/data/zones/keepsake-meadow/npcs.lua  |   8 +-
 .../tome/data/zones/ring-of-blood/npcs.lua    |   2 +-
 .../tome/data/zones/ritch-tunnels/npcs.lua    |   8 +-
 .../tome/data/zones/slazish-fen/npcs.lua      |   2 +-
 .../tome/data/zones/town-angolwen/npcs.lua    |   2 +-
 .../tome/data/zones/town-derth/npcs.lua       |   2 +-
 .../tome/data/zones/town-elvala/npcs.lua      |   2 +-
 .../tome/data/zones/town-irkkk/npcs.lua       |   2 +-
 .../data/zones/town-iron-council/npcs.lua     |   2 +-
 .../tome/data/zones/town-last-hope/npcs.lua   |   2 +-
 .../tome/data/zones/town-shatur/npcs.lua      |   2 +-
 .../data/zones/tutorial-combat-stats/npcs.lua |   2 +-
 84 files changed, 645 insertions(+), 509 deletions(-)

diff --git a/game/engines/default/engine/ai/simple.lua b/game/engines/default/engine/ai/simple.lua
index 10e826531b..2ac4679ff9 100644
--- a/game/engines/default/engine/ai/simple.lua
+++ b/game/engines/default/engine/ai/simple.lua
@@ -32,10 +32,6 @@ end)
 newAI("move_dmap", function(self)
 	if self.ai_target.actor and self.x and self.y then
 		local a = self.ai_target.actor
-		if self:hasLOS(a.x, a.y) then 
-			local simple = self:runAI("move_simple")
-			if simple then return simple end
-		end
 
 		local c = a:distanceMap(self.x, self.y)
 		if not c then return self:runAI("move_simple") end
@@ -43,60 +39,14 @@ newAI("move_dmap", function(self)
 		for _, i in ipairs(util.adjacentDirs()) do
 			local sx, sy = util.coordAddDir(self.x, self.y, i)
 			local cd = a:distanceMap(sx, sy)
-			print("looking for dmap", dir, i, "::", c, cd)
+--			print("looking for dmap", dir, i, "::", c, cd)
 			if cd and cd > c and self:canMove(sx, sy) then c = cd; dir = i end
 		end
 
-		if dir == 5 then
-			-- Make sure that we are indeed blocked
-			local simple = self:runAI("move_simple")
-			if simple then return simple end
-			-- Wait at least 5 turns of not moving before switching to blocked_astar
-			self.ai_state.blocked_turns = (self.ai_state.blocked_turns or 0) + 1
-			if self.ai_state.blocked_turns >= 5 then
-				self.ai_state._old_ai_move = self.ai_state.ai_move
-				self.ai_state.ai_move = "move_blocked_astar"
-				return self:runAI("move_blocked_astar")
-			end
-		elseif self.ai_state.blocked_turns then
-			self.ai_state.blocked_turns = self.ai_state.blocked_turns - 1
-			if self.ai_state.blocked_turns <= 0 then self.ai_state.blocked_turns = nil end
-		end
-
 		return self:moveDirection(util.coordAddDir(self.x, self.y, dir))
 	end
 end)
 
--- Use A* pathing if we were blocked for several turns, to avoid stacking up in simple chokepoints
-newAI("move_blocked_astar", function(self)
-	if self.ai_target.actor then
-		self.ai_state.blocked_turns = self.ai_state.blocked_turns - 1
-		if self.ai_state.blocked_turns <= 0 then
-			self.ai_state.ai_move = self.ai_state._old_ai_move
-			self.ai_state._old_ai_move = nil
-			self.ai_state.blocked_turns = nil
-			return self:runAI(self.ai_state.ai_move or "move_simple")
-		else
-			local check_all_block_move = function(nx, ny)
-				local actor = game.level.map(nx, ny, engine.Map.ACTOR)
-				if actor and actor == self.ai_target.actor then
-					return true
-				else
-					return not game.level.map:checkAllEntities(nx, ny, "block_move", self)
-				end
-			end
-			local astar = self:runAI("move_astar", check_all_block_move)
-			-- If A* did not work we add a penalty to trying A* again
-			if not astar then
-				self.ai_state.ai_move = self.ai_state._old_ai_move
-				self.ai_state._old_ai_move = nil
-				self.ai_state.blocked_turns = -5
-			end
-			return astar
-		end
-	end
-end)
-
 newAI("flee_dmap", function(self)
 	if self.ai_target.actor then
 		local a = self.ai_target.actor
@@ -165,6 +115,79 @@ newAI("move_astar", function(self, add_check)
 	end
 end)
 
+-- Use A* pathing if we were blocked for several turns, to avoid stacking up in simple chokepoints
+newAI("move_blocked_astar", function(self)
+	if self.ai_target.actor then
+		self.ai_state.blocked_turns = self.ai_state.blocked_turns - 1
+		if self.ai_state.blocked_turns <= 0 then
+			self.ai_state.ai_move = self.ai_state._old_ai_move
+			self.ai_state._old_ai_move = nil
+			self.ai_state.blocked_turns = nil
+			return self:runAI(self.ai_state.ai_move or "move_simple")
+		else
+			local check_all_block_move = function(nx, ny)
+				local actor = game.level.map(nx, ny, engine.Map.ACTOR)
+				if actor and actor == self.ai_target.actor then
+					return true
+				else
+					return not game.level.map:checkAllEntities(nx, ny, "block_move", self)
+				end
+			end
+			local astar = self:runAI("move_astar", check_all_block_move)
+			-- If A* did not work we add a penalty to trying A* again
+			if not astar then
+				self.ai_state.ai_move = self.ai_state._old_ai_move
+				self.ai_state._old_ai_move = nil
+				self.ai_state.blocked_turns = -5
+			end
+			return astar
+		end
+	end
+end)
+
+newAI("move_complex", function(self)
+	if self.ai_target.actor and self.x and self.y then
+		local moved
+		-- Can we use A* due to damage?
+		if not moved and self.ai_state.damaged_turns and self.ai_state.damaged_turns > 0 then
+			moved = self:runAI("move_astar")
+		end
+
+		-- Check if we can use dmap
+		if not moved then
+			moved = self:runAI("move_dmap")
+		end
+
+		-- Check blocking
+		if not moved then 
+			-- Make sure that we are indeed blocked
+			moved = self:runAI("move_simple")
+			if not moved then
+				-- Wait at least 5 turns of not moving before switching to blocked_astar
+				-- add 2 since we remove 1 every turn
+				self.ai_state.blocked_turns = (self.ai_state.blocked_turns or 0) + 2
+				if self.ai_state.blocked_turns >= 5 then
+					self.ai_state._old_ai_move = self.ai_state.ai_move
+					self.ai_state.ai_move = "move_blocked_astar"
+					moved = self:runAI("move_blocked_astar")
+				end
+			end
+		end
+
+		-- Tick down the ai_state counters
+		if self.ai_state.damaged_turns then
+			self.ai_state.damaged_turns = self.ai_state.damaged_turns - 1
+			if self.ai_state.damaged_turns <= 0 then self.ai_state.damaged_turns = nil end
+		end
+		if self.ai_state.blocked_turns then
+			self.ai_state.blocked_turns = self.ai_state.blocked_turns - 1
+			if self.ai_state.blocked_turns <= 0 then self.ai_state.blocked_turns = nil end
+		end
+
+		return moved
+	end
+end)
+
 -- Find an hostile target
 -- this requires the ActorFOV interface, or an interface that provides self.fov.actors*
 newAI("target_simple", function(self)
diff --git a/game/modules/tome/ai/shadow.lua b/game/modules/tome/ai/shadow.lua
index 1a8000bf38..a9675489dd 100644
--- a/game/modules/tome/ai/shadow.lua
+++ b/game/modules/tome/ai/shadow.lua
@@ -99,10 +99,10 @@ local function shadowMoveToActorTarget(self)
 	end
 
 	-- move to target
-	if self:runAI("move_dmap") then
+	if self:runAI("move_complex") then
 		self.turns_on_target = (self.turns_on_target or 0) + 1
 
-		--game.logPlayer(self.summoner, "#PINK#%s -> move_dmap", self.name:capitalize())
+		--game.logPlayer(self.summoner, "#PINK#%s -> move_complex", self.name:capitalize())
 		return true
 	end
 
diff --git a/game/modules/tome/ai/tactical.lua b/game/modules/tome/ai/tactical.lua
index 76d9a065d9..3aa22b0f3a 100644
--- a/game/modules/tome/ai/tactical.lua
+++ b/game/modules/tome/ai/tactical.lua
@@ -19,7 +19,7 @@
 
 local DamageType = require "engine.DamageType"
 
-local print = function() end
+--local print = function() end
 
 local canFleeDmapKeepLos = function(self)
 	if self.never_move then return false end -- Dont move, dont flee
@@ -393,14 +393,10 @@ newAI("tactical", function(self)
 	end
 
 	if targeted and not self.energy.used then
-		game.log("%s thinks the player is at %d/%d", self.name:capitalize(), ax, ay)
 		if special_move then
-			game.log("%s moving with %s", self.name:capitalize(), special_move)
 			return self:runAI(special_move)
 		elseif self.ai_tactic.safe_range and not self:hasLOS(ax, ay) then
 			local moved = self:runAI("flee_dmap_keep_los")
-			if moved then game.log("%s moving with %s", self.name:capitalize(), "flee_dmap_keep_los") return moved end
-			game.log("%s moving with %s", self.name:capitalize(), self.ai_state.ai_move or "move_simple")
 			return self:runAI(self.ai_state.ai_move or "move_simple")
 		else
 			return self:runAI(self.ai_state.ai_move or "move_simple")
diff --git a/game/modules/tome/class/NPC.lua b/game/modules/tome/class/NPC.lua
index f3b143ed8a..caebde0940 100644
--- a/game/modules/tome/class/NPC.lua
+++ b/game/modules/tome/class/NPC.lua
@@ -200,7 +200,7 @@ function _M:checkAngered(src, set, value)
 	end
 end
 
---- Counts down timedEffects, but need to avoid the move_damaged_astar pathing
+--- Counts down timedEffects, but need to avoid the damaged A* pathing
 function _M:timedEffects(filter)
 	self._in_timed_effects = true
 	mod.class.Actor.timedEffects(self, filter)
@@ -218,9 +218,7 @@ function _M:onTakeHit(value, src)
 
 	-- Switch to astar pathing temporarily
 	if src and src == self.ai_target.actor and not self._in_timed_effects then
-		self.ai_state._old_ai_move = self.ai_state._old_ai_move or self.ai_state.ai_move
-		self.ai_state.ai_move = "move_damaged_astar"
-		self.ai_state.switch_move = 10
+		self.ai_state.damaged_turns = 10
 	end
 
 	-- Get angry if attacked by a friend
diff --git a/game/modules/tome/class/generator/actor/Arena.lua b/game/modules/tome/class/generator/actor/Arena.lua
index 6d70d6b0be..c55e6ee750 100644
--- a/game/modules/tome/class/generator/actor/Arena.lua
+++ b/game/modules/tome/class/generator/actor/Arena.lua
@@ -32,6 +32,230 @@ function _M:init(zone, map, level, spots)
 	self.turn_scale = game.energy_per_tick / game.energy_to_act
 end
 
+_M.mooks = {
+	{ entity = { type = "vermin", subtype = "rodent" }, --Wave 1
+		wave = 4, power = 2, delay = 3, bonus = 0.1, score = 5, entry = 2,
+		special = function (self) if game.level.arena.bonusMultiplier > 7 then self.entity = {name="giant crystal rat"} self.power = 4 self.wave = 6 end return self end },
+	{ entity = { type = "insect", subtype = "ant" },
+		wave = 2, power = 2, delay = 2, bonus = 0.1, score = 15 , entry = 2 },
+	{ entity = { name = "homeless fighter" },
+		wave = 1, power = 3, delay = 4, bonus = 0.2, score = 20, entry = 2 },
+	{ entity = { type = "animal", subtype = "canine" },
+		wave = 2, power = 3, delay = 3, bonus = 0.1 , score = 25, entry = 2 },
+	{ entity = { name = "white ooze" },
+		wave = 1, power = 3, delay = 3, bonus = 0.1, score = 15, entry = 2,
+		special = function (self) if game.level.arena.currentWave > 10 then self.wave = 2 end if game.level.arena.currentWave > 15 then self.entity = { name = "green ooze" } end return self end },
+	{ entity = { name = "cutpurse" }, --Wave ~5
+		wave = 1, power = 8, delay = 3, bonus = 0.1, score = 40, entry = 1 },
+
+
+	{ entity = { name = "white crystal" },
+		wave = 1, power = 5, delay = 4, bonus = 0.5 , score = 100, entry = 3},
+	{ entity = { name = "slinger" },
+		wave = 1, power = 7, delay = 4, bonus = 0.2, score = 100, entry = 1,
+		special = function (self) if game.level.arena.currentWave > 35 then self.entity = { name = "high slinger" } end return self end },
+	{ entity = { name = "dremling" },
+		wave = 1, power = 6, delay = 2, bonus = 0.3 , score = 100, entry = 2,
+		special = function (self) if game.level.arena.currentWave > 15 then self.wave = 2 end return self end },
+	{ entity = { name = "brown bear" },
+		wave = 1, power = 4, delay = 3, bonus = 0.2, score = 100 , entry = 2},
+	{ entity = { type = "animal", subtype = "snake" },
+		wave = 2, power = 4, delay = 3, bonus = 0.1, score = 100 , entry = 2},
+
+
+	{ entity = { type = "humanoid", subtype = "human", name = "rogue" }, --Wave ~10
+		wave = 1, power = 6, delay = 3, bonus = 0.2, score = 100 , entry = 1,
+		special = function (self) if game.level.arena.currentWave > 30 then self.wave = 2 end return self end },
+	{ entity = { type = "animal", subtype = "bear" },
+		wave = 2, power = 4, delay = 5, bonus = 0.3, score = 80, entry = 2 },
+	{ entity = { name = "drem" },
+		wave = 1, power = 7, delay = 3, bonus = 0.4 , score = 100, entry = 2},
+	{ entity = { type = "vermin", subtype = "ooze" },
+		wave = 4, power = 3, delay = 2, bonus = 0.1, score = 15, entry = 2 },
+	{ entity = { type = "undead", subtype = "skeleton" },
+		wave = 1, power = 8, delay = 4, bonus = 0.2, score = 120, entry = 2,
+		special = function (self) if game.level.arena.currentWave > 15 then self.wave = 2 end return self end },
+
+
+	{ entity = { name = "ghoul" },
+		wave = 1, power = 7, delay = 5, bonus = 0.2, score = 150, entry = 1,
+		special = function (self) if game.level.arena.currentWave > 20 then self.wave, self.entry = 2, 2 end return self end },
+	{ entity = { type = "humanoid", subtype = "human", name = "alchemist" },
+		wave = 1, power = 9, delay = 3, bonus = 0.2, score = 150, entry = 1,
+		special = function (self) if game.level.arena.currentWave > 25 then self.wave = 2 end return self end },
+	{ entity = { type = "immovable", subtype = "crystal" },
+		wave = 2, power = 5, delay = 3, bonus = 0.5 , score = 100, entry = 3,
+		special = function (self) if game.level.arena.currentWave > 20 then self.wave = 3 end if game.level.arena.currentWave > 45 then self.wave = 4 end return self end },
+	{ entity = { type = "giant", subtype = "troll" },
+		wave = 1, power = 4, delay = 2, bonus = 0.2 , score = 150, entry = 1 },
+	{ entity = { name = "blood mage" },
+		wave = 1, power = 10, delay = 2, bonus = 0.5 , score = 200, entry = 1 },
+
+
+	{ entity = { name = "honey tree" },
+		wave = 1, power = 4, delay = 3, bonus = 0.3 , score = 120, entry = 3,
+		special = function (self) if game.level.arena.currentWave > 35 then self.wave, self.score  = 2, 150 end return self end },
+	{ entity = { name = "skeleton mage" },
+		wave = 1, power = 10, delay = 4, bonus = 0.3, score = 150 , entry = 1,
+		special = function (self) if game.player.level > 10 then self.wave = 2 end return self end },
+	{ entity = { name = "high gladiator" },
+		wave = 1, power = 6, delay = 1, bonus = 0.3, score = 200, entry = 1,
+		special = function (self) if game.level.arena.currentWave > 30 then self.wave = 2 end return self end },
+	{ entity = { name = "wisp" },
+		wave = 4, power = 1, delay = 1, bonus = 0.3, score = 50 , entry = 3 },
+	{ entity = { name = "minotaur" },
+		wave = 1, power = 12, delay = 3, bonus = 0.3, score = 150 , entry = 2 },
+
+
+	{ entity = { name = "shadowblade" },
+		wave = 1, power = 13, delay = 1, bonus = 0.4, score = 200 , entry = 1 },
+	{ entity = { name = "trickster" },
+		wave = 1, power = 13, delay = 3, bonus = 0.4, score = 50 , entry = 1 },
+	{ entity = { name = "orc soldier" },
+		wave = 1, power = 10, delay = 4, bonus = 0.3, score = 150 , entry = 1,
+		special = function (self) if game.level.arena.currentWave > 25 then self.entity = {type = "humanoid", subtype = "orc"} end return self end },
+	{ entity = { name = "bone giant" },
+		wave = 1, power = 11, delay = 3, bonus = 0.3, score = 150 , entry = 2,
+		special = function (self) if game.player.level > 30 then self.wave, self.power = 2, 8 end return self end },
+	{ entity = { name = "ziguranth warrior" },
+		wave = 2, power = 8, delay = 2, bonus = 0.3, score = 130 , entry = 1 },
+	{ entity = { name = "orc archer" },
+		wave = 2, power = 10, delay = 5, bonus = 0.2, score = 100, entry = 2,
+		special = function (self) if game.player.level > 25 then self.wave, self.score  = 3, 125 end if game.player.level > 35 then self.wave, self.score  = 4, 150 end return self end },
+
+
+	{ entity = { name = "hexer" },
+		wave = 1, power = 13, delay = 1, bonus = 0.5 , score = 250, entry = 1 },
+	{ entity = { name = "wisp" },
+		wave = 6, power = 1, delay = 1, bonus = 0.3, score = 50 , entry = 3 },
+	{ entity = { name = "orc assassin" },
+		wave = 2, power = 10, delay = 4, bonus = 0.2, score = 200, entry = 2 },
+	{ entity = { name = "fire wyrmic" }, entitySub = { name = "ice wyrmic"},
+		wave = 1, power = 11, delay = 3, bonus = 0.3, score = 250, entry = 1 },
+	{ entity = { name = "sand wyrmic" }, entitySub = { name = "storm wyrmic" },
+		wave = 1, power = 11, delay = 3, bonus = 0.3, score = 250, entry = 1 },
+
+
+	{ entity = { name = "martyr" },
+		wave = 1, power = 13, delay = 1, bonus = 0.5 , score = 250, entry = 1 },
+	{ entity = { type = "vermin", subtype = "sandworm" },
+		wave = 1, power = 10, delay = 3, bonus = 0.2, score = 200, entry = 2 },
+	{ entity = { name = "ritch larva" },
+		wave = 2, power = 4, delay = 3, bonus = 0.1, score = 150, entry = 2 },
+	{ entity = { type = "giant", subtype = "ice" },
+		wave = 1, power = 8, delay = 2, bonus = 0.5, score = 300, entry = 1 },
+	{ entity = { name = "naga myrmidon" },
+		wave = 1, power = 9, delay = 2, bonus = 0.3, score = 300, entry = 1,
+		special = function (self) if game.level.arena.currentWave > 40 then self.wave = 2 end return self end },
+
+
+	{ entity = { name = "quasit" },
+		wave = 1, power = 9, delay = 2, bonus = 0.2, score = 300, entry = 2 },
+	{ entity = { name = "wretchling" },
+		wave = 1, power = 10, delay = 3, bonus = 0.3, score = 250, entry = 2,
+		special = function (self) if game.player.level > 25 then self.wave = 3 end if game.player.level > 35 then self.wave = 4 end return self end },
+	{ entity = { name = "great gladiator" },
+		wave = 2, power = 9, delay = 3, bonus = 0.3, score = 300, entry = 1 },
+	{ entity = { name = "bloated horror" },
+		wave = 2, power = 11, delay = 2, bonus = 0.4, score = 300, entry = 3 },
+	{ entity = { name = "umber hulk" },
+		wave = 1, power = 10, delay = 3, bonus = 0.3, score = 350, entry = 1 },
+
+
+	{ entity = { name = "anorithil" },
+		wave = 1, power = 10, delay = 2, bonus = 0.5, score = 450, entry = 1 },
+	{ entity = { name = "naga tide huntress" },
+		wave = 1, power = 10, delay = 2, bonus = 0.3, score = 300, entry = 2 },
+	{ entity = { name = "ritch hunter" },
+		wave = 4, power = 6, delay = 5, bonus = 0.4, score = 250, entry = 2 },
+	{ entity = { type = "undead", subtype = "wight" },
+		wave = 1, power = 11, delay = 2, bonus = 0.5, score = 400, entry = 1 },
+	{ entity = { name = "sun paladin" },
+		wave = 1, power = 12, delay = 2, bonus = 1, score = 450, entry = 1 },
+
+
+	{ entity = { name = "dread" },
+		wave = 1, power = 13, delay = 2, bonus = 1, score = 450, entry = 2 },
+	{ entity = { name = "naga psyren" },
+		wave = 1, power = 10, delay = 2, bonus = 0.3, score = 400, entry = 2 },
+	{ entity = { name = "star crusader" },
+		wave = 1, power = 14, delay = 2, bonus = 1, score = 450, entry = 2 },
+}
+
+_M.miniboss = {
+	{ name = "SKELERAT", wave = 4, entry = 2, display = "Skeletal rats", score = 100, power = 5, rank = 0.1 },
+	{ name = "GLADIATOR", wave = 2, entry = 1, display = "Gladiators", score = 150, power = 10, rank = 0.2 },
+	{ nil },
+	{ name = "GOLDCRYSTAL", wave = 4, entry = 3, display = "Golden crystals", score = 250, power = 15, rank = 0.1 },
+	{ name = "MASTERSLINGER", wave = 3, entry = 2, display = "Master slingers", score = 350, power = 20, rank = 0.2 },
+	{ nil },
+	{ name = "MASTERALCHEMIST", wave = 1, entry = 1, display = "Master Alchemist", score = 400, power = 25, rank = 0.5 },
+	{ name = "MULTIHUEWYRMIC", wave = 1, entry = 1, display = "Multi-hued Wyrmic", score = 400, power = 30, rank = 0.5 },
+	{ nil },
+	{ name = "REAVER", wave = 2, entry = 2, display = "Reaver", score = 800, power = 40, rank = 0.3 },
+	{ name = "HEADLESSHORROR", wave = 1, entry = 1, display = "Headless horror", score = 1000, power = 50, rank = 1 },
+}
+
+_M.bosses = {
+	{ name = "ARENA_BOSS_RYAL", display = "Ryal the Towering", chat = "arena_boss_ryal",
+	score = 1500, power = 35,
+	start = function ()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
+		chat:invoke("ryal-entry")
+	end,
+	finish = function ()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Victory!!"}, game.player)
+		chat:invoke("ryal-defeat")
+	end
+	},
+	{ name = "ARENA_BOSS_FRYJIA", display = "Fryjia the Hailstorm", chat= "arena_boss_fryjia",
+	score = 2500, power = 55,
+	start = function ()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
+		chat:invoke("fryjia-entry")
+	end,
+	finish = function ()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Victory!!"}, game.player)
+		chat:invoke("fryjia-defeat")
+	end
+	},
+	{ name = "ARENA_BOSS_RIALA", display = "Riala the Crimson", chat = "arena_boss_riala",
+	score = 3500, power = 85,
+	start = function ()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
+		chat:invoke("riala-entry")
+	end,
+	finish = function ()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Victory!!"}, game.player)
+		chat:invoke("riala-defeat")
+	end
+	},
+	{ name = "ARENA_BOSS_VALFREN", display = "Valfren the Rampage", chat = "arena_boss_valfren",
+	score = 4500, power = 125,
+	start = function ()
+		game.level.map:setShown(0.3, 0.3, 0.3, 1)
+		game.level.map:setObscure(0.3*0.6, 0.3*0.6, 0.3*0.6, 1)
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
+		chat:invoke("valfren-entry")
+	end,
+	finish = function ()
+		game.level.map:setShown(1, 1, 1, 1)
+		game.level.map:setObscure(1*0.6, 1*0.6, 1*0.6, 1)
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("arena", {name="Victory!!"}, game.player)
+		chat:invoke("valfren-defeat")
+	end
+	},
+}
+
+
 function _M:tick()
 	if game.level.arena.initEvent == true and game.level.arena.lockEvent == false then
 		game.level.arena.lockEvent = true
@@ -73,19 +297,7 @@ function _M:mitigateDelay(val, l)
 end
 
 function _M:summonMiniboss(val)
-	local miniboss = {
-		{ name = "SKELERAT", wave = 4, entry = 2, display = "Skeletal rats", score = 100, power = 5, rank = 0.1 },
-		{ name = "GLADIATOR", wave = 2, entry = 1, display = "Gladiators", score = 150, power = 10, rank = 0.2 },
-		{ nil },
-		{ name = "GOLDCRYSTAL", wave = 4, entry = 3, display = "Golden crystals", score = 250, power = 15, rank = 0.1 },
-		{ name = "MASTERSLINGER", wave = 3, entry = 2, display = "Master slingers", score = 350, power = 20, rank = 0.2 },
-		{ nil },
-		{ name = "MASTERALCHEMIST", wave = 1, entry = 1, display = "Master Alchemist", score = 400, power = 25, rank = 0.5 },
-		{ name = "MULTIHUEWYRMIC", wave = 1, entry = 1, display = "Multi-hued Wyrmic", score = 400, power = 30, rank = 0.5 },
-		{ nil },
-		{ name = "REAVER", wave = 2, entry = 2, display = "Reaver", score = 800, power = 40, rank = 0.3 },
-		{ name = "HEADLESSHORROR", wave = 1, entry = 1, display = "Headless horror", score = 1000, power = 50, rank = 1 },
-	}
+	local miniboss = self.miniboss
 	local e = miniboss[val] or miniboss[1]
 	for i = 1, e.wave do
 		self:generateMiniboss(e)
@@ -118,7 +330,7 @@ function _M:generateMiniboss(e)
 			game.level.arena.danger = game.level.arena.danger + self.arenaPower
 			game.level.map:particleEmitter(self.x, self.y, 1, "teleport")
 			game.level.arena.pinchValue = game.level.arena.pinchValue + self.arenaPower
-			self.on_added = nil
+			self.on_added  = nil
 		end
 		if m.on_die then m.on_die_orig = m.on_die end
 		m.on_die = function (self)
@@ -150,66 +362,8 @@ function _M:place(m, entry, elite)
 	end
 end
 
-
 function _M:generateBoss(val)
-	local bosses = {
-		{ name = "ARENA_BOSS_RYAL", display = "Ryal the Towering", chat = "arena_boss_ryal",
-		score = 1500, power = 35,
-		start = function ()
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
-			chat:invoke("ryal-entry")
-		end,
-		finish = function ()
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Victory!!"}, game.player)
-			chat:invoke("ryal-defeat")
-		end
-		},
-		{ name = "ARENA_BOSS_FRYJIA", display = "Fryjia the Hailstorm", chat= "arena_boss_fryjia",
-		score = 2500, power = 55,
-		start = function ()
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
-			chat:invoke("fryjia-entry")
-		end,
-		finish = function ()
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Victory!!"}, game.player)
-			chat:invoke("fryjia-defeat")
-		end
-		},
-		{ name = "ARENA_BOSS_RIALA", display = "Riala the Crimson", chat = "arena_boss_riala",
-		score = 3500, power = 85,
-		start = function ()
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
-			chat:invoke("riala-entry")
-		end,
-		finish = function ()
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Victory!!"}, game.player)
-			chat:invoke("riala-defeat")
-		end
-		},
-		{ name = "ARENA_BOSS_VALFREN", display = "Valfren the Rampage", chat = "arena_boss_valfren",
-		score = 4500, power = 125,
-		start = function ()
-			game.level.map:setShown(0.3, 0.3, 0.3, 1)
-			game.level.map:setObscure(0.3*0.6, 0.3*0.6, 0.3*0.6, 1)
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Boss fight!"}, game.player)
-			chat:invoke("valfren-entry")
-		end,
-		finish = function ()
-			game.level.map:setShown(1, 1, 1, 1)
-			game.level.map:setObscure(1*0.6, 1*0.6, 1*0.6, 1)
-			local Chat = require "engine.Chat"
-			local chat = Chat.new("arena", {name="Victory!!"}, game.player)
-			chat:invoke("valfren-defeat")
-		end
-		},
-	}
+	local bosses = self.bosses
 	local e = bosses[val] or bosses[1]
 	local m = self.zone:makeEntityByName(self.level, "actor", e.name)
 	if m then
@@ -280,6 +434,7 @@ function _M:generateMaster()
 				local Chat = require "engine.Chat"
 				local chat = Chat.new("arena", {name="Congratulations!"}, game.player)
 				chat:invoke("master-defeat")
+
 			end
 			self.zone:addEntity(self.level, m, "actor", 7, 1)
 			local rank = math.floor(game.level.arena.rank)
@@ -301,21 +456,21 @@ function _M:generateMaster()
 				self.alchemy_golem.faction = self.faction
 				self.alchemy_golem.life = self.alchemy_golem.max_life
 				game.zone:addEntity(game.level, self.alchemy_golem, "actor", 8, 2)
+				self.on_added = nil
 			end
 			game.level.arena.danger = game.level.arena.danger + 1000
 			game.level.map:particleEmitter(self.x, self.y, 3, "teleport")
 			game:playSoundNear(game.player, "talents/teleport")
 			game.level.arena.pinchValue = game.level.arena.pinchValue + 100
-			self.on_added = nil
 		end
 		m.on_die = function (self)
 			game.level.arena.danger = 0
 			game.level.arena.bonus = 100
 			game.level.map:particleEmitter(self.x, self.y, 1, "ball_fire", {radius = 3})
 			game.level.arena.clear()
-			self.on_die = nil
 			local Chat = require "engine.Chat"
 			local chat = Chat.new("arena", {name="Congratulations!"}, game.player)
+			self.on_die = nil
 			chat:invoke("master-defeat")
 
 		end
@@ -327,137 +482,8 @@ end
 
 function _M:calculateWave()
 --TODO:Apply some reduction in delay based on current wave.
-	local foe = {
---Relative cannon fodder.
-		{ entity = { type = "vermin", subtype = "rodent" }, --Wave 1
-			wave = 4, power = 2, delay = 3, bonus = 0.1, score = 5, entry = 2,
-			special = function (self) if game.level.arena.bonusMultiplier > 7 then self.entity = {name="giant crystal rat"} self.power = 4 self.wave = 6 end return self end },
-		{ entity = { type = "insect", subtype = "ant" },
-			wave = 2, power = 2, delay = 2, bonus = 0.1, score = 15 , entry = 2 },
-		{ entity = { type = "animal", subtype = "canine" },
-			wave = 2, power = 3, delay = 3, bonus = 0.1 , score = 25, entry = 2 },
-		{ entity = { name = "white ooze" },
-			wave = 1, power = 3, delay = 3, bonus = 0.1, score = 15, entry = 2,
-			special = function (self) if game.level.arena.currentWave > 10 then self.wave = 2 end if game.level.arena.currentWave > 15 then self.entity = { name = "green ooze" } end return self end },
-
-		{ entity = { name = "cutpurse" }, --Wave ~5
-			wave = 1, power = 8, delay = 3, bonus = 0.1, score = 40, entry = 1 },
-		{ entity = { name = "white crystal" },
-			wave = 1, power = 5, delay = 4, bonus = 0.5 , score = 100, entry = 3},
-		{ entity = { name = "slinger" },
-			wave = 1, power = 7, delay = 4, bonus = 0.2, score = 100, entry = 1,
-			special = function (self) if game.level.arena.currentWave > 35 then self.entity = { name = "high slinger" } end return self end },
-		{ entity = { name = "dremling" },
-			wave = 1, power = 6, delay = 2, bonus = 0.3 , score = 100, entry = 2,
-			special = function (self) if game.level.arena.currentWave > 15 then self.wave = 2 end return self end },
-		{ entity = { name = "brown bear" },
-			wave = 1, power = 4, delay = 3, bonus = 0.2, score = 100 , entry = 2},
-		{ entity = { type = "animal", subtype = "snake" },
-			wave = 2, power = 4, delay = 3, bonus = 0.1, score = 100 , entry = 2},
-		{ entity = { type = "humanoid", subtype = "human", name = "rogue" }, --Wave ~10
-			wave = 1, power = 6, delay = 3, bonus = 0.2, score = 100 , entry = 1,
-			special = function (self) if game.level.arena.currentWave > 30 then self.wave = 2 end return self end },
-		{ entity = { type = "animal", subtype = "bear" },
-			wave = 2, power = 4, delay = 5, bonus = 0.3, score = 80, entry = 2 },
-		{ entity = { name = "drem" },
-			wave = 1, power = 7, delay = 3, bonus = 0.4 , score = 100, entry = 2},
-		{ entity = { type = "vermin", subtype = "ooze" },
-			wave = 4, power = 3, delay = 2, bonus = 0.1, score = 15, entry = 2 },
-		{ entity = { type = "undead", subtype = "skeleton" },
-			wave = 1, power = 8, delay = 4, bonus = 0.2, score = 120, entry = 2,
-			special = function (self) if game.level.arena.currentWave > 15 then self.wave = 2 end return self end },
-		{ entity = { name = "ghoul" },
-			wave = 1, power = 7, delay = 5, bonus = 0.2, score = 150, entry = 1,
-			special = function (self) if game.level.arena.currentWave > 20 then self.wave, self.entry = 2, 2 end return self end },
-		{ entity = { type = "humanoid", subtype = "human", name = "alchemist" },
-			wave = 1, power = 9, delay = 3, bonus = 0.2, score = 150, entry = 1,
-			special = function (self) if game.level.arena.currentWave > 25 then self.wave = 2 end return self end },
-		{ entity = { type = "immovable", subtype = "crystal" },
-			wave = 2, power = 5, delay = 3, bonus = 0.5 , score = 100, entry = 3,
-			special = function (self) if game.level.arena.currentWave > 20 then self.wave = 3 end if game.level.arena.currentWave > 45 then self.wave = 4 end return self end },
-		{ entity = { type = "giant", subtype = "troll" },
-			wave = 1, power = 4, delay = 2, bonus = 0.2 , score = 150, entry = 1 },
-		{ entity = { name = "blood mage" },
-			wave = 1, power = 10, delay = 2, bonus = 0.5 , score = 200, entry = 1 },
-		{ entity = { name = "honey tree" },
-			wave = 1, power = 4, delay = 3, bonus = 0.3 , score = 120, entry = 3,
-			special = function (self) if game.level.arena.currentWave > 35 then self.wave, self.score  = 2, 150 end return self end },
-		{ entity = { name = "skeleton mage" },
-			wave = 1, power = 10, delay = 4, bonus = 0.3, score = 150 , entry = 1,
-			special = function (self) if game.player.level > 10 then self.wave = 2 end return self end },
-		{ entity = { name = "high gladiator" },
-			wave = 1, power = 6, delay = 1, bonus = 0.3, score = 200, entry = 1,
-			special = function (self) if game.level.arena.currentWave > 30 then self.wave = 2 end return self end },
-		{ entity = { name = "wisp" },
-			wave = 4, power = 1, delay = 1, bonus = 0.3, score = 50 , entry = 3 },
-		{ entity = { name = "minotaur" },
-			wave = 1, power = 12, delay = 3, bonus = 0.3, score = 150 , entry = 2 },
-		{ entity = { name = "shadowblade" },
-			wave = 1, power = 13, delay = 1, bonus = 0.4, score = 200 , entry = 1 },
-		{ entity = { name = "trickster" },
-			wave = 1, power = 13, delay = 3, bonus = 0.4, score = 50 , entry = 1 },
-		{ entity = { name = "orc soldier" },
-			wave = 1, power = 10, delay = 4, bonus = 0.3, score = 150 , entry = 1,
-			special = function (self) if game.level.arena.currentWave > 25 then self.entity = {type = "humanoid", subtype = "orc"} end return self end },
-		{ entity = { name = "bone giant" },
-			wave = 1, power = 11, delay = 3, bonus = 0.3, score = 150 , entry = 2,
-			special = function (self) if game.player.level > 30 then self.wave, self.power = 2, 8 end return self end },
-		{ entity = { name = "ziguranth warrior" },
-			wave = 2, power = 8, delay = 2, bonus = 0.3, score = 130 , entry = 1 },
-		{ entity = { name = "orc archer" },
-			wave = 2, power = 10, delay = 5, bonus = 0.2, score = 100, entry = 2,
-			special = function (self) if game.player.level > 25 then self.wave, self.score  = 3, 125 end if game.player.level > 35 then self.wave, self.score  = 4, 150 end return self end },
-		{ entity = { name = "hexer" },
-			wave = 1, power = 13, delay = 1, bonus = 0.5 , score = 250, entry = 1 },
-		{ entity = { name = "wisp" },
-			wave = 6, power = 1, delay = 1, bonus = 0.3, score = 50 , entry = 3 },
-		{ entity = { name = "orc assassin" },
-			wave = 2, power = 10, delay = 4, bonus = 0.2, score = 200, entry = 2 },
-		{ entity = { name = "fire wyrmic" }, entitySub = { name = "ice wyrmic"},
-			wave = 1, power = 11, delay = 3, bonus = 0.3, score = 250, entry = 1 },
-		{ entity = { name = "sand wyrmic" }, entitySub = { name = "storm wyrmic" },
-			wave = 1, power = 11, delay = 3, bonus = 0.3, score = 250, entry = 1 },
-		{ entity = { name = "martyr" },
-			wave = 1, power = 13, delay = 1, bonus = 0.5 , score = 250, entry = 1 },
-		{ entity = { type = "vermin", subtype = "sandworm" },
-			wave = 1, power = 10, delay = 3, bonus = 0.2, score = 200, entry = 2 },
-		{ entity = { name = "ritch larva" },
-			wave = 2, power = 4, delay = 3, bonus = 0.1, score = 150, entry = 2 },
-		{ entity = { type = "giant", subtype = "ice" },
-			wave = 1, power = 8, delay = 2, bonus = 0.5, score = 300, entry = 1 },
-		{ entity = { name = "naga myrmidon" },
-			wave = 1, power = 9, delay = 2, bonus = 0.3, score = 300, entry = 1,
-			special = function (self) if game.level.arena.currentWave > 40 then self.wave = 2 end return self end },
-		{ entity = { name = "quasit" },
-			wave = 1, power = 9, delay = 2, bonus = 0.2, score = 300, entry = 2 },
-		{ entity = { name = "wretchling" },
-			wave = 1, power = 10, delay = 3, bonus = 0.3, score = 250, entry = 2,
-			special = function (self) if game.player.level > 25 then self.wave = 3 end if game.player.level > 35 then self.wave = 4 end return self end },
-		{ entity = { name = "great gladiator" },
-			wave = 2, power = 9, delay = 3, bonus = 0.3, score = 300, entry = 1 },
-		{ entity = { name = "bloated horror" },
-			wave = 2, power = 11, delay = 2, bonus = 0.4, score = 300, entry = 3 },
-		{ entity = { name = "umber hulk" },
-			wave = 1, power = 10, delay = 3, bonus = 0.3, score = 350, entry = 1 },
-		{ entity = { name = "anorithil" },
-			wave = 1, power = 10, delay = 2, bonus = 0.5, score = 450, entry = 1 },
-		{ entity = { name = "naga tide huntress" },
-			wave = 1, power = 10, delay = 2, bonus = 0.3, score = 300, entry = 2 },
-		{ entity = { name = "ritch hunter" },
-			wave = 4, power = 6, delay = 5, bonus = 0.4, score = 250, entry = 2 },
-
-		{ entity = { type = "undead", subtype = "wight" },
-			wave = 1, power = 11, delay = 2, bonus = 0.5, score = 400, entry = 1 },
-		{ entity = { name = "sun paladin" },
-			wave = 1, power = 12, delay = 2, bonus = 1, score = 450, entry = 1 },
-		{ entity = { name = "dread" },
-			wave = 1, power = 13, delay = 2, bonus = 1, score = 450, entry = 2 },
-		{ entity = { name = "naga psyren" },
-			wave = 1, power = 10, delay = 2, bonus = 0.3, score = 400, entry = 2 },
-		{ entity = { name = "star crusader" },
-			wave = 1, power = 14, delay = 2, bonus = 1, score = 450, entry = 2 },
-
-	}
+--TODO(Hetdegon@2012-09-15): I should define this table elsewhere and keep it in memory instead.
+	local foe = self.mooks
 	local dangerMin = 1 + math.floor(game.level.arena.currentWave * 0.1)
 	local dangerMax = ((game.level.arena.currentWave + 1) ^ game.level.arena.dangerMod) + dangerMin
 	if dangerMax > #foe then dangerMax = #foe end
@@ -547,4 +573,4 @@ function _M:generateOne(e)
 		m:setTarget(game.player)
 		self:place(m, entry, false)
 	end
-end
+end
\ No newline at end of file
diff --git a/game/modules/tome/class/uiset/Minimalist.lua b/game/modules/tome/class/uiset/Minimalist.lua
index 592512f43a..9a3ba74a42 100644
--- a/game/modules/tome/class/uiset/Minimalist.lua
+++ b/game/modules/tome/class/uiset/Minimalist.lua
@@ -1113,6 +1113,65 @@ function _M:displayResources(scale, bx, by, a)
 			x, y = self:resourceOrientStep(orient, bx, by, scale, x, y, fshat[6], front[7])
 		elseif game.mouse:getZone("res:hourglass") then game.mouse:unregisterZone("res:hourglass") end
 
+		-----------------------------------------------------------------------------------
+		-- Arena display
+		if game.level and game.level.arena then
+			local h = self.init_font_h + 2
+			if not self.arenaframe then
+				self.arenaframe = UI:makeFrame("ui/textbox", 250, 7 + h * 6)
+				UI:drawFrame(self.arenaframe, x, y, 1, 1, 1, 0.65)
+			else
+				UI:drawFrame(self.arenaframe, x, y, 1, 1, 1, 0.65)
+			end
+			local py = y + 2
+			local px = x + 5
+			local arena = game.level.arena
+			local aprint = function (_x, _y, _text, r, g, b)
+				local surf = { core.display.drawStringBlendedNewSurface(font_sha, _text, r, g, b):glTexture() }
+				surf[1]:toScreenFull(_x, _y, surf[6], surf[7], surf[2], surf[3], 0, 0, 0, 0.7 * a)
+				surf[1]:toScreenFull(_x, _y, surf[6], surf[7], surf[2], surf[3], 1, 1, 1, a)
+			end
+			if arena.score > world.arena.scores[1].score then
+				aprint(px, py, ("Score[1st]: %d"):format(arena.score), 255, 255, 100)
+			else
+				aprint(px, py, ("Score: %d"):format(arena.score), 255, 255, 255)
+			end
+			local _event
+			if arena.event > 0 then
+				if arena.event == 1 then
+					_event = "[MiniBoss]"
+				elseif arena.event == 2 then
+					_event = "[Boss]"
+				elseif arena.event == 3 then
+					_event = "[Final]"
+				end
+			else
+				_event = ""
+			end
+			py = py + h
+			if arena.currentWave > world.arena.bestWave then
+				aprint(px, py, ("Wave(TOP) %d %s"):format(arena.currentWave, _event), 255, 255, 100)
+			elseif arena.currentWave > world.arena.lastScore.wave then
+				aprint(px, py, ("Wave %d %s"):format(arena.currentWave, _event), 100, 100, 255)
+			else
+				aprint(px, py, ("Wave %d %s"):format(arena.currentWave, _event), 255, 255, 255)
+			end
+			py = py + h
+			if arena.pinch == true then
+				aprint(px, py, ("Bonus: %d (x%.1f)"):format(arena.bonus, arena.bonusMultiplier), 255, 50, 50)
+			else
+				aprint(px, py, ("Bonus: %d (x%.1f)"):format(arena.bonus, arena.bonusMultiplier), 255, 255, 255)
+			end
+			py = py + h
+			if arena.display then
+				aprint(px, py, arena.display[1], 255, 0, 255)
+				aprint(px, py + h, " VS", 255, 0, 255)
+				aprint(px, py + h + h,  arena.display[2], 255, 0, 255)
+			else
+				aprint(px, py, "Rank: "..arena.printRank(arena.rank, arena.ranks), 255, 255, 255)
+			end
+		end
+
 		-----------------------------------------------------------------------------------
 		-- Saving
 		if savefile_pipe.saving then
@@ -1954,13 +2013,13 @@ function _M:setupMouse(mouse)
 		else
 			extra.log_str = str
 			if button == "right" and event == "button" then
-				extra.add_map_action = { 
+				extra.add_map_action = {
 					{ name="Show chat user", fct=function() profile.chat:showUserInfo(user.login) end },
 					{ name="Report user for bad behavior", fct=function()
 						game:registerDialog(require('engine.dialogs.GetText').new("Reason to report: "..user.login, "Reason", 4, 500, function(text)
 							profile.chat:reportUser(user.login, text)
 							game.log("#VIOLET#", "Report sent.")
-						end))							
+						end))
 					end },
 				}
 			end
@@ -1968,4 +2027,4 @@ function _M:setupMouse(mouse)
 		game.tooltip.old_tmx = -100
 		game.mouse:delegate(button, mx, my, xrel, yrel, nil, nil, event, "playmap", extra)
 	end)
-end
+end
\ No newline at end of file
diff --git a/game/modules/tome/data/chats/arena-start.lua b/game/modules/tome/data/chats/arena-start.lua
index 38956cbd2c..2ec5c9dc90 100644
--- a/game/modules/tome/data/chats/arena-start.lua
+++ b/game/modules/tome/data/chats/arena-start.lua
@@ -17,6 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
+--[[
 local give_boots_rush = function(self, player)
 	local o = game.zone:makeEntityByName(game.level, "object", "ARENA_BOOTS_RUSH")
 	if o then
@@ -120,23 +121,35 @@ local give_debugarms = function(self, player)
 
 	game.level.arena.perk = "Debug"..game.level.arena.modeString
 end
-
+]]--
 local arena_3 = function(self, player)
 	game.level.arena.eventWave = 2
 	game.level.arena.finalWave = 3
 	game.level.arena.modeString = "3"
+	local arenashop = game:getStore("ARENA_SHOP")
+	arenashop:loadup(game.level, game.zone)
+	arenashop:interact(game.player, "Gladiator's wares")
+	arenashop = nil
 end
 
 local arena_30 = function(self, player)
 	game.level.arena.eventWave = 5
 	game.level.arena.finalWave = 31
 	game.level.arena.modeString = "30"
+	local arenashop = game:getStore("ARENA_SHOP")
+	arenashop:loadup(game.level, game.zone)
+	arenashop:interact(game.player, "Gladiator's wares")
+	arenashop = nil
 end
 
 local arena_60 = function(self, player)
 	game.level.arena.eventWave = 5
 	game.level.arena.finalWave = 61
 	game.level.arena.modeString = "60"
+	local arenashop = game:getStore("ARENA_SHOP")
+	arenashop:loadup(game.level, game.zone)
+	arenashop:interact(game.player, "Gladiator's wares")
+	arenashop = nil
 end
 
 local give_bonus = function(self, player)
@@ -162,41 +175,24 @@ local save_clear = function(self, player)
 	if o then game.zone:addEntity(game.level, o, "object", 7, 3) end
 end
 
-
-newChat{ id="perks",
-	text = [[#LIGHT_GREEN#Preparing for the arena, you brought with you...]],
-	answers = {
-		{"A pair of boots of disengagement...", action=give_boots_dise},
-		{"A pair of boots of rushing...", action=give_boots_rush},
-		{"A pair of boots of phasing...", action=give_boots_phas},
-		{"A movement infusion...", action=give_moveinfu},
-		{"A healing infusion...", action=give_healinfu},
-		{"A bow of piercing arrows...", action=give_bow},
-		{"A sling of flare...", action=give_sling},
-		{"The talent to imbue gems...", action=give_imbue},
-		--{"[DEBUG] Debug arms!", action=give_debugarms},
-		{"Nothing!", action=give_bonus},
-	}
-}
-
 newChat{ id="welcome",
 	text = "#LIGHT_GREEN#You take a look at the ranking boards before entering.\n"..text,
 	answers = {
 		--{"Enter the arena for 3 rounds[DEBUG]", action=arena_3, jump="perks"},
-		{"Enter the arena (60 waves)", action=arena_60, jump="perks"},
-		{"Enter the arena (shorter mode, 30 rounds)", action=arena_30, jump="perks"},
+		{"Enter the arena (60 waves)", action=arena_60},
+		{"Enter the arena (shorter mode, 30 rounds)", action=arena_30},
 		--{"Enter the arena for as long as you can last", action=arena_inf, jump="perks"},
-		{"#LIGHT_RED#[Reset all arena save data]", action=save_clear, jump="welcome2"},
+		{"#LIGHT_RED#[Reset all arena save data]", action=save_clear},
 	}
 }
 
 newChat{ id="welcome2",
 	text = "What will you do now?",
 	answers = {
-		{"Enter the arena for 60 rounds", action=arena_60, jump="perks"},
-		{"Enter the arena for 30 rounds", action=arena_30, jump="perks"},
+		{"Enter the arena for 60 rounds", action=arena_60},
+		{"Enter the arena for 30 rounds", action=arena_30},
 		--{"Enter the arena for as long as you can last", action=arena_inf, jump="perks"},
 	}
 }
 
-return "welcome"
+return "welcome"
\ No newline at end of file
diff --git a/game/modules/tome/data/chats/arena.lua b/game/modules/tome/data/chats/arena.lua
index 8c55dafbc9..9fe6f885ef 100644
--- a/game/modules/tome/data/chats/arena.lua
+++ b/game/modules/tome/data/chats/arena.lua
@@ -17,6 +17,13 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
+local entershop = function (self, player)
+	local arenashop = game:getStore("ARENA_SHOP")
+	arenashop:loadup(game.level, game.zone)
+	arenashop:interact(player, "Gladiator's wares")
+	arenashop = nil
+end
+
 newChat{ id="ryal-entry",
 text = [[#LIGHT_GREEN#*A gigantic bone giant walks through the main gate.
 #LIGHT_GREEN#Its shape is intricate and sharp, resembling a drake, but with countless
@@ -41,8 +48,8 @@ text = [[#LIGHT_GREEN#*After taking several hits, the undead giant finally succu
 #LIGHT_GREEN#*Ryal quietly turns towards the gate and leaves, seemingly unharmed*
 ]],
 	answers = {
-		{"It was fun, bone giant!"},
-		{"...what? unharmed?"}
+		{"It was fun, bone giant!", action=entershop},
+		{"...what? unharmed?", action=entershop}
 	}
 }
 
@@ -52,7 +59,7 @@ text = [[#LIGHT_GREEN#*The wind chills as a young girl walks calmly through the
 #LIGHT_GREEN#long black hair. She examines you with eerie calmness*#WHITE#
 I am known as Fryjia the Hailstorm. That's all you need to know, @playerdescriptor.race@. Let us begin.
 #LIGHT_GREEN#*The whole arena starts to get colder as she speaks, and the audience
-#LIGHT_GREEN#starts wearing their finest cloaks*]],
+#LIGHT_GREEN#starts wearing their finest winter cloaks*]],
 	answers = {
 		{"Bring it!"},
 	}
@@ -68,8 +75,8 @@ text = [[#LIGHT_GREEN#*With your final blow, Fryjia falls, unable to continue*
 #LIGHT_GREEN#towards the gate. As it closes, you realize her eyes are wet with tears.
 ]],
 	answers = {
-		{"..."},
-		{"w...what was that about?"}
+		{"...", action=entershop},
+		{"w...what was that about?", action=entershop}
 	}
 }
 
@@ -98,8 +105,8 @@ Oh, and please forgive her behavior. You will understand when you meet her fathe
 And, if you keep fighting like this, it will be really soon.
 So, it's been my pleasure, @playername@. #LIGHT_GREEN#*She vanishes in a spiral of flame*]],
 	answers = {
-		{"I am pumped up! What's next?"},
-		{"Am I the only person with a name that can die here?"}
+		{"I am pumped up! What's next?", action=entershop},
+		{"Am I the only person with a name that can die here?", action=entershop}
 	}
 }
 
@@ -139,9 +146,9 @@ Good luck...
 #RED#The final battle begins when the gate closes, just this final time!!
 ]],
 	answers = {
-		{"I will defeat you, Master of the Arena!!!"},
-		{"I will become Master of the Arena instead of the Master of the Arena!!"},
-		{"Wealth and glory! Wealth and glory!"},
+		{"I will defeat you, Master of the Arena!!!", action=entershop},
+		{"I will become Master of the Arena instead of the Master of the Arena!!", action=entershop},
+		{"Wealth and glory! Wealth and glory!", action=entershop},
 	}
 }
 
@@ -192,4 +199,4 @@ But meanwhile, this is your place! Welcome to paradise, @playerdescriptor.race@!
 		{"I hereby stand victorious, awaiting future challenges!", action=function(npc, player) player:hasQuest("arena"):win() end},
 		{"#LIGHT_GREEN#*dance*", action=function(npc, player) player:hasQuest("arena"):win() end},
 	}
-}
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index 0c8ebecd8b..e955217004 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -2151,7 +2151,7 @@ newDamageType{
 			resolvers.racial(),
 			resolvers.sustains_at_birth(),
 			autolevel = "warrior",
-			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 			stats = { str=20, dex=8, mag=6, con=16 },
 			name = "orc spirit", color=colors.SALMON, image = "npc/humanoid_orc_orc_berserker.png",
 			desc = [[An orc clad in a massive armour, wielding a huge axe.]],
diff --git a/game/modules/tome/data/general/events/cultists.lua b/game/modules/tome/data/general/events/cultists.lua
index d60f207b7f..2338ac2c25 100644
--- a/game/modules/tome/data/general/events/cultists.lua
+++ b/game/modules/tome/data/general/events/cultists.lua
@@ -72,7 +72,7 @@ for i, p in ipairs(list) do
 		silence_immune = 0.5,
 		resolvers.racial(),
 		autolevel = "caster",
-		ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, },
+		ai = "tactical", ai_state = { ai_move="move_complex", talent_in=1, },
 		ai_tactic = resolvers.tactic"ranged",
 		stats = { str=10, dex=8, mag=20, con=16 },
 		level_range = {5, nil}, exp_worth = 1,
diff --git a/game/modules/tome/data/general/npcs/ant.lua b/game/modules/tome/data/general/npcs/ant.lua
index 3f22887f11..6f64241992 100644
--- a/game/modules/tome/data/general/npcs/ant.lua
+++ b/game/modules/tome/data/general/npcs/ant.lua
@@ -30,7 +30,7 @@ newEntity{
 	sound_moam = {"creatures/ants/ant_%d", 1, 2},
 	sound_die = {"creatures/ants/ant_die_%d", 1, 4},
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
 	energy = { mod=1 },
 	combat_armor = 1, combat_def = 1,
diff --git a/game/modules/tome/data/general/npcs/aquatic_critter.lua b/game/modules/tome/data/general/npcs/aquatic_critter.lua
index b0c5864904..e0745cf5f3 100644
--- a/game/modules/tome/data/general/npcs/aquatic_critter.lua
+++ b/game/modules/tome/data/general/npcs/aquatic_critter.lua
@@ -27,7 +27,7 @@ newEntity{
 	display = "A", color=colors.WHITE,
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
 	combat_armor = 1, combat_def = 1,
 	combat = { dam=resolvers.levelup(resolvers.mbonus(36, 10), 1, 1), atk=15, apr=7, dammod={str=0.6} },
diff --git a/game/modules/tome/data/general/npcs/aquatic_demon.lua b/game/modules/tome/data/general/npcs/aquatic_demon.lua
index 8c7167cd99..23283d7eca 100644
--- a/game/modules/tome/data/general/npcs/aquatic_demon.lua
+++ b/game/modules/tome/data/general/npcs/aquatic_demon.lua
@@ -28,7 +28,7 @@ newEntity{
 	blood_color = colors.GREEN,
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
 	combat_armor = 1, combat_def = 1,
 	combat = { dam=resolvers.levelup(resolvers.mbonus(46, 20), 1, 1), atk=15, apr=7, dammod={str=0.7} },
diff --git a/game/modules/tome/data/general/npcs/bear.lua b/game/modules/tome/data/general/npcs/bear.lua
index 444a123c71..e2bbcc9547 100644
--- a/game/modules/tome/data/general/npcs/bear.lua
+++ b/game/modules/tome/data/general/npcs/bear.lua
@@ -33,7 +33,7 @@ newEntity{
 	max_stamina = 100,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=5, },
 	global_speed_base = 0.9,
 	stats = { str=18, dex=13, mag=5, con=15 },
 	infravision = 10,
diff --git a/game/modules/tome/data/general/npcs/bird.lua b/game/modules/tome/data/general/npcs/bird.lua
index b43a513036..0d865a2364 100644
--- a/game/modules/tome/data/general/npcs/bird.lua
+++ b/game/modules/tome/data/general/npcs/bird.lua
@@ -27,7 +27,7 @@ newEntity{
 	display = "B", color=colors.WHITE,
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 
 	stats = { str=12, dex=20, mag=3, con=13 },
 	global_speed_base = 1.2,
diff --git a/game/modules/tome/data/general/npcs/bone-giant.lua b/game/modules/tome/data/general/npcs/bone-giant.lua
index e5be1a89c1..749e56c7cb 100644
--- a/game/modules/tome/data/general/npcs/bone-giant.lua
+++ b/game/modules/tome/data/general/npcs/bone-giant.lua
@@ -36,7 +36,7 @@ newEntity{
 	size_category = 4,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=52, mag=16, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = 20, [DamageType.BLIGHT] = 20, [DamageType.COLD] = 50, },
diff --git a/game/modules/tome/data/general/npcs/canine.lua b/game/modules/tome/data/general/npcs/canine.lua
index 35c502cc4a..bc62319b55 100644
--- a/game/modules/tome/data/general/npcs/canine.lua
+++ b/game/modules/tome/data/general/npcs/canine.lua
@@ -36,7 +36,7 @@ newEntity{
 	infravision = 10,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	global_speed_base = 1.2,
 	stats = { str=10, dex=17, mag=3, con=7 },
 	combat = { dammod={str=0.6}, sound="creatures/wolves/wolf_attack_1" },
diff --git a/game/modules/tome/data/general/npcs/cold-drake.lua b/game/modules/tome/data/general/npcs/cold-drake.lua
index c7f904b2f9..ca0b9c7f15 100644
--- a/game/modules/tome/data/general/npcs/cold-drake.lua
+++ b/game/modules/tome/data/general/npcs/cold-drake.lua
@@ -33,7 +33,7 @@ newEntity{
 	size_category = 5,
 
 	autolevel = "drake",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.COLD] = 100, },
diff --git a/game/modules/tome/data/general/npcs/construct.lua b/game/modules/tome/data/general/npcs/construct.lua
index 1d6fab8a20..bbecd09b92 100644
--- a/game/modules/tome/data/general/npcs/construct.lua
+++ b/game/modules/tome/data/general/npcs/construct.lua
@@ -45,7 +45,7 @@ newEntity{
 	no_breath = 1,
 
 	autolevel = "warriormage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	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/elven-caster.lua b/game/modules/tome/data/general/npcs/elven-caster.lua
index c88944dee7..e2f81cce4c 100644
--- a/game/modules/tome/data/general/npcs/elven-caster.lua
+++ b/game/modules/tome/data/general/npcs/elven-caster.lua
@@ -46,7 +46,7 @@ newEntity{
 	resolvers.talents{ [Talents.T_ARMOUR_TRAINING]=1, },
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	power_source = {arcane=true},
 }
diff --git a/game/modules/tome/data/general/npcs/elven-warrior.lua b/game/modules/tome/data/general/npcs/elven-warrior.lua
index 3c7041cf46..dc91c3963f 100644
--- a/game/modules/tome/data/general/npcs/elven-warrior.lua
+++ b/game/modules/tome/data/general/npcs/elven-warrior.lua
@@ -45,7 +45,7 @@ newEntity{
 	resolvers.talents{ [Talents.T_ARMOUR_TRAINING]=3, [Talents.T_WEAPON_COMBAT]={base=1, every=10, max=5}, [Talents.T_WEAPONS_MASTERY]={base=1, every=10, max=5} },
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	power_source = {technique=true},
 }
diff --git a/game/modules/tome/data/general/npcs/faeros.lua b/game/modules/tome/data/general/npcs/faeros.lua
index b0fe628aad..052b6519ab 100644
--- a/game/modules/tome/data/general/npcs/faeros.lua
+++ b/game/modules/tome/data/general/npcs/faeros.lua
@@ -37,7 +37,7 @@ newEntity{
 	levitation = 1,
 
 	autolevel = "dexmage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=10, dex=8, mag=6, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = 10, [DamageType.FIRE] = 100, [DamageType.COLD] = -30, },
diff --git a/game/modules/tome/data/general/npcs/feline.lua b/game/modules/tome/data/general/npcs/feline.lua
index 45bf8f47de..410011ea8b 100644
--- a/game/modules/tome/data/general/npcs/feline.lua
+++ b/game/modules/tome/data/general/npcs/feline.lua
@@ -29,7 +29,7 @@ newEntity{
 	infravision = 10,
 	global_speed_base = 1.25,
 	type = "animal", subtype="feline",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 
 	combat_physspeed = 2, -- Double attack per turn
 
diff --git a/game/modules/tome/data/general/npcs/fire-drake.lua b/game/modules/tome/data/general/npcs/fire-drake.lua
index 164f2cf60b..836af137dd 100644
--- a/game/modules/tome/data/general/npcs/fire-drake.lua
+++ b/game/modules/tome/data/general/npcs/fire-drake.lua
@@ -33,7 +33,7 @@ newEntity{
 	size_category = 5,
 
 	autolevel = "drake",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.FIRE] = 100, },
diff --git a/game/modules/tome/data/general/npcs/gwelgoroth.lua b/game/modules/tome/data/general/npcs/gwelgoroth.lua
index e03d0d23cb..9f8c1ab3d0 100644
--- a/game/modules/tome/data/general/npcs/gwelgoroth.lua
+++ b/game/modules/tome/data/general/npcs/gwelgoroth.lua
@@ -37,7 +37,7 @@ newEntity{
 
 
 	autolevel = "dexmage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	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 a1f1702313..00b506d376 100644
--- a/game/modules/tome/data/general/npcs/horror-corrupted.lua
+++ b/game/modules/tome/data/general/npcs/horror-corrupted.lua
@@ -26,7 +26,7 @@ newEntity{
 	blood_color = colors.BLUE,
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 
 	combat_armor = 0, combat_def = 0,
 	combat = { atk=2, dammod={str=0.6} },
@@ -124,7 +124,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	rank = 2,
 	size_category = 3,
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	hate_regen = 2,
 
 	open_door = true,
@@ -225,7 +225,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	rank = 2,
 	size_category = 4,
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 
 	global_speed_base = 0.8,
 
diff --git a/game/modules/tome/data/general/npcs/horror.lua b/game/modules/tome/data/general/npcs/horror.lua
index 61c1cbe639..8f226ba2db 100644
--- a/game/modules/tome/data/general/npcs/horror.lua
+++ b/game/modules/tome/data/general/npcs/horror.lua
@@ -28,7 +28,7 @@ newEntity{
 	blood_color = colors.BLUE,
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 
 	stats = { str=20, dex=20, wil=20, mag=20, con=20, cun=20 },
 	combat_armor = 5, combat_def = 10,
@@ -54,7 +54,7 @@ Each swing drips pestulant fluid before it, and each droplet writhes and wriggle
 	hate_regen = 10,
 
 	autolevel = "warriormage",
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, ally_compassion=0 },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=1, ally_compassion=0 },
 	ai_tactic = resolvers.tactic "melee",
 
 	see_invisible = 100,
@@ -199,7 +199,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	max_life = resolvers.rngavg(200,220),
 	life_rating = 16,
 	autolevel = "warrior",
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=1, },
 	combat = { dam=20, atk=20, apr=10, dammod={str=1} },
 	combat = {damtype=DamageType.PHYSICAL},
 	no_auto_resists = true,
@@ -262,7 +262,7 @@ newEntity{ base = "BASE_NPC_HORROR", define_as = "BASE_NPC_ELDRICTH_EYE",
 	rank = 2,
 	size_category = 1,
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	combat_armor = 1, combat_def = 0,
 	levitation = 1,
 	no_auto_resists = true,
@@ -408,7 +408,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	autolevel = "caster",
 	combat_armor = 1, combat_def = 10,
 	combat = { dam=5, atk=15, apr=20, dammod={mag=0.6}, damtype=DamageType.LIGHT},
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1.5, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1.5, },
 	lite = 3,
 
 	resists = {all = 35, [DamageType.DARKNESS] = -50, [DamageType.LIGHT] = 100, [DamageType.FIRE] = 100},
@@ -445,7 +445,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	life_rating = 16,
 	combat_armor = 1, combat_def = 10,
 	combat = { dam=20, atk=30, apr=40, dammod={mag=1}, damtype=DamageType.LIGHT},
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=1, },
 	lite = 5,
 
 	resists = {all = 40, [DamageType.DARKNESS] = -50, [DamageType.LIGHT] = 100, [DamageType.FIRE] = 100},
@@ -521,7 +521,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	life_regen = 0.25,
 	combat_armor = 12, combat_def = 24,
 
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=2, ally_compassion=0 },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=2, ally_compassion=0 },
 
 	on_melee_hit = {[DamageType.PHYSICALBLEED]=resolvers.mbonus(14, 2)},
 	combat = { dam=resolvers.levelup(resolvers.rngavg(16,22), 1, 1.5), atk=resolvers.levelup(18, 1, 1), apr=4, dammod={wil=0.25, cun=0.1}, damtype=engine.DamageType.PHYSICALBLEED, },
@@ -584,7 +584,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 		damtype=engine.DamageType.SLIME,
 	},
 
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, ally_compassion=0 },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=1, ally_compassion=0 },
 
 	resists = {all=15, [DamageType.PHYSICAL] = -10, [DamageType.NATURE] = 100, [DamageType.ARCANE] = 40, [DamageType.BLIGHT] = 24},
 
@@ -623,7 +623,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	},
 	combat_physspeed = 2,
 
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=1, ally_compassion=0 },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=1, ally_compassion=0 },
 
 	resists = {[DamageType.PHYSICAL] = -10, [DamageType.DARKNESS] = 100, [DamageType.LIGHT] = -60},
 
@@ -924,7 +924,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	
 	resolvers.drops{chance=100, nb=1, {defined="BLADE_RIFT"} },
 	
-	ai = "tactical", ai_state = { ai_move="move_dmap", talent_in=2, ally_compassion=0 },
+	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=2, ally_compassion=0 },
 		
 	on_melee_hit = {[DamageType.PHYSICALBLEED]=resolvers.mbonus(30, 4)},
 	combat = { dam=resolvers.levelup(resolvers.rngavg(20,28), 1, 1.5), physspeed = 0.25,atk=resolvers.levelup(24, 1.2, 1.2), apr=4, dammod={wil=0.3, cun=0.15}, damtype=engine.DamageType.PHYSICALBLEED, },
diff --git a/game/modules/tome/data/general/npcs/horror_temporal.lua b/game/modules/tome/data/general/npcs/horror_temporal.lua
index 7cd976aa0e..95fc5daf2e 100644
--- a/game/modules/tome/data/general/npcs/horror_temporal.lua
+++ b/game/modules/tome/data/general/npcs/horror_temporal.lua
@@ -28,7 +28,7 @@ newEntity{
 	blood_color = colors.BLUE,
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 
 	stats = { str=20, dex=20, wil=20, mag=20, con=20, cun=20 },
 	combat_armor = 5, combat_def = 10,
@@ -106,7 +106,7 @@ newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
 	size_category = 3,
 	max_life = resolvers.rngavg(60,80),
 	autolevel = "warriormage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	combat_armor = 1, combat_def = 0,
 
 	resists = {all = 10, [DamageType.TEMPORAL] = 50},
@@ -138,7 +138,7 @@ newEntity{ base = "BASE_NPC_HORROR_TEMPORAL",
 	life_rating = 12,
 	global_speed_base = 1.2,
 	autolevel = "rogue",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	combat_armor = 10, combat_def = 10,
 	combat = { dam=resolvers.levelup(resolvers.rngavg(25,100), 1, 1.2), atk=resolvers.rngavg(25,100), apr=25, dammod={dex=1.1} },
 
diff --git a/game/modules/tome/data/general/npcs/losgoroth.lua b/game/modules/tome/data/general/npcs/losgoroth.lua
index d96d986fc9..d571144346 100644
--- a/game/modules/tome/data/general/npcs/losgoroth.lua
+++ b/game/modules/tome/data/general/npcs/losgoroth.lua
@@ -39,7 +39,7 @@ newEntity{
 	can_pass = {pass_void=70},
 
 	autolevel = "dexmage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=10, dex=8, mag=6, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = -30, [DamageType.ARCANE] = 100 },
diff --git a/game/modules/tome/data/general/npcs/major-demon.lua b/game/modules/tome/data/general/npcs/major-demon.lua
index 673bb4c08d..0de62f5746 100644
--- a/game/modules/tome/data/general/npcs/major-demon.lua
+++ b/game/modules/tome/data/general/npcs/major-demon.lua
@@ -29,7 +29,7 @@ newEntity{
 	faction = "fearscape",
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=22, dex=10, mag=20, con=13 },
 	combat_armor = 1, combat_def = 1,
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
diff --git a/game/modules/tome/data/general/npcs/minor-demon.lua b/game/modules/tome/data/general/npcs/minor-demon.lua
index 2b71448510..803a2f7622 100644
--- a/game/modules/tome/data/general/npcs/minor-demon.lua
+++ b/game/modules/tome/data/general/npcs/minor-demon.lua
@@ -29,7 +29,7 @@ newEntity{
 	faction = "fearscape",
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
 	life_rating = 7,
 	combat_armor = 1, combat_def = 1,
diff --git a/game/modules/tome/data/general/npcs/minotaur.lua b/game/modules/tome/data/general/npcs/minotaur.lua
index 64f65a54db..9891c4200b 100644
--- a/game/modules/tome/data/general/npcs/minotaur.lua
+++ b/game/modules/tome/data/general/npcs/minotaur.lua
@@ -44,7 +44,7 @@ newEntity{
 	resolvers.inscriptions(1, "infusion"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=5, },
 	global_speed_base = 1.2,
 	stats = { str=15, dex=12, mag=6, cun=12, con=15 },
 
diff --git a/game/modules/tome/data/general/npcs/multihued-drake.lua b/game/modules/tome/data/general/npcs/multihued-drake.lua
index 0ce4a9a2a5..d286f83ace 100644
--- a/game/modules/tome/data/general/npcs/multihued-drake.lua
+++ b/game/modules/tome/data/general/npcs/multihued-drake.lua
@@ -34,7 +34,7 @@ newEntity{
 	size_category = 5,
 
 	autolevel = "drake",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	knockback_immune = 1,
diff --git a/game/modules/tome/data/general/npcs/mummy.lua b/game/modules/tome/data/general/npcs/mummy.lua
index 60521af418..dc672c19a1 100644
--- a/game/modules/tome/data/general/npcs/mummy.lua
+++ b/game/modules/tome/data/general/npcs/mummy.lua
@@ -29,7 +29,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, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	global_speed_base = 0.8,
 	stats = { str=14, dex=12, mag=10, con=12 },
 	infravision = 10,
diff --git a/game/modules/tome/data/general/npcs/naga.lua b/game/modules/tome/data/general/npcs/naga.lua
index 4bc14d7e46..a5ab3ae0e9 100644
--- a/game/modules/tome/data/general/npcs/naga.lua
+++ b/game/modules/tome/data/general/npcs/naga.lua
@@ -43,7 +43,7 @@ newEntity{
 	resolvers.inscriptions(1, "rune"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	global_speed_base = 1.2,
 	stats = { str=15, dex=15, mag=15, con=10 },
 	ingredient_on_death = "NAGA_TONGUE",
diff --git a/game/modules/tome/data/general/npcs/ooze.lua b/game/modules/tome/data/general/npcs/ooze.lua
index 3908d9c373..0da5dd044c 100644
--- a/game/modules/tome/data/general/npcs/ooze.lua
+++ b/game/modules/tome/data/general/npcs/ooze.lua
@@ -31,7 +31,7 @@ newEntity{
 	sound_random = {"creatures/jelly/jelly_%d", 1, 3},
 	body = { INVEN = 10 },
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=10, dex=15, mag=3, con=10 },
 	global_speed_base = 0.7,
 	combat = {sound="creatures/jelly/jelly_hit"},
diff --git a/game/modules/tome/data/general/npcs/orc-gorbat.lua b/game/modules/tome/data/general/npcs/orc-gorbat.lua
index af1d44640c..011db67ac8 100644
--- a/game/modules/tome/data/general/npcs/orc-gorbat.lua
+++ b/game/modules/tome/data/general/npcs/orc-gorbat.lua
@@ -45,7 +45,7 @@ newEntity{
 	resolvers.inscriptions(2, "infusion"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	ingredient_on_death = "ORC_HEART",
 }
diff --git a/game/modules/tome/data/general/npcs/orc-grushnak.lua b/game/modules/tome/data/general/npcs/orc-grushnak.lua
index 02a4884502..0b69ab8416 100644
--- a/game/modules/tome/data/general/npcs/orc-grushnak.lua
+++ b/game/modules/tome/data/general/npcs/orc-grushnak.lua
@@ -44,7 +44,7 @@ newEntity{
 	resolvers.inscriptions(3, "infusion"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	ingredient_on_death = "ORC_HEART",
 }
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 8efa12528c..973dc76456 100644
--- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua
+++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua
@@ -43,7 +43,7 @@ newEntity{
 	resolvers.inscriptions(3, "rune"),
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	ingredient_on_death = "ORC_HEART",
 }
diff --git a/game/modules/tome/data/general/npcs/orc-vor.lua b/game/modules/tome/data/general/npcs/orc-vor.lua
index 1b017b78c8..bc623da32f 100644
--- a/game/modules/tome/data/general/npcs/orc-vor.lua
+++ b/game/modules/tome/data/general/npcs/orc-vor.lua
@@ -45,7 +45,7 @@ newEntity{
 	resolvers.inscriptions(2, "rune"),
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=10, dex=8, mag=20, con=16 },
 	ingredient_on_death = "ORC_HEART",
 }
diff --git a/game/modules/tome/data/general/npcs/orc.lua b/game/modules/tome/data/general/npcs/orc.lua
index 72a75f9a87..9eb3d79284 100644
--- a/game/modules/tome/data/general/npcs/orc.lua
+++ b/game/modules/tome/data/general/npcs/orc.lua
@@ -40,7 +40,7 @@ newEntity{
 	open_door = true,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	resolvers.talents{ [Talents.T_WEAPON_COMBAT]={base=1, every=10, max=5}, },
 	ingredient_on_death = "ORC_HEART",
diff --git a/game/modules/tome/data/general/npcs/ritch.lua b/game/modules/tome/data/general/npcs/ritch.lua
index 60fcb69b71..66589fb697 100644
--- a/game/modules/tome/data/general/npcs/ritch.lua
+++ b/game/modules/tome/data/general/npcs/ritch.lua
@@ -36,7 +36,7 @@ Vicious predators, they inject corrupting diseases into their foes, and their sh
 	rank = 2,
 
 	autolevel = "slinger",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	global_speed_base = 1.2,
 	stats = { str=15, dex=15, mag=8, con=10 },
 
diff --git a/game/modules/tome/data/general/npcs/rodent.lua b/game/modules/tome/data/general/npcs/rodent.lua
index 5e723dc874..a7efa97213 100644
--- a/game/modules/tome/data/general/npcs/rodent.lua
+++ b/game/modules/tome/data/general/npcs/rodent.lua
@@ -31,7 +31,7 @@ newEntity{ --rodent base
 	sound_random = {"creatures/rats/rat_%d", 1, 3},
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=8, dex=15, mag=3, con=5 },
 	combat = {sound="creatures/rats/rat_attack"},
 	combat_armor = 1, combat_def = 1,
diff --git a/game/modules/tome/data/general/npcs/sandworm.lua b/game/modules/tome/data/general/npcs/sandworm.lua
index 9120262c5c..5ccc7eb3df 100644
--- a/game/modules/tome/data/general/npcs/sandworm.lua
+++ b/game/modules/tome/data/general/npcs/sandworm.lua
@@ -40,7 +40,7 @@ newEntity{
 	drops = resolvers.drops{chance=5, nb=1, {type="scroll"} },
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=15, dex=7, mag=3, con=3 },
 	combat_armor = 1, combat_def = 1,
 	ingredient_on_death = "SANDWORM_TOOTH",
diff --git a/game/modules/tome/data/general/npcs/shertul.lua b/game/modules/tome/data/general/npcs/shertul.lua
index cab0c056bb..7b2029067a 100644
--- a/game/modules/tome/data/general/npcs/shertul.lua
+++ b/game/modules/tome/data/general/npcs/shertul.lua
@@ -28,7 +28,7 @@ newEntity{
 	blood_color = colors.BLUE,
 	body = { INVEN = 10 },
 	autolevel = "caster",
-	ai = "tactical", ai_state = { ai_move="move_dmap",  },
+	ai = "tactical", ai_state = { ai_move="move_complex",  },
 
 	stats = { str=40, dex=40, wil=40, con=40, mag=40, cun=40, lck=100 },
 	combat_armor = 0, combat_def = 0,
diff --git a/game/modules/tome/data/general/npcs/skeleton.lua b/game/modules/tome/data/general/npcs/skeleton.lua
index 6b066ca9d8..c3171875ba 100644
--- a/game/modules/tome/data/general/npcs/skeleton.lua
+++ b/game/modules/tome/data/general/npcs/skeleton.lua
@@ -38,7 +38,7 @@ newEntity{
 	size_category = 3,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 	stats = { str=14, dex=12, mag=10, con=12 },
 
 	resolvers.racial(),
diff --git a/game/modules/tome/data/general/npcs/snow-giant.lua b/game/modules/tome/data/general/npcs/snow-giant.lua
index 1de2edd512..5286d3c013 100644
--- a/game/modules/tome/data/general/npcs/snow-giant.lua
+++ b/game/modules/tome/data/general/npcs/snow-giant.lua
@@ -36,7 +36,7 @@ newEntity{
 	size_category = 4,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 
 	resolvers.inscriptions(1, "infusion"),
diff --git a/game/modules/tome/data/general/npcs/spider.lua b/game/modules/tome/data/general/npcs/spider.lua
index c5154a5705..e06ad67b00 100644
--- a/game/modules/tome/data/general/npcs/spider.lua
+++ b/game/modules/tome/data/general/npcs/spider.lua
@@ -34,7 +34,7 @@ newEntity{
 	rank = 1,
 
 	autolevel = "spider",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 	global_speed_base = 1.2,
 	stats = { str=15, dex=15, mag=8, con=10 },
 
@@ -302,7 +302,7 @@ newEntity{ base = "BASE_NPC_SPIDER",
 	rank = 3,
 
 	ai = "tactical",
-	ai_tactic = resolvers.tactic"melee", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai_tactic = resolvers.tactic"melee", ai_state = { ai_move="move_complex", talent_in=2, },
 
 	combat = { dam=resolvers.levelup(resolvers.mbonus(40, 70), 1, 0.9), atk=16, apr=9, damtype=DamageType.WASTING, dammod={dex=1.2} },
 
@@ -340,7 +340,7 @@ newEntity{ base = "BASE_NPC_SPIDER",
 	resolvers.drops{chance=100, nb=5, {ego_chance=100} },
 
 	ai = "tactical",
-	ai_tactic = resolvers.tactic"melee", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai_tactic = resolvers.tactic"melee", ai_state = { ai_move="move_complex", talent_in=1, },
 
 	combat = { dam=resolvers.levelup(resolvers.mbonus(100, 15), 1, 0.9), atk=16, apr=9, damtype=DamageType.WASTING, dammod={dex=1.2} },
 
@@ -398,7 +398,7 @@ newEntity{
 	infravision = 10,
 
 	autolevel = "spider",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	global_speed_base = 1.2,
 	stats = { str=10, dex=17, mag=3, con=7 },
 	combat = { dammod={dex=0.8} },
diff --git a/game/modules/tome/data/general/npcs/storm-drake.lua b/game/modules/tome/data/general/npcs/storm-drake.lua
index a535734b42..3b1e9b66af 100644
--- a/game/modules/tome/data/general/npcs/storm-drake.lua
+++ b/game/modules/tome/data/general/npcs/storm-drake.lua
@@ -33,7 +33,7 @@ newEntity{
 	size_category = 5,
 
 	autolevel = "drake",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.LIGHTNING] = 100, },
diff --git a/game/modules/tome/data/general/npcs/sunwall-town.lua b/game/modules/tome/data/general/npcs/sunwall-town.lua
index 903def3fc4..602e200665 100644
--- a/game/modules/tome/data/general/npcs/sunwall-town.lua
+++ b/game/modules/tome/data/general/npcs/sunwall-town.lua
@@ -38,7 +38,7 @@ newEntity{
 	open_door = true,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	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 7ae2e46a22..a27df07bda 100644
--- a/game/modules/tome/data/general/npcs/swarm.lua
+++ b/game/modules/tome/data/general/npcs/swarm.lua
@@ -32,7 +32,7 @@ newEntity{
 	sound_moam = {"creatures/swarm/mswarm_%d", 1, 4},
 	sound_die = "creatures/swarm/mswarm_die",
 	sound_random = {"creatures/swarm/mswarm_%d", 1, 4},
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=1, dex=20, mag=3, con=1 },
 	global_speed_base = 2,
 	infravision = 10,
diff --git a/game/modules/tome/data/general/npcs/telugoroth.lua b/game/modules/tome/data/general/npcs/telugoroth.lua
index 18a9b2dbb8..0f5445d820 100644
--- a/game/modules/tome/data/general/npcs/telugoroth.lua
+++ b/game/modules/tome/data/general/npcs/telugoroth.lua
@@ -80,7 +80,7 @@ newEntity{
 	levitation = 1,
 
 	autolevel = "dexmage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	global_speed_base = 1.5,
 	stats = { str=8, dex=12, mag=12, wil=12, con=10 },
 
diff --git a/game/modules/tome/data/general/npcs/thieve.lua b/game/modules/tome/data/general/npcs/thieve.lua
index 1393911244..918f6fba10 100644
--- a/game/modules/tome/data/general/npcs/thieve.lua
+++ b/game/modules/tome/data/general/npcs/thieve.lua
@@ -48,7 +48,7 @@ newEntity{
 	resolvers.inscriptions(1, "infusion"),
 
 	autolevel = "rogue",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=5, },
 	stats = { str=8, dex=15, mag=6, cun=15, con=7 },
 
 	resolvers.talents{ [Talents.T_LETHALITY]={base=1, every=6, max=5}, },
diff --git a/game/modules/tome/data/general/npcs/troll.lua b/game/modules/tome/data/general/npcs/troll.lua
index d16ff56171..8820199284 100644
--- a/game/modules/tome/data/general/npcs/troll.lua
+++ b/game/modules/tome/data/general/npcs/troll.lua
@@ -41,7 +41,7 @@ newEntity{
 	size_category = 4,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 
 	open_door = true,
diff --git a/game/modules/tome/data/general/npcs/undead-rat.lua b/game/modules/tome/data/general/npcs/undead-rat.lua
index 46c4a4bdd6..8719eb0e7f 100644
--- a/game/modules/tome/data/general/npcs/undead-rat.lua
+++ b/game/modules/tome/data/general/npcs/undead-rat.lua
@@ -34,7 +34,7 @@ newEntity{
 	size_category = 1,
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=10, dex=8, mag=10, con=8 },
 
 	cut_immune = 1,
diff --git a/game/modules/tome/data/general/npcs/vampire.lua b/game/modules/tome/data/general/npcs/vampire.lua
index 5ca20e9d66..5796b45171 100644
--- a/game/modules/tome/data/general/npcs/vampire.lua
+++ b/game/modules/tome/data/general/npcs/vampire.lua
@@ -31,7 +31,7 @@ newEntity{
 	drops = resolvers.drops{chance=20, nb=1, {} },
 
 	autolevel = "warriormage",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=9, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=9, },
 	stats = { str=12, dex=12, mag=12, con=12 },
 	infravision = 10,
 	life_regen = 3, life_rating = 14,
diff --git a/game/modules/tome/data/general/npcs/venom-drake.lua b/game/modules/tome/data/general/npcs/venom-drake.lua
index 7e3eb4349c..179605f958 100644
--- a/game/modules/tome/data/general/npcs/venom-drake.lua
+++ b/game/modules/tome/data/general/npcs/venom-drake.lua
@@ -33,7 +33,7 @@ newEntity{
 	size_category = 5,
 
 	autolevel = "drake",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.ACID] = 100, },
diff --git a/game/modules/tome/data/general/npcs/vermin.lua b/game/modules/tome/data/general/npcs/vermin.lua
index 14f39f33ff..b345ea18e9 100644
--- a/game/modules/tome/data/general/npcs/vermin.lua
+++ b/game/modules/tome/data/general/npcs/vermin.lua
@@ -30,7 +30,7 @@ newEntity{
 	combat = {sound={"creatures/worms/worm_%d", 1, 4}},
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	global_speed_base = 0.9,
 	stats = { str=10, dex=15, mag=3, con=3 },
 	combat_armor = 1, combat_def = 1,
diff --git a/game/modules/tome/data/general/npcs/wight.lua b/game/modules/tome/data/general/npcs/wight.lua
index b3dbd7e8b0..a268d4818d 100644
--- a/game/modules/tome/data/general/npcs/wight.lua
+++ b/game/modules/tome/data/general/npcs/wight.lua
@@ -39,7 +39,7 @@ newEntity{
 	resolvers.drops{chance=20, nb=1, {ego_chance=20} },
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 	stats = { str=11, dex=11, mag=15, con=12 },
 	infravision = 10,
 	rank = 2,
diff --git a/game/modules/tome/data/general/npcs/wild-drake.lua b/game/modules/tome/data/general/npcs/wild-drake.lua
index a02b610270..b69062a61f 100644
--- a/game/modules/tome/data/general/npcs/wild-drake.lua
+++ b/game/modules/tome/data/general/npcs/wild-drake.lua
@@ -33,7 +33,7 @@ newEntity{
 	size_category = 5,
 
 	autolevel = "drake",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	knockback_immune = 1,
diff --git a/game/modules/tome/data/general/npcs/yaech.lua b/game/modules/tome/data/general/npcs/yaech.lua
index 6599688a8b..b0f7a5ce6a 100644
--- a/game/modules/tome/data/general/npcs/yaech.lua
+++ b/game/modules/tome/data/general/npcs/yaech.lua
@@ -40,7 +40,7 @@ newEntity{
 	open_door = true,
 
 	autolevel = "wildcaster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	stats = { str=15, dex=15, mag=15, con=10 },
 }
 
diff --git a/game/modules/tome/data/general/npcs/ziguranth.lua b/game/modules/tome/data/general/npcs/ziguranth.lua
index 2bc6052ee5..65a51050b4 100644
--- a/game/modules/tome/data/general/npcs/ziguranth.lua
+++ b/game/modules/tome/data/general/npcs/ziguranth.lua
@@ -47,7 +47,7 @@ newEntity{
 	resolvers.inscriptions(1, "infusion"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=15, mag=1, con=16, wil=19 },
 	not_power_source = {arcane=true},
 }
@@ -91,7 +91,7 @@ newEntity{ base = "BASE_NPC_ZIGURANTH",
 	equilibrium_regen = -20,
 
 	autolevel = "wildcaster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 
 	resolvers.talents{
 		[Talents.T_RESOLVE]={base=4, every=5, max=8},
@@ -121,7 +121,7 @@ newEntity{ base = "BASE_NPC_ZIGURANTH",
 	equilibrium_regen = -20,
 
 	autolevel = "warriorwill",
-	ai_state = { ai_move="move_dmap", talent_in=2, },
+	ai_state = { ai_move="move_complex", talent_in=2, },
 	ai = "tactical",
 
 	resolvers.talents{
diff --git a/game/modules/tome/data/general/stores/basic.lua b/game/modules/tome/data/general/stores/basic.lua
index e175b92ff7..a488dd6495 100644
--- a/game/modules/tome/data/general/stores/basic.lua
+++ b/game/modules/tome/data/general/stores/basic.lua
@@ -499,3 +499,54 @@ newEntity{
 		},
 	},
 }
+
+
+-------------------------------------------------------------
+-- Arena
+-------------------------------------------------------------
+newEntity{
+	define_as = "ARENA_SHOP",
+	name = "gladiator's wares",
+	display = '*', colors=colors.BLACK,
+	store = {
+		purse = 100,
+		nb_fill = 64,
+		empty_before_restock = false,
+		filters = {
+			{type="weapon", subtype="longsword", id=true, tome_drops="boss"},
+			{type="weapon", subtype="greatsword", id=true, tome_drops="boss"},
+			{type="weapon", subtype="waraxe", id=true, tome_drops="boss"},
+			{type="weapon", subtype="battleaxe", id=true, tome_drops="boss"},
+			{type="weapon", subtype="mace", id=true, tome_drops="boss"},
+			{type="weapon", subtype="greatmaul", id=true, tome_drops="boss"},
+			{type="weapon", subtype="mindstar", id=true, tome_drops="boss"},
+			{type="weapon", subtype="dagger", id=true, tome_drops="boss"},
+			{type="weapon", subtype="staff", id=true, tome_drops="boss"},
+			{type="weapon", subtype="longbow", id=true, tome_drops="boss"},
+			{type="weapon", subtype="sling", id=true, tome_drops="boss"},
+			{type="ammo", id=true, tome_drops="boss"},
+			{type="ammo", id=true, tome_drops="store"},
+			{type="armor", subtype="heavy", id=true, tome_drops="boss"},
+			{type="armor", subtype="massive", id=true, tome_drops="boss"},
+			{type="armor", subtype="shield", id=true, tome_drops="boss"},
+			{type="armor", subtype="head", id=true, tome_drops="boss"},
+			{type="armor", subtype="light", id=true, tome_drops="boss"},
+			{type="armor", subtype="hands", id=true, tome_drops="boss"},
+			{type="armor", subtype="feet", id=true, tome_drops="boss"},
+			{type="armor", subtype="belt", id=true, tome_drops="boss"},
+			{type="armor", subtype="cloth", id=true, tome_drops="store"},
+			{type="armor", subtype="robe", id=true, tome_drops="store"},
+			{type="armor", subtype="cloak", id=true, tome_drops="store"},
+			{type="armor", subtype="belt", id=true, tome_drops="store"},
+			{type="charm", subtype="torque", id=true, tome_drops="boss"},
+			{type="charm", subtype="totem", id=true, tome_drops="boss"},
+			{type="charm", subtype="wand", id=true, tome_drops="boss"},
+			{type="scroll", subtype="infusion", id=true},
+			{type="scroll", subtype="rune", id=true},
+			{type="jewelry", id=true, tome_drops="store"},
+			{type="jewelry", id=true, tome_drops="boss"},
+
+
+		}
+	}
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/talents/psionic/thought-forms.lua b/game/modules/tome/data/talents/psionic/thought-forms.lua
index 2d59f2aed6..1471e8e076 100644
--- a/game/modules/tome/data/talents/psionic/thought-forms.lua
+++ b/game/modules/tome/data/talents/psionic/thought-forms.lua
@@ -200,7 +200,7 @@ newTalent{
 			body = { INVEN = 10, MAINHAND = 1, BODY = 1, QUIVER=1, HANDS = 1, FEET = 1},
 
 			ai = "summoned", ai_real = "tactical",
-			ai_state = { ai_move="move_dmap", talent_in=3, ally_compassion=10 },
+			ai_state = { ai_move="move_complex", talent_in=3, ally_compassion=10 },
 			ai_tactic = resolvers.tactic("ranged"),
 			
 			max_life = resolvers.rngavg(100,110),
@@ -311,7 +311,7 @@ newTalent{
 			body = { INVEN = 10, MAINHAND = 1, BODY = 1, HANDS = 1, FEET = 1},
 		
 			ai = "summoned", ai_real = "tactical",
-			ai_state = { ai_move="move_dmap", talent_in=3, ally_compassion=10 },
+			ai_state = { ai_move="move_complex", talent_in=3, ally_compassion=10 },
 			ai_tactic = resolvers.tactic("melee"),
 			
 			max_life = resolvers.rngavg(100,110),
@@ -412,7 +412,7 @@ newTalent{
 			body = { INVEN = 10, MAINHAND = 1, OFFHAND = 1, BODY = 1, HANDS = 1, FEET = 1},
 			
 			ai = "summoned", ai_real = "tactical",
-			ai_state = { ai_move="move_dmap", talent_in=3, ally_compassion=10 },
+			ai_state = { ai_move="move_complex", talent_in=3, ally_compassion=10 },
 			ai_tactic = resolvers.tactic("tank"),
 			
 			max_life = resolvers.rngavg(100,110),
diff --git a/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua b/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua
index 43e00d6bc2..ce8535fe53 100644
--- a/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua
+++ b/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua
@@ -30,7 +30,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 4,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 		stats = { str=20, dex=52, mag=16, con=16 },
 		resists = { [DamageType.PHYSICAL] = 20, [DamageType.BLIGHT] = 20, [DamageType.COLD] = 50, },
 		open_door = 1,
@@ -64,7 +64,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 4,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 		stats = { str=20, dex=52, mag=16, con=16 },
 		resists = { [DamageType.PHYSICAL] = 20, [DamageType.BLIGHT] = 20, [DamageType.COLD] = 50, },
 		open_door = 1,
@@ -98,7 +98,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 4,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 		stats = { str=20, dex=52, mag=16, con=16 },
 		resists = { [DamageType.PHYSICAL] = 20, [DamageType.BLIGHT] = 20, [DamageType.COLD] = 50, },
 		open_door = 1,
@@ -134,7 +134,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 4,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=2, },
 		stats = { str=20, dex=52, mag=16, con=16 },
 		resists = { [DamageType.PHYSICAL] = 20, [DamageType.BLIGHT] = 20, [DamageType.COLD] = 50, },
 		open_door = 1,
diff --git a/game/modules/tome/data/talents/spells/necrotic-minions.lua b/game/modules/tome/data/talents/spells/necrotic-minions.lua
index ea69605719..6e17cad123 100644
--- a/game/modules/tome/data/talents/spells/necrotic-minions.lua
+++ b/game/modules/tome/data/talents/spells/necrotic-minions.lua
@@ -105,7 +105,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 3,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=14, dex=12, mag=10, con=12 },
 		resolvers.racial(),
 		resolvers.tmasteries{ ["technique/other"]=0.3, ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3 },
@@ -134,7 +134,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 3,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=14, dex=12, mag=10, con=12 },
 		resolvers.racial(),
 		resolvers.tmasteries{ ["technique/other"]=0.3, ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3 },
@@ -165,7 +165,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 3,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=14, dex=12, mag=10, con=12 },
 		resolvers.racial(),
 		resolvers.tmasteries{ ["technique/other"]=0.3, ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3 },
@@ -203,7 +203,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 3,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=14, dex=12, mag=10, con=12 },
 		resolvers.racial(),
 		resolvers.tmasteries{ ["technique/other"]=0.3, ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3 },
@@ -235,7 +235,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 3,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=14, dex=12, mag=10, con=12 },
 		resolvers.racial(),
 		resolvers.tmasteries{ ["technique/other"]=0.3, ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3 },
@@ -268,7 +268,7 @@ local minions_list = {
 		rank = 2,
 		size_category = 3,
 		autolevel = "warrior",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=14, dex=12, mag=10, con=12 },
 		resolvers.racial(),
 		resolvers.tmasteries{ ["technique/other"]=0.3, ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3 },
@@ -386,7 +386,7 @@ local minions_list = {
 		level_range = {1, nil}, exp_worth = 0,
 		body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 		autolevel = "warriormage",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=9, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=9, },
 		stats = { str=12, dex=12, mag=12, con=12 },
 		infravision = 10,
 		life_regen = 3,
@@ -413,7 +413,7 @@ local minions_list = {
 		level_range = {1, nil}, exp_worth = 0,
 		body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 		autolevel = "warriormage",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=9, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=9, },
 		stats = { str=12, dex=12, mag=12, con=12 },
 		infravision = 10,
 		life_regen = 3,
@@ -442,7 +442,7 @@ local minions_list = {
 		body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 		level_range = {1, nil}, exp_worth = 0,
 		autolevel = "caster",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=11, dex=11, mag=15, con=12 },
 		infravision = 10,
 		rank = 2,
@@ -469,7 +469,7 @@ local minions_list = {
 		body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 		level_range = {1, nil}, exp_worth = 0,
 		autolevel = "caster",
-		ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+		ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 		stats = { str=11, dex=11, mag=15, con=12 },
 		infravision = 10,
 		rank = 2,
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 913e27cac2..70767a48bf 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -1620,7 +1620,7 @@ newEffect{
 				summoner = eff.target, summoner_gain_exp=true,
 				ai_target = {actor=nil},
 				ai = "summoned", ai_real = "tactical",
-				ai_state = eff.target.ai_state or { ai_move="move_dmap", talent_in=1 },
+				ai_state = eff.target.ai_state or { ai_move="move_complex", talent_in=1 },
 				name = eff.target.name.."'s dream projection",
 			})
 			m.ai_state.ally_compassion = 10
diff --git a/game/modules/tome/data/zones/arena-unlock/npcs.lua b/game/modules/tome/data/zones/arena-unlock/npcs.lua
index 5468071b0c..c472d283d8 100644
--- a/game/modules/tome/data/zones/arena-unlock/npcs.lua
+++ b/game/modules/tome/data/zones/arena-unlock/npcs.lua
@@ -37,7 +37,7 @@ newEntity{ name = "gladiator",
 	open_door = true,
 	stun_immune = 0.4,
 	autolevel = "warrior",
-	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
+	ai = "tactical", ai_state = { ai_move = "move_complex", talent_in = 1 },
 
 	stats = { str=15, dex=15, mag=1, con=15 },
 	desc = [[A menacing man in heavy armor, wielding a mace. He looks battle-hardened.]],
@@ -84,7 +84,7 @@ newEntity{ name = "halfling slinger",
 	lite = 2,
 	open_door = true,
 	autolevel = "slinger",
-	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
+	ai = "tactical", ai_state = { ai_move = "move_complex", talent_in = 1 },
 
 	stats = { str=10, dex=15, cun=15, con=8 },
 	desc = [[A halfling slinger. He seems adept at combat.]],
@@ -136,7 +136,7 @@ newEntity{ name = "arcane blade",
 	lite = 2,
 	open_door = true,
 	autolevel = "warrior",
-	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
+	ai = "tactical", ai_state = { ai_move = "move_complex", talent_in = 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 06b1b0160d..9ff4dd2037 100644
--- a/game/modules/tome/data/zones/arena/npcs.lua
+++ b/game/modules/tome/data/zones/arena/npcs.lua
@@ -34,43 +34,6 @@ load("/data/general/npcs/horror-corrupted.lua")
 
 local Talents = require("engine.interface.ActorTalents")
 
---Fodder
-newEntity{ name = "flying skull",
-	type = "undead", subtype = "skull",
-	display = "*", color=colors.BLACK, tint=colors.BLACK,
-	desc = [[A floating disembodied skull with an aura of darkness.]],
-	combat = { dam=10, atk=5, apr=10, physspeed=1 },
-	blood_color = colors.YELLOW,
-	level_range = {1, nil},
-	exp_worth = 1,
-	max_life = 10,
-	body = { INVEN = 1, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
-	no_drops = true, open_door = false,
-	infravision = 10,
-	rarity = false,
-	lite = 4,
-	life_rating = 1, rank = 1, size_category = 1,
-	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move = "move_astar", talent_in = 1 },
-	global_speed_base = 1,
-	stats = { str = 9, dex = 20, mag = 20 },
-	resolvers.talents{
-		[Talents.T_EXPLODE] = 3,
-	},
-	no_breath = 1,
-	blind_immune = 1,
-	fear_immune = 1,
-	rank = 2,
-	size_category = 1,
-	poison_immune = 1,
-	disease_immune = 1,
-	poison_immune = 1,
-	stun_immune = 1,
-	undead = 1,
-	resolvers.sustains_at_birth(),
-}
-
-
 --Base arena human
 newEntity{ define_as = "BASE_NPC_ARENA1",
 	type = "humanoid", subtype = "human",
@@ -79,7 +42,6 @@ newEntity{ define_as = "BASE_NPC_ARENA1",
 	combat = { dam=resolvers.rngavg(5,12), atk=2, apr=6, physspeed=2 },
 
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
-	resolvers.drops{chance=25, nb=1, {} },
 	resolvers.drops{chance=100, nb=1, {type="money"} },
 	resolvers.inscriptions(1, {}),
 	infravision = 10,
@@ -90,9 +52,9 @@ newEntity{ define_as = "BASE_NPC_ARENA1",
 	stun_immune = 0.2,
 	confusion_immune = 0.1,
 	fear_immune = 0.1,
-	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
-	stats = { str = 10, dex = 10, mag = 10, con = 10 },
-	resolvers.talents{ [Talents.T_ARMOUR_TRAINING] = 2, },
+	ai = "tactical", ai_state = { ai_move = "move_complex", talent_in = 1 },
+	stats = { str = 10, dex = 10, mag = 10, con = 10, cun = 10, wil = 10 },
+	resolvers.talents{ [Talents.T_ARMOUR_TRAINING] = 4, },
 	resolvers.equip{
 		{type="armor", subtype="feet", autoreq=true},
 	},
@@ -119,6 +81,25 @@ newEntity{ name = "skeletal rat",
 	resolvers.sustains_at_birth(),
 }
 
+newEntity{ name = "homeless fighter",
+	base = "BASE_NPC_ARENA1",
+	type = "humanoid", subtype = "human",
+	color = colors.BROWN,
+	life_rating = 4,
+	desc = "Will fight for a meal.",
+	equipment = resolvers.equip{
+		{ type="weapon", force_drop=true, autoreq = true },
+		{ type="armor", force_drop=true, autoreq = true },
+	},
+	max_life = resolvers.rngavg(80,90),
+	level_range = {2, 25}, exp_worth = 1,
+	rarity = 0,
+	combat_def = 1,
+	resolvers.talents{
+		[Talents.T_DIRTY_FIGHTING] = 1,
+	}
+}
+
 newEntity{ name = "golden crystal",
 	base = "BASE_NPC_CRYSTAL",
 	define_as = "GOLDCRYSTAL",
@@ -313,7 +294,7 @@ newEntity{ name = "headless horror",
 	rarity = 3,
 	rank = 3,
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 	combat = { dam=18, atk=18, apr=10, dammod={str=1} },
 	combat = {damtype=DamageType.PHYSICAL},
 	no_auto_resists = true,
@@ -1031,10 +1012,10 @@ newEntity{ name = "anorithil",
 	autolevel = "caster", ai_tactic = resolvers.tactic("ranged"),
 	resolvers.drops{chance=50, nb=1, {type="weapon", subtype="staff", force_drop=true, tome_drops="boss"}},
 	combat_def = 4,
-	positive_regen = 5, negative_regen = 5,
 	resolvers.talents{
 		[Talents.T_CIRCLE_OF_SHIFTING_SHADOWS]=2,
 		[Talents.T_CIRCLE_OF_BLAZING_LIGHT]=2,
+		[Talents.T_TWILIGHT]=2,
 		[Talents.T_SEARING_LIGHT]=2,
 		[Talents.T_MOONLIGHT_RAY]=1,
 		[Talents.T_HYMN_OF_SHADOWS]=2,
@@ -1068,7 +1049,7 @@ newEntity{ name = "sun paladin",
 		[Talents.T_CRUSADE]=3,
 		[Talents.T_SHIELD_OF_LIGHT]=1,
 		[Talents.T_BRANDISH]=1,
-		[Talents.T_ARMOUR_TRAINING]=1,
+		[Talents.T_ARMOUR_TRAINING]=2,
 		[Talents.T_WEAPON_COMBAT]=2,
 	},
 }
@@ -1097,10 +1078,10 @@ newEntity{ name = "star crusader",
 	resolvers.drops{ chance=50, nb=1, {type="weapon", subtype="staff", force_drop=true, tome_drops="boss"} },
 	combat_def = 4,
 	autolevel = "warriormage", ai_tactic = resolvers.tactic("melee"),
-	positive_regen = 5, negative_regen = 5,
 	resolvers.talents{
 		[Talents.T_CIRCLE_OF_SHIFTING_SHADOWS]=2,
 		[Talents.T_CIRCLE_OF_BLAZING_LIGHT]=2,
+		[Talents.T_TWILIGHT]=2,
 		[Talents.T_SEARING_LIGHT]=2,
 		[Talents.T_MOONLIGHT_RAY]=1,
 		[Talents.T_HYMN_OF_SHADOWS]=2,
@@ -1113,4 +1094,4 @@ newEntity{ name = "star crusader",
 		[Talents.T_WEAPON_COMBAT]=1,
 		[Talents.T_WEAPONS_MASTERY]=1,
 	},
-}
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/zones/arena/zone.lua b/game/modules/tome/data/zones/arena/zone.lua
index e0b8626f20..86f42a6e42 100644
--- a/game/modules/tome/data/zones/arena/zone.lua
+++ b/game/modules/tome/data/zones/arena/zone.lua
@@ -39,7 +39,7 @@ return {
 		map = {
 			class = "engine.generator.map.Static",
 			map = "zones/arena",
-			zoom = 4,
+			zoom = 5,
 		},
 		actor = { },
 		--object = { },
@@ -63,9 +63,6 @@ return {
 				elseif game.level.arena.event == 3 then game.log("#LIGHT_RED#Final round starts!!!!")
 				end
 				game.level.arena.removeStuff()
-				if game.player.money > 0 then
-					game.level.arena.goldToScore()
-				end
 				game.level.arena.openGates()
 			end
 		end
@@ -87,7 +84,7 @@ return {
 
 
 	post_process = function(level)
-		game.player.money = 0
+		game.player.money = 100
 		game.player.no_resurrect = true
 		game.player.on_die = function (self, src)
 			local rank = math.floor(game.level.arena.rank)
@@ -96,7 +93,6 @@ return {
 			local lastScore = {
 				name = game.player.name.." the "..drank,
 				score = game.level.arena.score,
-				perk = game.level.arena.perk,
 				wave = game.level.arena.currentWave,
 				sex = game.player.descriptor.sex,
 				race = game.player.descriptor.subrace,
@@ -112,9 +108,13 @@ return {
 		level.max_turn_counter = 60 --5 turns before action starts.
 		level.turn_counter_desc = ""
 
+--TODO(Hetdegon@2012-12-11):Finish display, add shop, enforce enemy drops to be more regular.
+--TODO(Hetdegon@2012-12-11):Drops on high combo.
+
+
 		--world.arena = nil
 		if not world.arena or not world.arena.ver then
-			local emptyScore = {name = nil, score = 0, perk = nil, wave = 1, sex = nil, race = nil, class = nil}
+			local emptyScore = {name = nil, score = 0, wave = 1, sex = nil, race = nil, class = nil}
 			world.arena = {
 				master30 = nil,
 				master60 = nil,
@@ -127,9 +127,8 @@ return {
 			if o then game.zone:addEntity(game.level, o, "object", 7, 3) end
 		end
 		level.arena = {
-			ranks = { "nobody", "rat stomper", "aspirant", "fighter", "brave", "dangerous", "promise", "powerful", "rising star", "destroyer", "obliterator", "annihilator", "grandious", "glorious", "victorious", "ultimate", "ultimate", "ultimate", "ultimate", "ultimate", "grand master" },
+			ranks = { "nobody", "rat stomper", "bear beater", "aspirant", "fighter", "bold", "gladiator", "brave", "dangerous", "promise", "powerful", "rising star", "destroyer", "obliterator", "annihilator", "grandious", "glorious", "victorious", "ultimate", "ultimate", "ultimate", "ultimate", "ultimate", "grand master" },
 			rank = 1,
-			perk = nil,
 			event = 0,
 			initEvent = false,
 			lockEvent = false,
@@ -202,6 +201,7 @@ return {
 					function () return 12, 10 end,
 				}
 			},
+
 			clear = function()
 				game.player:setQuestStatus("arena", engine.Quest.COMPLETED)
 				local master = game.player:cloneFull()
@@ -235,6 +235,7 @@ return {
 					world.arena.master30 = master
 				end
 			end,
+
 			printRankings = function (val)
 				local scores = world.arena.scores
 				if not scores or not scores[1] or not scores[1].name then return "#LIGHT_GREEN#...but it's been wiped out recently."
@@ -246,20 +247,22 @@ return {
 					local i = 1
 					while(scores[i] and scores[i].name) do
 						p = scores[i]
-						tmp = stri:format(p.name:capitalize(), p.sex or "???", p.race or "???", p.class or "???", p.score or 0, p.perk or "???", p.wave or 0)
+						tmp = stri:format(p.name:capitalize(), p.sex or "???", p.race or "???", p.class or "???", p.score or 0, p.wave or 0)
 						text = text..line(tmp, "#LIGHT_BLUE#")
 						i = i + 1
 					end
 					p = world.arena.lastScore
-					tmp = "\n#YELLOW#LAST:"..stri:format(p.name:capitalize(), p.sex or "unknown", p.race or "unknown", p.class or "unknown", p.score or 0, p.perk or "", p.wave or 0)
+					tmp = "\n#YELLOW#LAST SCORE:"..stri:format(p.name:capitalize(), p.sex or "unknown", p.race or "unknown", p.class or "unknown", p.score or 0, p.wave or 0)
 					return text..line(tmp, "#YELLOW#")
 				end
 			end,
+
 			printRank = function (r, ranks)
 				local rank = math.floor(r)
 				if rank > #ranks then rank = #ranks end
 				return ranks[rank]
 			end,
+
 			updateScores = function(l)
 				local scores = world.arena.scores or {}
 				table.insert(scores, l)
@@ -269,6 +272,7 @@ return {
 				if l.wave > world.arena.bestWave then world.arena.bestWave = l.wave end
 				world.arena.lastScore = l
 			end,
+
 			openGates = function()
 				local gates = game.level.arena.entry.door
 				local g = game.zone:makeEntityByName(game.level, "terrain", "LOCK_OPEN")
@@ -279,8 +283,9 @@ return {
 					game.nicer_tiles:updateAround(game.level, x, y)
 				end
 				game:playSoundNear(game.player, "talents/earth")
-				game.log("#LIGHT_GREEN#The gates open!")
+				game.log("#YELLOW#The gates open!")
 			end,
+
 			closeGates = function()
 				local gates = game.level.arena.entry.door
 				local g = game.zone:makeEntityByName(game.level, "terrain", "LOCK")
@@ -294,6 +299,7 @@ return {
 				game:playSoundNear(game.player, "talents/earth")
 				game.log("#LIGHT_RED#The gates close!")
 			end,
+
 			raiseRank = function (val)
 				if game.level.arena.rank >= 21 then return end
 				local currentRank = math.floor(game.level.arena.rank)
@@ -302,13 +308,14 @@ return {
 				local newRank = math.floor(game.level.arena.rank)
 				if currentRank < newRank then --Player's rank increases!
 					local x, y = game.level.map:getTileToScreen(game.player.x, game.player.y)
-					if newRank == 10 then world:gainAchievement("XXX_THE_DESTROYER", game.player)
+					if newRank == 13 then world:gainAchievement("XXX_THE_DESTROYER", game.player)
 					elseif newRank == 21 then world:gainAchievement("GRAND_MASTER", game.player)
 					end
 					game.flyers:add(x, y, 90, 0, -0.5, "RANK UP!!", { 2, 57, 185 }, true)
-					game.log("#LIGHT_GREEN#The public is pleased by your performance! You now have the rank of #WHITE#"..game.level.arena.ranks[newRank].."!")
+					game.log("#LIGHT_GREEN#The public is pleased by your performance! You now have the rank of #WHITE#"..game.level.arena.ranks[newRank].."#LIGHT_GREEN#!")
 				end
 			end,
+
 			checkCombo = function (k)
 				if k >= 10 then world:gainAchievement("TEN_AT_ONE_BLOW", game.player) end
 				if k > 2 then
@@ -317,35 +324,24 @@ return {
 					game.level.arena.raiseRank(b)
 					game.flyers:add(x, y, 90, 0.5, 0, k.." kills!", { 2, 57, 185 }, false)
 					game.log("#YELLOW#You killed "..k.." enemies in a single turn! The public is excited!")
+					if k >= 4 and k < 6 then
+						local drop = game.zone:makeEntity(game.level, "object", {tome = { ego=30, double_ego=15, greater=7, greater_normal=1 }}, nil, true)
+						game.zone:addEntity(game.level, drop, "object", game.player.x, game.player.y)
+					elseif k >= 6 and k < 8 then
+						local drop = game.zone:makeEntity(game.level, "object", {tome = { ego=60, double_ego=30, greater=15, greater_normal=10, double_greater=1 }}, nil, true)
+						game.zone:addEntity(game.level, drop, "object", game.player.x, game.player.y)
+					elseif k >= 8 and k < 10 then
+						local drop = game.zone:makeEntity(game.level, "object", {tome = { double_ego=60, greater=35, greater_normal=20, double_greater=5 }}, nil, true)
+						game.zone:addEntity(game.level, drop, "object", game.player.x, game.player.y)
+					elseif k >= 10 then
+						local drop = game.zone:makeEntity(game.level, "object", {tome = { greater=70, greater_normal=40, double_greater=25 }}, nil, true)
+						game.zone:addEntity(game.level, drop, "object", game.player.x, game.player.y)
+					end
+
 				else return
 				end
 			end,
-			addTrap = function ()
-				local g = game.zone:makeEntity(game.level, "trap", nil, nil, true)
-				local d = game.level.arena.currentWave
-				g.dam = 5 + (d * 2) + rng.range(d, d * 1.5)
-				game.zone:addEntity(game.level, g, "trap", 7, 7)
-				g:setKnown(game.player, true)
-				game.level.map:updateMap(7, 7)
-				game.level.map:particleEmitter(7, 7, 0.3, "demon_teleport")
-				if d > 1 then game.log("#YELLOW#The trap changes...") end
-			end,
-			goldToScore = function ()
-				local x, y = game.level.map:getTileToScreen(game.player.x, game.player.y)
-				local goldAward = game.player.money * 100
-				local healthAward = game.player.money * 10
-				local regStamina = goldAward * 0.5
-				game.level.arena.score = game.level.arena.score + goldAward
-				game.flyers:add(x, y, 90, 0, -0.6, "GOLD BONUS! +"..goldAward.." SCORE!", { 2, 57, 185 }, false)
-				game.log("#ROYAL_BLUE#Gold bonus! Score increased by #WHITE#"..goldAward.."#ROYAL_BLUE#! #LIGHT_GREEN#You also recover some health(#WHITE#+"..healthAward.."#LIGHT_GREEN#!)#LAST#")
-				if game.player:knowTalent(game.player.T_STAMINA_POOL) then
-					game.player:incStamina(regStamina)
-					game.log("#LIGHT_GREEN#Stamina(#WHITE#+"..regStamina.."#LIGHT_GREEN#)")
-				end
-				game.player.money = 0
-				game.player:heal(healthAward)
-				game.player.changed = true
-			end,
+
 			initWave = function (val) --Clean up and start a new wave.
 				if val > 20 then --If the player has more than 20 turns of rest, clean up all items lying around.
 					game.level.arena.clearItems = true
@@ -360,6 +356,7 @@ return {
 				game.level.arena.pinchValue = 0
 				game.level.arena.pinch = false
 				if game.level.arena.display then game.level.arena.display = nil end
+				--NOTE(Hetdegon@2012-10-02):Replace this to an event table.
 				if game.level.arena.currentWave % game.level.arena.eventWave == 0 then
 					if game.level.arena.currentWave % (game.level.arena.eventWave * 3) == 0 then --Boss round!
 						game.log("#VIOLET#Boss round!!!")
@@ -376,11 +373,11 @@ return {
 				end
 				game.level.arena.initEvent = false
 				game.level.arena.lockEvent = false
-				game.level.arena.addTrap()
 				if game.level.arena.currentWave == 21 then world:gainAchievement("ARENA_BATTLER_20", game.player)
 				elseif game.level.arena.currentWave == 51 then world:gainAchievement("ARENA_BATTLER_50", game.player)
 				end
 			end,
+
 			removeStuff = function ()
 				for i = 0, game.level.map.w - 1 do
 					for j = 0, game.level.map.h - 1 do
@@ -389,6 +386,7 @@ return {
 					end
 				end
 			end,
+
 			doReward = function (val)
 				local col = "#ROYAL_BLUE#"
 				local hgh = "#WHITE#"
@@ -406,6 +404,7 @@ return {
 				game.log(col.."Your experience increases by"..hgh..expAward..col.."!")
 				game.player.changed = true
 			end,
+
 			clearRound = function () --Relax and give rewards.
 				--Do rewarding.
 				local val = game.level.arena.pinchValue
@@ -424,6 +423,7 @@ return {
 				game.level.max_turn_counter = rest_time * 10
 				game.level.arena.initWave(val)
 			end,
+
 			checkPinch = function ()
 				if game.level.arena.danger > game.level.arena.dangerTop and game.level.arena.pinch == false then --The player is in a pinch!
 					if game.level.arena.danger - game.level.arena.dangerTop < 10 then return end --Ignore minimal excess of power.
@@ -445,6 +445,5 @@ return {
 		local Chat = require "engine.Chat"
 		local chat = Chat.new("arena-start", {name="Arena mode"}, game.player, {text = level.arena.printRankings()})
 		chat:invoke()
-		game.level.arena.addTrap()
 	end
-}
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/zones/blighted-ruins/npcs.lua b/game/modules/tome/data/zones/blighted-ruins/npcs.lua
index bf41a2804c..08fb6dee77 100644
--- a/game/modules/tome/data/zones/blighted-ruins/npcs.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/npcs.lua
@@ -47,7 +47,7 @@ newEntity{
 	open_door = true,
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=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/crypt-kryl-feijan/npcs.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
index 6ec38e53b8..c18bae0589 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
@@ -85,7 +85,7 @@ newEntity{ define_as = "MELINDA",
 	resolvers.generic(function(e) if engine.Map.tiles.nicer_tiles then e.display_w = 2 end end),
 	desc = [[A female human with twisted sigils scored into her naked flesh. Her wrists and ankles are sore and hurt by ropes and chains. You can discern great beauty beyond the stains of blood covering her skin.]],
 	autolevel = "tank",
-	ai = "summoned", ai_real = "move_dmap", ai_state = { ai_target="target_player", talent_in=4, },
+	ai = "summoned", ai_real = "move_complex", ai_state = { ai_target="target_player", talent_in=4, },
 	stats = { str=8, dex=7, mag=8, con=12 },
 	faction = "victim", hard_faction = "victim",
 	never_anger = true,
diff --git a/game/modules/tome/data/zones/keepsake-meadow/npcs.lua b/game/modules/tome/data/zones/keepsake-meadow/npcs.lua
index ecc499ce58..ee20fd987b 100644
--- a/game/modules/tome/data/zones/keepsake-meadow/npcs.lua
+++ b/game/modules/tome/data/zones/keepsake-meadow/npcs.lua
@@ -44,7 +44,7 @@ newEntity{
 	resolvers.talents{ [Talents.T_ARMOUR_TRAINING]=2, [Talents.T_WEAPON_COMBAT]={base=1, every=10, max=5}, [Talents.T_WEAPONS_MASTERY]={base=1, every=10, max=5} },
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	
 	emote_random = {chance=10, "To arms!", "Monster!", "Die!", "You will not kill us!", "We will end this!"},
@@ -165,7 +165,7 @@ newEntity{
 	resolvers.talents{ [Talents.T_ARMOUR_TRAINING]=2, [Talents.T_WEAPON_COMBAT]={base=1, every=10, max=5}, [Talents.T_WEAPONS_MASTERY]={base=1, every=10, max=5} },
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 }
 
 newEntity{ base = "BASE_SHADOW", define_as = "SHADOW_CLAW",
@@ -244,7 +244,7 @@ newEntity{ base = "BASE_SHADOW", define_as = "SHADOW_CASTER",
 		[Talents.T_REPROACH]={base=1, every=10, max=5},
 		[Talents.T_MIND_SEAR]={base=1, every=10, max=5},
 	},
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=1, },
 }
 
 newEntity{
@@ -266,7 +266,7 @@ newEntity{
 
 	open_door = true,
 
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	power_source = {technique=true},
 }
 
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 476e32a24b..6c1ad5757d 100644
--- a/game/modules/tome/data/zones/ring-of-blood/npcs.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/npcs.lua
@@ -164,7 +164,7 @@ newEntity{
 	resolvers.talents{ [Talents.T_ARMOUR_TRAINING]=2, [Talents.T_WEAPON_COMBAT]={base=1, every=10, max=5}, [Talents.T_WEAPONS_MASTERY]={base=1, every=10, max=5} },
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=20, dex=8, mag=6, con=16 },
 }
 
diff --git a/game/modules/tome/data/zones/ritch-tunnels/npcs.lua b/game/modules/tome/data/zones/ritch-tunnels/npcs.lua
index dc7337d7d6..86e1727748 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/npcs.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/npcs.lua
@@ -41,7 +41,7 @@ Vicious predators, they inject corrupting diseases into their foes, and their sh
 	rank = 2,
 
 	autolevel = "slinger",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=15, dex=15, mag=8, con=10 },
 
 	poison_immune = 0.5,
@@ -60,7 +60,7 @@ newEntity{ base = "BASE_NPC_RITCH_REL",
 
 	rank = 2,
 
-	ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai_state = { ai_move="move_complex", talent_in=1, },
 	resolvers.talents{
 		[Talents.T_RITCH_FLAMESPITTER_BOLT]=1,
 	},
@@ -75,7 +75,7 @@ newEntity{ base = "BASE_NPC_RITCH_REL",
 
 	rank = 2,
 
-	ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai_state = { ai_move="move_complex", talent_in=1, },
 	resolvers.talents{
 		[Talents.T_RUSHING_CLAWS]=1,
 	},
@@ -91,7 +91,7 @@ newEntity{ base = "BASE_NPC_RITCH_REL",
 	rank = 2,
 	combat_armor = 6,
 
-	ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai_state = { ai_move="move_complex", talent_in=1, },
 }
 
 newEntity{ base = "BASE_NPC_RITCH_REL", define_as = "HIVE_MOTHER",
diff --git a/game/modules/tome/data/zones/slazish-fen/npcs.lua b/game/modules/tome/data/zones/slazish-fen/npcs.lua
index bd7635aae2..b49df729ee 100644
--- a/game/modules/tome/data/zones/slazish-fen/npcs.lua
+++ b/game/modules/tome/data/zones/slazish-fen/npcs.lua
@@ -53,7 +53,7 @@ newEntity{
 	resolvers.inscriptions(1, "rune"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=15, dex=15, mag=15, con=10 },
 	ingredient_on_death = "NAGA_TONGUE",
 }
diff --git a/game/modules/tome/data/zones/town-angolwen/npcs.lua b/game/modules/tome/data/zones/town-angolwen/npcs.lua
index 3a116b3ac4..7b5b439f7d 100644
--- a/game/modules/tome/data/zones/town-angolwen/npcs.lua
+++ b/game/modules/tome/data/zones/town-angolwen/npcs.lua
@@ -179,7 +179,7 @@ newEntity{
 	open_door = true,
 
 	autolevel = "caster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	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 b21641ec7d..5fb1cdce6e 100644
--- a/game/modules/tome/data/zones/town-derth/npcs.lua
+++ b/game/modules/tome/data/zones/town-derth/npcs.lua
@@ -43,7 +43,7 @@ newEntity{
 	resolvers.inscriptions(1, "infusion"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	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 d25ba422a9..0270584aea 100644
--- a/game/modules/tome/data/zones/town-elvala/npcs.lua
+++ b/game/modules/tome/data/zones/town-elvala/npcs.lua
@@ -43,7 +43,7 @@ newEntity{
 	resolvers.inscriptions(1, "rune"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	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-irkkk/npcs.lua b/game/modules/tome/data/zones/town-irkkk/npcs.lua
index b9d680d8fe..f682d8d84d 100644
--- a/game/modules/tome/data/zones/town-irkkk/npcs.lua
+++ b/game/modules/tome/data/zones/town-irkkk/npcs.lua
@@ -43,7 +43,7 @@ newEntity{
 	resolvers.inscriptions(1, "infusion"),
 
 	autolevel = "wildcaster",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	stats = { str=7, dex=8, mag=6, wil=15, 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 ff722adf61..6eec78a417 100644
--- a/game/modules/tome/data/zones/town-iron-council/npcs.lua
+++ b/game/modules/tome/data/zones/town-iron-council/npcs.lua
@@ -44,7 +44,7 @@ newEntity{
 	resolvers.inscriptions(1, "rune"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	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 309f4fdd48..423961eb5c 100644
--- a/game/modules/tome/data/zones/town-last-hope/npcs.lua
+++ b/game/modules/tome/data/zones/town-last-hope/npcs.lua
@@ -43,7 +43,7 @@ newEntity{
 	resolvers.inscriptions(1, "infusion"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=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-shatur/npcs.lua b/game/modules/tome/data/zones/town-shatur/npcs.lua
index 8bf8630014..cabf308a1e 100644
--- a/game/modules/tome/data/zones/town-shatur/npcs.lua
+++ b/game/modules/tome/data/zones/town-shatur/npcs.lua
@@ -41,7 +41,7 @@ newEntity{
 	resolvers.inscriptions(1, "rune"),
 
 	autolevel = "warrior",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=3, },
 	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/tutorial-combat-stats/npcs.lua b/game/modules/tome/data/zones/tutorial-combat-stats/npcs.lua
index ae174db5c7..2f62510378 100644
--- a/game/modules/tome/data/zones/tutorial-combat-stats/npcs.lua
+++ b/game/modules/tome/data/zones/tutorial-combat-stats/npcs.lua
@@ -393,7 +393,7 @@ newEntity{
 	rank = 1,
 
 	autolevel = "spider",
-	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_complex", talent_in=4, },
 	global_speed_base = 1,
 	stats = { str=15, dex=15, mag=8, con=10 },
 	resolvers.tmasteries{ ["technique/other"]=0.3 },
-- 
GitLab