diff --git a/game/engines/default/engine/Target.lua b/game/engines/default/engine/Target.lua
index d826ca022422e91e2c3af4edf76c6ffedf4ef364..4ae6fbbcdb80f39c5d5735506606525516fd9ea6 100644
--- a/game/engines/default/engine/Target.lua
+++ b/game/engines/default/engine/Target.lua
@@ -113,7 +113,7 @@ function _M:display(dispx, dispy)
 	end
 
 	while lx and ly do
-		if not stopped then 
+		if not stopped then
 			block, hit, hit_radius = false, true, true
 			if self.target_type.block_path then
 				block, hit, hit_radius = self.target_type:block_path(lx, ly, true)
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 7511881f22002ede63a6d68804c179c8496bbc73..1299cfe6ba345b7cbd07799d8cdc6cf4a1641caf 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -1110,7 +1110,8 @@ function _M:setupCommands()
 			end end
 		end end,
 		[{"_g","ctrl"}] = function() if config.settings.cheat then
-			game.player:setEffect(game.player.EFF_FROZEN, 10, {hp=rng.range(10,100)})
+			game:changeLevel(1,"town-irkkk")
+--			SET ui.Inventory into ShowStore & ShowInventory
 		end end,
 		[{"_f","ctrl"}] = function() if config.settings.cheat then
 			self.player.quests["love-melinda"] = nil
diff --git a/game/modules/tome/class/NicerTiles.lua b/game/modules/tome/class/NicerTiles.lua
index b44081c83ec693155154c6feee8bad5b35d7e64d..11c97dfe6e743f99360fe201d24e8c2b3dd6964f 100644
--- a/game/modules/tome/class/NicerTiles.lua
+++ b/game/modules/tome/class/NicerTiles.lua
@@ -200,6 +200,32 @@ function _M:niceTileWall3d(level, i, j, g, nt)
 	end
 end
 
+function _M:niceTileSingleWall(level, i, j, g, nt)
+	local type = nt.type
+	local kind = nt.use_subtype and "subtype" or "type"
+	local g5 = level.map:checkEntity(i, j,   Map.TERRAIN, kind) or type
+	local g8 = level.map:checkEntity(i, j-1, Map.TERRAIN, kind) or type
+	local g2 = level.map:checkEntity(i, j+1, Map.TERRAIN, kind) or type
+	local g4 = level.map:checkEntity(i-1, j, Map.TERRAIN, kind) or type
+	local g6 = level.map:checkEntity(i+1, j, Map.TERRAIN, kind) or type
+
+	if     g5 ~= g4 and g5 == g6 and g5 == g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["e_cross"]))
+	elseif g5 == g4 and g5 ~= g6 and g5 == g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["w_cross"]))
+	elseif g5 == g4 and g5 == g6 and g5 ~= g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["s_cross"]))
+	elseif g5 == g4 and g5 == g6 and g5 == g8 and g5 ~= g2 then self:replace(i, j, self:getTile(nt["n_cross"]))
+
+	elseif g5 ~= g4 and g5 == g6 and g5 == g8 and g5 ~= g2 then self:replace(i, j, self:getTile(nt["ne"]))
+	elseif g5 == g4 and g5 ~= g6 and g5 == g8 and g5 ~= g2 then self:replace(i, j, self:getTile(nt["nw"]))
+	elseif g5 ~= g4 and g5 == g6 and g5 ~= g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["se"]))
+	elseif g5 == g4 and g5 ~= g6 and g5 ~= g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["sw"]))
+
+	elseif g5 == g4 and g5 == g6 and g5 == g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["cross"]))
+
+	elseif g5 ~= g4 and g5 ~= g6 and g5 == g8 and g5 == g2 then self:replace(i, j, self:getTile(nt["v_full"]))
+	elseif g5 == g4 and g5 == g6 and g5 ~= g8 and g5 ~= g2  then self:replace(i, j, self:getTile(nt["h_full"]))
+	end
+end
+
 --- Make walls have a pseudo 3D effect & rounded corners
 function _M:niceTileRoundwall3d(level, i, j, g, nt)
 	local s = level.map:checkEntity(i, j, Map.TERRAIN, "type") or "wall"
@@ -365,6 +391,22 @@ grass_wm = { method="borders", type="grass", forbid={lava=true},
 	water7i={add_mos={{image="terrain/grass/grass_inner_7_%02d.png", display_x=-1, display_y=-1}}, min=1, max=1},
 	water9i={add_mos={{image="terrain/grass/grass_inner_9_%02d.png", display_x=1, display_y=-1}}, min=1, max=1},
 },
+jungle_grass = { method="borders", type="jungle_grass", forbid={lava=true, rock=true, grass=true},
+	default8={add_mos={{image="terrain/jungle/jungle_grass_2_%02d.png", display_y=-1}}, min=1, max=5},
+	default2={add_mos={{image="terrain/jungle/jungle_grass_8_%02d.png", display_y=1}}, min=1, max=5},
+	default4={add_mos={{image="terrain/jungle/jungle_grass_6_%02d.png", display_x=-1}}, min=1, max=5},
+	default6={add_mos={{image="terrain/jungle/jungle_grass_4_%02d.png", display_x=1}}, min=1, max=4},
+
+	default1={add_mos={{image="terrain/jungle/jungle_grass_9_%02d.png", display_x=-1, display_y=1}}, min=1, max=3},
+	default3={add_mos={{image="terrain/jungle/jungle_grass_7_%02d.png", display_x=1, display_y=1}}, min=1, max=3},
+	default7={add_mos={{image="terrain/jungle/jungle_grass_3_%02d.png", display_x=-1, display_y=-1}}, min=1, max=3},
+	default9={add_mos={{image="terrain/jungle/jungle_grass_1_%02d.png", display_x=1, display_y=-1}}, min=1, max=3},
+
+	default1i={add_mos={{image="terrain/jungle/jungle_grass_inner_1_%02d.png", display_x=-1, display_y=1}}, min=1, max=3},
+	default3i={add_mos={{image="terrain/jungle/jungle_grass_inner_3_%02d.png", display_x=1, display_y=1}}, min=1, max=3},
+	default7i={add_mos={{image="terrain/jungle/jungle_grass_inner_7_%02d.png", display_x=-1, display_y=-1}}, min=1, max=3},
+	default9i={add_mos={{image="terrain/jungle/jungle_grass_inner_9_%02d.png", display_x=1, display_y=-1}}, min=1, max=3},
+},
 sand = { method="borders", type="sand", forbid={grass=true, lava=true,},
 	default8={add_mos={{image="terrain/sand/sand_2_%02d.png", display_y=-1}}, min=1, max=5},
 	default2={add_mos={{image="terrain/sand/sand_8_%02d.png", display_y=1}}, min=1, max=5},
@@ -754,6 +796,34 @@ function _M:editTileSandWalls_def(level, i, j, g, nt)
 	self:editTileGenericSandWalls(level, i, j, g, defs[nt.def], defs[nt.def].type or "grass")
 end
 
+function _M:editTileSingleWall(level, i, j, g, nt, type)
+	type = type or nt.type
+	local kind = nt.use_subtype and "subtype" or "type"
+	local g5 = level.map:checkEntity(i, j,   Map.TERRAIN, kind) or type
+	local g8 = level.map:checkEntity(i, j-1, Map.TERRAIN, kind) or type
+	local g2 = level.map:checkEntity(i, j+1, Map.TERRAIN, kind) or type
+	local g4 = level.map:checkEntity(i-1, j, Map.TERRAIN, kind) or type
+	local g6 = level.map:checkEntity(i+1, j, Map.TERRAIN, kind) or type
+
+	local id = "swv:"..table.concat({g.define_as or "--",type,tostring(g1==g5),tostring(g2==g5),tostring(g8==g5),tostring(g4==g5),tostring(g6==g5)}, ",")
+
+	if     g5 ~= g4 and g5 == g6 and g5 == g8 and g5 == g2 then self:edit(i, j, id, nt["e_cross"])
+	elseif g5 == g4 and g5 ~= g6 and g5 == g8 and g5 == g2 then self:edit(i, j, id, nt["w_cross"])
+	elseif g5 == g4 and g5 == g6 and g5 ~= g8 and g5 == g2 then self:edit(i, j, id, nt["s_cross"])
+	elseif g5 == g4 and g5 == g6 and g5 == g8 and g5 ~= g2 then self:edit(i, j, id, nt["n_cross"])
+
+	elseif g5 ~= g4 and g5 == g6 and g5 == g8 and g5 ~= g2 then self:edit(i, j, id, nt["ne"])
+	elseif g5 == g4 and g5 ~= g6 and g5 == g8 and g5 ~= g2 then self:edit(i, j, id, nt["nw"])
+	elseif g5 ~= g4 and g5 == g6 and g5 ~= g8 and g5 == g2 then self:edit(i, j, id, nt["se"])
+	elseif g5 == g4 and g5 ~= g6 and g5 ~= g8 and g5 == g2 then self:edit(i, j, id, nt["sw"])
+
+	elseif g5 == g4 and g5 == g6 and g5 == g8 and g5 == g2 then self:edit(i, j, id, nt["cross"])
+
+	elseif g5 ~= g4 and g5 ~= g6 and g5 == g8 and g5 == g2 then self:edit(i, j, id, nt["v_full"])
+	elseif g5 == g4 and g5 == g6 and g5 ~= g8 and g5 ~= g2  then self:edit(i, j, id, nt["h_full"])
+	end
+end
+
 -- This array is precomputed, it holds the possible combinations of walls and the nice tile they generate
 -- The data is bit-encoded
 local full_wall3d = {
diff --git a/game/modules/tome/data/general/grids/jungle.lua b/game/modules/tome/data/general/grids/jungle.lua
index 0cd3e3ada8d7937b329dae48499867a0b1d5179c..41384b56a3d944daacef4127f63ea461297b43b9 100644
--- a/game/modules/tome/data/general/grids/jungle.lua
+++ b/game/modules/tome/data/general/grids/jungle.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-local grass_editer = { method="borders_def", def="grass"}
+local grass_editer = { method="borders_def", def="jungle_grass"}
 
 newEntity{
 	define_as = "JUNGLE_GRASS",
@@ -62,9 +62,106 @@ newEntity{
 	does_block_move = true,
 	block_sight = true,
 	dig = "GRASS",
-	nice_tiler = { method="replace", base={"TREE", 100, 1, 30}},
+	nice_tiler = { method="replace", base={"JUNGLE_TREE", 100, 1, 30}},
 	nice_editer = grass_editer,
 }
 for i = 1, 30 do
-	newEntity{ base="TREE", define_as = "TREE"..i, image = "terrain/jungle/jungle_grass_floor_01.png", add_displays = class:makeTrees("terrain/jungle/jungle_tree_", 17, 7)}
+	newEntity{ base="JUNGLE_TREE", define_as = "JUNGLE_TREE"..i, image = "terrain/jungle/jungle_grass_floor_01.png", add_displays = class:makeTrees("terrain/jungle/jungle_tree_", 17, 7)}
 end
+
+-----------------------------------------
+-- Grassy exits
+-----------------------------------------
+newEntity{
+	define_as = "JUNGLE_GRASS_UP_WILDERNESS",
+	type = "floor", subtype = "grass",
+	name = "exit to the worldmap", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/worldmap.png"}},
+	display = '<', color_r=255, color_g=0, color_b=255,
+	always_remember = true,
+	notice = true,
+	change_level = 1,
+	change_zone = "wilderness",
+	nice_editer = grass_editer,
+}
+
+newEntity{
+	define_as = "JUNGLE_GRASS_UP8",
+	type = "floor", subtype = "grass",
+	name = "way to the previous level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_8.png"}},
+	display = '<', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = -1,
+	nice_editer = grass_editer,
+}
+newEntity{
+	define_as = "JUNGLE_GRASS_UP2",
+	type = "floor", subtype = "grass",
+	name = "way to the previous level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_2.png"}},
+	display = '<', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = -1,
+	nice_editer = grass_editer,
+}
+newEntity{
+	define_as = "JUNGLE_GRASS_UP4",
+	type = "floor", subtype = "grass",
+	name = "way to the previous level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_4.png"}},
+	display = '<', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = -1,
+	nice_editer = grass_editer,
+}
+newEntity{
+	define_as = "JUNGLE_GRASS_UP6",
+	type = "floor", subtype = "grass",
+	name = "way to the previous level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_6.png"}},
+	display = '<', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = -1,
+	nice_editer = grass_editer,
+}
+
+newEntity{
+	define_as = "JUNGLE_GRASS_DOWN8",
+	type = "floor", subtype = "grass",
+	name = "way to the next level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_8.png"}},
+	display = '>', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = 1,
+	nice_editer = grass_editer,
+}
+newEntity{
+	define_as = "JUNGLE_GRASS_DOWN2",
+	type = "floor", subtype = "grass",
+	name = "way to the next level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_2.png"}},
+	display = '>', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = 1,
+	nice_editer = grass_editer,
+}
+newEntity{
+	define_as = "JUNGLE_GRASS_DOWN4",
+	type = "floor", subtype = "grass",
+	name = "way to the next level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_4.png"}},
+	display = '>', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = 1,
+	nice_editer = grass_editer,
+}
+newEntity{
+	define_as = "JUNGLE_GRASS_DOWN6",
+	type = "floor", subtype = "grass",
+	name = "way to the next level", image = "terrain/jungle/jungle_grass_floor_01.png", add_mos = {{image="terrain/way_next_6.png"}},
+	display = '>', color_r=255, color_g=255, color_b=0,
+	notice = true,
+	always_remember = true,
+	change_level = 1,
+	nice_editer = grass_editer,
+}
diff --git a/game/modules/tome/data/general/grids/jungle_hut.lua b/game/modules/tome/data/general/grids/jungle_hut.lua
new file mode 100644
index 0000000000000000000000000000000000000000..932525e1fdba30f2c8503cb9434f6a72a4fd89d1
--- /dev/null
+++ b/game/modules/tome/data/general/grids/jungle_hut.lua
@@ -0,0 +1,108 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+-----------------------------------------
+-- Basic floors
+-----------------------------------------
+newEntity{
+	define_as = "BAMBOO_HUT_FLOOR",
+	type = "floor", subtype = "bamboo hut",
+	name = "bamboo hut floor", image = "terrain/bamboo/hut_dirt_floor_01.png",
+	display = '.', color=colors.UMBER, back_color=colors.DARK_UMBER,
+	grow = "WALL",
+}
+
+-----------------------------------------
+-- Walls
+-----------------------------------------
+newEntity{
+	define_as = "BAMBOO_HUT_WALL",
+	type = "wall", subtype = "bamboo hut",
+	name = "bamboo wall", image = "terrain/bamboo/hut_dirt_floor_01.png",
+	display = '#', color=colors.LIGHT_UMBER, back_color=colors.DARK_UMBER,
+	always_remember = true,
+	does_block_move = true,
+	can_pass = {pass_wall=1},
+	block_sight = true,
+	air_level = -5,
+	dig = "BAMBOO_HUT_FLOOR",
+	nice_tiler = { method="singleWall", type="wall",
+		v_full={"BHW_V_FULL", 100, 1, 1},
+		h_full={"BHW_H_FULL", 20, 1, 8},
+		n_cross={"BHW_N_CROSS", 100, 1, 1},
+		s_cross={"BHW_S_CROSS", 100, 1, 1},
+		e_cross={"BHW_E_CROSS", 100, 1, 1},
+		w_cross={"BHW_W_CROSS", 100, 1, 1},
+		cross={"BHW_CROSS", 100, 1, 1},
+		ne={"BHW_NE", 100, 1, 1},
+		nw={"BHW_NW", 100, 1, 1},
+		se={"BHW_SE", 100, 1, 1},
+		sw={"BHW_SW", 100, 1, 1},
+	},
+}
+
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_V_FULL1", add_displays={class.new{image="terrain/bamboo/hut_wall_full_hor_01.png"}}}
+
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_H_FULL", add_displays={class.new{image="terrain/bamboo/hut_wall_bottom_hor_01.png"}, class.new{image="terrain/bamboo/hut_wall_top_hor_01.png", display_y=-1, z=16}}}
+local decors = {"wall_decor_skin_b_01","wall_decor_skin_a_01","wall_decor_spears_01","wall_decor_sticks_01","wall_decor_mask_c_01","wall_decor_mask_b_01","wall_decor_mask_a_01","wall_decor_3_masks_01"}
+for i = 1, 8 do
+	newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_H_FULL"..i, add_displays={class.new{image="terrain/bamboo/hut_wall_bottom_hor_01.png", add_mos={{image="terrain/bamboo/"..decors[i]..".png"}}}, class.new{image="terrain/bamboo/hut_wall_top_hor_01.png", display_y=-1, z=16}}}
+end
+
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_N_CROSS1", add_displays={class.new{image="terrain/bamboo/hut_wall_bottom_hor_01.png"}, class.new{image="terrain/bamboo/hut_corner_vert_south_4_1_2_top_01.png", display_y=-1, z=16, add_mos={{image="terrain/bamboo/hut_wall_top_hor_01.png", display_y=-1}}}}}
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_S_CROSS1", add_displays={class.new{image="terrain/bamboo/hut_wall_bottom_hor_01.png"}, class.new{image="terrain/bamboo/hut_wall_full_hor_01.png", z=16, add_mos={{image="terrain/bamboo/hut_wall_top_hor_01.png", display_y=-1},{image="terrain/bamboo/hut_corner_vert_4_7_8_top_01.png", display_y=-1}}}}}
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_E_CROSS1", add_displays={class.new{z=17, image="terrain/bamboo/hut_wall_full_hor_01.png"}, class.new{image="terrain/bamboo/wall_hor_divider_left_bottom_01.png", z=16, add_mos={{image="terrain/bamboo/wall_hor_divider_left_top_01.png", display_y=-1}}}}}
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_W_CROSS1", add_displays={class.new{z=17, image="terrain/bamboo/hut_wall_full_hor_01.png"}, class.new{image="terrain/bamboo/wall_hor_divider_right_bottom_01.png", z=16, add_mos={{image="terrain/bamboo/wall_hor_divider_right_top_01.png", display_y=-1}}}}}
+
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_CROSS1", add_displays={class.new{image="terrain/bamboo/hut_wall_bottom_hor_01.png"}, class.new{image="terrain/bamboo/hut_wall_top_hor_01.png", z=16, display_y=-1, add_mos={{image="terrain/bamboo/hut_wall_full_hor_01.png"},{image="terrain/bamboo/hut_corner_vert_4_7_8_top_01.png", display_y=-1}}}}}
+
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_NE1", add_displays={class.new{image="terrain/bamboo/hut_corner_4_1_2_bottom_01.png"}, class.new{image="terrain/bamboo/hut_corner_4_1_2_top_01.png", display_y=-1, z=16}}}
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_NW1", add_displays={class.new{image="terrain/bamboo/hut_corner_6_3_2_bottom_01.png"}, class.new{image="terrain/bamboo/hut_corner_6_3_2_top_01.png", display_y=-1, z=16}}}
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_SE1", add_displays={class.new{image="terrain/bamboo/hut_corner_4_7_8_bottom_01.png"}, class.new{image="terrain/bamboo/hut_corner_4_7_8_top_01.png", display_y=-1, z=16}}}
+newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_SW1", add_displays={class.new{image="terrain/bamboo/hut_corner_8_9_6_bottom_01.png"}, class.new{image="terrain/bamboo/hut_corner_8_9_6_top_01.png", display_y=-1, z=16}}}
+
+-----------------------------------------
+-- Doors
+-----------------------------------------
+newEntity{
+	define_as = "BAMBOO_HUT_DOOR",
+	type = "wall", subtype = "floor",
+	name = "door", image = "terrain/bamboo/hut_dirt_floor_01.png",
+	display = '+', color=colors.LIGHT_UMBER, back_color=colors.DARK_UMBER,
+	nice_tiler = { method="door3d", north_south="BAMBOO_HUT_DOOR_VERT", west_east="BAMBOO_HUT_DOOR_HORIZ" },
+	notice = true,
+	always_remember = true,
+	block_sight = true,
+	is_door = true,
+	door_opened = "BAMBOO_HUT_DOOR_OPEN",
+	dig = "FLOOR",
+}
+newEntity{
+	define_as = "BAMBOO_HUT_DOOR_OPEN",
+	type = "wall", subtype = "floor",
+	name = "open door", image = "terrain/bamboo/hut_dirt_floor_01.png",
+	display = "'", color=colors.LIGHT_UMBER, back_color=colors.DARK_UMBER,
+	always_remember = true,
+	is_door = true,
+	door_closed = "BAMBOO_HUT_DOOR",
+}
+newEntity{ base = "BAMBOO_HUT_DOOR", define_as = "BAMBOO_HUT_DOOR_HORIZ", add_displays = {class.new{image="terrain/bamboo/hut_wall_door_closed_hor_01.png", z=17}, class.new{image="terrain/bamboo/hut_wall_top_hor_01.png", z=18, display_y=-1}}, door_opened = "BAMBOO_HUT_DOOR_HORIZ_OPEN"}
+newEntity{ base = "BAMBOO_HUT_DOOR_OPEN", define_as = "BAMBOO_HUT_DOOR_HORIZ_OPEN", add_displays = {class.new{image="terrain/bamboo/hut_wall_door_open_hor_01.png", z=17}, class.new{image="terrain/bamboo/hut_wall_top_hor_01.png", z=18, display_y=-1}}, door_closed = "BAMBOO_HUT_DOOR_HORIZ"}
+newEntity{ base = "BAMBOO_HUT_DOOR", define_as = "BAMBOO_HUT_DOOR_VERT", add_displays = {class.new{image="terrain/bamboo/palm_door_closed_ver_01.png"}, class.new{image="terrain/bamboo/hut_wall_full_hor_01.png", z=18}}, door_opened = "BAMBOO_HUT_DOOR_OPEN_VERT", dig = "BAMBOO_HUT_DOOR_OPEN_VERT"}
+newEntity{ base = "BAMBOO_HUT_DOOR_OPEN", define_as = "BAMBOO_HUT_DOOR_OPEN_VERT", add_displays = {class.new{image="terrain/bamboo/palm_door_open_bottom_ver_01.png"}, class.new{image="terrain/bamboo/palm_door_open_top_ver_01.png", z=18, display_y=-1, add_mos={{image="terrain/bamboo/hut_wall_full_hor_01.png"}}}}, door_closed = "BAMBOO_HUT_DOOR_VERT"}
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_hor_wall_bottom_aligned_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_hor_wall_bottom_aligned_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..aeb04760b6d265f0805258a5a61dbb35627c9786
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_hor_wall_bottom_aligned_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_middle_floor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_middle_floor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..26d11997f816eb9ededbc41a5af290bb669726c6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_middle_floor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_vert_wall_aligned_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_vert_wall_aligned_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..82f5f9e767139211094fc51f635701ccc8bca5b9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_vert_wall_aligned_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_vert_wall_aligned_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_vert_wall_aligned_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..21d62e335f16dc62c79c53b2b4ca7bc104540556
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/bed_vert_wall_aligned_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1c1d35c610785168e6a5d0bbeff5253f27721fd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_b_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_b_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b503795389ae6af6c79085b8aefd86f45da582de
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_b_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_c_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_c_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..55b7e46056ea7d52761786ed47fa9c185ba3ca30
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/floor_deco_cooking_pit_c_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_1_2_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_1_2_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..68b971b09f70f472c74398135308c0154385addc
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_1_2_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_1_2_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_1_2_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..6858429fa1f384a9dc4d802f7480b89485cb9257
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_1_2_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_7_8_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_7_8_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f1520f8bd3d7e6913fea38d9b529bc86e43c0ae
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_7_8_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_7_8_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_7_8_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..85b0a478db6f2d6a96bd2cb4144d9f2b620968fb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_4_7_8_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_6_3_2_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_6_3_2_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..3463850c7a31c01a18482b4b91000d2e8971378b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_6_3_2_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_6_3_2_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_6_3_2_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..474f2ea617075135559ce8d133d209f8ecaa404d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_6_3_2_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_8_9_6_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_8_9_6_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b16517dd96648d3895969a6815a06ee4ffeab7f5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_8_9_6_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_8_9_6_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_8_9_6_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1cb9e8c777cc0826228233152a60ba7449df134
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_8_9_6_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_hor_4_1_2_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_hor_4_1_2_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..2126029b7bcb061319128332f680f764b2f7e426
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_hor_4_1_2_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_hor_6_3_2_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_hor_6_3_2_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7870aa0496f7cfcca9130d30358af35d60baa789
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_hor_6_3_2_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_4_7_8_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_4_7_8_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..57c9395cd77ca8527f7c749194feb721f5ff2a7b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_4_7_8_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_8_9_6_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_8_9_6_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..92b66396ee67c7cb9b751f610cea19f219354ec4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_8_9_6_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_south_4_1_2_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_south_4_1_2_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e90e88f499a44603765d8e476862d3ab3aab6f2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_south_4_1_2_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_south_6_3_2_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_south_6_3_2_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7abe0b6a0629d942c35831e7886fdc5dd097d90e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_corner_vert_south_6_3_2_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_dirt_floor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_dirt_floor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..946e11d837e88cbc297590be9551b65fe73ec760
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_dirt_floor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_bottom_hor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_bottom_hor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2a9a1d53c642e4fb41459179c0c733222566332
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_bottom_hor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_door_closed_hor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_door_closed_hor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..07ce76f7f9ce6ee8fc42c9143975920c301e7bf4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_door_closed_hor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_door_open_hor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_door_open_hor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..031e2a9fb61b734d60245d077ecae9303cb16669
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_door_open_hor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_full_hor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_full_hor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..736c54fcd2782d29e3055b330328f7d35264a26d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_full_hor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_top_hor_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_top_hor_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f073732cb8f899f64042a9b9dc3d2b56aee5c071
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/hut_wall_top_hor_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_closed_ver_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_closed_ver_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..8650ae85ce4f982faeec37ebcc0e9156fd9b3114
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_closed_ver_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_open_bottom_ver_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_open_bottom_ver_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b43270571a9fe247101854dbc5884079607571d1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_open_bottom_ver_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_open_top_ver_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_open_top_ver_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..2464e38809193d2534d28bcba830b6f0a0dc771d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/palm_door_open_top_ver_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_left_vert_end_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_left_vert_end_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..9de6bdbc99f89d12e8422e156081ce1b1bcbe82d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_left_vert_end_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_right_vert_end_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_right_vert_end_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..adec49d8e03771601386d129f32a1cb0b7bd65d8
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_right_vert_end_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_right_vert_end_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_right_vert_end_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2ea79df109d4002ee1fe3cbdf4e9fe59e34cbb5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/south_right_vert_end_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_3_masks_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_3_masks_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad6ac8d05f2195db151e835d4f06afb942a92c29
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_3_masks_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e57da42b62f421e84877258b6fa1a44348801e3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_b_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_b_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..865879333a013569fbe82a5dcad4b476b759ff14
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_b_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_c_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_c_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..48f03fe89b85221771e3fdddeeb1978f00aaf738
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_mask_c_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_skin_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_skin_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fac01bfaa7b8b857e9b4226442fe0a3a6aaee16
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_skin_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_skin_b_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_skin_b_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..99c4b7c013498c0195392ad8807bd44e80d0b8da
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_skin_b_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_spears_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_spears_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..59522e5aab57690717d902c7560717dc1ed32d76
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_spears_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_sticks_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_sticks_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb350d94f1d858bd618656e9ebc8ea428ecd5203
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_decor_sticks_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_left_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_left_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b740862713d2027586fb489baf7bebd48a044540
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_left_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_left_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_left_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..64186c20449b1b6f891e6c502dd278126a7e05ea
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_left_top_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_right_bottom_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_right_bottom_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f543d91f27e15f124b7714bebc7687434b902221
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_right_bottom_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_right_top_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_right_top_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..da8ef4702d70be30081dd84439bf841e699ed545
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bamboo/wall_hor_divider_right_top_01.png differ
diff --git a/game/modules/tome/data/maps/towns/irkkk.lua b/game/modules/tome/data/maps/towns/irkkk.lua
new file mode 100644
index 0000000000000000000000000000000000000000..64d9fe2a966aea42685c9d31c5f31c5554f5268a
--- /dev/null
+++ b/game/modules/tome/data/maps/towns/irkkk.lua
@@ -0,0 +1,97 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+startx = 0
+starty = 40
+endx = 0
+endy = 40
+
+-- defineTile section
+defineTile("#", "BAMBOO_HUT_WALL")
+defineTile("+", "BAMBOO_HUT_DOOR")
+defineTile("~", "DEEP_WATER")
+defineTile("<", "JUNGLE_GRASS_UP_WILDERNESS")
+defineTile("_", "BAMBOO_HUT_FLOOR")
+defineTile(".", "JUNGLE_GRASS")
+defineTile("t", "JUNGLE_TREE")
+defineTile("*", "BAMBOO_HUT_COOKING3")
+
+--defineTile("1", "HARDWALL", nil, nil, "CLOTH_ARMOR_STORE")
+--defineTile("2", "HARDWALL", nil, nil, "LIGHT_ARMOR_STORE")
+--defineTile("3", "HARDWALL", nil, nil, "STAFF_WEAPON_STORE")
+--defineTile("4", "HARDWALL", nil, nil, "SWORD_WEAPON_STORE")
+--defineTile("5", "HARDWALL", nil, nil, "RUNEMASTER")
+--defineTile("a", "HARDWALL", nil, nil, "ALCHEMIST")
+
+-- addSpot section
+
+-- addZone section
+
+-- ASCII map section
+return [[
+~~~~....................t..........ttttttttt......
+~~~................tt...t..................t...tt.
+~~~...............ttt....t..t....tt...........tt..
+~~~.....................tttttt....tttttttttt.ttt..
+~~~..........ttt.........ttttttt.ttt....t...tt..t.
+~~~.........tttt.....tt...ttt......ttt..........t.
+~~~.........tttt.....tt.........t........t..t.....
+~~~..........tt......ttttt........t.......ttt..t..
+~~~..........t........tt.tt...ttttt.......t...t...
+~~~...................ttt...tt....t.tt...tt...t...
+~~~~..................t..t..t....t.......tt...t...
+~~~~..................t.t.tt.....tttt...t.t...t...
+~~~~~....................t..tt...t..t.tt..t..t.t..
+~~~~~............t........tt.ttt.t...tt...t..t.t..
+~~~~~......................t...ttt....t...t....t..
+~~~~~.............tt........#####tt.t..tt.t.t..t..
+~~~~~~............t.........#___#.tt.t.tt...t..t..
+~~~~~~..........ttt.........#___#...tt.....tt...t.
+~~~~~~..........tt..........#___#.t..tt....tt...t.
+~~~~~~..........t...........##+##t...t.tt..tt.t.t.
+~~~~~~............tt..................t.....t.t.t.
+~~~~~.................................t...t.t.t.tt
+~~~~~......................____.......t..ttt.t..tt
+~~~~~.....................______.......ttt.t.t..t.
+~~~~~.....###..#####.....________.....tt.ttttt.tt.
+~~~~~.....#_#..#___###...___**___......tt.tt.ttt..
+~~~~~~....#_####_____+...___**___.......tt..ttt...
+~~~~~~....#________###...________.......tt...ttt..
+~~~~~~....#___######......______.............tttt.
+~~~~~~~...#_###............____..............t.tt.
+~~~~~~~...###..............................t.t..t.
+~~~~~~~..................................tt.tt..t.
+~~~~~~~.....................#+##..........t.ttt...
+~~~~~~......................#__#..........t.ttt..t
+~~~~~~......................#__#..........t.t.tt.t
+~~~~~~...................####__####...........tt..
+~~~~~~...................#________#..........t.t.t
+~~~~~~...................#________#........t.t.t.t
+~~~~~~...................####__####........t...t.t
+~~~~~~......................#__#............t..ttt
+~~~~~.......................#__#...............tt.
+~~~~~.......................####.............t.tt.
+~~~~~~.......................................t..tt
+~~~~~~~.....................................tt..t.
+~~~~~~~......................................t..t.
+~~~~~~~~....................................tt.tt.
+~~~~~~~~.....................................t....
+~~~~~~~~~........................................t
+~~~~~~~~~~..................................t....t
+~~~~~~~~~~~~~...................................t.]]
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index 9d34085021f4f139dfd0e3a959b4daf3f8d5e24e..2899c5c7018eb8b88670c9f310864d977446d512 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -829,7 +829,7 @@ newEffect{
 newEffect{
 	name = "WILD_SPEED", image = "talents/infusion__movement.png",
 	desc = "Wild Speed",
-	long_desc = function(self, eff) return ("The movement infusion allows you to run at extreme fast pace. Any other action other than movement will cancel it .Movement is %d%% faster."):format(eff.power) end,
+	long_desc = function(self, eff) return ("The movement infusion allows you to run at extreme fast pace. Any other action other than movement will cancel it. Movement is %d%% faster."):format(eff.power) end,
 	type = "physical",
 	subtype = { nature=true, speed=true },
 	status = "beneficial",
@@ -838,13 +838,13 @@ newEffect{
 	on_lose = function(self, err) return "#Target# slows down.", "-Wild Speed" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("wild_speed", 1)
-		eff.moveid = self:addTemporaryValue("global_speed_add", eff.power/100)
+		eff.moveid = self:addTemporaryValue("movement_speed", eff.power/100)
 		if self.ai_state then eff.aiid = self:addTemporaryValue("ai_state", {no_talents=1}) end -- Make AI not use talents while using it
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("wild_speed", eff.tmpid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("global_speed_add", eff.moveid)
+		self:removeTemporaryValue("movement_speed", eff.moveid)
 	end,
 }
 
@@ -882,7 +882,7 @@ newEffect{
 	on_lose = function(self, err) return "#Target# is back to normal.", "-Lightning Speed" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("lightning_speed", 1)
-		eff.moveid = self:addTemporaryValue("global_speed_add", eff.power/100)
+		eff.moveid = self:addTemporaryValue("movement_speed", eff.power/100)
 		eff.resistsid = self:addTemporaryValue("resists", {
 			[DamageType.PHYSICAL]=30,
 			[DamageType.LIGHTNING]=100,
@@ -895,7 +895,7 @@ newEffect{
 		self:removeTemporaryValue("lightning_speed", eff.tmpid)
 		self:removeTemporaryValue("resists", eff.resistsid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("global_speed_add", eff.moveid)
+		self:removeTemporaryValue("movement_speed", eff.moveid)
 	end,
 }
 
diff --git a/game/modules/tome/data/zones/test/zone.lua b/game/modules/tome/data/zones/test/zone.lua
index b6352c8b3ae032ce1556b32ea3a3b04fb2cbd21e..30dca68f1282cd1a41aaefa82ee605edb29c9a6c 100644
--- a/game/modules/tome/data/zones/test/zone.lua
+++ b/game/modules/tome/data/zones/test/zone.lua
@@ -30,7 +30,7 @@ return {
 	no_level_connectivity = true,
 	generator =  {
 		map = {
---[[
+-- [[
 			class = "engine.generator.map.Building",
 			max_block_w = 15, max_block_h = 15,
 			max_building_w = 5, max_building_h = 5,
@@ -39,7 +39,7 @@ return {
 			wall = "BAMBOO_HUT_WALL",
 			up = "FLAT_UP6",
 			down = "FLAT_DOWN4",
-			door = "BAMBOO_HUT_WALL",
+			door = "BAMBOO_HUT_DOOR",
 --]]
 --[[
 			class = "engine.generator.map.Forest",
@@ -53,16 +53,16 @@ return {
 			down = "GRASS_DOWN6",
 			door = "GRASS",
 --]]
--- [[
+--[[
 			class = "engine.generator.map.Roomer",
 			nb_rooms = 10,
 			edge_entrances = {4,6},
 			rooms = {"forest_clearing"},
 			['.'] = {"JUNGLE_GRASS","JUNGLE_GRASS","JUNGLE_GRASS","JUNGLE_DIRT","JUNGLE_DIRT",},
 			['#'] = "JUNGLE_TREE",
-			up = "GRASS_UP4",
-			down = "GRASS_DOWN6",
-			door = "GRASS",
+			up = "JUNGLE_GRASS_UP4",
+			down = "JUNGLE_GRASS_DOWN6",
+			door = "JUNGLE_GRASS",
 --]]
 		},
 		actor = {
diff --git a/game/modules/tome/data/zones/town-irkkk/grids.lua b/game/modules/tome/data/zones/town-irkkk/grids.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a09a949a98fe7c0fe86da1823ac7a6d792ed6875
--- /dev/null
+++ b/game/modules/tome/data/zones/town-irkkk/grids.lua
@@ -0,0 +1,28 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+load("/data/general/grids/basic.lua")
+load("/data/general/grids/jungle.lua")
+load("/data/general/grids/jungle_hut.lua")
+load("/data/general/grids/water.lua")
+
+newEntity{ base="BAMBOO_HUT_FLOOR", define_as="BAMBOO_HUT_COOKING3",
+	name = "cooking pit", display = '*',
+	add_mos = {{image="terrain/bamboo/floor_deco_cooking_pit_c_01.png"}},
+}
diff --git a/game/modules/tome/data/zones/town-irkkk/npcs.lua b/game/modules/tome/data/zones/town-irkkk/npcs.lua
new file mode 100644
index 0000000000000000000000000000000000000000..f6e892ce91849c112718f4470e10b3e442f718aa
--- /dev/null
+++ b/game/modules/tome/data/zones/town-irkkk/npcs.lua
@@ -0,0 +1,75 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+load("/data/general/npcs/gwelgoroth.lua", function(e) if e.rarity then e.derth_rarity, e.rarity = e.rarity, nil end end)
+
+local Talents = require("engine.interface.ActorTalents")
+
+newEntity{
+	define_as = "BASE_NPC_ELVALA_TOWN",
+	type = "humanoid", subtype = "shalore",
+	display = "p", color=colors.WHITE,
+	faction = "shalore",
+	anger_emote = "Catch @himher@!",
+
+	combat = { dam=resolvers.rngavg(1,2), atk=2, apr=0, dammod={str=0.4} },
+
+	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
+	lite = 3,
+
+	life_rating = 10,
+	rank = 2,
+	size_category = 3,
+
+	open_door = true,
+
+	resolvers.racial(),
+	resolvers.inscriptions(1, "rune"),
+
+	autolevel = "warrior",
+	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
+	stats = { str=12, dex=8, mag=6, con=10 },
+
+	emote_random = resolvers.emote_random{allow_backup_guardian=true},
+}
+
+newEntity{ base = "BASE_NPC_ELVALA_TOWN",
+	name = "elvala guard", color=colors.LIGHT_UMBER,
+	desc = [[A stern-looking guard, he will not let you disturb the town.]],
+	level_range = {1, nil}, exp_worth = 1,
+	rarity = 3,
+	max_life = resolvers.rngavg(70,80),
+	resolvers.equip{
+		{type="weapon", subtype="longsword", autoreq=true},
+		{type="armor", subtype="shield", autoreq=true},
+	},
+	combat_armor = 2, combat_def = 0,
+	resolvers.talents{ [Talents.T_RUSH]=1, [Talents.T_PERFECT_STRIKE]=1, },
+}
+
+newEntity{ base = "BASE_NPC_ELVALA_TOWN",
+	name = "shalore rune master", color=colors.RED,
+	desc = [[A tall elf, his skin covered in runes.]],
+	level_range = {1, nil}, exp_worth = 1,
+	rarity = 3,
+	max_life = resolvers.rngavg(50,60),
+	ai_state = { talent_in=1, },
+	autolevel = "caster",
+	resolvers.inscriptions(3, {"heat beam rune", "frozen spear rune", "acid wave rune", "lightning rune"}),
+}
diff --git a/game/modules/tome/data/zones/town-irkkk/objects.lua b/game/modules/tome/data/zones/town-irkkk/objects.lua
new file mode 100644
index 0000000000000000000000000000000000000000..58f71197d9a82938c17f94371775f7de39552e96
--- /dev/null
+++ b/game/modules/tome/data/zones/town-irkkk/objects.lua
@@ -0,0 +1,20 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+load("/data/general/objects/objects-maj-eyal.lua")
diff --git a/game/modules/tome/data/zones/town-irkkk/traps.lua b/game/modules/tome/data/zones/town-irkkk/traps.lua
new file mode 100644
index 0000000000000000000000000000000000000000..66f651dacfeb28707342a76ad2950976115c2278
--- /dev/null
+++ b/game/modules/tome/data/zones/town-irkkk/traps.lua
@@ -0,0 +1,54 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+load("/data/general/traps/store.lua")
+
+newEntity{ base = "BASE_STORE", define_as = "CLOTH_ARMOR_STORE",
+	name="Tailor",
+	display='2', color=colors.RED,
+	resolvers.store("CLOTH_ARMOR", "shalore", "store/shop_door.png", "store/shop_sign_tailor.png"),
+}
+newEntity{ base = "BASE_STORE", define_as = "LIGHT_ARMOR_STORE",
+	name="Tanner",
+	display='2', color=colors.UMBER,
+	resolvers.store("LIGHT_ARMOR", "shalore", "store/shop_door.png", "store/shop_sign_tanner.png"),
+}
+
+newEntity{ base = "BASE_STORE", define_as = "SWORD_WEAPON_STORE",
+	name="Swordsmith",
+	display='3', color=colors.UMBER,
+	resolvers.store("SWORD_WEAPON", "shalore", "store/shop_door.png", "store/shop_sign_swordsmith.png"),
+}
+newEntity{ base = "BASE_STORE", define_as = "STAFF_WEAPON_STORE",
+	name="Staff carver",
+	display='3', color=colors.RED,
+	resolvers.store("STAFF_WEAPON", "shalore", "store/shop_door.png", "store/shop_sign_staves.png"),
+}
+
+newEntity{ base = "BASE_STORE", define_as = "RUNEMASTER",
+	name="Runemaster",
+	display='5', color=colors.RED,
+	resolvers.store("SCROLL", "shalore", "store/shop_door.png", "store/shop_sign_alchemist.png"),
+}
+
+newEntity{ base = "BASE_STORE", define_as = "ALCHEMIST",
+	name="Home of Marus the Alchemist",
+	display='*', color=colors.UMBER, image = "store/shop_door_barred.png",
+	resolvers.chatfeature("alchemist-elvala", "allied-kingdoms"),
+}
diff --git a/game/modules/tome/data/zones/town-irkkk/zone.lua b/game/modules/tome/data/zones/town-irkkk/zone.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d466741b7c4ab344879da8f750bb0e2b429edb73
--- /dev/null
+++ b/game/modules/tome/data/zones/town-irkkk/zone.lua
@@ -0,0 +1,51 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+return {
+	name = "Irkkk",
+	level_range = {1, 15},
+	level_scheme = "player",
+	actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end,
+	update_base_level_on_enter = true,
+	max_level = 1,
+	width = 196, height = 80,
+	decay = {300, 800, only={object=true}, no_respawn=true},
+	persistent = "zone",
+	all_remembered = true,
+	day_night = true,
+	all_lited = true,
+	ambient_music = "Virtue lost.ogg",
+
+	max_material_level = 2,
+
+	generator =  {
+		map = {
+			class = "engine.generator.map.Static",
+			map = "towns/irkkk",
+		},
+		actor = {
+			class = "engine.generator.actor.Random",
+			nb_npc = {10, 10},
+		},
+		object = {
+			class = "engine.generator.object.Random",
+			nb_object = {0, 0},
+		},
+	},
+}
diff --git a/game/modules/tome/data/zones/wilderness/grids.lua b/game/modules/tome/data/zones/wilderness/grids.lua
index 4caf70d2ab661c63bf75adc982716a8cd28a7250..b17efbfe3ec370ec39ff8b2f2e3548bb34dd98d8 100644
--- a/game/modules/tome/data/zones/wilderness/grids.lua
+++ b/game/modules/tome/data/zones/wilderness/grids.lua
@@ -301,7 +301,7 @@ newEntity{ base="TOWN", define_as = "TOWN_IRKKK",
 	name = "Irkkk (Town)", add_mos = {{image="terrain/village_01.png"}},
 	desc = "Yeek Wayist capital",
 	change_level = false,
---	change_zone="town-irrk",
+	change_zone="town-irkkk",
 }
 newEntity{ base="TOWN", define_as = "TOWN_ZIGUR",
 	name = "Zigur (Town)", add_mos = {{image="terrain/village_01.png"}},