diff --git a/CONTRIBUTING b/CONTRIBUTING
index 6bcb6c70bec7ad70b58650220d653c19ec07ef3c..81e7338cd58b0db8dc744c2573ebf72a95591971 100644
--- a/CONTRIBUTING
+++ b/CONTRIBUTING
@@ -5,7 +5,7 @@ To contribute I'll ask people that contribute to release copyright to me,
 or to give me right to relicense the code as I see fit .
 (You can add a "as long as its opensource" if you wish, it'll never change :)
 
-The reason for that is to avoid the headhache that angband had with it's
+The reason for that is to avoid the headhache that angband had with its
 free-but-not-modern licence. This way if a better licence pops up I can
 use it easily without having to hunt everybody that contributed and that
 might have since then disappeared.
diff --git a/COPYING-TILES b/COPYING-TILES
index ad78805f8eaf04d2683ea60b9ecead9e68ecf80f..833089f524579d9cdc66963f87d0ebce2fd3adbc 100644
--- a/COPYING-TILES
+++ b/COPYING-TILES
@@ -1,4 +1,4 @@
-All the tiles of the "shockbolt" tileset, located in all the "gfx/shockbolt" and "gfx/lore"
+All the tiles located in all the "gfx/shockbolt", "gfx/lore" "gfx/achievements"
 folders are granted to use with the Tales of Maj'Eyal game only.
 
 Please contact darkgod@te4.org for more informations.
diff --git a/CREDITS b/CREDITS
index eb860f07ac2ecc7409726950b4ed334fa1a37043..bc043e992f9b5024b77fa3a0b8c75cdaba87ea91 100644
--- a/CREDITS
+++ b/CREDITS
@@ -16,14 +16,17 @@ General:
 - Benli for classes, zones, ...
 - Hetdegon for Arena and other such nice things
 - Tiger Eye for auto-explore and FOV code
-- PureQuestion for npcs and artifact work
+- PureQuestion for npcs and artifacts
 - Hachem Muche for many patches and scaling issues
 - Dekar for artifacts, debug help (slave? ;> ), icons, ...
+- Shibari for artifacts and talents balancing
+- Sage Acrin
 
 Lore:
 - Darren Grey
 - Burb Lulls
 - Gwai
+- Ron Billingsley
 
 Graphics:
 - Shockbolt (Raymond Gaustadnes) http://shockbolt.deviantart.com
diff --git a/build/options.lua b/build/options.lua
index d8f399a8241005be78ef839958cc36debd3fb683..5d9e4cca3f305f91cd767e8a99d7ae28ca8d5893 100644
--- a/build/options.lua
+++ b/build/options.lua
@@ -61,4 +61,9 @@ newoption {
 	description = "Steam integration"
 }
 
+newoption {
+	trigger	    = "wincross",
+	description = "Enables cross-compilation for windows (from linux)"
+}
+
 _OPTIONS.lua = _OPTIONS.lua or "jit2"
diff --git a/build/runner.lua b/build/runner.lua
index 94c97d12cb1aa478c50907f65944d2303bc12317..d01589755b720cc552691aaa1febe03ef4fd2143 100644
--- a/build/runner.lua
+++ b/build/runner.lua
@@ -28,6 +28,10 @@ project "TEngineRunner"
 		links { "dl", "SDL", "SDL_ttf", "SDL_image", "SDL_mixer", "GL", "GLU", "m", "pthread" }
 		defines { [[TENGINE_HOME_PATH='".t-engine"']], 'SELFEXE_LINUX'  }
 
+	configuration "bsd"
+		links { "SDL", "SDL_ttf", "SDL_image", "SDL_mixer", "GL", "GLU", "m", "pthread" }
+		defines { [[TENGINE_HOME_PATH='".t-engine"']], 'SELFEXE_BSD'  }
+
 	configuration "windows"
 		links { "mingw32", "SDLmain", "SDL", "SDL_ttf", "SDL_image", "SDL_mixer", "OPENGL32", "GLU32", "wsock32" }
 		defines { [[TENGINE_HOME_PATH='"T-Engine"']], 'SELFEXE_WINDOWS'  }
@@ -56,6 +60,9 @@ project "te4runner"
 
 	configuration "linux"
 		defines { [[TENGINE_HOME_PATH='".t-engine"']], 'SELFEXE_LINUX'  }
+	configuration "bsd"
+		defines { [[TENGINE_HOME_PATH='".t-engine"']], 'SELFEXE_BSD'  }
+
 	configuration "windows"
 		defines { [[TENGINE_HOME_PATH='"T-Engine"']], 'SELFEXE_WINDOWS'  }
 	configuration "macosx"
@@ -78,6 +85,8 @@ project "runner-physfs"
 
 	configuration "linux"
 		files { "../src/physfs/platform/unix.c", "../src/physfs/platform/posix.c",  }
+	configuration "bsd"
+		files { "../src/physfs/platform/unix.c", "../src/physfs/platform/posix.c",  }
 	configuration "windows"
 		files { "../src/physfs/platform/windows.c",  }
 	configuration "macosx"
diff --git a/build/te4core.lua b/build/te4core.lua
index 1ae76f1697703a914e46140e3c76ce84de1bc10b..439d889d3d6f225ca83a730098cc1902602bc92f 100644
--- a/build/te4core.lua
+++ b/build/te4core.lua
@@ -40,6 +40,7 @@ project "TEngine"
 	links { "physfs", "lua".._OPTIONS.lua, "fov", "luasocket", "luaprofiler", "lpeg", "tcodimport", "lxp", "expatstatic", "luamd5", "luazlib", "luabitop", "te4-bzip" }
 	defines { "_DEFAULT_VIDEOMODE_FLAGS_='SDL_HWSURFACE|SDL_DOUBLEBUF'" }
 	defines { [[TENGINE_HOME_PATH='".t-engine"']], "TE4CORE_VERSION="..TE4CORE_VERSION }
+	buildoptions { "-O3" }
 
 	links { "m" }
 
@@ -49,6 +50,10 @@ project "TEngine"
 		dofile("../steamworks/build/steam-build.lua")
 	end
 
+	if _OPTIONS.wincross then
+		prelinkcommands { "i686-pc-mingw32-ranlib ../bin/Debug/*.a" }
+	end
+
 	configuration "macosx"
 		files { "../src/mac/SDL*" }
 		includedirs {
@@ -95,9 +100,13 @@ project "TEngine"
 		links { "IOKit" }
 
 	configuration "windows"
-		links { "mingw32", "SDL2main", "SDL2", "SDL2_ttf", "SDL2_image", "openal32", "vorbisfile", "OPENGL32", "GLU32", "wsock32", "png" }
+		links { "mingw32", "SDL2main", "SDL2", "SDL2_ttf", "SDL2_image", "OpenAL32", "vorbisfile", "opengl32", "glu32", "wsock32", "png" }
 		defines { [[TENGINE_HOME_PATH='"T-Engine"']], 'SELFEXE_WINDOWS'  }
-		prebuildcommands { "windres ../src/windows/icon.rc -O coff -o ../src/windows/icon.res" }
+		if _OPTIONS.wincross then
+			prebuildcommands { "/usr/bin/i686-pc-mingw32-windres ../src/windows/icon.rc -O coff -o ../src/windows/icon.res" }
+		else
+			prebuildcommands { "windres ../src/windows/icon.rc -O coff -o ../src/windows/icon.res" }
+		end
 		linkoptions { "../src/windows/icon.res" }
 		linkoptions { "-mwindows" }
 		defines { [[TENGINE_HOME_PATH='"T-Engine"']], 'SELFEXE_WINDOWS' }
@@ -108,8 +117,17 @@ project "TEngine"
 		defines { [[TENGINE_HOME_PATH='".t-engine"']], 'SELFEXE_LINUX' }
 		if steamlin64 then steamlin64() end
 
+	configuration "bsd"
+		libdirs {"/usr/local/lib/"}
+		links { "SDL2", "SDL2_ttf", "SDL2_image", "png", "openal", "vorbisfile", "GL", "GLU", "m", "pthread" }
+		defines { [[TENGINE_HOME_PATH='".t-engine"']], 'SELFEXE_BSD' }
+
 	configuration {"Debug"}
-		postbuildcommands { "cp ../bin/Debug/t-engine ../", }
+		if _OPTIONS.wincross then
+			postbuildcommands { "cp ../bin/Debug/t-engine.exe ../", }
+		else
+			postbuildcommands { "cp ../bin/Debug/t-engine ../", }
+		end
 	configuration {"Release"}
 		postbuildcommands { "cp ../bin/Release/t-engine ../", }
 
@@ -131,6 +149,8 @@ project "physfs"
 
 	configuration "linux"
 		files { "../src/physfs/platform/unix.c", "../src/physfs/platform/posix.c",  }
+	configuration "bsd"
+		files { "../src/physfs/platform/unix.c", "../src/physfs/platform/posix.c",  }
 	configuration "windows"
 		files { "../src/physfs/platform/windows.c",  }
 	configuration "macosx"
@@ -150,10 +170,18 @@ elseif _OPTIONS.lua == "jit2" then
 		language "C"
 		targetname "minilua"
 		links { "m" }
+		if _OPTIONS.wincross then
+			links {"mingw32"}
+		end
 
 		files { "../src/luajit2/src/host/minilua.c" }
 
-		local arch_test = os.capture("gcc -E ../src/luajit2/src/lj_arch.h -dM", true)
+		local arch_test
+		if _OPTIONS.wincross then
+			arch_test = os.capture("i686-pc-mingw32-gcc -E ../src/luajit2/src/lj_arch.h -dM", true)
+		else
+			arch_test = os.capture("gcc -E ../src/luajit2/src/lj_arch.h -dM", true)
+		end
 
 		if string.find(arch_test, "LJ_TARGET_X64") then
 			target_arch = "x64"
@@ -184,8 +212,20 @@ elseif _OPTIONS.lua == "jit2" then
 		end
 
 		configuration {"Debug"}
+			if _OPTIONS.wincross then
+				postbuildcommands {
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Debug/minilua/minilua.cross.o" -c "../src/luajit2/src/host/minilua.c"',
+					'gcc -o ../bin/Debug/minilua ../obj/Debug/minilua/minilua.cross.o  -m32 -L/usr/lib32 -L/Test/xcompile/local/lib   -lm',
+				}
+			end
 			postbuildcommands { "cp ../bin/Debug/minilua ../src/luajit2/src/host/", }
 		configuration {"Release"}
+			if _OPTIONS.wincross then
+				postbuildcommands {
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Release/minilua/minilua.cross.o" -c "../src/luajit2/src/host/minilua.c"',
+					'gcc -o ../bin/Release/minilua ../obj/Release/minilua/minilua.cross.o  -m32 -L/usr/lib32 -L/Test/xcompile/local/lib   -lm',
+				}
+			end
 			postbuildcommands { "cp ../bin/Release/minilua ../src/luajit2/src/host/", }
 
 	project "buildvm"
@@ -195,7 +235,12 @@ elseif _OPTIONS.lua == "jit2" then
 		links { "minilua" }
 
 		local dasm_flags = ""
-		local arch_test = os.capture("gcc -E ../src/luajit2/src/lj_arch.h -dM", true)
+		local arch_test
+		if _OPTIONS.wincross then
+			arch_test = os.capture("i686-pc-mingw32-gcc -E ../src/luajit2/src/lj_arch.h -dM", true)
+		else
+			arch_test = os.capture("gcc -E ../src/luajit2/src/lj_arch.h -dM", true)
+		end
 
 		if string.find(arch_test, "LJ_TARGET_X64") then
 			target_arch = "x64"
@@ -269,8 +314,28 @@ elseif _OPTIONS.lua == "jit2" then
 		files { "../src/luajit2/src/host/buildvm*.c" }
 
 		configuration {"Debug"}
+			if _OPTIONS.wincross then
+				postbuildcommands {
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Debug/buildvm/buildvm_lib.cross.o" -c "../src/luajit2/src/host/buildvm_lib.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Debug/buildvm/buildvm_asm.cross.o" -c "../src/luajit2/src/host/buildvm_asm.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Debug/buildvm/buildvm_peobj.cross.o" -c "../src/luajit2/src/host/buildvm_peobj.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Debug/buildvm/buildvm_fold.cross.o" -c "../src/luajit2/src/host/buildvm_fold.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Debug/buildvm/buildvm.cross.o" -c "../src/luajit2/src/host/buildvm.c"',
+					'gcc -o ../bin/Debug/buildvm ../obj/Debug/buildvm/buildvm_lib.cross.o ../obj/Debug/buildvm/buildvm_asm.cross.o ../obj/Debug/buildvm/buildvm_peobj.cross.o ../obj/Debug/buildvm/buildvm_fold.cross.o ../obj/Debug/buildvm/buildvm.cross.o  -m32 -L/usr/lib32 -L/Test/xcompile/local/lib',
+				}
+			end
 			postbuildcommands { "cp ../bin/Debug/buildvm ../src/luajit2/src/", }
 		configuration {"Release"}
+			if _OPTIONS.wincross then
+				postbuildcommands {
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Release/buildvm/buildvm_lib.cross.o" -c "../src/luajit2/src/host/buildvm_lib.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Release/buildvm/buildvm_asm.cross.o" -c "../src/luajit2/src/host/buildvm_asm.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Release/buildvm/buildvm_peobj.cross.o" -c "../src/luajit2/src/host/buildvm_peobj.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Release/buildvm/buildvm_fold.cross.o" -c "../src/luajit2/src/host/buildvm_fold.c"',
+					'gcc -MMD -MP -DGLEW_STATIC -DLUAJIT_TARGET=LUAJIT_ARCH_x86 -DLJ_ARCH_HASFPU=1 -DLJ_ABI_SOFTFP=0 -I../src -I../src/luasocket -I../src/fov -I../src/expat -I../src/lxp -I../src/libtcod_import -I../src/physfs -I../src/zlib -I../src/bzip2 -I../src/luajit2/src -I../src/luajit2/dynasm -g -m32 -ggdb -o "../obj/Release/buildvm/buildvm.cross.o" -c "../src/luajit2/src/host/buildvm.c"',
+					'gcc -o ../bin/Release/buildvm ../obj/Release/buildvm/buildvm_lib.cross.o ../obj/Release/buildvm/buildvm_asm.cross.o ../obj/Release/buildvm/buildvm_peobj.cross.o ../obj/Release/buildvm/buildvm_fold.cross.o ../obj/Release/buildvm/buildvm.cross.o  -m32 -L/usr/lib32 -L/Test/xcompile/local/lib',
+				}
+			end
 			postbuildcommands { "cp ../bin/Release/buildvm ../src/luajit2/src/", }
 
 	project "luajit2"
@@ -296,6 +361,20 @@ elseif _OPTIONS.lua == "jit2" then
 			}
 			end
 
+		configuration "bsd"
+			if not _OPTIONS["no-cleanup-jit2"] then
+			local list = "../src/luajit2/src/lib_base.c ../src/luajit2/src/lib_math.c ../src/luajit2/src/lib_bit.c ../src/luajit2/src/lib_string.c ../src/luajit2/src/lib_table.c ../src/luajit2/src/lib_io.c ../src/luajit2/src/lib_os.c ../src/luajit2/src/lib_package.c ../src/luajit2/src/lib_debug.c ../src/luajit2/src/lib_jit.c ../src/luajit2/src/lib_ffi.c"
+			prebuildcommands{
+				"../src/luajit2/src/buildvm -m elfasm -o ../src/luajit2/src/lj_vm.s",
+				"../src/luajit2/src/buildvm -m bcdef -o ../src/luajit2/src/lj_bcdef.h "..list,
+				"../src/luajit2/src/buildvm -m ffdef -o ../src/luajit2/src/lj_ffdef.h "..list,
+				"../src/luajit2/src/buildvm -m libdef -o ../src/luajit2/src/lj_libdef.h "..list,
+				"../src/luajit2/src/buildvm -m recdef -o ../src/luajit2/src/lj_recdef.h "..list,
+				"../src/luajit2/src/buildvm -m vmdef -o ../src/luajit2/vmdef.lua "..list,
+				"../src/luajit2/src/buildvm -m folddef -o ../src/luajit2/src/lj_folddef.h ../src/luajit2/src/lj_opt_fold.c",
+			}
+			end
+
 		configuration "macosx"
 			local list = "../src/luajit2/src/lib_base.c ../src/luajit2/src/lib_math.c ../src/luajit2/src/lib_bit.c ../src/luajit2/src/lib_string.c ../src/luajit2/src/lib_table.c ../src/luajit2/src/lib_io.c ../src/luajit2/src/lib_os.c ../src/luajit2/src/lib_package.c ../src/luajit2/src/lib_debug.c ../src/luajit2/src/lib_jit.c ../src/luajit2/src/lib_ffi.c"
 			prebuildcommands{
diff --git a/game/engines/default/data/gfx/flame_credits.png b/game/engines/default/data/gfx/flame_credits.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c5d617a3baa1c1a2a66fb8c91af5a4ee79247c6
Binary files /dev/null and b/game/engines/default/data/gfx/flame_credits.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_1.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_1.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_2.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_2.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_3.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_3.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_4.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_4.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_5.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_5.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_6.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_6.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_7.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_7.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_8.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_8.png differ
diff --git a/game/engines/default/data/gfx/invisible-ui/dialogframe_9.png b/game/engines/default/data/gfx/invisible-ui/dialogframe_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..355732be15657ca510ad3c0fdd59fc0322bfd253
Binary files /dev/null and b/game/engines/default/data/gfx/invisible-ui/dialogframe_9.png differ
diff --git a/game/engines/default/data/gfx/spikes_credits.png b/game/engines/default/data/gfx/spikes_credits.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e0977f9d027aae936fa4cbb7d3ebfd04e076c07
Binary files /dev/null and b/game/engines/default/data/gfx/spikes_credits.png differ
diff --git a/game/engines/default/data/gfx/ui/definitions/default.lua b/game/engines/default/data/gfx/ui/definitions/default.lua
index 7d04f5713373928ce6842781221fe2889d250a8a..b66584bc1d11b343453347664e5f257f99e10394 100644
--- a/game/engines/default/data/gfx/ui/definitions/default.lua
+++ b/game/engines/default/data/gfx/ui/definitions/default.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -68,3 +68,10 @@ tombstone = {
 	frame_oy1 = -16,
 	frame_oy2 = 16,
 }
+
+invisible = {
+	frame_ox1 = 0,
+	frame_ox2 = 0,
+	frame_oy1 = 0,
+	frame_oy2 = 0,
+}
diff --git a/game/engines/default/data/keybinds/actions.lua b/game/engines/default/data/keybinds/actions.lua
index a087d691e73bc007c46068428f5b4369ae5b237c..27477e75faa1b966b3a4cfcf579e1fad85e73355 100644
--- a/game/engines/default/data/keybinds/actions.lua
+++ b/game/engines/default/data/keybinds/actions.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/data/keybinds/chat.lua b/game/engines/default/data/keybinds/chat.lua
index fc1c9b34cb56ae4731d0c7669ce0aa77c05753c6..c9be5adfe95cc43a1662df1a9bf9b154e8603f3d 100644
--- a/game/engines/default/data/keybinds/chat.lua
+++ b/game/engines/default/data/keybinds/chat.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/data/keybinds/debug.lua b/game/engines/default/data/keybinds/debug.lua
index 82e3ee51f02abc68256b4763998afd50fbdeadfd..42ed140cc237ee6145128682f296656fbf886a48 100644
--- a/game/engines/default/data/keybinds/debug.lua
+++ b/game/engines/default/data/keybinds/debug.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/data/keybinds/hotkeys.lua b/game/engines/default/data/keybinds/hotkeys.lua
index 97eb041fe62aa1a5d308bd6cff3177058660645a..b72703b5f24304e46642f96cb7bed451ba5b5d8a 100644
--- a/game/engines/default/data/keybinds/hotkeys.lua
+++ b/game/engines/default/data/keybinds/hotkeys.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/data/keybinds/interface.lua b/game/engines/default/data/keybinds/interface.lua
index 76715884f75174de0b9fc8d99f50fd7d1ceb3bec..2b13f3015f587e594e275fcde64800866a76d0df 100644
--- a/game/engines/default/data/keybinds/interface.lua
+++ b/game/engines/default/data/keybinds/interface.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/data/keybinds/inventory.lua b/game/engines/default/data/keybinds/inventory.lua
index 0bb3b85c9e374c93607fad03288f23c33d11f5f8..800ee947a20b8e13d2da233ef9d23f4f40c27cba 100644
--- a/game/engines/default/data/keybinds/inventory.lua
+++ b/game/engines/default/data/keybinds/inventory.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/data/keybinds/move.lua b/game/engines/default/data/keybinds/move.lua
index 0756891b9baa0f9516152ed4644af7a211246ab6..3188a69d3fc84e0dfe2a5d4d6d5b4aafdf96d50f 100644
--- a/game/engines/default/data/keybinds/move.lua
+++ b/game/engines/default/data/keybinds/move.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Actor.lua b/game/engines/default/engine/Actor.lua
index 655b3ab299db2c04b1fb9ff0583a8274ed55bb20..a8313e7dae252786572d85fa1d5c08cd0bd9c18e 100644
--- a/game/engines/default/engine/Actor.lua
+++ b/game/engines/default/engine/Actor.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ActorsSeenDisplay.lua b/game/engines/default/engine/ActorsSeenDisplay.lua
index d769b1b9964221500fce341a3dce4c62c00fab90..03a19a7dd8025c08009d3fe27d8aaddcb9beafbd 100644
--- a/game/engines/default/engine/ActorsSeenDisplay.lua
+++ b/game/engines/default/engine/ActorsSeenDisplay.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Astar.lua b/game/engines/default/engine/Astar.lua
index e6126bb4a1705f2ae968195bb6531d45746ed589..49ce41e385acafae6e4522b33b69a8932401d78e 100644
--- a/game/engines/default/engine/Astar.lua
+++ b/game/engines/default/engine/Astar.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Autolevel.lua b/game/engines/default/engine/Autolevel.lua
index 0ab1a98f5cf15b12cdc9f8a45dfda01b21f1f254..e24dadaa055af7db18cabc52a3c84099613d95c5 100644
--- a/game/engines/default/engine/Autolevel.lua
+++ b/game/engines/default/engine/Autolevel.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/BSP.lua b/game/engines/default/engine/BSP.lua
index 421f243aa721d995849f793b7660518dced2dfbd..87b6635f51f906327a9ae7d3a2d95b2bc8b5ab31 100644
--- a/game/engines/default/engine/BSP.lua
+++ b/game/engines/default/engine/BSP.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Birther.lua b/game/engines/default/engine/Birther.lua
index b2355544d3f2edc7e2e84e7e17797187ae9faa2a..92ffda44c2a73d13ad044c638f3d99c31251cfa7 100644
--- a/game/engines/default/engine/Birther.lua
+++ b/game/engines/default/engine/Birther.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Calendar.lua b/game/engines/default/engine/Calendar.lua
index 8c7f43aa7203c16eb84e482a9feda2fe9e4f9a03..a49b6bc45014bd4a3319f6cb0801a54c70e63c34 100644
--- a/game/engines/default/engine/Calendar.lua
+++ b/game/engines/default/engine/Calendar.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/CharacterBallSave.lua b/game/engines/default/engine/CharacterBallSave.lua
index 33a1f304933dee941f0523fde2e3898304631c90..b303f8d052248bfd3052e79c2e57bb0077fd78ac 100644
--- a/game/engines/default/engine/CharacterBallSave.lua
+++ b/game/engines/default/engine/CharacterBallSave.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/CharacterVaultSave.lua b/game/engines/default/engine/CharacterVaultSave.lua
index dc2cdc84d905aefe9e7fc6c2a857a0b6ca00e76b..c0fcde5fb0dd62336c2241e78cf5422563426815 100644
--- a/game/engines/default/engine/CharacterVaultSave.lua
+++ b/game/engines/default/engine/CharacterVaultSave.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Chat.lua b/game/engines/default/engine/Chat.lua
index 55935835c81aa276fb1730ea6bd69035c1648ce8..60a78709ca5149b3d439350ee92fec7bf86f80eb 100644
--- a/game/engines/default/engine/Chat.lua
+++ b/game/engines/default/engine/Chat.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -19,6 +19,7 @@
 
 require "engine.class"
 require "engine.dialogs.Chat"
+local slt2 = require "slt2"
 
 --- Handle chats between the player and NPCs
 module(..., package.seeall, class.make)
@@ -30,6 +31,7 @@ function _M:init(name, npc, player, data)
 	self.player = player
 	self.name = name
 	data = setmetatable(data or {}, {__index=_G})
+	self.data = data
 
 	local f, err = loadfile("/data/chats/"..name..".lua")
 	if not f and err then error(err) end
@@ -53,7 +55,7 @@ function _M:addChat(c)
 	self:triggerHook{"Chat:add", c=c}
 
 	assert(c.id, "no chat id")
-	assert(c.text, "no chat text")
+	assert(c.text or c.template, "no chat text or template")
 	assert(c.answers, "no chat answers")
 	self.chats[c.id] = c
 	print("[CHAT] loaded", c.id, c)
@@ -81,7 +83,12 @@ end
 
 --- Gets the chat with the given id
 function _M:get(id)
-	return self.chats[id]
+	local c = self.chats[id]
+	if c and c.template then
+		local tpl = slt2.loadstring(c.template)
+		c.text = slt2.render(tpl, {data=self.data, player=self.player, npc=self.npc})
+	end
+	return c
 end
 
 --- Replace some keywords in the given text
diff --git a/game/engines/default/engine/DamageType.lua b/game/engines/default/engine/DamageType.lua
index 8244475d153e34d3d4e4c208707f8d0f4637a3ec..e5c5a6e7b1bf1e1bb5a203823c770281506d868a 100644
--- a/game/engines/default/engine/DamageType.lua
+++ b/game/engines/default/engine/DamageType.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -62,8 +62,8 @@ function _M:newDamageType(t)
 		end
 	end
 
-	table.insert(self.dam_def, t)
-	self[t.type] = #self.dam_def
+	self.dam_def[t.type] = t
+	self[t.type] = t.type
 end
 
 function _M:get(id)
@@ -71,6 +71,10 @@ function _M:get(id)
 	return _M.dam_def[id]
 end
 
+function _M:exists(id)
+	return _M.dam_def[id]
+end
+
 function _M:projectingFor(src, v)
 	src.__projecting_for = v
 end
diff --git a/game/engines/default/engine/DebugConsole.lua b/game/engines/default/engine/DebugConsole.lua
index 34516e2af0bdac1f14ee8d32810e24bf01f39078..fc21053267757088830966743f4958e88fa4c535 100644
--- a/game/engines/default/engine/DebugConsole.lua
+++ b/game/engines/default/engine/DebugConsole.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Dialog.lua b/game/engines/default/engine/Dialog.lua
index adc4984a8d72845e095a8dce0e0c09464044b86d..2cb26a3461265acd4b43b25ba3b59c4673d1e165 100644
--- a/game/engines/default/engine/Dialog.lua
+++ b/game/engines/default/engine/Dialog.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/DirectPath.lua b/game/engines/default/engine/DirectPath.lua
index 1e557e6da1c91f187768eb1040fa6c30f4c34ac4..895019e0e2bd6e57a2e776a46793964798aaeecc 100644
--- a/game/engines/default/engine/DirectPath.lua
+++ b/game/engines/default/engine/DirectPath.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Emote.lua b/game/engines/default/engine/Emote.lua
index 9e4b6eae1c9cb53505f5ec9e2f384c5f6d9d28b7..d7e36a3e4085c91ef0152980851e568e3e755b0c 100644
--- a/game/engines/default/engine/Emote.lua
+++ b/game/engines/default/engine/Emote.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Entity.lua b/game/engines/default/engine/Entity.lua
index ac6f47bf583719d41e5d79df8460d13bf74febce..24f3a1521bddff30e017250fbef60a95f9533fc6 100644
--- a/game/engines/default/engine/Entity.lua
+++ b/game/engines/default/engine/Entity.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -258,6 +258,12 @@ function _M:makeMapObject(tiles, idx)
 		if self._mo and self._mo:isValid() then return self._mo, self.z, self._last_mo end
 	end
 
+	-- Texture
+	local ok, btex, btexx, btexy, w, h = pcall(tiles.get, tiles, self.display, self.color_r, self.color_g, self.color_b, self.color_br, self.color_bg, self.color_bb, self.image, self._noalpha and 255, self.ascii_outline, true)
+
+	local dy, dh = 0, 0
+	if ok and self.auto_tall and h > w then dy = -1 dh = 1 end
+
 	-- Create the map object with 1 + additional textures
 	self._mo = core.map.newObject(self.uid,
 		1 + (tiles.use_images and self.textures and #self.textures or 0),
@@ -265,9 +271,9 @@ function _M:makeMapObject(tiles, idx)
 		self:check("display_on_remember"),
 		self:check("display_on_unknown"),
 		self:check("display_x") or 0,
-		self:check("display_y") or 0,
+		(self:check("display_y") or 0) + dy,
 		self:check("display_w") or 1,
-		self:check("display_h") or 1,
+		(self:check("display_h") or 1) + dh,
 		self:check("display_scale") or 1
 	)
 
@@ -278,13 +284,12 @@ function _M:makeMapObject(tiles, idx)
 
 	-- Texture 0 is always the normal image/ascii tile
 	-- we pcall it because some weird cases can not find a tile
-	local ok, btex, btexx, btexy, bpos_x, bpos_y = pcall(tiles.get, tiles, self.display, self.color_r, self.color_g, self.color_b, self.color_br, self.color_bg, self.color_bb, self.image, self._noalpha and 255, self.ascii_outline, true)
 	if ok then
 		if self.anim then
-			self._mo:texture(0, btex, false, btexx / self.anim.max, btexy, bpos_x, bpos_y)
+			self._mo:texture(0, btex, false, btexx / self.anim.max, btexy, nil, nil)
 			self._mo:setAnim(0, self.anim.max, self.anim.speed or 1, self.anim.loop or -1)
 		else
-			self._mo:texture(0, btex, false, btexx, btexy, bpos_x, bpos_y)
+			self._mo:texture(0, btex, false, btexx, btexy, nil, nil)
 		end
 	end
 
@@ -294,16 +299,19 @@ function _M:makeMapObject(tiles, idx)
 		local cmo = self._mo
 		for i = 1, #self.add_mos do
 			local amo = self.add_mos[i]
+			local dy, dh = amo.display_y or 0, amo.display_h or 1
 			-- Create a simple additional chained MO
-			local mo = core.map.newObject(self.uid, 1 + (tiles.use_images and amo.textures and #amo.textures or 0), false, false, false, amo.display_x or 0, amo.display_y or 0, amo.display_w or 1, amo.display_h or 1, amo.display_scale or 1)
 			if amo.image_alter == "sdm" then
 				tex = tiles:get("", 0, 0, 0, 0, 0, 0, amo.image, false, false, true)
 				tex = tex:generateSDM(amo.sdm_double)
-				texx, texy, pos_x, pos_y = 1,1,nil,nil
+				texx, texy = 1,1,nil,nil
 			elseif amo.image then
-				tex, texx, texy, pos_x, pos_y = tiles:get("", 0, 0, 0, 0, 0, 0, amo.image, false, false, true)
+				local w, h
+				tex, texx, texy, w, h = tiles:get("", 0, 0, 0, 0, 0, 0, amo.image, false, false, true)
+				if amo.auto_tall and h > w then dy = -1 dh = 2 end
 			end
-			mo:texture(0, tex, false, texx, texy, pos_x, pos_y)
+			local mo = core.map.newObject(self.uid, 1 + (tiles.use_images and amo.textures and #amo.textures or 0), false, false, false, amo.display_x or 0, dy, amo.display_w or 1, dh, amo.display_scale or 1)
+			mo:texture(0, tex, false, texx, texy, nil, nil)
 			if amo.particle then
 				local args = amo.particle_args or {}
 				local e = engine.Particles.new(amo.particle, 1, args)
diff --git a/game/engines/default/engine/Faction.lua b/game/engines/default/engine/Faction.lua
index 4f036325dd17624f66171c84ee4d9c3a80d2ee36..b0986f827b9397e26c61f8d8e833a8a120a2cc89 100644
--- a/game/engines/default/engine/Faction.lua
+++ b/game/engines/default/engine/Faction.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/FlyingText.lua b/game/engines/default/engine/FlyingText.lua
index 66e425eab1cb56f5dce8b5120661a2511df7610c..dfdb003562c625d8d027f92bc90d5a8278380a15 100644
--- a/game/engines/default/engine/FlyingText.lua
+++ b/game/engines/default/engine/FlyingText.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Game.lua b/game/engines/default/engine/Game.lua
index 2a71646b2bae81ad4303d4ea49c1ea7c6e0ee6f1..82f207eb1eb4132fbf8407e407d5c0537d76e2b0 100644
--- a/game/engines/default/engine/Game.lua
+++ b/game/engines/default/engine/Game.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -20,6 +20,7 @@
 require "engine.class"
 require "engine.Mouse"
 require "engine.DebugConsole"
+local tween = require "tween"
 local Shader = require "engine.Shader"
 
 --- Represent a game
@@ -154,8 +155,10 @@ function _M:display(nb_keyframes)
 		self.flyers:display(nb_keyframes)
 	end
 
-	if not self.suppressDialogs then
-		for i, d in ipairs(self.dialogs) do
+	if not self.suppressDialogs and #self.dialogs then
+		local last = self.dialogs[#self.dialogs]
+		for i = last and last.__show_only and #self.dialogs or 1, #self.dialogs do
+			local d = self.dialogs[i]
 			d:display()
 			d:toScreen(d.display_x, d.display_y, nb_keyframes)
 		end
@@ -181,6 +184,9 @@ function _M:display(nb_keyframes)
 		else self._timers_cb = nil end
 		for _, cb in ipairs(exec) do cb() end
 	end
+
+	-- Update tweening engine
+	if nb_keyframes > 0 then tween.update(nb_keyframes) end
 end
 
 --- Register a timer
diff --git a/game/engines/default/engine/GameEnergyBased.lua b/game/engines/default/engine/GameEnergyBased.lua
index fb306cf82c9c789b00c8ec93fac9017d85aac8aa..db8ee72f205f8f4e3c09a7e47371fc81ffa6e61e 100644
--- a/game/engines/default/engine/GameEnergyBased.lua
+++ b/game/engines/default/engine/GameEnergyBased.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/GameTurnBased.lua b/game/engines/default/engine/GameTurnBased.lua
index a91a8bcbffe1514478862aa065a491b3cba52aca..ecaf4262d14a6543e8ec25d8aa3da0216d8a8dff 100644
--- a/game/engines/default/engine/GameTurnBased.lua
+++ b/game/engines/default/engine/GameTurnBased.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Generator.lua b/game/engines/default/engine/Generator.lua
index a94f14f91fde9d6330ec4056ff3367fb39c99ea1..9a7aeb9ab551d2c690d69e9e416fe5e1450db44f 100644
--- a/game/engines/default/engine/Generator.lua
+++ b/game/engines/default/engine/Generator.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Grid.lua b/game/engines/default/engine/Grid.lua
index f23430da313bc2aea5b416cfec977944f1f68035..64a24182115fadf09f80ead3912d9d37eb23a4d5 100644
--- a/game/engines/default/engine/Grid.lua
+++ b/game/engines/default/engine/Grid.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Heightmap.lua b/game/engines/default/engine/Heightmap.lua
index 9e0332bb69993b9c81dd9bcfa6ba78b442615ab2..f3018eb2dacb7e1a8681b040f878f71c998cdbe6 100644
--- a/game/engines/default/engine/Heightmap.lua
+++ b/game/engines/default/engine/Heightmap.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/HighScores.lua b/game/engines/default/engine/HighScores.lua
index 612bea3f837abe6fc5ba74a7b46950bec1eb3344..8ff1a22ed40a718be8bf3e45a75c00607e34c40f 100644
--- a/game/engines/default/engine/HighScores.lua
+++ b/game/engines/default/engine/HighScores.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/HotkeysDisplay.lua b/game/engines/default/engine/HotkeysDisplay.lua
index 710bb70c1aebce5678f56975208a82c21854e4cd..d8249b71b1a69d4395f60ac06b42aa9c9ad6127c 100644
--- a/game/engines/default/engine/HotkeysDisplay.lua
+++ b/game/engines/default/engine/HotkeysDisplay.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/HotkeysIconsDisplay.lua b/game/engines/default/engine/HotkeysIconsDisplay.lua
index e0f1b68623a261aff050359102ac748bf89eb8da..a9d6c409a7e05022057dfa79a73195f7838fa32a 100644
--- a/game/engines/default/engine/HotkeysIconsDisplay.lua
+++ b/game/engines/default/engine/HotkeysIconsDisplay.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Key.lua b/game/engines/default/engine/Key.lua
index bd0321b47c3a9fab094a57c1b8d145faae93fe1b..4d0231aed14c8b2d28668e6868f5ffa82cf0d7b9 100644
--- a/game/engines/default/engine/Key.lua
+++ b/game/engines/default/engine/Key.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/KeyBind.lua b/game/engines/default/engine/KeyBind.lua
index b4abf550d1d552d1a95f64a68972843506531961..46f540c73bcafaa4b0706f3706c553b8818aa988 100644
--- a/game/engines/default/engine/KeyBind.lua
+++ b/game/engines/default/engine/KeyBind.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/KeyCommand.lua b/game/engines/default/engine/KeyCommand.lua
index 5a70772cf58280e9004f213aed94a359e2099546..5b70e346edc7d4642bfcc880564327dbf7b9dec7 100644
--- a/game/engines/default/engine/KeyCommand.lua
+++ b/game/engines/default/engine/KeyCommand.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Level.lua b/game/engines/default/engine/Level.lua
index dcd9095da33ea434c050c760d0bf24d1131ee52b..8831460050ef275cc2ab05e032d93b6c96f216ef 100644
--- a/game/engines/default/engine/Level.lua
+++ b/game/engines/default/engine/Level.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/LogDisplay.lua b/game/engines/default/engine/LogDisplay.lua
index c4573405c5a89829f98048f2bf7717ee895101b0..05ac5dd06c8b7e2b839f11d0506ebb424275574c 100644
--- a/game/engines/default/engine/LogDisplay.lua
+++ b/game/engines/default/engine/LogDisplay.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/LogFlasher.lua b/game/engines/default/engine/LogFlasher.lua
index 416e22efb86f412d620d53abc7d15cf194efac57..60163a42720734cd5317c666620b15c4545285c6 100644
--- a/game/engines/default/engine/LogFlasher.lua
+++ b/game/engines/default/engine/LogFlasher.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Map.lua b/game/engines/default/engine/Map.lua
index 4c99d8026a5ed1143fb86a016bb3ab21ed4e9bd9..db7b6059239f320f9dbe549fd3f8f047cda0fc73 100644
--- a/game/engines/default/engine/Map.lua
+++ b/game/engines/default/engine/Map.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -98,6 +98,18 @@ function _M:setViewPort(x, y, w, h, tile_w, tile_h, fontname, fontsize, allow_ba
 	if otw ~= self.tile_w or oth ~= self.tile_h then print("[MAP] Reseting tiles caches") self:resetTiles() end
 end
 
+--- Setup a fbo/shader pair to display map effects
+-- If not set this just uses plain quads
+function _M:enableFBORenderer(shader)
+	if not shader or not core.display.fboSupportsTransparency then self.fbo = nil return end
+	self.fbo = core.display.newFBO(self.viewport.width, self.viewport.height)
+	if not self.fbo then return end
+
+	local Shader = require "engine.Shader"
+	self.fbo_shader = Shader.new(shader)
+	if not self.fbo_shader.shad then self.fbo = nil return end
+end
+
 --- Sets the map viewport padding, for scrolling purposes (defaults to 0)
 -- Static
 -- @param left left padding
@@ -200,6 +212,8 @@ end
 --- Serialization
 function _M:save()
 	return class.save(self, {
+		fbo_shader = true,
+		fbo = true,
 		_check_entities = true,
 		_check_entities_store = true,
 		_map = true,
@@ -521,14 +535,14 @@ end
 -- @param y the coord where to start drawing, if null it uses self.display_y
 -- @param nb_keyframes the number of keyframes elapsed since last draw
 -- @param always_show tell the map code to force display unseed entities as remembered (used for smooth FOV shading)
-function _M:display(x, y, nb_keyframe, always_show)
+function _M:display(x, y, nb_keyframe, always_show, prevfbo)
 	nb_keyframes = nb_keyframes or 1
 	local ox, oy = self.display_x, self.display_y
 	self.display_x, self.display_y = x or self.display_x, y or self.display_y
 
 	self._map:toScreen(self.display_x, self.display_y, nb_keyframe, always_show, self.changed)
 	self:displayParticles(nb_keyframe)
-	self:displayEffects()
+	self:displayEffects(prevfbo)
 
 	self.display_x, self.display_y = ox, oy
 
@@ -972,8 +986,12 @@ function _M:addEffect(src, x, y, duration, damtype, dam, radius, dir, angle, ove
 
 	local grids
 
+	-- Custom grids
+	if type(angle) == "table" then
+		grids = angle
+		angle = nil
 	-- Handle any angle
-	if type(dir) == "table" then
+	elseif type(dir) == "table" then
 		grids = core.fov.beam_any_angle_grids(x, y, radius, angle, dir.source_x or src.x or x, dir.source_y or src.y or y, dir.delta_x, dir.delta_y, true)
 	-- Handle balls
 	elseif dir == 5 then
@@ -1012,20 +1030,45 @@ function _M:addEffect(src, x, y, duration, damtype, dam, radius, dir, angle, ove
 end
 
 --- Display the overlay effects, called by self:display()
-function _M:displayEffects()
+function _M:displayEffects(prevfbo)
 	local sx, sy = self._map:getScroll()
 	for i, e in ipairs(self.effects) do
 		-- Dont bother with obviously out of screen stuff
 		if e.overlay and e.x + e.radius >= self.mx and e.x - e.radius < self.mx + self.viewport.mwidth and e.y + e.radius >= self.my and e.y - e.radius < self.my + self.viewport.mheight then
 			local s = self.tilesEffects:get(e.overlay.display, e.overlay.color_r, e.overlay.color_g, e.overlay.color_b, e.overlay.color_br, e.overlay.color_bg, e.overlay.color_bb, e.overlay.image, e.overlay.alpha)
 
-			-- Now display each grids
-			for lx, ys in pairs(e.grids) do
-				for ly, _ in pairs(ys) do
-					if self.seens(lx, ly) then
-						s:toScreen(self.display_x + sx + (lx - self.mx) * self.tile_w * self.zoom, self.display_y + sy + (ly - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
+			-- If we dont have a special fbo/shader or no shader image to use, just display with simple quads
+			if not self.fbo or not e.overlay.effect_shader then
+				-- Now display each grids
+				for lx, ys in pairs(e.grids) do
+					for ly, _ in pairs(ys) do
+						if self.seens(lx, ly) then
+							s:toScreen(self.display_x + sx + (lx - self.mx) * self.tile_w * self.zoom, self.display_y + sy + (ly - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
+						end
+					end
+				end
+			-- We have a fbo/shader pair, so we display everything inside it and apply the shader to get nice borders and such
+			else
+				if not e.overlay.effect_shader_tex then
+					e.overlay.effect_shader_tex = Tiles:loadImage(e.overlay.effect_shader):glTexture()
+				end
+
+				self.fbo:use(true, 0, 0, 0, 0)
+				-- Now display each grids
+				for lx, ys in pairs(e.grids) do
+					for ly, _ in pairs(ys) do
+						if self.seens(lx, ly) then
+							s:toScreen((lx - self.mx) * self.tile_w * self.zoom, (ly - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
+						end
 					end
 				end
+				self.fbo:use(false, prevfbo)
+				e.overlay.effect_shader_tex:bind(1, false)
+				self.fbo_shader.shad:use(true)
+				self.fbo_shader.shad:uniTileSize(self.tile_w, self.tile_h)
+				self.fbo_shader.shad:uniScrollOffset(0, 0)
+				self.fbo:toScreen(self.display_x + sx, self.display_y + sy, self.viewport.width, self.viewport.height, self.fbo_shader.shad, 1, 1, 1, 1, true)
+				self.fbo_shader.shad:use(false)
 			end
 		end
 	end
diff --git a/game/engines/default/engine/MapEffect.lua b/game/engines/default/engine/MapEffect.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5950a36112b679be7aed202fed561fed06ba4233
--- /dev/null
+++ b/game/engines/default/engine/MapEffect.lua
@@ -0,0 +1,33 @@
+-- TE4 - T-Engine 4
+-- Copyright (C) 2009 - 2014 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
+
+require "engine.class"
+local Entity = require "engine.Entity"
+
+--- Describes a trap
+module(..., package.seeall, class.inherit(Entity))
+
+_M.display_on_seen = true
+_M._no_save_fields.effect_shader_tex = true
+
+function _M:init(t, no_default)
+	t.alpha = t.alpha or 100
+	t.display = t.display or ''
+	Entity.init(self, t, no_default)
+end
diff --git a/game/engines/default/engine/Module.lua b/game/engines/default/engine/Module.lua
index efc480b3d7ecfa54d4f71805ca482d03514be633..205370c33fb36bfea11751b3e2bc136ed83346cd 100644
--- a/game/engines/default/engine/Module.lua
+++ b/game/engines/default/engine/Module.lua
@@ -1,6 +1,6 @@
 
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -302,6 +302,7 @@ function _M:listAddons(mod, ignore_compat)
 				add.natural_compatible = engine.version_nearly_same(mod.version, add.version)
 				add.version_txt = ("%d.%d.%d"):format(add.version[1], add.version[2], add.version[3])
 				if add.dlc and not profile:isDonator(add.dlc) then add.dlc = "no" end
+				if add.id_dlc and not profile:allowDLC(add.id_dlc) then add.id_dlc = "no" end
 				adds[#adds+1] = add
 			end
 		end
@@ -370,6 +371,7 @@ function _M:addonMD5(add, base)
 end
 
 function _M:loadAddons(mod, saveuse)
+	local hashlist = {}
 	local adds = self:listAddons(mod, true)
 
 	if saveuse then saveuse = table.reverse(saveuse) end
@@ -388,7 +390,10 @@ function _M:loadAddons(mod, saveuse)
 				print("Removing addon "..add.short_name..": cheat mode required")
 				table.remove(adds, i) removed = true
 			elseif add.dlc == "no" then
-				print("Removing addon "..add.short_name..": DLC required")
+				print("Removing addon "..add.short_name..": donator required")
+				table.remove(adds, i) removed = true
+			elseif add.id_dlc == "no" then
+				print("Removing addon "..add.short_name..": DLC not granted")
 				table.remove(adds, i) removed = true
 			elseif config.settings.addons[add.for_module] and config.settings.addons[add.for_module][add.short_name] ~= nil then
 				-- Forbidden by config
@@ -411,10 +416,22 @@ function _M:loadAddons(mod, saveuse)
 					local data = profile:getDLCD(add.for_module.."-"..add.short_name, ("%d.%d.%d"):format(add.version[1],add.version[2],add.version[3]), name:gsub("%.", "/")..".lua")
 					if data and data ~= '' then
 						profile.dlc_files.classes[name] = data
-					else
+					elseif not __module_extra_info.ignore_addons_not_loading then
 						print("Removing addon "..add.short_name..": DLC class not received")
 						table.remove(adds, i) removed = true
+						if saveuse then
+							-- The savefile requires it, but we couldnt activate it, abord
+							core.game.setRebootMessage(([[The savefile requires the #YELLOW#%s#WHITE# addon.
+Some of its features require being online and could not be enabled. To prevent damaging the savefile loading was aborded.
+
+You may try to force loading if you are sure the savefile does not use that addon, at your own risk, by checking the "Ignore unloadable addons" checkbox on the load game screen..]]):format(add.long_name))
+							util.showMainMenu(nil, nil, nil, nil, nil, nil, "show_ignore_addons_not_loading=true")
+						end
 						break
+					else
+						add.dlc = "no"
+						print("Removing addon "..add.short_name..": dlc file required not found")
+						table.remove(adds, i) removed = true
 					end
 				end
 			end
@@ -471,15 +488,16 @@ function _M:loadAddons(mod, saveuse)
 			hash_valid, hash_err = false, "cheat mode skipping addon validation"
 		else
 			local fmd5 = self:addonMD5(add)
-			hash_valid, hash_err = profile:checkAddonHash(mod.short_name, add.version_name, fmd5)
+			hashlist[#hashlist+1] = {module=mod.short_name, addon=add.version_name, md5=fmd5}
+--			hash_valid, hash_err = profile:checkAddonHash(mod.short_name, add.version_name, fmd5)
 		end
 
-		if hash_err then hash_err = hash_err .. " [addon: "..add.short_name.."]" end
-		add.hash_valid, add.hash_err = hash_valid, hash_err
+--		if hash_err then hash_err = hash_err .. " [addon: "..add.short_name.."]" end
+--		add.hash_valid, add.hash_err = hash_valid, hash_err
 
 		mod.addons[add.short_name] = add
 	end
---	os.exit()
+	return hashlist
 end
 
 -- Grab some fun facts!
@@ -662,11 +680,11 @@ end
 -- @param mod the module definition as given by Module:loadDefinition()
 -- @param name the savefile name
 -- @param new_game true if the game must be created (aka new character)
-function _M:instanciate(mod, name, new_game, no_reboot)
+function _M:instanciate(mod, name, new_game, no_reboot, extra_module_info)
 	if not no_reboot then
 		local eng_v = nil
 		if not mod.incompatible then eng_v = ("%d.%d.%d"):format(mod.engine[1], mod.engine[2], mod.engine[3]) end
-		util.showMainMenu(false, mod.engine[4], eng_v, mod.version_string, name, new_game)
+		util.showMainMenu(false, mod.engine[4], eng_v, mod.version_string, name, new_game, extra_module_info)
 		return
 	end
 
@@ -732,6 +750,7 @@ function _M:instanciate(mod, name, new_game, no_reboot)
 	end
 	local hash_valid, hash_err
 	local t = core.game.getTime()
+	local module_md5 = "--"
 	if config.settings.cheat then
 		hash_valid, hash_err = false, "cheat mode skipping validation"
 	else
@@ -740,30 +759,25 @@ function _M:instanciate(mod, name, new_game, no_reboot)
 			fp("/data")
 			fp("/engine")
 			table.sort(md5s)
-			local fmd5 = md5.sumhexa(table.concat(md5s))
-			print("[MODULE LOADER] module MD5", fmd5, "computed in ", core.game.getTime() - t)
-			hash_valid, hash_err = profile:checkModuleHash(mod.version_name, fmd5)
+			module_md5 = md5.sumhexa(table.concat(md5s))
+			print("[MODULE LOADER] module MD5", module_md5, "computed in ", core.game.getTime() - t)
 		end
 	end
 
-	self:loadAddons(mod, (save_desc and save_desc.addons) or (__module_extra_info.set_addons))
+	local hashlist = self:loadAddons(mod, (save_desc and save_desc.addons) or (__module_extra_info.set_addons))
+
+	-- Check all hashes at once
+	hashlist[#hashlist+1] = {module=mod.version_name, md5=module_md5}
+	hash_valid, hash_err = profile:checkBatchHash(hashlist)
+	print("[MODULE] All hashes validation: ", hash_valid, hash_err)
 
 	-- Now that addons are loaded we can load UI definitions
 	for _, file in ipairs(fs.list("/data/gfx/ui/definitions")) do
 		if file:find("%.lua$") then UIBase:loadUIDefinitions("/data/gfx/ui/definitions/"..file) end
 	end
 
-	-- Check addons
-	if hash_valid then
-		for name, add in pairs(mod.addons) do
-			if not add.hash_valid then
-				hash_valid = false
-				hash_err = add.hash_err or "?????? unknown ...."
-				profile.hash_valid = false
-				break
-			end
-		end
-	end
+	-- Validate addons if all is valid
+	if hash_valid then for name, add in pairs(mod.addons) do add.hash_valid = true end end
 
 	local addl = {}
 	for name, add in pairs(mod.addons) do
diff --git a/game/engines/default/engine/Mouse.lua b/game/engines/default/engine/Mouse.lua
index a8e8bf71297129a02d8d84155d064284e413b766..466437770559e4ed8d65d858aa8645deb189bedb 100644
--- a/game/engines/default/engine/Mouse.lua
+++ b/game/engines/default/engine/Mouse.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -103,7 +103,7 @@ function _M:setCurrent()
 	_M.current = self
 end
 
---- Returns a zone definition by it's name
+--- Returns a zone definition by its name
 function _M:getZone(name)
 	return self.areas_name[name]
 end
diff --git a/game/engines/default/engine/NameGenerator.lua b/game/engines/default/engine/NameGenerator.lua
index 605206b3c74aa42ca90ace56c3876824a4dbac5b..5dd0c9081710768c5c72da6f00aae84cb8aa973c 100644
--- a/game/engines/default/engine/NameGenerator.lua
+++ b/game/engines/default/engine/NameGenerator.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/NameGenerator2.lua b/game/engines/default/engine/NameGenerator2.lua
index af1438ac7db7ff66740b894e6c97ee344a53844c..a1741d8b2f2a15fe62590bfa5416cd9f5be91aa3 100644
--- a/game/engines/default/engine/NameGenerator2.lua
+++ b/game/engines/default/engine/NameGenerator2.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Object.lua b/game/engines/default/engine/Object.lua
index 03523594c0a72a4821c9242c3357944bf0e09e2c..4dff64cf1ff13ed860e0f90a8919d18a3b83a6b9 100644
--- a/game/engines/default/engine/Object.lua
+++ b/game/engines/default/engine/Object.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Particles.lua b/game/engines/default/engine/Particles.lua
index e321be0d8d3c83af87bdd73fcfb1961a7c6a04f9..55be33180636125f61998eb9da0d98231eed9a48 100644
--- a/game/engines/default/engine/Particles.lua
+++ b/game/engines/default/engine/Particles.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/PlayerProfile.lua b/game/engines/default/engine/PlayerProfile.lua
index 3ad9f28b9f70f2f97507b4cc27a0c03757e487fd..c01ab90398d022f7ace696e2335a11c441849d41 100644
--- a/game/engines/default/engine/PlayerProfile.lua
+++ b/game/engines/default/engine/PlayerProfile.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -665,6 +665,7 @@ function _M:checkModuleHash(module, md5)
 	if game and game:isTainted() then return nil, "savefile tainted" end
 	core.profile.pushOrder(table.serialize{o="CheckModuleHash", module=module, md5=md5})
 
+	local ok = false
 	self:waitEvent("CheckModuleHash", function(e) ok = e.ok end, 10000)
 
 	if not ok then return nil, "bad game version" end
@@ -679,6 +680,7 @@ function _M:checkAddonHash(module, addon, md5)
 	if game and game:isTainted() then return nil, "savefile tainted" end
 	core.profile.pushOrder(table.serialize{o="CheckAddonHash", module=module, addon=addon, md5=md5})
 
+	local ok = false
 	self:waitEvent("CheckAddonHash", function(e) ok = e.ok end, 10000)
 
 	if not ok then return nil, "bad game addon version" end
@@ -686,6 +688,22 @@ function _M:checkAddonHash(module, addon, md5)
 	return true
 end
 
+function _M:checkBatchHash(list)
+	if not self.auth then return nil, "no online profile active" end
+	if config.settings.cheat then return nil, "cheat mode active" end
+	if game and game:isTainted() then return nil, "savefile tainted" end
+	core.profile.pushOrder(table.serialize{o="CheckBatchHash", data=list})
+
+	local ok = false
+	local error = nil
+	self:waitEvent("CheckBatchHash", function(e) ok = e.ok error = e.error end, 10000)
+
+	if not ok then return nil, error or "unknown error" end
+	print("[ONLINE PROFILE] all hashes are valid")
+	self.hash_valid = true
+	return true
+end
+
 function _M:sendError(what, err)
 	print("[ONLINE PROFILE] sending error")
 	core.profile.pushOrder(table.serialize{o="SendError", login=self.login, what=what, err=err, module=game.__mod_info.short_name, version=game.__mod_info.version_name})
@@ -872,3 +890,9 @@ function _M:isDonator(s)
 	if core.steam then return true end
 	if not self.auth or not tonumber(self.auth.donated) or tonumber(self.auth.donated) < s then return false else return true end
 end
+
+function _M:allowDLC(dlc)
+	if core.steam then if core.steam.checkDLC(dlc[2]) then return true end end
+	if self.auth and self.auth.dlcs and self.auth.dlcs[dlc[1]] then return true end
+	return false
+end
diff --git a/game/engines/default/engine/Projectile.lua b/game/engines/default/engine/Projectile.lua
index 99503b9c8157437cf45d20e103b3fe034f784182..1a31559c8330132f706e5df508d045766ceabb05 100644
--- a/game/engines/default/engine/Projectile.lua
+++ b/game/engines/default/engine/Projectile.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Quadratic.lua b/game/engines/default/engine/Quadratic.lua
index f2982e4b11fbde145ff3e02372b39af19be9c7ce..a6306621d63fb8ae8f0546bbf9c903a9a53594b3 100644
--- a/game/engines/default/engine/Quadratic.lua
+++ b/game/engines/default/engine/Quadratic.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Quest.lua b/game/engines/default/engine/Quest.lua
index 3e9c1daa36270f250f586903880919e3eeaa9d6a..6a370f797b682ea12fc214cb2e840bfd3850eec1 100644
--- a/game/engines/default/engine/Quest.lua
+++ b/game/engines/default/engine/Quest.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Savefile.lua b/game/engines/default/engine/Savefile.lua
index 9bca19be175eb49ba560741043f169a22e8a97e2..6fc52ca69fce1a2b53cc5467f5b7c743d4b89663 100644
--- a/game/engines/default/engine/Savefile.lua
+++ b/game/engines/default/engine/Savefile.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -240,6 +240,7 @@ function _M:saveGame(game, no_dialog)
 	f:write(("short_name = %q\n"):format(self.short_name))
 	f:write(("timestamp = %d\n"):format(os.time()))
 	f:write(("loadable = %s\n"):format(game:isLoadable() and "true" or "false"))
+	f:write(("cheat = %s\n"):format(game:isTainted() and "true" or "false"))
 	f:write(("description = %q\n"):format(desc.description))
 	f:close()
 	if core.steam then core.steam.writeFile(self.save_dir.."desc.lua") end
diff --git a/game/engines/default/engine/SavefilePipe.lua b/game/engines/default/engine/SavefilePipe.lua
index d7d585a72e6a57e3594175945d7085203aaa895d..10149b5f42a88f9e7b6871ac056f5c625c8349c5 100644
--- a/game/engines/default/engine/SavefilePipe.lua
+++ b/game/engines/default/engine/SavefilePipe.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Shader.lua b/game/engines/default/engine/Shader.lua
index d1b432e0e06ab69e6c2981f3fcab575093963f99..8755d53f8bc3ea4cdf4823bc381196a70bdc9660 100644
--- a/game/engines/default/engine/Shader.lua
+++ b/game/engines/default/engine/Shader.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Store.lua b/game/engines/default/engine/Store.lua
index 6af7a5d1e671de7b2660436b010f248add1b0696..2c1e196afc379109e1366d0167aafa0061dd26f6 100644
--- a/game/engines/default/engine/Store.lua
+++ b/game/engines/default/engine/Store.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Target.lua b/game/engines/default/engine/Target.lua
index 656ffa520d7ab4621fd41812696691bcc997f873..a5fb79ff032a451679276ffcd596bb71901a6418 100644
--- a/game/engines/default/engine/Target.lua
+++ b/game/engines/default/engine/Target.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Tiles.lua b/game/engines/default/engine/Tiles.lua
index 057bc7a57559e15d8fd235acd3ede297bbe52116..6a556b7609205f7cfbcde999591148499368dc4e 100644
--- a/game/engines/default/engine/Tiles.lua
+++ b/game/engines/default/engine/Tiles.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -86,7 +86,7 @@ function _M:get(char, fr, fg, fb, br, bg, bb, image, alpha, do_outline, allow_ti
 		local s = self.repo[char][fgidx][bgidx]
 		return s[1], s[2], s[3], s[4], s[5]
 	else
-		local s, sw, sh
+		local s, sw, sh, w, h
 		local is_image = false
 		if (self.use_images or not dochar) and image and #image > 4 then
 			if allow_tileset and self.texture then
@@ -118,7 +118,7 @@ function _M:get(char, fr, fg, fb, br, bg, bb, image, alpha, do_outline, allow_ti
 		end
 
 		if self.texture then
-			local w, h = s:getSize()
+			w, h = s:getSize()
 			s, sw, sh = s:glTexture()
 			sw, sh = w / sw, h / sh
 			if not is_image and do_outline then
@@ -130,12 +130,13 @@ function _M:get(char, fr, fg, fb, br, bg, bb, image, alpha, do_outline, allow_ti
 			end
 		else
 			sw, sh = s:getSize()
+			w, h = sw, sh
 		end
 
 		self.repo[char] = self.repo[char] or {}
 		self.repo[char][fgidx] = self.repo[char][fgidx] or {}
-		self.repo[char][fgidx][bgidx] = {s, sw, sh}
-		return s, sw, sh
+		self.repo[char][fgidx][bgidx] = {s, sw, sh, w, h}
+		return s, sw, sh, w, h
 	end
 end
 
diff --git a/game/engines/default/engine/Tooltip.lua b/game/engines/default/engine/Tooltip.lua
index cda55cfbacfb94099c23afb0b8226b8684168555..6fcaa24aa8f45c19966dc5a90bc882ea36a4eec9 100644
--- a/game/engines/default/engine/Tooltip.lua
+++ b/game/engines/default/engine/Tooltip.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Trap.lua b/game/engines/default/engine/Trap.lua
index 3443301ed9e877c39ca49a69c4d662230a66f058..12b5c814ed77bcccf1b90569834524d0d98696d2 100644
--- a/game/engines/default/engine/Trap.lua
+++ b/game/engines/default/engine/Trap.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/UserChat.lua b/game/engines/default/engine/UserChat.lua
index ad23c648bd7e9ca4d05f3b48a9a432f8faca7801..d53489d83c7bddd49a6c5892a6487fac412a8b15 100644
--- a/game/engines/default/engine/UserChat.lua
+++ b/game/engines/default/engine/UserChat.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -173,11 +173,10 @@ function _M:event(e)
 
 		self.channels[e.channel] = self.channels[e.channel] or {users={}, log={}}
 		if profile and profile.auth and profile.auth.name then
-			local tokens = e.msg:split(" ")
-			for i = 1, #tokens do
-				if tokens[i]:lower() == profile.auth.name:lower() then tokens[i] = "#YELLOW##{underline}#"..tokens[i].."#{normal}##LAST#" end
+			local ni, nj = e.msg:lower():find(profile.auth.name:lower(), 1, true)
+			if ni and nj then
+				e.msg = e.msg:sub(1, ni - 1).."#YELLOW##{underline}#"..profile.auth.name.."#{normal}##LAST#"..e.msg:sub(nj + 1)
 			end
-			e.msg = table.concat(tokens, " ")
 		end
 		self:addMessage("talk", e.channel, e.login, {e.name, color}, e.msg)
 
diff --git a/game/engines/default/engine/World.lua b/game/engines/default/engine/World.lua
index 4f65e73144fbd79afb8d8d7947ed2cc9139b2523..ee8b5fdb68cea6e867e7c7bf1b980e6a847addca 100644
--- a/game/engines/default/engine/World.lua
+++ b/game/engines/default/engine/World.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/Zone.lua b/game/engines/default/engine/Zone.lua
index 91a93edadc3bba0150d1d82d8541948e88414bb1..8f612c0f2b67a8c0917bb470c098b1bdee2d6166 100644
--- a/game/engines/default/engine/Zone.lua
+++ b/game/engines/default/engine/Zone.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,7 +28,7 @@ local print = function() end
 --- Defines a zone: a set of levels, with depth, npcs, objects, level generator, ...
 module(..., package.seeall, class.make)
 
-_no_save_fields = {temp_memory_levels=true}
+_no_save_fields = {temp_memory_levels=true, _tmp_data=true}
 
 --- Setup classes to use for level generation
 -- Static method
@@ -113,6 +113,8 @@ function _M:init(short_name, dynamic)
 		forceprint("[ZONE] persisting to persist_last_zones", self.short_name)
 		_M:addLastPersistZone(self)
 	end
+
+	self._tmp_data = {}
 end
 
 --- Computes the current base level based on the zone infos
@@ -251,6 +253,7 @@ function _M:checkFilter(e, filter, type)
 	if filter.type and filter.type ~= e.type then return false end
 	if filter.subtype and filter.subtype ~= e.subtype then return false end
 	if filter.name and filter.name ~= e.name then return false end
+	if filter.define_as and filter.define_as ~= e.define_as then return false end
 	if filter.unique and not e.unique then return false end
 	if filter.properties then
 		for i = 1, #filter.properties do if not e[filter.properties[i]] then return false end end
@@ -817,12 +820,34 @@ function _M:getGenerator(what, level, spots)
 	assert(level.data.generator[what], "requested zone generator of type "..tostring(what).." but it is not defined")
 	assert(level.data.generator[what].class, "requested zone generator of type "..tostring(what).." but it has no class field")
 	print("[GENERATOR] requiring", what, level.data.generator and level.data.generator[what] and level.data.generator[what].class)
-	return require(level.data.generator[what].class).new(
+	if not level.data.generator[what].zoneclass then
+		return require(level.data.generator[what].class).new(
+			self,
+			level.map,
+			level,
+			spots
+		)
+	else
+		local base = require(level.data.generator[what].class)
+		local c = class.inherit(base){}
+		local name = self:getBaseName().."generator"..what:capitalize()..".lua"
+		print("[ZONE] Custom zone generator for "..what.." loading from "..name)
+		local add = loadfile(name)
+		setfenv(add, setmetatable({
+			_M = c,
+			baseGenerator = base,
+			Zone = _M,
+			Map = Map,
+		}, {__index=_G}))
+		add()
+
+		return c.new(
 			self,
 			level.map,
 			level,
 			spots
 		)
+	end
 end
 
 function _M:newLevel(level_data, lev, old_lev, game)
@@ -845,12 +870,7 @@ function _M:newLevel(level_data, lev, old_lev, game)
 	game:setLevel(level)
 
 	-- Generate the map
-	local generator = require(level_data.generator.map.class).new(
-		self,
-		map,
-		level,
-		level_data.generator.map
-	)
+	local generator = self:getGenerator("map", level, level_data.generator.map)
 	local ux, uy, dx, dy, spots = generator:generate(lev, old_lev)
 	spots = spots or {}
 
diff --git a/game/engines/default/engine/ai/simple.lua b/game/engines/default/engine/ai/simple.lua
index d11c70cbda93dee3ebc09ad1c9fd450e9171b044..b65533e9826433c075cfe3acfb46c11f08d495d5 100644
--- a/game/engines/default/engine/ai/simple.lua
+++ b/game/engines/default/engine/ai/simple.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ai/special_movements.lua b/game/engines/default/engine/ai/special_movements.lua
index c43efc54873ac9c7b5dc07f7201a38a6397318eb..b58272523043f7c231a240dc9894131bc69af79a 100644
--- a/game/engines/default/engine/ai/special_movements.lua
+++ b/game/engines/default/engine/ai/special_movements.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ai/talented.lua b/game/engines/default/engine/ai/talented.lua
index 934c70698709d2037f43d38330e44d4eed8a4ea4..b2bd43fe2b4e0c181c4fc31ff625f0ba2f0eef38 100644
--- a/game/engines/default/engine/ai/talented.lua
+++ b/game/engines/default/engine/ai/talented.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/class.lua b/game/engines/default/engine/class.lua
index 4d71774cf100167588f0f048b14244954b27d117..5bcd1a1e44baf040d02d7761c8ba33ffffa21f43 100644
--- a/game/engines/default/engine/class.lua
+++ b/game/engines/default/engine/class.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/colors.lua b/game/engines/default/engine/colors.lua
index 42e69073109c74a79a03a26827910411b05c85f4..72860d75cb8b093bceac7dae04282dd4e6cc7249 100644
--- a/game/engines/default/engine/colors.lua
+++ b/game/engines/default/engine/colors.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,11 +27,17 @@ end
 
 function colors.simple(c) return {c.r, c.g, c.b} end
 
+function colors.unpack(c) return c.r, c.g, c.b end
+
 function colors.hex1(hex)
 	local r, g, b = tonumber("0x"..hex:sub(1, 2)), tonumber("0x"..hex:sub(3, 4)), tonumber("0x"..hex:sub(5, 6))
 	return {r / 255, g / 255, b / 255}
 end
 
+function colors.hex1unpack(hex)
+	return tonumber("0x"..hex:sub(1, 2)), tonumber("0x"..hex:sub(3, 4)), tonumber("0x"..hex:sub(5, 6))
+end
+
 defineColor('BLACK', 0, 0, 0)
 defineColor('WHITE', 0xFF, 0xFF, 0xFF)
 defineColor('SLATE', 0x8C, 0x8C, 0x8C)
diff --git a/game/engines/default/engine/dialogs/Achievement.lua b/game/engines/default/engine/dialogs/Achievement.lua
index 8ef4e7ee8c4126aea9bb6c8e8e58d3596c8ffb8d..4627c0b06a9f617270e4da8613e6be4444207a42 100644
--- a/game/engines/default/engine/dialogs/Achievement.lua
+++ b/game/engines/default/engine/dialogs/Achievement.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -32,6 +32,7 @@ function _M:init(title, a)
 	local c_desc = Textzone.new{width=500, auto_height=true, text=color..a.name.."#LAST#\n"..a.desc, font={"/data/font/DroidSans-Bold.ttf", 26}}
 	c_desc:setTextShadow(1)
 	c_desc:setShadowShader(Shader.default.textoutline and Shader.default.textoutline.shad, 1.2)
+	self:setTitleShadowShader(Shader.default.textoutline and Shader.default.textoutline.shad, 1.5)
 	self.ui = "achievement"
 
 	Dialog.init(self, title, 10, 10)
diff --git a/game/engines/default/engine/dialogs/AudioOptions.lua b/game/engines/default/engine/dialogs/AudioOptions.lua
index 28546579b147b2cc56f302853e4e08b74b2a0f13..a140081fd5aee910ba44f066deae14139f788629 100644
--- a/game/engines/default/engine/dialogs/AudioOptions.lua
+++ b/game/engines/default/engine/dialogs/AudioOptions.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/Chat.lua b/game/engines/default/engine/dialogs/Chat.lua
index cb50438a1eca04fe70ccf97c4ddb818b4bb6747a..452b445f251c65b75db9a63cdc57bd06b780c2ff 100644
--- a/game/engines/default/engine/dialogs/Chat.lua
+++ b/game/engines/default/engine/dialogs/Chat.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ChatChannels.lua b/game/engines/default/engine/dialogs/ChatChannels.lua
index dc79de55100719202485ed4c13af7b4cb7b133f9..eaeb4a081a3456e0a73990dd46bbf9d67710c913 100644
--- a/game/engines/default/engine/dialogs/ChatChannels.lua
+++ b/game/engines/default/engine/dialogs/ChatChannels.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ChatFilter.lua b/game/engines/default/engine/dialogs/ChatFilter.lua
index cf4a75724bef90590c1d8a060bff8f6a9f12d878..e21bc1d15b6dfedadb93146f6a8eb038cae47139 100644
--- a/game/engines/default/engine/dialogs/ChatFilter.lua
+++ b/game/engines/default/engine/dialogs/ChatFilter.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ChatIgnores.lua b/game/engines/default/engine/dialogs/ChatIgnores.lua
index 3f903193a22522e0dead3dbb7a07db96ce566336..9f94954f688a8910bfe163df7aa7d1c6cf516d88 100644
--- a/game/engines/default/engine/dialogs/ChatIgnores.lua
+++ b/game/engines/default/engine/dialogs/ChatIgnores.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/DisplayResolution.lua b/game/engines/default/engine/dialogs/DisplayResolution.lua
index 45087d275eb7a9247e7b2755550e802547ab456c..86241410ca507d691126a94da376495901c37642 100644
--- a/game/engines/default/engine/dialogs/DisplayResolution.lua
+++ b/game/engines/default/engine/dialogs/DisplayResolution.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/GameMenu.lua b/game/engines/default/engine/dialogs/GameMenu.lua
index 4b59aeb942adefd056a3ccf93a4544c2bcb78dd3..ffd40429db1b881baeae30ffd6fc23c24089db46 100644
--- a/game/engines/default/engine/dialogs/GameMenu.lua
+++ b/game/engines/default/engine/dialogs/GameMenu.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/GetQuantity.lua b/game/engines/default/engine/dialogs/GetQuantity.lua
index 0c47f7a980fce47c3d6ae978a603866988317bda..c93c861b5c99a05410a6f22ecff5f58d3bc068d6 100644
--- a/game/engines/default/engine/dialogs/GetQuantity.lua
+++ b/game/engines/default/engine/dialogs/GetQuantity.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/GetText.lua b/game/engines/default/engine/dialogs/GetText.lua
index 67002f7396e59dfa15b5b694133ab0c0162362be..0ca9d060bf19bb8219a849985dc7dc658c003357 100644
--- a/game/engines/default/engine/dialogs/GetText.lua
+++ b/game/engines/default/engine/dialogs/GetText.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/KeyBinder.lua b/game/engines/default/engine/dialogs/KeyBinder.lua
index a47c34108dab58db818a7711a18da64a48c81cc8..0ecf1d32cf0a4bd4b9b3538a801963c109dc1fa0 100644
--- a/game/engines/default/engine/dialogs/KeyBinder.lua
+++ b/game/engines/default/engine/dialogs/KeyBinder.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowAchievements.lua b/game/engines/default/engine/dialogs/ShowAchievements.lua
index f1abe12d7442bcda6e49ce3d274ce8fb52e12424..5fae2b7476bf8f5310e61a5a2e2d8d2d717f619d 100644
--- a/game/engines/default/engine/dialogs/ShowAchievements.lua
+++ b/game/engines/default/engine/dialogs/ShowAchievements.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowEquipInven.lua b/game/engines/default/engine/dialogs/ShowEquipInven.lua
index 4b26913505689768a56850f5bdf5229b61d967ca..8f2ca5619f03cdbf8982b17ed926c0a14d915d90 100644
--- a/game/engines/default/engine/dialogs/ShowEquipInven.lua
+++ b/game/engines/default/engine/dialogs/ShowEquipInven.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowEquipment.lua b/game/engines/default/engine/dialogs/ShowEquipment.lua
index d75ec9619a3b501ab882316e75ef7dbd69ab987c..d9ef0e4f27c7a60eeb4fce38bc234a2b29ddf6dc 100644
--- a/game/engines/default/engine/dialogs/ShowEquipment.lua
+++ b/game/engines/default/engine/dialogs/ShowEquipment.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowErrorStack.lua b/game/engines/default/engine/dialogs/ShowErrorStack.lua
index 0f424ad1dddb6415c3b574260565653d9f4eb797..4c54c3cb1540bd51c0203c6fa57c59c250fe2b57 100644
--- a/game/engines/default/engine/dialogs/ShowErrorStack.lua
+++ b/game/engines/default/engine/dialogs/ShowErrorStack.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowInventory.lua b/game/engines/default/engine/dialogs/ShowInventory.lua
index 9e75d155ad0c725b2d4828a2c62708371eb5aa68..b1c466b7caa3841b8b9be5bb3aa0a67ee33f98b7 100644
--- a/game/engines/default/engine/dialogs/ShowInventory.lua
+++ b/game/engines/default/engine/dialogs/ShowInventory.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowLog.lua b/game/engines/default/engine/dialogs/ShowLog.lua
index 340bf75ff7a277a5fb751ffbdc74e22076925213..3e87ef9c0849923fcb03e24d3da4119fb87c373e 100644
--- a/game/engines/default/engine/dialogs/ShowLog.lua
+++ b/game/engines/default/engine/dialogs/ShowLog.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowPickupFloor.lua b/game/engines/default/engine/dialogs/ShowPickupFloor.lua
index 3d21263c604a0c45a2b40c19b82fcd5f8c6a7dba..1e0e5f492ff9aefbcbb9ff8ae996e043a344d72f 100644
--- a/game/engines/default/engine/dialogs/ShowPickupFloor.lua
+++ b/game/engines/default/engine/dialogs/ShowPickupFloor.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowQuests.lua b/game/engines/default/engine/dialogs/ShowQuests.lua
index eaa938277060058b7306de3328da85018ed5a511..7d095c13a6c9e71cf55f367d6adfcdf644430308 100644
--- a/game/engines/default/engine/dialogs/ShowQuests.lua
+++ b/game/engines/default/engine/dialogs/ShowQuests.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowStore.lua b/game/engines/default/engine/dialogs/ShowStore.lua
index 4a34e372edb21ffc67cea970b1be5e2488226af3..e5578ce6cc1110f7125a9f04f4d4f93f7470b9f8 100644
--- a/game/engines/default/engine/dialogs/ShowStore.lua
+++ b/game/engines/default/engine/dialogs/ShowStore.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ShowText.lua b/game/engines/default/engine/dialogs/ShowText.lua
index 6fe27838ff82d51045154b37d5ebdff9a90bcafe..901b6966643542b9ac96d2ac19ca40a4bfc8ecc0 100644
--- a/game/engines/default/engine/dialogs/ShowText.lua
+++ b/game/engines/default/engine/dialogs/ShowText.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/SteamOptions.lua b/game/engines/default/engine/dialogs/SteamOptions.lua
index 76dce4694e48ca1a2bd20cc3b6eeb62842b0842a..a5207a0c4db99a3ab826c7cdf34ab0d5c578ab4a 100644
--- a/game/engines/default/engine/dialogs/SteamOptions.lua
+++ b/game/engines/default/engine/dialogs/SteamOptions.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/Talkbox.lua b/game/engines/default/engine/dialogs/Talkbox.lua
index 5d0e964d714db35f06f42173aa386a1814f9aadd..f4d97bae3b563eec74fdeaf30ad82c76c5ec36fa 100644
--- a/game/engines/default/engine/dialogs/Talkbox.lua
+++ b/game/engines/default/engine/dialogs/Talkbox.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -78,6 +78,8 @@ function _M:init(chat, on_end)
 				self.chat:setCurrentTarget(false, self.chat.last_whispers[found])
 				self:updateTitle(self:getTitle())
 			end
+		else
+			self:autoComplete()
 		end
 	end)
 end
@@ -136,6 +138,35 @@ function _M:checkTarget(text)
 	end
 end
 
+function _M:autoComplete()
+	local text, text_len = self.c_box.text, self.c_box.text:len()
+
+	local matches = {}
+	for k, v in pairs(self.chat.channels[self.chat.cur_channel].users) do
+		if k:sub(1, text_len) == text then
+			matches[#matches+1] = k
+		end
+	end
+	if #matches == 1 then
+		self.c_box:setText(matches[1])
+	elseif #matches > 1 then
+		-- Find the longest common substring and complete it
+		local substring = matches[1]:sub(#text+1)
+		for i=2,#matches do
+			local min_len = math.min(#matches[i]-#text, #substring)
+			for j=1,min_len do
+				if substring:sub(j, j) ~= matches[i]:sub(#text+j, #text+j) then
+					substring = substring:sub(1, util.bound(j-1, 0))
+					break
+				end
+			end
+			if #substring > 0 then
+				self.c_box:setText(text .. substring)
+			end
+		end
+	end
+end
+
 function _M:okclick()
 	local text = self.c_box.text
 
diff --git a/game/engines/default/engine/dialogs/UseTalents.lua b/game/engines/default/engine/dialogs/UseTalents.lua
index 6fd3b768bd0fc9bf0599e0b956139c4dde04400f..9e272f1fe115e2fa726a41a908d75f66f2033b78 100644
--- a/game/engines/default/engine/dialogs/UseTalents.lua
+++ b/game/engines/default/engine/dialogs/UseTalents.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/UserInfo.lua b/game/engines/default/engine/dialogs/UserInfo.lua
index 5351a2f7c0e36df91adbe27e0f4df37729e73ec5..25bd2eb800da838a5586b7f4b909cb98fc9473d9 100644
--- a/game/engines/default/engine/dialogs/UserInfo.lua
+++ b/game/engines/default/engine/dialogs/UserInfo.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/VideoOptions.lua b/game/engines/default/engine/dialogs/VideoOptions.lua
index 53d959eed77361c304e8f3cbd30b0c3d8ecd5726..bda47f732029358d5da04fb0a48e2375644dfb49 100644
--- a/game/engines/default/engine/dialogs/VideoOptions.lua
+++ b/game/engines/default/engine/dialogs/VideoOptions.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/dialogs/ViewHighScores.lua b/game/engines/default/engine/dialogs/ViewHighScores.lua
index 90ef364e8c0803663ca3f928616a8bd06e3c8818..d51eafd08e27f7161a7dc7295abae6e5c6d82c32 100644
--- a/game/engines/default/engine/dialogs/ViewHighScores.lua
+++ b/game/engines/default/engine/dialogs/ViewHighScores.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/actor/OnSpots.lua b/game/engines/default/engine/generator/actor/OnSpots.lua
index 22c51c2a402044a39023a6e2a8ad30013995faa8..e2051da097d98377b95a3a772c8764ddc4cb2cb9 100644
--- a/game/engines/default/engine/generator/actor/OnSpots.lua
+++ b/game/engines/default/engine/generator/actor/OnSpots.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/actor/Random.lua b/game/engines/default/engine/generator/actor/Random.lua
index 128a9d3dace839b8d6f2b7756bf5494b8942b5d5..847959d59caacea1b117fadba6b1e941955173b8 100644
--- a/game/engines/default/engine/generator/actor/Random.lua
+++ b/game/engines/default/engine/generator/actor/Random.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Building.lua b/game/engines/default/engine/generator/map/Building.lua
index daf010227ccd771bc1868fbef03885f3a29763ae..e8deb284a5839cbc9e8fe28bd2a1fec0cc5b179e 100644
--- a/game/engines/default/engine/generator/map/Building.lua
+++ b/game/engines/default/engine/generator/map/Building.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Cavern.lua b/game/engines/default/engine/generator/map/Cavern.lua
index dc0b7ee59ef1716cbe865af0bc57444f646bd93c..917a5e64a819e8b6fd4642ae550da7b720f8b7dd 100644
--- a/game/engines/default/engine/generator/map/Cavern.lua
+++ b/game/engines/default/engine/generator/map/Cavern.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Empty.lua b/game/engines/default/engine/generator/map/Empty.lua
index fee2fe497c86cee8340b2338b2ecab3801ae6d00..542ec372c46b7840007620698c6b0a076f2ea68f 100644
--- a/game/engines/default/engine/generator/map/Empty.lua
+++ b/game/engines/default/engine/generator/map/Empty.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Forest.lua b/game/engines/default/engine/generator/map/Forest.lua
index a6ef8af6b45c53716f9f195448a96589a2472ea0..881dd79b12e5db5ac05d22ceeb6d197e94dbca4d 100644
--- a/game/engines/default/engine/generator/map/Forest.lua
+++ b/game/engines/default/engine/generator/map/Forest.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/GOL.lua b/game/engines/default/engine/generator/map/GOL.lua
index dfa2fdd34899b3ed843e58a2f42c3139d7d4d308..f9e52c4eeee0ad727cd7c7b9ec43a10ad435d5f4 100644
--- a/game/engines/default/engine/generator/map/GOL.lua
+++ b/game/engines/default/engine/generator/map/GOL.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Heightmap.lua b/game/engines/default/engine/generator/map/Heightmap.lua
index 786ab9bed9254b3162cc419133b40a875e16cdb6..fd828aeb68dfbafcdedbbb84770d181b38862b18 100644
--- a/game/engines/default/engine/generator/map/Heightmap.lua
+++ b/game/engines/default/engine/generator/map/Heightmap.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Maze.lua b/game/engines/default/engine/generator/map/Maze.lua
index 0ce57e684f3c77fb3e12f13b5eb5d2edf8624974..cdda87abb4317eed937bb32ed8b24e8b9e08e57f 100644
--- a/game/engines/default/engine/generator/map/Maze.lua
+++ b/game/engines/default/engine/generator/map/Maze.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Octopus.lua b/game/engines/default/engine/generator/map/Octopus.lua
index 770bb053bc278070a2453e5e45ac35e39bb33028..725ea6ca78c3ded19704829012378ea09c915a0b 100644
--- a/game/engines/default/engine/generator/map/Octopus.lua
+++ b/game/engines/default/engine/generator/map/Octopus.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -54,6 +54,7 @@ function _M:generate(lev, old_lev)
 
 	-- Rooms around it
 	local nb_rooms = rng.range(self.nb_rooms[1], self.nb_rooms[2])
+	local rooms = {}
 	for i = 0, nb_rooms - 1 do
 		local angle = math.rad(i * 360 / nb_rooms)
 
@@ -61,14 +62,17 @@ function _M:generate(lev, old_lev)
 		local rx = math.floor(cx + math.cos(angle) * self.map.w / 2 * range)
 		local ry = math.floor(cy + math.sin(angle) * self.map.h / 2 * range)
 		print("Side octoroom", rx, ry, range)
-		self:makePod(rx, ry, rng.float(self.arms_radius[1], self.arms_radius[2]) * ((self.map.w / 2) + (self.map.h / 2)) / 2, 2 + i, self)
+		rooms[#rooms+1] = self:makePod(rx, ry, rng.float(self.arms_radius[1], self.arms_radius[2]) * ((self.map.w / 2) + (self.map.h / 2)) / 2, 2 + i, self)
 		spots[#spots+1] = {x=rx, y=ry, type="room", subtype="side"}
 
 		self:tunnel(rx, ry, cx, cy, 2 + i)
 	end
 
-	-- Always starts at 1, 1
-	return self:makeStairsInside(lev, old_lev, self.spots)
+	if self.data.edge_entrances then
+		return self:makeStairsSides(lev, old_lev, self.data.edge_entrances, rooms, spots)
+	else
+		return self:makeStairsInside(lev, old_lev, spots)
+	end
 end
 
 --- Create the stairs inside the level
diff --git a/game/engines/default/engine/generator/map/Roomer.lua b/game/engines/default/engine/generator/map/Roomer.lua
index 5010216e1327c0a646e3316a3b275db6df09c4e8..b854244fb2c5ba781f4bd867b484593cc6b4c76f 100644
--- a/game/engines/default/engine/generator/map/Roomer.lua
+++ b/game/engines/default/engine/generator/map/Roomer.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Rooms.lua b/game/engines/default/engine/generator/map/Rooms.lua
index f05bb07586ad419a454349cfe24923f7923a68b4..a8a1ee24b113e0e2aac5bd3c51c9990c9a76583e 100644
--- a/game/engines/default/engine/generator/map/Rooms.lua
+++ b/game/engines/default/engine/generator/map/Rooms.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/RoomsLoader.lua b/game/engines/default/engine/generator/map/RoomsLoader.lua
index 73de4c627c2b7b8b18c0d968da90dd08a82b87e8..56e109350fde696fcb03207a482894395308a460 100644
--- a/game/engines/default/engine/generator/map/RoomsLoader.lua
+++ b/game/engines/default/engine/generator/map/RoomsLoader.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -136,8 +136,9 @@ function _M:makePod(x, y, radius, room_id, data, floor, wall)
 		elseif not g4 and not g2 and not g8 and g6 then self.map(i, j, Map.TERRAIN, self:resolve(wall or '#')) self.map.room_map[i][j].room = nil
 		end
 	end end
-end
 
+	return { id="podroom"..room_id, x=x, y=y, cx=x, cy=y }
+end
 
 --- Generates a room
 function _M:roomGen(room, id, lev, old_lev)
diff --git a/game/engines/default/engine/generator/map/Static.lua b/game/engines/default/engine/generator/map/Static.lua
index adcc942909fd5ad663d5e9745559875821a31d47..6d54b49f8bf5f1b75bfa40e354353edabd7eb77e 100644
--- a/game/engines/default/engine/generator/map/Static.lua
+++ b/game/engines/default/engine/generator/map/Static.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/TileSet.lua b/game/engines/default/engine/generator/map/TileSet.lua
index 2ba8b0f94c5612a13d01b8a76f76a595cf02db18..59a403e2ea05d6d342e9ccaabd1c996b7c19496b 100644
--- a/game/engines/default/engine/generator/map/TileSet.lua
+++ b/game/engines/default/engine/generator/map/TileSet.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/map/Town.lua b/game/engines/default/engine/generator/map/Town.lua
index 0affba496a7b9281c9a7de55a513fa59d8b07ec9..f1d5817a6ca872be847554312fb1ba63a2030f7f 100644
--- a/game/engines/default/engine/generator/map/Town.lua
+++ b/game/engines/default/engine/generator/map/Town.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -96,6 +96,7 @@ function _M:building(leaf, spots)
 	end end
 
 	for i = x1, x2 do for j = y1, y2 do
+		self.map.room_map[i][j].is_building = true
 		if i == x1 or i == x2 or j == y1 or j == y2 then
 			self.map(i, j, Map.TERRAIN, self:resolve("wall"))
 			if not (i == x1 and j == y1) and not (i == x2 and j == y1) and not (i == x1 and j == y2) and not (i == x2 and j == y2) then
diff --git a/game/engines/default/engine/generator/object/OnSpots.lua b/game/engines/default/engine/generator/object/OnSpots.lua
index 8a1c4cb15f54dea5b458c2fa3e36f50b604fee6d..23fb90c028ccd7dd6cf2fd87b6fc91c2beb316d0 100644
--- a/game/engines/default/engine/generator/object/OnSpots.lua
+++ b/game/engines/default/engine/generator/object/OnSpots.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/object/Random.lua b/game/engines/default/engine/generator/object/Random.lua
index 66b19c0e4ecf40b895ab90d32431b35b0c5d154c..9f6c9900ee4c910538e48647f6fd37bc3ff40253 100644
--- a/game/engines/default/engine/generator/object/Random.lua
+++ b/game/engines/default/engine/generator/object/Random.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/generator/trap/Random.lua b/game/engines/default/engine/generator/trap/Random.lua
index f652f04c6f52caa4c61021f7cc9011861c1d50e5..b1e85c3a9651f34a1e2a75d79df28246245498b7 100644
--- a/game/engines/default/engine/generator/trap/Random.lua
+++ b/game/engines/default/engine/generator/trap/Random.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/init.lua b/game/engines/default/engine/init.lua
index cb0c9b3fd26950c51fbf4edfc7070a3179bc0154..07807a24e41ae3b5356c90beaf974275f7eda457 100644
--- a/game/engines/default/engine/init.lua
+++ b/game/engines/default/engine/init.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorAI.lua b/game/engines/default/engine/interface/ActorAI.lua
index 8c88d41165b3736125555fa9730f378b4eb48d0f..4aa0e40cd4d4b9a9f50a4c62ab713b010158206a 100644
--- a/game/engines/default/engine/interface/ActorAI.lua
+++ b/game/engines/default/engine/interface/ActorAI.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorFOV.lua b/game/engines/default/engine/interface/ActorFOV.lua
index 3d6f61d6ebfbe39dcc3f3ff3dc2278259c70b374..568d9e74c6223109ba0ff7219ac97b642c993b5e 100644
--- a/game/engines/default/engine/interface/ActorFOV.lua
+++ b/game/engines/default/engine/interface/ActorFOV.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorInventory.lua b/game/engines/default/engine/interface/ActorInventory.lua
index 482ad8a54528b8a5b50a1511c1c36910a7a21588..f1743a6de3012f2417f9ba19279ca77b073d5957 100644
--- a/game/engines/default/engine/interface/ActorInventory.lua
+++ b/game/engines/default/engine/interface/ActorInventory.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorLevel.lua b/game/engines/default/engine/interface/ActorLevel.lua
index 592b0c5a46165bf8b2a22b81b1b355012a4f1d25..30fd0583005cd3e9633148e63b1316b78ea63db5 100644
--- a/game/engines/default/engine/interface/ActorLevel.lua
+++ b/game/engines/default/engine/interface/ActorLevel.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorLife.lua b/game/engines/default/engine/interface/ActorLife.lua
index 9155a773de4a0ceda0891b7e73c70f4c51a82b83..fdd136e1127e5624967f621e0621dd927b08970d 100644
--- a/game/engines/default/engine/interface/ActorLife.lua
+++ b/game/engines/default/engine/interface/ActorLife.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorProject.lua b/game/engines/default/engine/interface/ActorProject.lua
index 9e9b117bb65bedfa0232a29c3ca0d299fa44c99c..5c7df29b024f84ea839480f3daf411286c067781 100644
--- a/game/engines/default/engine/interface/ActorProject.lua
+++ b/game/engines/default/engine/interface/ActorProject.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorQuest.lua b/game/engines/default/engine/interface/ActorQuest.lua
index b11b80cc25f6da5599fae8e632935c5be562bead..e05f68771e0a9268edc1c48550812c30c31f507a 100644
--- a/game/engines/default/engine/interface/ActorQuest.lua
+++ b/game/engines/default/engine/interface/ActorQuest.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorResource.lua b/game/engines/default/engine/interface/ActorResource.lua
index f5e99e48021f2278a40eac980678d9b2eb5d0ebc..580e635e5978a83c5da4d4a4250357a436f8057c 100644
--- a/game/engines/default/engine/interface/ActorResource.lua
+++ b/game/engines/default/engine/interface/ActorResource.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorStats.lua b/game/engines/default/engine/interface/ActorStats.lua
index 634e8f602ebb1d4ef03507aaf2a838c06b9cbdfe..eeb7ee5b2e87b0da7418742f439b68edc8e323cc 100644
--- a/game/engines/default/engine/interface/ActorStats.lua
+++ b/game/engines/default/engine/interface/ActorStats.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ActorTalents.lua b/game/engines/default/engine/interface/ActorTalents.lua
index d82968966fedd73acd9a4cf2b13c7cdf6be22110..931ac6f8df3d0c4f8632c938d876b3413937302f 100644
--- a/game/engines/default/engine/interface/ActorTalents.lua
+++ b/game/engines/default/engine/interface/ActorTalents.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -33,6 +33,7 @@ function _M:loadDefinition(file, env)
 		Particles = require("engine.Particles"),
 		Talents = self,
 		Map = require("engine.Map"),
+		MapEffect = require("engine.MapEffect"),
 		newTalent = function(t) self:newTalent(t) end,
 		newTalentType = function(t) self:newTalentType(t) end,
 		load = function(f) self:loadDefinition(f, getfenv(2)) end
@@ -449,7 +450,7 @@ end
 --- Checks the talent if learnable
 -- @param t the talent to check
 -- @param offset the level offset to check, defaults to 1
-function _M:canLearnTalent(t, offset)
+function _M:canLearnTalent(t, offset, ignore_special)
 	-- Check prerequisites
 	if rawget(t, "require") then
 		local req = t.require
@@ -468,7 +469,7 @@ function _M:canLearnTalent(t, offset)
 				return nil, "not enough levels"
 			end
 		end
-		if req.special then
+		if req.special and not ignore_special then
 			if not req.special.fct(self, t, offset) then
 				return nil, req.special.desc
 			end
diff --git a/game/engines/default/engine/interface/ActorTemporaryEffects.lua b/game/engines/default/engine/interface/ActorTemporaryEffects.lua
index 99aeabe4806f6a95f8109ceb091ff3efd9965918..0bf25ff2df8b77cea6d2c54ba4c1e08c47c93b79 100644
--- a/game/engines/default/engine/interface/ActorTemporaryEffects.lua
+++ b/game/engines/default/engine/interface/ActorTemporaryEffects.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/BloodyDeath.lua b/game/engines/default/engine/interface/BloodyDeath.lua
index c97889b121b1ebf752c2858d698be16aef68d98c..1403b1515b286edafb03a5be92603e1fd129ba7e 100644
--- a/game/engines/default/engine/interface/BloodyDeath.lua
+++ b/game/engines/default/engine/interface/BloodyDeath.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ControlCursorSupport.lua b/game/engines/default/engine/interface/ControlCursorSupport.lua
index c0439eb6899bf727697c14a55290ba3e94eb396a..bfeb6407ae1b3a5586f938fc747efb00e8bd737d 100644
--- a/game/engines/default/engine/interface/ControlCursorSupport.lua
+++ b/game/engines/default/engine/interface/ControlCursorSupport.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/GameMusic.lua b/game/engines/default/engine/interface/GameMusic.lua
index 02579ec2843caaffda958b052a44ea16449151bd..4bc34b7a1e1575c34a70c7cde5f42b03c15ccd5a 100644
--- a/game/engines/default/engine/interface/GameMusic.lua
+++ b/game/engines/default/engine/interface/GameMusic.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/GameSound.lua b/game/engines/default/engine/interface/GameSound.lua
index 0fa7d9fe3b305207d99b8714687852e40f8750ce..d1d81eae8cb88b0fa09b4ea2ed04b8f64d1f2fb6 100644
--- a/game/engines/default/engine/interface/GameSound.lua
+++ b/game/engines/default/engine/interface/GameSound.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/GameTargeting.lua b/game/engines/default/engine/interface/GameTargeting.lua
index f26618259e4f7316e96f368b2ea2e9fe4f69fe82..5a8fecde943977c83539c794f36e0941c237ae67 100644
--- a/game/engines/default/engine/interface/GameTargeting.lua
+++ b/game/engines/default/engine/interface/GameTargeting.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ObjectActivable.lua b/game/engines/default/engine/interface/ObjectActivable.lua
index b30a963b74a149045ac422187f1134ce0d964ce8..20262bc97306883a5f44c822f229b7b3d7d87724 100644
--- a/game/engines/default/engine/interface/ObjectActivable.lua
+++ b/game/engines/default/engine/interface/ObjectActivable.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/ObjectIdentify.lua b/game/engines/default/engine/interface/ObjectIdentify.lua
index c09c195dfb022e818f10b43e662ddf5b10154dff..dc9034fe0ce0926809931a5661ad31e7a1844d1b 100644
--- a/game/engines/default/engine/interface/ObjectIdentify.lua
+++ b/game/engines/default/engine/interface/ObjectIdentify.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerDumpJSON.lua b/game/engines/default/engine/interface/PlayerDumpJSON.lua
index c1866dda80da5b3b384d64ba0c5c24863b1c215e..8ef7f2a21a790e5826d99a16c7f815c16e2d36dc 100644
--- a/game/engines/default/engine/interface/PlayerDumpJSON.lua
+++ b/game/engines/default/engine/interface/PlayerDumpJSON.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerExplore.lua b/game/engines/default/engine/interface/PlayerExplore.lua
index 6379023c0006e93bed494049deb936b32b5d3583..4c60ec4e6fa85856bb107ae09e6eb193a1bf53c0 100644
--- a/game/engines/default/engine/interface/PlayerExplore.lua
+++ b/game/engines/default/engine/interface/PlayerExplore.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerHotkeys.lua b/game/engines/default/engine/interface/PlayerHotkeys.lua
index 900ef50290b91b0f771d4b29624dee8aab34874f..c3b2c094de36ef6adbd53f621fc1dd02bc060a62 100644
--- a/game/engines/default/engine/interface/PlayerHotkeys.lua
+++ b/game/engines/default/engine/interface/PlayerHotkeys.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerMouse.lua b/game/engines/default/engine/interface/PlayerMouse.lua
index d323e77ee067a1b59998c9f0ee1eeead7026804d..1eca3cf157564a5efdf02009878c1240de73ecf3 100644
--- a/game/engines/default/engine/interface/PlayerMouse.lua
+++ b/game/engines/default/engine/interface/PlayerMouse.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerRest.lua b/game/engines/default/engine/interface/PlayerRest.lua
index d16d9a4f7d696c3bf1ea3ae6e9a9a7916dafe9e7..79161a28e6183a5b55c9e6524cc4df83380dd3a9 100644
--- a/game/engines/default/engine/interface/PlayerRest.lua
+++ b/game/engines/default/engine/interface/PlayerRest.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerRun.lua b/game/engines/default/engine/interface/PlayerRun.lua
index 179711dca679354f1e2aa92ffac8b0ac0ced36ea..13d159138f2b46ae3ecd9ff08708aafc1e1903f1 100644
--- a/game/engines/default/engine/interface/PlayerRun.lua
+++ b/game/engines/default/engine/interface/PlayerRun.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/PlayerSlide.lua b/game/engines/default/engine/interface/PlayerSlide.lua
index fe61566cfa60a40609e3070df5aa3fb39b06c53e..4e346de91cbbade4e33e396445e330b57f6b9697 100644
--- a/game/engines/default/engine/interface/PlayerSlide.lua
+++ b/game/engines/default/engine/interface/PlayerSlide.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/interface/WorldAchievements.lua b/game/engines/default/engine/interface/WorldAchievements.lua
index 07b66ed873f93142be0f2a8546dfd1c26e49bcd1..9e3022da91efd99b4ca84648990f77a5730a0da7 100644
--- a/game/engines/default/engine/interface/WorldAchievements.lua
+++ b/game/engines/default/engine/interface/WorldAchievements.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -68,7 +68,6 @@ function _M:loadAchievements()
 	end
 end
 
---[[
 function _M:achievementsDumpCSV()
 	local f = fs.open("/achvs.csv", "w")
 	f:write('"id","name","desc","earned","unearned"\n')
@@ -85,7 +84,6 @@ function _M:achievementsDumpCSV()
 	end
 	f:close()
 end
-]]
 
 function _M:getAchievementFromId(id)
 	return self.achiev_defs[id]
@@ -154,7 +152,7 @@ function _M:gainAchievement(id, src, ...)
 	local color = a.huge and "GOLD" or "LIGHT_GREEN"
 	game.log("#"..color.."#New Achievement: %s!", a.name)
 	self:showAchievement("New Achievement: #"..color.."#"..a.name, a)
-	profile.chat:achievement(a.name, a.huge, true)
+	if not a.no_chat_broadcast then profile.chat:achievement(a.name, a.huge, true) end
 
 	if a.on_gain then a:on_gain(src) end
 	return true
diff --git a/game/engines/default/engine/resolvers.lua b/game/engines/default/engine/resolvers.lua
index 23d5c059d4325bef71094fe8a9fe77140ec21fc9..bf45ee3b78c028f74fd0e9c3b32da67a871c4cca 100644
--- a/game/engines/default/engine/resolvers.lua
+++ b/game/engines/default/engine/resolvers.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/ActorFrame.lua b/game/engines/default/engine/ui/ActorFrame.lua
index 3cf228ea621747c7aa9af28d5d17aa8a184abe43..3d53538d3be53106d7b819e05467c1cef6564773 100644
--- a/game/engines/default/engine/ui/ActorFrame.lua
+++ b/game/engines/default/engine/ui/ActorFrame.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Base.lua b/game/engines/default/engine/ui/Base.lua
index 2d7ea14ee0ac4d094da207c65266874bd854a534..dc62ac3079cb96aa0897dd12153de64e6f519131 100644
--- a/game/engines/default/engine/ui/Base.lua
+++ b/game/engines/default/engine/ui/Base.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Button.lua b/game/engines/default/engine/ui/Button.lua
index 48e8dcdccc6d0ea0ebf0bcc5c6fc2e70c2667858..3004f9bbaed3f794f5fcc938cfddef10f058c93c 100644
--- a/game/engines/default/engine/ui/Button.lua
+++ b/game/engines/default/engine/ui/Button.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -36,6 +36,7 @@ function _M:init(t)
 	self.force_w = t.width
 	if t.can_focus ~= nil then self.can_focus = t.can_focus end
 	if t.can_focus_mouse ~= nil then self.can_focus_mouse = t.can_focus_mouse end
+	self.alpha_unfocus = t.alpha_unfocus or 1
 
 	Base.init(self, t)
 end
@@ -47,6 +48,7 @@ function _M:generate()
 	-- Draw UI
 	self.font:setStyle("bold")
 	local w, h = self.font:size(self.text)
+	self.iw, self.ih = w, h
 	if self.force_w then w = self.force_w end
 	self.w, self.h = w - frame_ox1 + frame_ox2, h - frame_oy1 + frame_oy2
 
@@ -84,28 +86,30 @@ function _M:display(x, y, nb_keyframes, ox, oy)
 	oy = oy + 3
 	local mx, my, button = core.mouse.get()
 	if self.focused then
-			if button == 1 and mx > ox and mx < ox+self.w and my > oy and my < oy+self.h then
-				self:drawFrame(self.frame, x, y, 0, 1, 0, 1)
-			elseif self.glow then
-				local v = self.glow + (1 - self.glow) * (1 + math.cos(core.game.getTime() / 300)) / 2
-				self:drawFrame(self.frame, x, y, v*0.8, v, 0, 1)
-			else
-				self:drawFrame(self.frame_sel, x, y)
-			end
+		if button == 1 and mx > ox and mx < ox+self.w and my > oy and my < oy+self.h then
+			self:drawFrame(self.frame, x, y, 0, 1, 0, 1)
+		elseif self.glow then
+			local v = self.glow + (1 - self.glow) * (1 + math.cos(core.game.getTime() / 300)) / 2
+			self:drawFrame(self.frame, x, y, v*0.8, v, 0, 1)
+		else
+			self:drawFrame(self.frame_sel, x, y)
+		end
+		if self.text_shadow then self.tex[1]:toScreenFull(x-frame_ox1+1, y-frame_oy1+1, self.rw, self.rh, self.tex[2], self.tex[3], 0, 0, 0, self.text_shadow) end
+		self.tex[1]:toScreenFull(x-frame_ox1, y-frame_oy1, self.rw, self.rh, self.tex[2], self.tex[3])
 	else
 		if self.glow then
 			local v = self.glow + (1 - self.glow) * (1 + math.cos(core.game.getTime() / 300)) / 2
-			self:drawFrame(self.frame, x, y, v*0.8, v, 0, 1)
+			self:drawFrame(self.frame, x, y, v*0.8, v, 0, self.alpha_unfocus)
 		else
-			self:drawFrame(self.frame, x, y)
+			self:drawFrame(self.frame, x, y, 1, 1, 1, self.alpha_unfocus)
 		end
 
 		if self.focus_decay and not self.glow then
-			self:drawFrame(self.frame_sel, x, y, 1, 1, 1, self.focus_decay / self.focus_decay_max_d)
+			self:drawFrame(self.frame_sel, x, y, 1, 1, 1, self.alpha_unfocus * self.focus_decay / self.focus_decay_max_d)
 			self.focus_decay = self.focus_decay - nb_keyframes
 			if self.focus_decay <= 0 then self.focus_decay = nil end
 		end
+		if self.text_shadow then self.tex[1]:toScreenFull(x-frame_ox1+1, y-frame_oy1+1, self.rw, self.rh, self.tex[2], self.tex[3], 0, 0, 0, self.alpha_unfocus * self.text_shadow) end
+		self.tex[1]:toScreenFull(x-frame_ox1, y-frame_oy1, self.rw, self.rh, self.tex[2], self.tex[3], 1, 1, 1, self.alpha_unfocus)
 	end
-	if self.text_shadow then self.tex[1]:toScreenFull(x-frame_ox1+1, y-frame_oy1+1, self.rw, self.rh, self.tex[2], self.tex[3], 0, 0, 0, self.text_shadow) end
-	self.tex[1]:toScreenFull(x-frame_ox1, y-frame_oy1, self.rw, self.rh, self.tex[2], self.tex[3])
 end
diff --git a/game/engines/default/engine/ui/ButtonImage.lua b/game/engines/default/engine/ui/ButtonImage.lua
new file mode 100644
index 0000000000000000000000000000000000000000..830b44c1354cd38de629e851d8eede960865860e
--- /dev/null
+++ b/game/engines/default/engine/ui/ButtonImage.lua
@@ -0,0 +1,121 @@
+-- TE4 - T-Engine 4
+-- Copyright (C) 2009 - 2014 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
+
+require "engine.class"
+local Tiles = require "engine.Tiles"
+local Base = require "engine.ui.Base"
+local Focusable = require "engine.ui.Focusable"
+
+--- A generic UI button
+module(..., package.seeall, class.inherit(Base, Focusable))
+
+frame_ox1 = -5
+frame_ox2 = 5
+frame_oy1 = -5
+frame_oy2 = 5
+
+function _M:init(t)
+	if t.tex then
+		self.tex = t.tex
+	else	
+		self.file = tostring(assert(t.file, "no button file"))
+		self.image = Tiles:loadImage(self.file)
+		local iw, ih = 0, 0
+		if self.image then iw, ih = self.image:getSize() end
+		self.iw, self.ih = iw, ih
+	end
+	if t.force_w then self.iw = t.force_w end
+
+	self.fct = assert(t.fct, "no button fct")
+	self.on_select = t.on_select
+	if t.can_focus ~= nil then self.can_focus = t.can_focus end
+	if t.can_focus_mouse ~= nil then self.can_focus_mouse = t.can_focus_mouse end
+	self.alpha_unfocus = t.alpha_unfocus or 1
+	self.no_decoration = t.no_decoration
+
+	Base.init(self, t)
+end
+
+function _M:generate()
+	self.mouse:reset()
+	self.key:reset()
+
+	-- Draw UI
+	local w, h = self.iw, self.ih
+	self.w, self.h = w - frame_ox1 + frame_ox2, h - frame_oy1 + frame_oy2
+	if self.image then self.tex = self.tex or {self.image:glTexture()} end
+
+	-- Add UI controls
+	self.mouse:registerZone(0, 0, self.w+6, self.h+6, function(button, x, y, xrel, yrel, bx, by, event)
+		if self.hide then return end
+		if self.on_select then self.on_select() end
+		if button == "left" and event == "button" then self:sound("button") self.fct() end
+	end)
+	self.key:addBind("ACCEPT", function() self:sound("button") self.fct() end)
+
+	self.rw, self.rh = w, h
+	self.frame = self:makeFrame("ui/button", self.w, self.h)
+	self.frame_sel = self:makeFrame("ui/button_sel", self.w, self.h)
+
+	-- Add a bit of padding
+	self.w = self.w + 6
+	self.h = self.h + 6
+end
+
+function _M:display(x, y, nb_keyframes, ox, oy)
+	self.last_display_x = ox
+	self.last_display_y = oy
+
+	if self.hide then return end
+
+	x = x + 3
+	y = y + 3
+	ox = ox + 3
+	oy = oy + 3
+	local mx, my, button = core.mouse.get()
+	if self.focused then
+		if not self.no_decoration then
+			if button == 1 and mx > ox and mx < ox+self.w and my > oy and my < oy+self.h then
+				self:drawFrame(self.frame, x, y, 0, 1, 0, 1)
+			elseif self.glow then
+				local v = self.glow + (1 - self.glow) * (1 + math.cos(core.game.getTime() / 300)) / 2
+				self:drawFrame(self.frame, x, y, v*0.8, v, 0, 1)
+			else
+				self:drawFrame(self.frame_sel, x, y)
+			end
+		end
+		self.tex[1]:toScreenFull(x-frame_ox1, y-frame_oy1, self.rw, self.rh, self.tex[2], self.tex[3])
+	else
+		if not self.no_decoration then
+			if self.glow then
+				local v = self.glow + (1 - self.glow) * (1 + math.cos(core.game.getTime() / 300)) / 2
+				self:drawFrame(self.frame, x, y, v*0.8, v, 0, self.alpha_unfocus)
+			else
+				self:drawFrame(self.frame, x, y, 1, 1, 1, self.alpha_unfocus)
+			end
+
+			if self.focus_decay and not self.glow then
+				self:drawFrame(self.frame_sel, x, y, 1, 1, 1, self.alpha_unfocus * self.focus_decay / self.focus_decay_max_d)
+				self.focus_decay = self.focus_decay - nb_keyframes
+				if self.focus_decay <= 0 then self.focus_decay = nil end
+			end
+		end
+		self.tex[1]:toScreenFull(x-frame_ox1, y-frame_oy1, self.rw, self.rh, self.tex[2], self.tex[3], 1, 1, 1, self.alpha_unfocus)
+	end
+end
diff --git a/game/engines/default/engine/ui/Checkbox.lua b/game/engines/default/engine/ui/Checkbox.lua
index 53bd60a006a4d1090cd393f4c0e5f478698df811..be2bb86b1666456780ac935f3e705c97f21a53e2 100644
--- a/game/engines/default/engine/ui/Checkbox.lua
+++ b/game/engines/default/engine/ui/Checkbox.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Dialog.lua b/game/engines/default/engine/ui/Dialog.lua
index 52c2e4ed327d6ee66563c7d887871a4ec83d9b06..f346127c668198fda259497415b6771d2f64a733 100644
--- a/game/engines/default/engine/ui/Dialog.lua
+++ b/game/engines/default/engine/ui/Dialog.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -230,6 +230,7 @@ function _M:init(title, w, h, x, y, alpha, font, showup, skin)
 		b5 = "ui/dialogframe_5.png",
 		shadow = conf.frame_shadow,
 		a = conf.frame_alpha or 1,
+		darkness = conf.frame_darkness or 1,
 		particles = table.clone(conf.particles, true),
 	}
 	self.frame.ox1 = self.frame.ox1 or conf.frame_ox1
@@ -572,18 +573,18 @@ function _M:drawFrame(x, y, r, g, b, a)
 	x = x + self.frame.ox1
 	y = y + self.frame.oy1
 
-	-- Corners
-	self.b7.t:toScreenFull(x, y, self.b7.w, self.b7.h, self.b7.tw, self.b7.th, r, g, b, a)
-	self.b1.t:toScreenFull(x, y + self.frame.h - self.b1.h, self.b1.w, self.b1.h, self.b1.tw, self.b1.th, r, g, b, a)
-	self.b9.t:toScreenFull(x + self.frame.w - self.b9.w, y, self.b9.w, self.b9.h, self.b9.tw, self.b9.th, r, g, b, a)
-	self.b3.t:toScreenFull(x + self.frame.w - self.b3.w, y + self.frame.h - self.b3.h, self.b3.w, self.b3.h, self.b3.tw, self.b3.th, r, g, b, a)
-
 	-- Sides
 	self.b8.t:toScreenFull(x + self.b7.w, y, self.frame.w - self.b7.w - self.b9.w, self.b8.h, self.b8.tw, self.b8.th, r, g, b, a)
 	self.b2.t:toScreenFull(x + self.b7.w, y + self.frame.h - self.b3.h, self.frame.w - self.b7.w - self.b9.w, self.b2.h, self.b2.tw, self.b2.th, r, g, b, a)
 	self.b4.t:toScreenFull(x, y + self.b7.h, self.b4.w, self.frame.h - self.b7.h - self.b1.h, self.b4.tw, self.b4.th, r, g, b, a)
 	self.b6.t:toScreenFull(x + self.frame.w - self.b9.w, y + self.b7.h, self.b6.w, self.frame.h - self.b7.h - self.b1.h, self.b6.tw, self.b6.th, r, g, b, a)
 
+	-- Corners
+	self.b1.t:toScreenFull(x, y + self.frame.h - self.b1.h, self.b1.w, self.b1.h, self.b1.tw, self.b1.th, r, g, b, a)
+	self.b7.t:toScreenFull(x, y, self.b7.w, self.b7.h, self.b7.tw, self.b7.th, r, g, b, a)
+	self.b9.t:toScreenFull(x + self.frame.w - self.b9.w, y, self.b9.w, self.b9.h, self.b9.tw, self.b9.th, r, g, b, a)
+	self.b3.t:toScreenFull(x + self.frame.w - self.b3.w, y + self.frame.h - self.b3.h, self.b3.w, self.b3.h, self.b3.tw, self.b3.th, r, g, b, a)
+
 	-- Body
 	self.b5.t:toScreenFull(x + self.b7.w, y + self.b7.h, self.frame.w - self.b7.w - self.b3.w , self.frame.h - self.b7.h - self.b3.h, self.b5.tw, self.b5.th, r, g, b, a)
 
@@ -635,9 +636,16 @@ end
 function _M:firstDisplay()
 end
 
+function _M:setTitleShadowShader(shader, power)
+	self.shadow_shader = shader
+	self.shadow_power = power
+end
+
 function _M:toScreen(x, y, nb_keyframes)
 	if self.__hidden then return end
 
+	local shader = self.shadow_shader
+
 	local zoom = 1
 	if self.__showup then
 		local eff = self.__showup_effect or "pop"
@@ -666,12 +674,21 @@ function _M:toScreen(x, y, nb_keyframes)
 
 	-- Draw the frame and shadow
 	if self.frame.shadow then self:drawFrame(x + self.frame.shadow.x, y + self.frame.shadow.y, 0, 0, 0, self.frame.shadow.a) end
-	self:drawFrame(x, y, 1, 1, 1, self.frame.a)
+	self:drawFrame(x, y, self.frame.darkness, self.frame.darkness, self.frame.darkness, self.frame.a)
 
 	-- Title
 	if self.title then
-		if self.title_shadow then self.title_tex[1]:toScreenFull(x + (self.w - self.title_tex.w) / 2 + 3 + self.frame.title_x, y + 3 + self.frame.title_y, self.title_tex.w, self.title_tex.h, self.title_tex[2], self.title_tex[3], 0, 0, 0, 0.5) end
+		if self.title_shadow then
+			if shader then
+				shader:use(true)
+				shader:uniOutlineSize(self.shadow_power, self.shadow_power)
+				shader:uniTextSize(self.title_tex[2], self.title_tex[3])
+			else
+				self.title_tex[1]:toScreenFull(x + (self.w - self.title_tex.w) / 2 + 3 + self.frame.title_x, y + 3 + self.frame.title_y, self.title_tex.w, self.title_tex.h, self.title_tex[2], self.title_tex[3], 0, 0, 0, 0.5)
+			end
+		end
 		self.title_tex[1]:toScreenFull(x + (self.w - self.title_tex.w) / 2 + self.frame.title_x, y + self.frame.title_y, self.title_tex.w, self.title_tex.h, self.title_tex[2], self.title_tex[3])
+		if self.title_shadow and shader then shader:use(false) end
 	end
 
 	self:innerDisplayBack(x, y, nb_keyframes, tx, ty)
diff --git a/game/engines/default/engine/ui/Dropdown.lua b/game/engines/default/engine/ui/Dropdown.lua
index 3f5176ffb4ae10dbdc11100fa4f21c0bdbcd0e91..a670c91ac9417e7c9460d29d3b0cacbd74c0ebac 100644
--- a/game/engines/default/engine/ui/Dropdown.lua
+++ b/game/engines/default/engine/ui/Dropdown.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Empty.lua b/game/engines/default/engine/ui/Empty.lua
index 6fd7291882bae197779dc9c5bf4d828f2fb5300d..1a93b5f875cf341ff1e206b2cf91ec8d7a4ac69e 100644
--- a/game/engines/default/engine/ui/Empty.lua
+++ b/game/engines/default/engine/ui/Empty.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/EquipDoll.lua b/game/engines/default/engine/ui/EquipDoll.lua
index 56e67c9eb947db1b740a5acd4ba0f577bd481ad1..eb338d74967fc5aaf61c0bcd0d67865649f41928 100644
--- a/game/engines/default/engine/ui/EquipDoll.lua
+++ b/game/engines/default/engine/ui/EquipDoll.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/EquipDollFrame.lua b/game/engines/default/engine/ui/EquipDollFrame.lua
index 7c3dafcfbf14642f3dfbb93c664464617f25eca1..144a8023a3b013968b61b61d3276df8b21e65586 100644
--- a/game/engines/default/engine/ui/EquipDollFrame.lua
+++ b/game/engines/default/engine/ui/EquipDollFrame.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Focusable.lua b/game/engines/default/engine/ui/Focusable.lua
index 764991d5d32959cf928980be7a7d7f2bebfc46c9..460725258b0af21c5b190cffc67fef33a0130601 100644
--- a/game/engines/default/engine/ui/Focusable.lua
+++ b/game/engines/default/engine/ui/Focusable.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/GenericContainer.lua b/game/engines/default/engine/ui/GenericContainer.lua
index 30b8516d180bc509b6eb16a2d1433f3c264cd955..ab77fed1a6555376e08ed9d2a7880b14b9c09173 100644
--- a/game/engines/default/engine/ui/GenericContainer.lua
+++ b/game/engines/default/engine/ui/GenericContainer.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Gestures.lua b/game/engines/default/engine/ui/Gestures.lua
index 7eb8b3c415410988ed961381b4bea6f1bfb6092e..490058246f9def6c510006a2f769ed25e7b85af4 100644
--- a/game/engines/default/engine/ui/Gestures.lua
+++ b/game/engines/default/engine/ui/Gestures.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Image.lua b/game/engines/default/engine/ui/Image.lua
index 015e369a815c70abcacf1f829c84427c13daf5d8..c0dc7c0e5bde6d939eae1db949dc5cd0bf0b8f60 100644
--- a/game/engines/default/engine/ui/Image.lua
+++ b/game/engines/default/engine/ui/Image.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/ImageList.lua b/game/engines/default/engine/ui/ImageList.lua
index 957dc85705cf458a73de043ccf195ff64e3b2d9e..306a27f1df4e293aa2e68999c5637f5df67aeafa 100644
--- a/game/engines/default/engine/ui/ImageList.lua
+++ b/game/engines/default/engine/ui/ImageList.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Inventory.lua b/game/engines/default/engine/ui/Inventory.lua
index 3242d176106e0de2a88277b6d4a11a97f0288ace..d550355eb54a9bd0ce686613d59bc2041da3e4f4 100644
--- a/game/engines/default/engine/ui/Inventory.lua
+++ b/game/engines/default/engine/ui/Inventory.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/List.lua b/game/engines/default/engine/ui/List.lua
index cf7169bad25068079e81d3bb46c2484c028c8a21..0b9165fe70be3227d537e6ac6b31ee2b554e71bb 100644
--- a/game/engines/default/engine/ui/List.lua
+++ b/game/engines/default/engine/ui/List.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/ListColumns.lua b/game/engines/default/engine/ui/ListColumns.lua
index 7ab1860142111c1d4e7884bc32642efdedd14069..459a638f7863cf33b98cdd23251882ccdb85228c 100644
--- a/game/engines/default/engine/ui/ListColumns.lua
+++ b/game/engines/default/engine/ui/ListColumns.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Numberbox.lua b/game/engines/default/engine/ui/Numberbox.lua
index 68f3397fca9e318f62778ee72e5304f660cf17cb..eb118f0280aba11c8fabc7e90bdace2ef08e6501 100644
--- a/game/engines/default/engine/ui/Numberbox.lua
+++ b/game/engines/default/engine/ui/Numberbox.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Separator.lua b/game/engines/default/engine/ui/Separator.lua
index 1d5154fdef8768bbd850b7856e205b4012367824..fbc8dab26afdc917b5d6f4bf2eb674118cdc4498 100644
--- a/game/engines/default/engine/ui/Separator.lua
+++ b/game/engines/default/engine/ui/Separator.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Slider.lua b/game/engines/default/engine/ui/Slider.lua
index 2b59ac41ec8636e245b6887544208003bea0ce3b..60a9ab21c516e07a9f23f0cee95e61eacf43e37e 100644
--- a/game/engines/default/engine/ui/Slider.lua
+++ b/game/engines/default/engine/ui/Slider.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/SubDialog.lua b/game/engines/default/engine/ui/SubDialog.lua
index 3f8e9e720df1bdffe0aecd7aaeec967450054812..e689c6f32f2ad92e29200ddee90e36e0f1237a84 100644
--- a/game/engines/default/engine/ui/SubDialog.lua
+++ b/game/engines/default/engine/ui/SubDialog.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/SurfaceZone.lua b/game/engines/default/engine/ui/SurfaceZone.lua
index 3d5ea3d32a0289773d73d16a2d7224f515955926..895f347d7de7632b8b6bac2bfe2a57381d5de4af 100644
--- a/game/engines/default/engine/ui/SurfaceZone.lua
+++ b/game/engines/default/engine/ui/SurfaceZone.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Tab.lua b/game/engines/default/engine/ui/Tab.lua
index 04ea50cb740b57233489e2853ed2ee42c8d7ba0b..15472b942e3851aa4c1da0cc15b7cef05614d0a3 100644
--- a/game/engines/default/engine/ui/Tab.lua
+++ b/game/engines/default/engine/ui/Tab.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Tabs.lua b/game/engines/default/engine/ui/Tabs.lua
index 4c65a7180ec9a182c575b3d880c81088ad144309..2e6179cc6f87e76cbd9f192c7f9ce66e69d4c556 100644
--- a/game/engines/default/engine/ui/Tabs.lua
+++ b/game/engines/default/engine/ui/Tabs.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Textbox.lua b/game/engines/default/engine/ui/Textbox.lua
index df7254718a970ac9e2b52bd565c3eafd9cc2c819..bb453f02ec2a2ca0885c8ca661d012e0a413e56f 100644
--- a/game/engines/default/engine/ui/Textbox.lua
+++ b/game/engines/default/engine/ui/Textbox.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Textzone.lua b/game/engines/default/engine/ui/Textzone.lua
index 45d8818f848fa9f4fe48d0ba8771068cd40a4327..120e190163589b3b7b8c57209d2dfa09f1d8a7f2 100644
--- a/game/engines/default/engine/ui/Textzone.lua
+++ b/game/engines/default/engine/ui/Textzone.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/TextzoneList.lua b/game/engines/default/engine/ui/TextzoneList.lua
index 87b40b5b84f34f5fb9a5b2235322bc6cad7f3e17..372d64f4fcbf17d2bdedd57ab8380100cb782115 100644
--- a/game/engines/default/engine/ui/TextzoneList.lua
+++ b/game/engines/default/engine/ui/TextzoneList.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/TreeList.lua b/game/engines/default/engine/ui/TreeList.lua
index 5da6c5aac4b3760e2dcb5fee0653b1d9befa7074..d0c4aa9d3586503cd5cd93b8b4b0cc083d4b02d9 100644
--- a/game/engines/default/engine/ui/TreeList.lua
+++ b/game/engines/default/engine/ui/TreeList.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/UIContainer.lua b/game/engines/default/engine/ui/UIContainer.lua
index 382ffd0999cf99854cae955b3056a8a2dba142b4..acb2ba8d4ad11bd2e7824cf34fac0f06c3c14ceb 100644
--- a/game/engines/default/engine/ui/UIContainer.lua
+++ b/game/engines/default/engine/ui/UIContainer.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/UIGroup.lua b/game/engines/default/engine/ui/UIGroup.lua
index 6d45ee1ff9920c9a51ab1151478e4294bd99c91b..26711848eb582e89c66b7aad12b44ccde40f1c1c 100644
--- a/game/engines/default/engine/ui/UIGroup.lua
+++ b/game/engines/default/engine/ui/UIGroup.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/VariableList.lua b/game/engines/default/engine/ui/VariableList.lua
index e9fb95491006bc0d92a3e3fcb5236a5a59031332..4ca408c9cb95bad28657f0ea5daa5b90682f2aaa 100644
--- a/game/engines/default/engine/ui/VariableList.lua
+++ b/game/engines/default/engine/ui/VariableList.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/Waiter.lua b/game/engines/default/engine/ui/Waiter.lua
index 6b9a59392a35f44a84d62a72ab0d9b8ee3824dbb..82a9c2612b14ef9215fbd0e3304360575adf83c5 100644
--- a/game/engines/default/engine/ui/Waiter.lua
+++ b/game/engines/default/engine/ui/Waiter.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/engine/ui/WebView.lua b/game/engines/default/engine/ui/WebView.lua
index 11c5b359f3fa9fa64004030da2d72f8ffe47dedb..557f17b4ca90632f6481170f98ef9f7a799c676e 100644
--- a/game/engines/default/engine/ui/WebView.lua
+++ b/game/engines/default/engine/ui/WebView.lua
@@ -30,6 +30,26 @@ function _M:init(t)
 	self.url = assert(t.url, "no webview url")
 	self.on_title = t.on_title
 	self.allow_downloads = t.allow_downloads or {}
+	self.has_frame = t.has_frame
+	self.never_clean = t.never_clean
+	self.allow_popup = t.allow_popup
+	self.allow_login = t.allow_login
+
+	if self.allow_login and self.url:find("^http://te4%.org/") and profile.auth then
+		local param = "_te4ah="..profile.auth.hash.."&_te4ad="..profile.auth.drupid
+
+		local first = self.url:find("?", 1, 1)
+		if first then self.url = self.url.."&"..param
+		else self.url = self.url.."?"..param end
+	end
+
+	if self.url:find("^http://te4%.org/")  then
+		local param = "_te4"
+
+		local first = self.url:find("?", 1, 1)
+		if first then self.url = self.url.."&"..param
+		else self.url = self.url.."?"..param end
+	end
 
 	Base.init(self, t)
 end
@@ -38,18 +58,31 @@ function _M:generate()
 	self.mouse:reset()
 	self.key:reset()
 
-	self.view = core.webview.new(self.w, self.h, self.url)
-	self.oldloading = true
+	local handlers = {
+		on_title = function(view, title) if self.on_title then self.on_title(title) end end,
+		on_popup = function(view, url, w, h) if self.allow_popup then
+			local Dialog = require "engine.ui.Dialog"
+			Dialog:webPopup(url, w, h)
+		end end,
+		on_loading = function(view, url, status)
+			print("===loading", url, status)
+			self.loading = status
+		end,
+	}
+	if self.allow_downloads then self:onDownload(handlers) end
+	self.view = core.webview.new(self.w, self.h, self.url, handlers)
+	self.loading = 0
+	self.loading_rotation = 0
 	self.scroll_inertia = 0
 
-	self:onDownload()
+	if self.has_frame then
+		self.frame = Base:makeFrame("ui/tooltip/", self.w + 8, self.h + 8)
+	end
+	self.loading_icon = self:getUITexture("ui/waiter/loading.png")
 
 	self.mouse:registerZone(0, 0, self.w, self.h, function(button, x, y, xrel, yrel, bx, by, event)
+		if not self.view then return end
 		if event == "button" then
-	print("====", self.view:setMethod("testclick", function(...)
-		print("===TESTCLICKED", ...)
-	end))
-
 			if button == "wheelup" then self.scroll_inertia = math.min(self.scroll_inertia, 0) - 5
 			elseif button == "wheeldown" then self.scroll_inertia = math.max(self.scroll_inertia, 0) + 5
 			elseif button == "left" then self.view:injectMouseButton(false, 1) self.view:injectMouseButton(true, 1)
@@ -68,28 +101,42 @@ function _M:generate()
 		end
 	end)
 	
-	function self.key.receiveKey(key, sym, ctrl, shift, alt, meta, unicode, isup, key)
-		local symb = self.key.sym_to_name[sym]
-		if not symb then return end
-		local asymb = self.mapKey[symb]
-		if not asymb then return end
-		self.view:injectKey(isup, symb, asymb, unicode)
+	if core.webview.kind == "awesomium" then
+		function self.key.receiveKey(_, sym, ctrl, shift, alt, meta, unicode, isup, key, ismouse, keysym)
+			if not self.view then return end
+			local symb = self.key.sym_to_name[sym]
+			if not symb then return end
+			local asymb = self.awesomiumMapKey[symb]
+			if not asymb then return end
+			self.view:injectKey(isup, symb, asymb, unicode)
+		end
+	elseif core.webview.kind == "cef3" then
+		function self.key.receiveKey(_, sym, ctrl, shift, alt, meta, unicode, isup, key, ismouse, keysym)
+			if not self.view then return end
+			if unicode then
+				keysym = unicode:sub(1):byte()
+			end
+			self.view:injectKey(isup, keysym)
+		end
 	end
 end
 
 function _M:on_focus(v)
 	game:onTickEnd(function() self.key:unicodeInput(v) end)
-	self.view:focus(v)
+	if self.view then self.view:focus(v) end
 end
 
-function _M:makeDownloadbox(file)
+function _M:makeDownloadbox(downid, file)
 	local Dialog = require "engine.ui.Dialog"
 	local Waitbar = require "engine.ui.Waitbar"
+	local Button = require "engine.ui.Button"
 
 	local d = Dialog.new("Download: "..file, 600, 100)
+	local b = Button.new{text="Cancel", fct=function() self.view:downloadAction(downid, false) game:unregisterDialog(d) end}
 	local w = Waitbar.new{size=600, text=file}
 	d:loadUI{
 		{left=0, top=0, ui=w},
+		{right=0, bottom=0, ui=b},
 	}
 	d:setupUI(true, true)
 	function d:updateFill(...) w:updateFill(...) end
@@ -97,22 +144,24 @@ function _M:makeDownloadbox(file)
 end
 
 function _M:on_dialog_cleanup()
-	self.downloader = nil
-	self.view = nil
+	if not self.never_clean then
+		self.downloader = nil
+		self.view = nil
+	end
 end
 
-function _M:onDownload(request, update, finish)
+function _M:onDownload(handlers)
 	local Dialog = require "engine.ui.Dialog"
 
-	self.downloader = core.webview.downloader(function(downid, url, file, mime)
-		print(downid, url, file, mime)
+	handlers.on_download_request = function(view, downid, url, file, mime)
 		if mime == "application/t-engine-addon" and self.allow_downloads.addons and url:find("^http://te4%.org/") then
 			local path = fs.getRealPath("/addons/")
 			if path then
 				Dialog:yesnoPopup("Confirm addon install/update", "Are you sure you want to install this addon? ("..file..")", function(ret)
 					if ret then
 						print("Accepting addon download to:", path..file)
-						self.download_dialog = self:makeDownloadbox(file)
+						self.download_dialog = self:makeDownloadbox(downid, file)
+						self.download_dialog.install_kind = "Addon"
 						game:registerDialog(self.download_dialog)
 						self.view:downloadAction(downid, path..file)
 					else
@@ -127,7 +176,8 @@ function _M:onDownload(request, update, finish)
 				Dialog:yesnoPopup("Confirm module install/update", "Are you sure you want to install this module? ("..file..")", function(ret)
 					if ret then
 						print("Accepting module download to:", path..file)
-						self.download_dialog = self:makeDownloadbox(file)
+						self.download_dialog = self:makeDownloadbox(downid, file)
+						self.download_dialog.install_kind = "Game Module"
 						game:registerDialog(self.download_dialog)
 						self.view:downloadAction(downid, path..file)
 					else
@@ -138,12 +188,23 @@ function _M:onDownload(request, update, finish)
 			end
 		end
 		self.view:downloadAction(downid, false)
-	end, function(cur_size, total_size, speed)
+	end
+
+	handlers.on_download_update = function(view, downid, cur_size, total_size, percent, speed)
+		if not self.download_dialog then return end
 		self.download_dialog:updateFill(cur_size, total_size, ("%d%% - %d KB/s"):format(cur_size * 100 / total_size, speed / 1024))
-	end, function(url, saved_path)
+	end
+
+	handlers.on_download_finish = function(view, downid)
+		if not self.download_dialog then return end
 		game:unregisterDialog(self.download_dialog)
-	end)
-	self.view:downloader(self.downloader)
+		if self.download_dialog.install_kind == "Addon" then
+			Dialog:simplePopup("Addon installed!", "Addon installation successful. New addons are only active for new characters.")
+		elseif self.download_dialog.install_kind == "Game Module" then
+			Dialog:simplePopup("Game installed!", "Game installation successful. Have fun!")
+		end
+		self.download_dialog = nil
+	end
 end
 
 function _M:display(x, y, nb_keyframes, screen_x, screen_y, offset_x, offset_y, local_x, local_y)
@@ -151,19 +212,28 @@ function _M:display(x, y, nb_keyframes, screen_x, screen_y, offset_x, offset_y,
 	elseif self.scroll_inertia < 0 then self.scroll_inertia = math.min(self.scroll_inertia + 1, 0)
 	end
 
+	if self.frame then
+		self:drawFrame(self.frame, x - 4, y - 4, 0, 0, 0, 0.3, self.w, self.h) -- shadow
+		self:drawFrame(self.frame, x - 4, y - 4, 1, 1, 1, 0.75) -- unlocked frame
+	end
+
 	if self.view then
 		if self.scroll_inertia ~= 0 then self.view:injectMouseWheel(0, self.scroll_inertia) end
 		self.view:toScreen(x, y)
+	end
 
-		local loading = self.view:loading()
-		if self.oldloading ~= loading then
-			if self.on_title then self.on_title(self.view:title()) end
-		end
-		self.oldloading = loading
+	if self.loading < 1 then
+		self.loading_rotation = self.loading_rotation + nb_keyframes * 8
+		core.display.glMatrix(true)
+		core.display.glTranslate(x + self.loading_icon.w / 2, y + self.loading_icon.h / 2, 0)
+		core.display.glRotate(self.loading_rotation, 0, 0, 1)
+		self.loading_icon.t:toScreenFull(-self.loading_icon.w / 2, -self.loading_icon.h / 2, self.loading_icon.w, self.loading_icon.h, self.loading_icon.tw, self.loading_icon.th)
+		core.display.glMatrix(false)
 	end
 end
 
-_M.mapKey = {
+
+_M.awesomiumMapKey = {
 	-- _BACK (08) BACKSPACE key
 	_BACKSPACE = 0x08,
 
diff --git a/game/engines/default/engine/utils.lua b/game/engines/default/engine/utils.lua
index aa70b813228ccd4541c8ee948596082cba7f43ae..ae59451ca1cf63f9749fdba853996f8625acc650 100644
--- a/game/engines/default/engine/utils.lua
+++ b/game/engines/default/engine/utils.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -34,6 +34,13 @@ function math.round(v, mult, num)
 	return v >= 0 and math.floor((v + mult/2)/mult) * mult/num or math.ceil((v - mult/2)/mult) * mult/num
 end
 
+function math.scale(i, imin, imax, dmin, dmax)
+	local bi = i - imin
+	local bm = imax - imin
+	local dm = dmax - dmin
+	return bi * dm / bm + dmin
+end
+
 function lpeg.anywhere (p)
 	return lpeg.P{ p + 1 * lpeg.V(1) }
 end
diff --git a/game/engines/default/engine/version.lua b/game/engines/default/engine/version.lua
index 460a9a210965660f236fe874a6cd55b2cbb704f1..ea605b02a9374ef9d8aba0359f373a1afc591f33 100644
--- a/game/engines/default/engine/version.lua
+++ b/game/engines/default/engine/version.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,7 +18,7 @@
 -- darkgod@te4.org
 
 -- Engine Version
-engine.version = {1,1,3,"te4",17}
+engine.version = {1,2,0,"te4",17}
 engine.require_c_core = engine.version[5]
 engine.version_id = ("%s-%d_%d.%d.%d"):format(engine.version[4], engine.require_c_core, engine.version[1], engine.version[2], engine.version[3])
 
diff --git a/game/engines/default/modules/boot/ai/player.lua b/game/engines/default/modules/boot/ai/player.lua
index 7699a095319e07bb4bf286cb50205d569fd186a1..475877395ce5fb6662845074e916a1bb7c512240 100644
--- a/game/engines/default/modules/boot/ai/player.lua
+++ b/game/engines/default/modules/boot/ai/player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/class/Actor.lua b/game/engines/default/modules/boot/class/Actor.lua
index f66c6a1af6c1658aad552e3c234878d369076360..4f2e1e536b1a893472cc8abc57ed36ea7c38ab19 100644
--- a/game/engines/default/modules/boot/class/Actor.lua
+++ b/game/engines/default/modules/boot/class/Actor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/class/Game.lua b/game/engines/default/modules/boot/class/Game.lua
index d3f4fef935105d52872bca5b0d202d2aa9a7a8be..bfb4d60877a0b49212a7f8c8d3af6bb92a32b06e 100644
--- a/game/engines/default/modules/boot/class/Game.lua
+++ b/game/engines/default/modules/boot/class/Game.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -64,7 +64,7 @@ function _M:init()
 		self.background, self.background_tw, self.background_th = self.background:glTexture()
 	end
 
-	self.tooltip = Tooltip.new(nil, 14, nil, colors.DARK_GREY, 380)
+	if not core.webview then self.tooltip = Tooltip.new(nil, 14, nil, colors.DARK_GREY, 380) end
 
 --	self.refuse_threads = true
 	self.normal_key = self.key
@@ -89,6 +89,13 @@ end
 function _M:run()
 	self:triggerHook{"Boot:run"}
 
+	-- Web Tooltip?
+	if core.webview then
+		self.webtooltip = require("engine.ui.WebView").new{width=380, height=500, has_frame=true, never_clean=true, allow_popup=true,
+			url = ("http://te4.org/tooltip-ingame?steam=%d&v=%d.%d.%d"):format(core.steam and 1 or 0, engine.version[1], engine.version[2], engine.version[3])
+		}
+	end
+
 	self.flyers = FlyingText.new()
 	self:setFlyingText(self.flyers)
 	self.log = function(style, ...) end
@@ -126,8 +133,10 @@ Remember that in most roguelikes death is usually permanent so be careful!
 Now go and have some fun!]]
 		}
 
-		self:serverNews()
-		self:updateNews()
+		if self.tooltip then
+			self:serverNews()
+			self:updateNews()
+		end
 	end
 
 --	self:installNewEngine()
@@ -178,6 +187,11 @@ Safe Mode disabled all graphical options and sets a low FPS. It is not advisable
 Please go to the Video Options and try enabling/disabling options and then restarting until you do not get this message.
 A usual problem is shaders and thus should be your first target to disable.]], 700)
 	end
+
+	local reboot_message = core.game.getRebootMessage()
+	if reboot_message then
+		Dialog:simpleLongPopup("Message", reboot_message, 700)
+	end
 end
 
 function _M:grabAddons()
@@ -311,6 +325,8 @@ function _M:getPlayer()
 end
 
 function _M:updateNews()
+	if not self.tooltip then return end
+
 	if self.news.link then
 		self.tooltip:set("#AQUAMARINE#%s#WHITE#\n---\n%s\n---\n#LIGHT_BLUE##{underline}#%s#LAST##{normal}#", self.news.title, self.news.text, self.news.link)
 	else
@@ -367,8 +383,12 @@ function _M:display(nb_keyframes)
 			end
 			self.background:toScreenFull(x, y, w, h, w * self.background_tw / self.background_w, h * self.background_th / self.background_h)
 		end
-		self.tooltip:display()
-		self.tooltip:toScreen(5, 5)
+		if self.tooltip then
+			if #self.dialogs == 0 or not self.dialogs[#self.dialogs].__show_only then
+				self.tooltip:display()
+				self.tooltip:toScreen(5, 5)
+			end
+		end
 		self.logdisplay:toScreen()
 		engine.GameEnergyBased.display(self, nb_keyframes)
 		if self.full_fbo then self.full_fbo:use(false) self.full_fbo:toScreen(0, 0, self.w, self.h, self.full_fbo_shader.shad) end
@@ -405,8 +425,12 @@ function _M:display(nb_keyframes)
 --		core.display.drawQuad(0, 0, game.w, game.h, 128, 128, 128, 128)
 	end
 
-	self.tooltip:display()
-	self.tooltip:toScreen(5, 5)
+	if self.tooltip then
+		if #self.dialogs == 0 or not self.dialogs[#self.dialogs].__show_only then
+			self.tooltip:display()
+			self.tooltip:toScreen(5, 5)
+		end
+	end
 
 	self.logdisplay:toScreen()
 
diff --git a/game/engines/default/modules/boot/class/Grid.lua b/game/engines/default/modules/boot/class/Grid.lua
index fc24ef4e283f902dc3d9ee5521233bef602a0f5c..bae725d0ba316716ee7483696689880f44f0e4bf 100644
--- a/game/engines/default/modules/boot/class/Grid.lua
+++ b/game/engines/default/modules/boot/class/Grid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/class/NPC.lua b/game/engines/default/modules/boot/class/NPC.lua
index b4d6aa41a6e2aa84e8b61de0cd9a42bcca6fcdf0..7b8b746076bb74377781ae26e20a39f808e7719a 100644
--- a/game/engines/default/modules/boot/class/NPC.lua
+++ b/game/engines/default/modules/boot/class/NPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/class/NicerTiles.lua b/game/engines/default/modules/boot/class/NicerTiles.lua
index 55fb968c59df64ceb418726d389a45e63ad03091..16e920e9e5a62d68ac4e2e343a194e7702019edd 100644
--- a/game/engines/default/modules/boot/class/NicerTiles.lua
+++ b/game/engines/default/modules/boot/class/NicerTiles.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/class/Player.lua b/game/engines/default/modules/boot/class/Player.lua
index 357a8a15b4732686be0f01e165e2f8f0c7e557bf..9f506156ac3e94113f2725ba1e7cda2b8f0ed175 100644
--- a/game/engines/default/modules/boot/class/Player.lua
+++ b/game/engines/default/modules/boot/class/Player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/class/interface/Combat.lua b/game/engines/default/modules/boot/class/interface/Combat.lua
index f1136908f57bce2e42ee234b7461d76d2910b795..4b70886972cd990073e747c6401cd56b38f022db 100644
--- a/game/engines/default/modules/boot/class/interface/Combat.lua
+++ b/game/engines/default/modules/boot/class/interface/Combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/birth/descriptors.lua b/game/engines/default/modules/boot/data/birth/descriptors.lua
index f520c9dcef2e86d23e367b03c047c5e330bd91af..ace642560644bd8be8aca4e081b4dec1317d4fde 100644
--- a/game/engines/default/modules/boot/data/birth/descriptors.lua
+++ b/game/engines/default/modules/boot/data/birth/descriptors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/damage_types.lua b/game/engines/default/modules/boot/data/damage_types.lua
index f8e4fe3f2136355e4e44b16d43acc88f54f8724c..3349266d5b2b172ec330640b15804da1c75c7628 100644
--- a/game/engines/default/modules/boot/data/damage_types.lua
+++ b/game/engines/default/modules/boot/data/damage_types.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/grids/basic.lua b/game/engines/default/modules/boot/data/general/grids/basic.lua
index a5e3335644adf22266892cc06ac704139fd8dfa5..1d4508c524550d79531b9419b364a4fc605e9cba 100644
--- a/game/engines/default/modules/boot/data/general/grids/basic.lua
+++ b/game/engines/default/modules/boot/data/general/grids/basic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/grids/forest.lua b/game/engines/default/modules/boot/data/general/grids/forest.lua
index 54bcd27a869bd4293342be5102e89af3a538ee5e..ae389de571312d6202c3c7026b011e9297de4cee 100644
--- a/game/engines/default/modules/boot/data/general/grids/forest.lua
+++ b/game/engines/default/modules/boot/data/general/grids/forest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/grids/underground.lua b/game/engines/default/modules/boot/data/general/grids/underground.lua
index 1ca68e0107eaff2c1835c4c16d7dafd5ec7e5acf..decce192ce3836cf5c26045de1f570927e32e1d1 100644
--- a/game/engines/default/modules/boot/data/general/grids/underground.lua
+++ b/game/engines/default/modules/boot/data/general/grids/underground.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/grids/water.lua b/game/engines/default/modules/boot/data/general/grids/water.lua
index 52e276c10c5a256cd40fc5596b45813301a88374..b4b6e6d94c87c47674bd576b6910f7cc038f05c4 100644
--- a/game/engines/default/modules/boot/data/general/grids/water.lua
+++ b/game/engines/default/modules/boot/data/general/grids/water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/npcs/canine.lua b/game/engines/default/modules/boot/data/general/npcs/canine.lua
index 4b6edb449ca7a0b10bc47c2c4a43a0bfdee26667..30e4c29261f7b91e34f8a74b8f21eeb0cf52c577 100644
--- a/game/engines/default/modules/boot/data/general/npcs/canine.lua
+++ b/game/engines/default/modules/boot/data/general/npcs/canine.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/npcs/skeleton.lua b/game/engines/default/modules/boot/data/general/npcs/skeleton.lua
index 23cc97416e58a0f0ed861aa5399451dd9f63a85d..03b25e8a61bd06e543fd07e6a2de2557008519ae 100644
--- a/game/engines/default/modules/boot/data/general/npcs/skeleton.lua
+++ b/game/engines/default/modules/boot/data/general/npcs/skeleton.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/general/npcs/troll.lua b/game/engines/default/modules/boot/data/general/npcs/troll.lua
index 6628ba5a039f19ed747ec8f34ecbbaa167f8158b..ebff694ccd2915e9933acdf6eeb712f76c3a5885 100644
--- a/game/engines/default/modules/boot/data/general/npcs/troll.lua
+++ b/game/engines/default/modules/boot/data/general/npcs/troll.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/facebook.png b/game/engines/default/modules/boot/data/gfx/facebook.png
new file mode 100644
index 0000000000000000000000000000000000000000..5912beea3abce00403fdbd14d4b3f61ab1b4fadc
Binary files /dev/null and b/game/engines/default/modules/boot/data/gfx/facebook.png differ
diff --git a/game/engines/default/modules/boot/data/gfx/forums.png b/game/engines/default/modules/boot/data/gfx/forums.png
new file mode 100644
index 0000000000000000000000000000000000000000..d679252e57602f4ed67c017a620cb8af7921d513
Binary files /dev/null and b/game/engines/default/modules/boot/data/gfx/forums.png differ
diff --git a/game/engines/default/modules/boot/data/gfx/particles/acid.lua b/game/engines/default/modules/boot/data/gfx/particles/acid.lua
index 2b97619892e579c2b8118348b0e5254f67258090..ddf4cfc04c25eea8fcf765c791190efa81d29fbf 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/acid.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/bolt_fire.lua b/game/engines/default/modules/boot/data/gfx/particles/bolt_fire.lua
index acd72151e80046b242644f641211b4aec8b8e3e0..aef80a620f34c48891ad89b823b92466eac4848b 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/bolt_fire.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/bolt_fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/breath_fire.lua b/game/engines/default/modules/boot/data/gfx/particles/breath_fire.lua
index effe20ab615890bfaec8a9c3b968e1857e2c61ec..61e36314369b0aa8a2c507182dc623339d525109 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/breath_fire.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/breath_fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/fireflash.lua b/game/engines/default/modules/boot/data/gfx/particles/fireflash.lua
index 46a20cc4e385dc1b282dc246b0b1db4452b94f96..6c09fb6b8e028989d3dd408accd9ce72a099de8b 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/fireflash.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/fireflash.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/firetrail.lua b/game/engines/default/modules/boot/data/gfx/particles/firetrail.lua
index 4ee7d5b7378a0d07ba057459d51d5ef62a3bf03b..53cefd97e90bf0cd7c9c9013433645480c87e245 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/firetrail.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/firetrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/flame.lua b/game/engines/default/modules/boot/data/gfx/particles/flame.lua
index 5e3d975d0bb41191d63afaa93b2031c0680e0210..c25c582c1692e5f11ccaf7a1df4441d9e7b4e6a4 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/flame.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/flame.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/golden_shield.lua b/game/engines/default/modules/boot/data/gfx/particles/golden_shield.lua
index 2a524c07640d3a70767921f0ea4019a39430959e..1ccd5153b5887daca6f14083854966a7bc7eb157 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/golden_shield.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/golden_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/lightning.lua b/game/engines/default/modules/boot/data/gfx/particles/lightning.lua
index e29928e8aab9f989d771e66f943155905d2ba0cd..8db1e93fd977d818b9e885259d6980f9c8a3413f 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/lightning.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/mana_beam.lua b/game/engines/default/modules/boot/data/gfx/particles/mana_beam.lua
index 85fc00ca083d332083c207fd9f895d4a854194ef..1dd916eec13ef0e4cd1556648b2a16c5bc22342f 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/mana_beam.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/mana_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/particles/sunburst.lua b/game/engines/default/modules/boot/data/gfx/particles/sunburst.lua
index 41b64528ea278ef9222676242b0398aa3475c92c..dc4af5be79175143626f381a5a3182fd48f26933 100644
--- a/game/engines/default/modules/boot/data/gfx/particles/sunburst.lua
+++ b/game/engines/default/modules/boot/data/gfx/particles/sunburst.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/awesomeaura.frag b/game/engines/default/modules/boot/data/gfx/shaders/awesomeaura.frag
new file mode 100644
index 0000000000000000000000000000000000000000..82a42679b2d02a0e775ff08bd292389d81c7ce2d
--- /dev/null
+++ b/game/engines/default/modules/boot/data/gfx/shaders/awesomeaura.frag
@@ -0,0 +1,172 @@
+uniform sampler2D tex;
+uniform sampler2D flames;
+
+uniform float alpha;
+uniform float tick;
+uniform float time_factor;
+uniform float flameScale;
+
+vec4 permute( vec4 x ) {
+
+	return mod( ( ( x * 34.0 ) + 1.0 ) * x, 289.0 );
+
+} 
+
+vec4 taylorInvSqrt( vec4 r ) {
+
+	return 1.79284291400159 - 0.85373472095314 * r;
+
+}
+
+float snoise( vec3 v ) {
+
+	const vec2 C = vec2( 1.0 / 6.0, 1.0 / 3.0 );
+	const vec4 D = vec4( 0.0, 0.5, 1.0, 2.0 );
+
+	// First corner
+
+	vec3 i  = floor( v + dot( v, C.yyy ) );
+	vec3 x0 = v - i + dot( i, C.xxx );
+
+	// Other corners
+
+	vec3 g = step( x0.yzx, x0.xyz );
+	vec3 l = 1.0 - g;
+	vec3 i1 = min( g.xyz, l.zxy );
+	vec3 i2 = max( g.xyz, l.zxy );
+
+	vec3 x1 = x0 - i1 + 1.0 * C.xxx;
+	vec3 x2 = x0 - i2 + 2.0 * C.xxx;
+	vec3 x3 = x0 - 1. + 3.0 * C.xxx;
+
+	// Permutations
+
+	i = mod( i, 289.0 );
+	vec4 p = permute( permute( permute(
+		i.z + vec4( 0.0, i1.z, i2.z, 1.0 ) )
+		+ i.y + vec4( 0.0, i1.y, i2.y, 1.0 ) )
+		+ i.x + vec4( 0.0, i1.x, i2.x, 1.0 ) );
+
+	// Gradients
+	// ( N*N points uniformly over a square, mapped onto an octahedron.)
+
+	float n_ = 1.0 / 7.0; // N=7
+
+	vec3 ns = n_ * D.wyz - D.xzx;
+
+	vec4 j = p - 49.0 * floor( p * ns.z *ns.z );  //  mod(p,N*N)
+
+	vec4 x_ = floor( j * ns.z );
+	vec4 y_ = floor( j - 7.0 * x_ );    // mod(j,N)
+
+	vec4 x = x_ *ns.x + ns.yyyy;
+	vec4 y = y_ *ns.x + ns.yyyy;
+	vec4 h = 1.0 - abs( x ) - abs( y );
+
+	vec4 b0 = vec4( x.xy, y.xy );
+	vec4 b1 = vec4( x.zw, y.zw );
+
+
+	vec4 s0 = floor( b0 ) * 2.0 + 1.0;
+	vec4 s1 = floor( b1 ) * 2.0 + 1.0;
+	vec4 sh = -step( h, vec4( 0.0 ) );
+
+	vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;
+	vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
+
+	vec3 p0 = vec3( a0.xy, h.x );
+	vec3 p1 = vec3( a0.zw, h.y );
+	vec3 p2 = vec3( a1.xy, h.z );
+	vec3 p3 = vec3( a1.zw, h.w );
+
+	// Normalise gradients
+
+	vec4 norm = taylorInvSqrt( vec4( dot( p0, p0 ), dot( p1, p1 ), dot( p2, p2 ), dot( p3, p3 ) ) );
+	p0 *= norm.x;
+	p1 *= norm.y;
+	p2 *= norm.z;
+	p3 *= norm.w;
+
+	// Mix final noise value
+
+	vec4 m = max( 0.6 - vec4( dot( x0, x0 ), dot( x1, x1 ), dot( x2, x2 ), dot( x3, x3 ) ), 0.0 );
+	m = m * m;
+	return 42.0 * dot( m*m, vec4( dot( p0, x0 ), dot( p1, x1 ),
+		dot( p2, x2 ), dot( p3, x3 ) ) );
+
+}  
+
+vec2 snoise2(vec3 pos)
+{
+	return vec2(snoise(pos), snoise(pos + vec3(0.0, 0.0, 1.0)));
+}
+
+float GetFireDelta(float currTime, vec2 pos, float freqMult, float stretchMult, float scrollSpeed, float evolutionSpeed)
+{
+	//firewall
+	float delta = 0.0;
+//	pos.y += (1.0 - pos.y) * 0.5;
+	//pos.y += 0.5;
+	pos.y /= stretchMult;
+	pos *= freqMult;
+	pos.y -= currTime * scrollSpeed;
+//	pos.y -= currTime * 3.0;
+
+	
+	delta += snoise(vec3(pos * 1.0, currTime * 1.0 * evolutionSpeed)) * 1.5;
+	delta += snoise(vec3(pos * 2.0, currTime * 2.0 * evolutionSpeed)) * 1.5;
+	delta += snoise(vec3(pos * 4.0, currTime * 4.0 * evolutionSpeed)) * 1.5;	
+	delta += snoise(vec3(pos * 8.0, currTime * 8.0 * evolutionSpeed)) * 1.5;
+	delta += snoise(vec3(pos * 16.0, currTime * 16.0 * evolutionSpeed)) * 0.5;
+
+	return delta;
+}
+
+vec4 GetFireAuraColor(float currTime, vec2 planarPos, float freqMult, float stretchMult, float ampMult, float power, float scrollSpeed, float paletteCoord)
+{		
+	float delta =  
+		GetFireDelta(currTime, planarPos + vec2(currTime * scrollSpeed * 0.0, 0.0), freqMult, stretchMult, 2.5, 0.5) * (1.0 - planarPos.x)	+ 
+		GetFireDelta(currTime, vec2(planarPos.x + currTime * scrollSpeed * 0.0 - 1.0, planarPos.y), freqMult, stretchMult, 2.5, 0.5) * planarPos.x;
+		
+	delta *= min(1.0, max(0.0, 1.0 * (1.0 - planarPos.y)));
+	delta *= min(1.0, max(0.0, 1.0 * (0.0 + planarPos.y)));
+
+	float verticalPos = 1.0 - planarPos.y + delta * ampMult;	
+	verticalPos = min(0.99, verticalPos);
+	verticalPos = max(0.01, verticalPos);
+	
+	return texture2D(flames, vec2(paletteCoord, verticalPos));
+}
+
+
+vec4 Uberblend(vec4 col0, vec4 col1)
+{
+//	return vec4((1.0 - col0.a) * (col1.rgb) + col0.a * (col1.rgb * col1.a + col0.rgb * (1.0 - col1.a)), min(1.0, col0.a + col1.a));
+//	return vec4((1.0 - col1.a) * (col0.rgb) + col1.a * (col1.rgb * col1.a + col0.rgb * (1.0 - col1.a)), min(1.0, col0.a + col1.a));
+	return vec4(
+		(1.0 - col0.a) * (1.0 - col1.a) * (col0.rgb * col0.a + col1.rgb * col1.a) / (col0.a + col1.a + 1e-1) +
+		(1.0 - col0.a) * (0.0 + col1.a) * (col1.rgb) +
+		(0.0 + col0.a) * (1.0 - col1.a) * (col0.rgb * (1.0 - col1.a) + col1.rgb * col1.a) +
+		(0.0 + col0.a) * (0.0 + col1.a) * (col1.rgb),
+		min(1.0, col0.a + col1.a));
+}
+
+
+void main(void)
+{
+	vec2 radius = gl_TexCoord[0].xy - vec2(0.5, 0.5);
+	float innerRadius = 0.25;
+	float outerRadius = 0.5;
+	
+	vec2 planarPos;
+	vec4 displacement = texture2D(tex, gl_TexCoord[0].xy);
+	planarPos.x = displacement.b;	
+	planarPos.y = displacement.a * 3.0 * (1.0 + 10.0 * pow((planarPos.x) * (1.0 - planarPos.x) * 4.0, 1.0)) / max(flameScale, 1e-3);
+	
+	vec4 resultColor = vec4(0.0, 0.0, 0.0, 0.0);
+		
+	resultColor = GetFireAuraColor(tick / time_factor, planarPos, 6.0, 15.0 * max(flameScale, 1e-3), 1.0, 1.0, 1.0, 0.75);//texture2D(tex, gl_TexCoord[0].xy) * texture2D(flames, gl_TexCoord[0].xy) + 0.2;
+	
+	gl_FragColor = resultColor;
+	gl_FragColor.a *= alpha;
+}
\ No newline at end of file
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/awesomeaura.lua b/game/engines/default/modules/boot/data/gfx/shaders/awesomeaura.lua
new file mode 100644
index 0000000000000000000000000000000000000000..ccb3495e48eaed8249688364c6f425b2dc47447c
--- /dev/null
+++ b/game/engines/default/modules/boot/data/gfx/shaders/awesomeaura.lua
@@ -0,0 +1,31 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "awesomeaura",
+	vert = nil,
+	args = {
+		tex = { texture = 0 },
+		flames = { texture = 1 },
+		alpha = alpha or 1,
+		time_factor = time_factor or 4000,
+		flameScale = flame_scale or 1,
+	},
+	clone = false,
+}
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/crystalineaura.frag b/game/engines/default/modules/boot/data/gfx/shaders/crystalineaura.frag
new file mode 100644
index 0000000000000000000000000000000000000000..5b347e5aa5f39ea5a50250b83d4f1777fddd398c
--- /dev/null
+++ b/game/engines/default/modules/boot/data/gfx/shaders/crystalineaura.frag
@@ -0,0 +1,62 @@
+uniform sampler2D displMapTex;
+uniform sampler2D normalMapTex;
+
+uniform float spikeLength;
+uniform float spikeWidth;
+uniform float spikeOffset;
+
+uniform float growthSpeed;
+
+uniform float tick;
+uniform float tick_start;
+uniform float time_factor;
+
+uniform vec3 color;
+
+void main(void)
+{
+	vec2 radius = gl_TexCoord[0].xy - vec2(0.5, 0.5);
+	float innerRadius = 0.25;
+	float outerRadius = 0.5;
+	
+	vec2 planarPos;
+	vec4 displacement = texture2D(displMapTex, gl_TexCoord[0].xy);
+
+	vec2 point = gl_TexCoord[0].xy;
+	float eps = 0.05;
+	vec2 basisY = vec2(
+		 texture2D(displMapTex, point + vec2(eps, 0.0)).a - texture2D(displMapTex, point + vec2(-eps, 0.0)).a,
+		-texture2D(displMapTex, point + vec2(0.0, eps)).a + texture2D(displMapTex, point + vec2(0.0, -eps)).a);
+	basisY /= length(basisY) + 0.001;
+	vec2 basisX = vec2(basisY.y, -basisY.x);
+
+	planarPos.x = displacement.b * 6.0 / spikeWidth + spikeOffset;
+	planarPos.y = displacement.a * 20.0 / (spikeLength * clamp((tick - tick_start) / time_factor * growthSpeed, 0.0, 1.0) + 0.001);
+
+	vec4 normalMap = texture2D(normalMapTex, vec2(planarPos.x, clamp(1.0 - planarPos.y, 0.01, 0.99)));
+	vec3 localNormal = normalMap.rgb;
+	localNormal -= vec3(0.5, 0.5, 0.5);
+	localNormal.x = -localNormal.x;
+	localNormal.z = -localNormal.z;
+	localNormal /= length(localNormal);
+
+	vec3 globalNormal;
+	globalNormal.xy  = basisX * localNormal.x + basisY * localNormal.y;
+	globalNormal.z = localNormal.z;
+
+	vec2 lightDir2 = vec2(cos(tick / time_factor), sin(tick / time_factor));
+	float ang = 3.1415 * 0.2;
+	vec3 lightDir3 = vec3(lightDir2 * sin(ang), cos(ang));
+
+	float diffuse = clamp(-dot(lightDir3, globalNormal), 0.0, 1.0);
+	float specular = 0.0;
+	if(dot(lightDir3, globalNormal) < 0.0)
+	{
+		vec3 reflectedLight = lightDir3 - globalNormal * dot(lightDir3, globalNormal) * 2.0;
+		specular += pow(clamp(-dot(reflectedLight, vec3(0.0, 0.0, 1.0)), 0.0, 1.0), 30.0);
+	}
+	//vec3(0.624, 0.820, 0.933);
+	vec4 resultColor = vec4(color * diffuse + vec3(1.0, 1.0, 1.0) * specular, normalMap.a * gl_Color.a);
+	
+	gl_FragColor = resultColor;///
+}
\ No newline at end of file
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/crystalineaura.lua b/game/engines/default/modules/boot/data/gfx/shaders/crystalineaura.lua
new file mode 100644
index 0000000000000000000000000000000000000000..38dad9c7c1d3581f9bd1bc97cb6fb8b60cb9fcfb
--- /dev/null
+++ b/game/engines/default/modules/boot/data/gfx/shaders/crystalineaura.lua
@@ -0,0 +1,41 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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 {
+	frag = "crystalineaura",
+	vert = nil,
+	args = {
+		displMapTex = { texture = 0 },
+		normalMapTex = { texture = 1 },
+
+		spikeLength = spikeLength or 1.0, -- 1.0 means normal length, 0.5 is half-sized spikes, 2.0 is double-sized, etc
+		spikeWidth = spikeWidth or 1.0, -- use different values for different effects. 1.0 is normal width
+		spikeOffset = spikeOffset or 0.0, -- use different values for different effects. such as offset = 0.0 for ice spikes and 0.123123 for rock spikes
+
+		growthSpeed = growthSpeed or 1.0, -- 1.0 is normal growth speed
+
+		time_factor = time_factor or 500,
+
+		color = color or {0.624, 0.820, 0.933},
+	},
+	resetargs = {
+		tick_start = function() return core.game.getTime() end,
+	},		
+	clone = false,
+}
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/full_fbo.lua b/game/engines/default/modules/boot/data/gfx/shaders/full_fbo.lua
index 138843a5c0e8060c5a6824d52de5454c491874c6..ef744f56d4446f9ffcea2e980ec1022ca1d09d44 100644
--- a/game/engines/default/modules/boot/data/gfx/shaders/full_fbo.lua
+++ b/game/engines/default/modules/boot/data/gfx/shaders/full_fbo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/main_fbo.lua b/game/engines/default/modules/boot/data/gfx/shaders/main_fbo.lua
index afea56f7d653ef9627f6271205854e31c21837c6..3d45d5ea46ffb3aa3453731e3bdb44474c78ccb9 100644
--- a/game/engines/default/modules/boot/data/gfx/shaders/main_fbo.lua
+++ b/game/engines/default/modules/boot/data/gfx/shaders/main_fbo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/textoutline.frag b/game/engines/default/modules/boot/data/gfx/shaders/textoutline.frag
new file mode 100644
index 0000000000000000000000000000000000000000..fd6330c9a9635579183e7481db1b4edcd3f969d4
--- /dev/null
+++ b/game/engines/default/modules/boot/data/gfx/shaders/textoutline.frag
@@ -0,0 +1,34 @@
+uniform sampler2D tex;
+uniform vec2 textSize;
+uniform float intensity; 
+uniform vec2 outlineSize;
+uniform vec4 outlineColor;
+
+void main(void)
+{
+	float xOffset = outlineSize.x / textSize.x;
+	float yOffset = outlineSize.y / textSize.y;
+
+	gl_FragColor = texture2D(tex, gl_TexCoord[0].xy); //default text color
+
+	//sobel distance to glyph base line approximation
+	vec4 col02 = texture2D(tex, gl_TexCoord[0].xy + vec2(xOffset,  -yOffset));
+	vec4 col12 = texture2D(tex, gl_TexCoord[0].xy + vec2(xOffset,   0.0     ));
+	vec4 col22 = texture2D(tex, gl_TexCoord[0].xy + vec2(xOffset,   yOffset));
+	vec4 col01 = texture2D(tex, gl_TexCoord[0].xy + vec2(0.0,        -yOffset));
+	vec4 col21 = texture2D(tex, gl_TexCoord[0].xy + vec2(0.0,         yOffset));
+	vec4 col00 = texture2D(tex, gl_TexCoord[0].xy + vec2(-xOffset, -yOffset));
+	vec4 col10 = texture2D(tex, gl_TexCoord[0].xy + vec2(-xOffset,  0.0     ));
+	vec4 col20 = texture2D(tex, gl_TexCoord[0].xy + vec2(-xOffset,  yOffset));
+	
+	
+	float xDist = 0.0 - col00.a - col01.a * 2.0 - col02.a + col20.a + col21.a * 2.0 + col22.a;
+	float yDist = 0.0 - col00.a + col02.a - col10.a * 2.0 + col12.a * 2.0 - col20.a + col22.a;
+	
+	//transperency of current outline pixel
+	float alpha = min(1.0, sqrt(xDist * xDist + yDist * yDist) * intensity); 
+	
+	//outlineColor = vec4(0, 0, 0, 1);
+	//blending character glyph over its outline
+	gl_FragColor = (gl_FragColor * gl_FragColor.a + outlineColor * alpha * (1.0 - gl_FragColor.a)) * gl_Color;
+}
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/textoutline.lua b/game/engines/default/modules/boot/data/gfx/shaders/textoutline.lua
new file mode 100644
index 0000000000000000000000000000000000000000..dd0ec94f6e4e185e82a32a242caca247d4e07448
--- /dev/null
+++ b/game/engines/default/modules/boot/data/gfx/shaders/textoutline.lua
@@ -0,0 +1,32 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "textoutline",
+	vert = nil,
+	args = {
+		tex = { texture = 0 },
+		textSize = textSize or {1, 1},
+		intensity = intensity or 0.5,
+		outlineSize = outlineSize or {1, 1},
+		outlineColor = outlineColor or {0, 0, 0, 1},
+	},
+	clone = false,
+	permanent = true,
+}
diff --git a/game/engines/default/modules/boot/data/gfx/shaders/water.lua b/game/engines/default/modules/boot/data/gfx/shaders/water.lua
index bed37ad839ba939af84f610d266824655a3692c2..54647b71e0983c978743d5371f6e5f6ff845760e 100644
--- a/game/engines/default/modules/boot/data/gfx/shaders/water.lua
+++ b/game/engines/default/modules/boot/data/gfx/shaders/water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/gfx/twitter.png b/game/engines/default/modules/boot/data/gfx/twitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfd27992e4e647d6eecde0bad9d91fe418116158
Binary files /dev/null and b/game/engines/default/modules/boot/data/gfx/twitter.png differ
diff --git a/game/engines/default/modules/boot/data/rooms/big_cells.lua b/game/engines/default/modules/boot/data/rooms/big_cells.lua
index 13f8447bf7fbdbd6840bee96bfba9882fda04931..3c36efe0287f89e54bb4e99687bf447b5f6b7a36 100644
--- a/game/engines/default/modules/boot/data/rooms/big_cells.lua
+++ b/game/engines/default/modules/boot/data/rooms/big_cells.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/big_cross.lua b/game/engines/default/modules/boot/data/rooms/big_cross.lua
index 19cec4dfe9086ada52eb085043cb5f58fac5d31d..557c4eedbf13e8c0453deae525b3638d05bea7cb 100644
--- a/game/engines/default/modules/boot/data/rooms/big_cross.lua
+++ b/game/engines/default/modules/boot/data/rooms/big_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/big_inner_circle.lua b/game/engines/default/modules/boot/data/rooms/big_inner_circle.lua
index 1394913f265310fec98416f73a92fabbf37dd528..22de65fca7fc6bfb1666275d669a5aac7d2eb735 100644
--- a/game/engines/default/modules/boot/data/rooms/big_inner_circle.lua
+++ b/game/engines/default/modules/boot/data/rooms/big_inner_circle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/broken_infinity.lua b/game/engines/default/modules/boot/data/rooms/broken_infinity.lua
index 659b9e9581de0e68dafaa328d31d0c184113774f..fdb75148e5d4c3877afe7bd8733c3f5e2a9910c9 100644
--- a/game/engines/default/modules/boot/data/rooms/broken_infinity.lua
+++ b/game/engines/default/modules/boot/data/rooms/broken_infinity.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/broken_room.lua b/game/engines/default/modules/boot/data/rooms/broken_room.lua
index cbebc6765b1f8be974812524f57a4d6ad1b0a2b6..6dbc5d564a03d0528bd68dbecb10bcbcad9d20ef 100644
--- a/game/engines/default/modules/boot/data/rooms/broken_room.lua
+++ b/game/engines/default/modules/boot/data/rooms/broken_room.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/broken_x.lua b/game/engines/default/modules/boot/data/rooms/broken_x.lua
index 8ce137eb44a76a203de2925412b978cc05bfc0e5..516a895f33c2f7a1a770a04435f7330c23571373 100644
--- a/game/engines/default/modules/boot/data/rooms/broken_x.lua
+++ b/game/engines/default/modules/boot/data/rooms/broken_x.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells.lua b/game/engines/default/modules/boot/data/rooms/cells.lua
index 8e94c44d81c0c08d21875718eabbda8c9677ac07..4309fb72d285715b062ad3eb5aab044602658ef1 100644
--- a/game/engines/default/modules/boot/data/rooms/cells.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells10.lua b/game/engines/default/modules/boot/data/rooms/cells10.lua
index c82b45693aa3b53889a4c2057b64aa53f044db6e..ffdce6b14ce4050b2ee1f72782035dfb3f4e631d 100644
--- a/game/engines/default/modules/boot/data/rooms/cells10.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells10.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells2.lua b/game/engines/default/modules/boot/data/rooms/cells2.lua
index 7ffe1590f31b6e8c20795a1231486a492ea5b6c6..a0033a5b70dd8c8c4eaf88f3690cc242628419bd 100644
--- a/game/engines/default/modules/boot/data/rooms/cells2.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells3.lua b/game/engines/default/modules/boot/data/rooms/cells3.lua
index 6c4522e02058ff4f45265f650454b0a1474120a9..a3cd5d0e50b781b59beba81e6ff87a4a78915acc 100644
--- a/game/engines/default/modules/boot/data/rooms/cells3.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells4.lua b/game/engines/default/modules/boot/data/rooms/cells4.lua
index 41afbf50807200e7b08a9427c52298e4ec2c4321..8d388ce7cd4e3df5862d305391f1f0aa8e9fa39a 100644
--- a/game/engines/default/modules/boot/data/rooms/cells4.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells5.lua b/game/engines/default/modules/boot/data/rooms/cells5.lua
index 22494043189c85a0cae91bb3f31b79a230cebba5..e321c239fbc74d8657949a2c12364479a3f4ea82 100644
--- a/game/engines/default/modules/boot/data/rooms/cells5.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells6.lua b/game/engines/default/modules/boot/data/rooms/cells6.lua
index d581b8b0e400c7c88ba01fc889e76dc8bab0d6b6..0ca4ccb711387a7ffbe0174950af3192aef90f49 100644
--- a/game/engines/default/modules/boot/data/rooms/cells6.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells7.lua b/game/engines/default/modules/boot/data/rooms/cells7.lua
index 969987cb9ea30cf483f2c5464ab55a8de36bf2f6..a0b61129342ff612cd8c44c10d8777b8d47f6195 100644
--- a/game/engines/default/modules/boot/data/rooms/cells7.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells8.lua b/game/engines/default/modules/boot/data/rooms/cells8.lua
index 41e8bae7d2f5df0ec97b46b4551ec77cd624fc0f..cca3f3dcae60472dddef32df0089b8486bf0aab6 100644
--- a/game/engines/default/modules/boot/data/rooms/cells8.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cells9.lua b/game/engines/default/modules/boot/data/rooms/cells9.lua
index f15e39bc63f932a9a3932faade4ef43a6c321080..0734d0bd0e79ed10fe7cac76a1c923d07d4aaefa 100644
--- a/game/engines/default/modules/boot/data/rooms/cells9.lua
+++ b/game/engines/default/modules/boot/data/rooms/cells9.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/center_arrows.lua b/game/engines/default/modules/boot/data/rooms/center_arrows.lua
index 3007c2aeb10352fdc31f441af97fce3db4b4c119..1bed09eb049c28732e19df9c9b354c1efdb9afb3 100644
--- a/game/engines/default/modules/boot/data/rooms/center_arrows.lua
+++ b/game/engines/default/modules/boot/data/rooms/center_arrows.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/circle_cross.lua b/game/engines/default/modules/boot/data/rooms/circle_cross.lua
index 5537865cfc60055383d6bd0c3714f64451786dd3..500febfbf562d16c5ae21834a27bc623b302f50f 100644
--- a/game/engines/default/modules/boot/data/rooms/circle_cross.lua
+++ b/game/engines/default/modules/boot/data/rooms/circle_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cross.lua b/game/engines/default/modules/boot/data/rooms/cross.lua
index b1ff0564b50b2fa904147fd9107107faeec89a02..10f425495b583a64792aa3b91595e23f64a32a5e 100644
--- a/game/engines/default/modules/boot/data/rooms/cross.lua
+++ b/game/engines/default/modules/boot/data/rooms/cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/cross_circled.lua b/game/engines/default/modules/boot/data/rooms/cross_circled.lua
index 3e3fb389a07a9657c462a10d051e6bb45024e517..80e994145e1f2e6d9cb0774170352f05d6a8c988 100644
--- a/game/engines/default/modules/boot/data/rooms/cross_circled.lua
+++ b/game/engines/default/modules/boot/data/rooms/cross_circled.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/double_helix.lua b/game/engines/default/modules/boot/data/rooms/double_helix.lua
index e404df6951c3e7b0900418a9e6f8dbde9a83d785..9849f3d985690c98dc44f6c67b273fb48ee042d5 100644
--- a/game/engines/default/modules/boot/data/rooms/double_helix.lua
+++ b/game/engines/default/modules/boot/data/rooms/double_helix.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/double_y.lua b/game/engines/default/modules/boot/data/rooms/double_y.lua
index cb990d716fd2a8e06c74cea9427a196a90596b26..fb4eafe2fff731c76702ccbdd2214f4d53bba544 100644
--- a/game/engines/default/modules/boot/data/rooms/double_y.lua
+++ b/game/engines/default/modules/boot/data/rooms/double_y.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/equal.lua b/game/engines/default/modules/boot/data/rooms/equal.lua
index 7d2768e0baa1c76a01170469bea2180e557ede33..045357e193b1a41a49150ed7eb7636d8efd0bd75 100644
--- a/game/engines/default/modules/boot/data/rooms/equal.lua
+++ b/game/engines/default/modules/boot/data/rooms/equal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/equal2.lua b/game/engines/default/modules/boot/data/rooms/equal2.lua
index 83d226b0c9048165d9a4fc19363dea36a9a40411..79e16af3169614e5bcad26bee9c14b6db3d9e7a4 100644
--- a/game/engines/default/modules/boot/data/rooms/equal2.lua
+++ b/game/engines/default/modules/boot/data/rooms/equal2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/forest_clearing.lua b/game/engines/default/modules/boot/data/rooms/forest_clearing.lua
index c87099e8a9440976be4da5474e9b588adaba78e2..88d275f8be4edd76939550a195d4195c84dba873 100644
--- a/game/engines/default/modules/boot/data/rooms/forest_clearing.lua
+++ b/game/engines/default/modules/boot/data/rooms/forest_clearing.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/greater_vault.lua b/game/engines/default/modules/boot/data/rooms/greater_vault.lua
index 4b95b5c7bc04646f5d5a773ce503c81e2721f2c1..316910f803504952bd8643a2d9ec6d2f7b9c7c82 100644
--- a/game/engines/default/modules/boot/data/rooms/greater_vault.lua
+++ b/game/engines/default/modules/boot/data/rooms/greater_vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/h.lua b/game/engines/default/modules/boot/data/rooms/h.lua
index 55cff7454b3eaec9d909da7a1d09538070562647..42476a9b3f2e65bd69b249bc09c3f7453780c751 100644
--- a/game/engines/default/modules/boot/data/rooms/h.lua
+++ b/game/engines/default/modules/boot/data/rooms/h.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner.lua b/game/engines/default/modules/boot/data/rooms/inner.lua
index 6739eacf31930396cfc2d0897f4fae7d9350ba65..58097c82f495036018719c2deb1928549283145c 100644
--- a/game/engines/default/modules/boot/data/rooms/inner.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner_checkerboard.lua b/game/engines/default/modules/boot/data/rooms/inner_checkerboard.lua
index 111c2e976ad5bbfb7a7b24fc609cf767abe6be55..9f58767cf1971674a5c11d3f809fe4882a844d3d 100644
--- a/game/engines/default/modules/boot/data/rooms/inner_checkerboard.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner_checkerboard.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner_circle.lua b/game/engines/default/modules/boot/data/rooms/inner_circle.lua
index 5e646d95ac5da285dec46b0a0bee9d1c13df8700..fd5286584b70213369a78eedf094c7f2b0679ba0 100644
--- a/game/engines/default/modules/boot/data/rooms/inner_circle.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner_circle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner_circle2.lua b/game/engines/default/modules/boot/data/rooms/inner_circle2.lua
index c28f331e8379f8a123e282ee974034f9cf75c63e..7b900eec3fe5a1585ad0716f17257da48d31dba4 100644
--- a/game/engines/default/modules/boot/data/rooms/inner_circle2.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner_circle2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner_cross.lua b/game/engines/default/modules/boot/data/rooms/inner_cross.lua
index 4da2a6bdf66407e5caba0a9afb9c1ed408d0d91e..5bd1dfe9837773c5b80a048ddb6d376b385272f5 100644
--- a/game/engines/default/modules/boot/data/rooms/inner_cross.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner_fort.lua b/game/engines/default/modules/boot/data/rooms/inner_fort.lua
index 4c0c87562d0544da1fb508b688e2f1f73290a3a2..7f5ab132daef562200490479e70c06e9b5dc0678 100644
--- a/game/engines/default/modules/boot/data/rooms/inner_fort.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner_fort.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/inner_pillar.lua b/game/engines/default/modules/boot/data/rooms/inner_pillar.lua
index e6a6f68002de4dd4026391542bdc6434f55d91c4..773f49e3ae35525d61d3b95eb3cbcb8097c2a1a6 100644
--- a/game/engines/default/modules/boot/data/rooms/inner_pillar.lua
+++ b/game/engines/default/modules/boot/data/rooms/inner_pillar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/lesser_vault.lua b/game/engines/default/modules/boot/data/rooms/lesser_vault.lua
index b013f249a85cd4e0a9e56e95f725493f70f5e4f5..75a40b1806aa2640cc2887bbb4b9457fd16ce27b 100644
--- a/game/engines/default/modules/boot/data/rooms/lesser_vault.lua
+++ b/game/engines/default/modules/boot/data/rooms/lesser_vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/maze.lua b/game/engines/default/modules/boot/data/rooms/maze.lua
index f84fe7908e9a692254fcced7ce8a71350b3dd639..4fdacfe190e95258076a1c317979773c60b4419b 100644
--- a/game/engines/default/modules/boot/data/rooms/maze.lua
+++ b/game/engines/default/modules/boot/data/rooms/maze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/micro_pillar.lua b/game/engines/default/modules/boot/data/rooms/micro_pillar.lua
index 3e6d0d7a5355239a6f5dd170f627902031f3b17b..ebede92a11b8fb13a3b177f17a4f54fec43b7ce2 100644
--- a/game/engines/default/modules/boot/data/rooms/micro_pillar.lua
+++ b/game/engines/default/modules/boot/data/rooms/micro_pillar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/money_vault.lua b/game/engines/default/modules/boot/data/rooms/money_vault.lua
index 9d5daee86dab2e1c1fbdff33b5dc40c9f83ff9e3..6bc8f7cdffbfc48a8060c9dd1017921a5d2f23aa 100644
--- a/game/engines/default/modules/boot/data/rooms/money_vault.lua
+++ b/game/engines/default/modules/boot/data/rooms/money_vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/multi_pillar.lua b/game/engines/default/modules/boot/data/rooms/multi_pillar.lua
index 9bbff84ab443679fe20d10e58c3ed4787951af9d..9f7983b858cc86a0d7eb8f29907800f13d3a4f4f 100644
--- a/game/engines/default/modules/boot/data/rooms/multi_pillar.lua
+++ b/game/engines/default/modules/boot/data/rooms/multi_pillar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/oval.lua b/game/engines/default/modules/boot/data/rooms/oval.lua
index b1ff0564b50b2fa904147fd9107107faeec89a02..10f425495b583a64792aa3b91595e23f64a32a5e 100644
--- a/game/engines/default/modules/boot/data/rooms/oval.lua
+++ b/game/engines/default/modules/boot/data/rooms/oval.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/pilar.lua b/game/engines/default/modules/boot/data/rooms/pilar.lua
index 3d3947a2aeab8c6be0256f369408d9559beedd14..a3d04836d56b6abe242426a8d3f1573c15fde76a 100644
--- a/game/engines/default/modules/boot/data/rooms/pilar.lua
+++ b/game/engines/default/modules/boot/data/rooms/pilar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/pilar2.lua b/game/engines/default/modules/boot/data/rooms/pilar2.lua
index b361657df0e752318d5e41cbdec082691e01aa16..b67f731e7a9a99dcbfb707c63ca464c67b434e6a 100644
--- a/game/engines/default/modules/boot/data/rooms/pilar2.lua
+++ b/game/engines/default/modules/boot/data/rooms/pilar2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/pilar_big.lua b/game/engines/default/modules/boot/data/rooms/pilar_big.lua
index fef18369ed7a7a1c9f6ec0a9bc8feb6e6d3fbd23..904d0d68260b8dcaa514de955648162d6d38bbc3 100644
--- a/game/engines/default/modules/boot/data/rooms/pilar_big.lua
+++ b/game/engines/default/modules/boot/data/rooms/pilar_big.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/pit.lua b/game/engines/default/modules/boot/data/rooms/pit.lua
index 898a59867818183909eafd25d71995cff8a617b6..f86407cbb2bcdc3bd83bcb7e6ad3197fd43ecb88 100644
--- a/game/engines/default/modules/boot/data/rooms/pit.lua
+++ b/game/engines/default/modules/boot/data/rooms/pit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/random_room.lua b/game/engines/default/modules/boot/data/rooms/random_room.lua
index 496ebb71b082752b0eb156741ec89c02123c4c3e..905a34081e2182acda5e9e2b52782c3408018ee6 100644
--- a/game/engines/default/modules/boot/data/rooms/random_room.lua
+++ b/game/engines/default/modules/boot/data/rooms/random_room.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/rocky_snowy_trees.lua b/game/engines/default/modules/boot/data/rooms/rocky_snowy_trees.lua
index 310f9414b543c2ba8ccc933257af0fb033e00d0d..6ea847beb89f72842b423ab1f3860c50966ec0bb 100644
--- a/game/engines/default/modules/boot/data/rooms/rocky_snowy_trees.lua
+++ b/game/engines/default/modules/boot/data/rooms/rocky_snowy_trees.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/s.lua b/game/engines/default/modules/boot/data/rooms/s.lua
index 48e45817611fb4cae04d90d2257e272ea3e80093..82f89fe1ec47c046ee212567b83ccb7a4e65efe0 100644
--- a/game/engines/default/modules/boot/data/rooms/s.lua
+++ b/game/engines/default/modules/boot/data/rooms/s.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/simple.lua b/game/engines/default/modules/boot/data/rooms/simple.lua
index 872985131fe321b3ab1fff97e1f0d30526e946cf..eebaf3e8a48764b8183d9fa94a6afcd77d8f5379 100644
--- a/game/engines/default/modules/boot/data/rooms/simple.lua
+++ b/game/engines/default/modules/boot/data/rooms/simple.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/small_cross.lua b/game/engines/default/modules/boot/data/rooms/small_cross.lua
index 4b99f1017cb724c792f1fab163722599a4a2f902..958fa9cc02e9a62f97ef68494be7f8aa3b132b50 100644
--- a/game/engines/default/modules/boot/data/rooms/small_cross.lua
+++ b/game/engines/default/modules/boot/data/rooms/small_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/small_inner_cross.lua b/game/engines/default/modules/boot/data/rooms/small_inner_cross.lua
index 92f8210d2fb28dd5a42678ea8e98ccd06ce2ddf1..63e5183be4a7e5f8a4d9700200edbb793d67065a 100644
--- a/game/engines/default/modules/boot/data/rooms/small_inner_cross.lua
+++ b/game/engines/default/modules/boot/data/rooms/small_inner_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/small_x.lua b/game/engines/default/modules/boot/data/rooms/small_x.lua
index d60fd7b059f22ff4de30e31c6396ad0011b75107..86a408f07e7cf824c375c4cfe5647c6dbc469e48 100644
--- a/game/engines/default/modules/boot/data/rooms/small_x.lua
+++ b/game/engines/default/modules/boot/data/rooms/small_x.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/split1.lua b/game/engines/default/modules/boot/data/rooms/split1.lua
index eecb76746651dc73146831c9885e93103d9a3d6b..e7dc33e98f88579978db31fb8f40464544a554c7 100644
--- a/game/engines/default/modules/boot/data/rooms/split1.lua
+++ b/game/engines/default/modules/boot/data/rooms/split1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/split2.lua b/game/engines/default/modules/boot/data/rooms/split2.lua
index 03d597da68ce52c0c3a8b7f19f7cec4700d0e209..133baf369dc4299789b121ac6beb52f51c9c0401 100644
--- a/game/engines/default/modules/boot/data/rooms/split2.lua
+++ b/game/engines/default/modules/boot/data/rooms/split2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/weird1.lua b/game/engines/default/modules/boot/data/rooms/weird1.lua
index 4c5daacd1aa1d79889e18fcbc766fbb445b78226..153ef1a1e0be22bb717fbc70a3ff1233db6cc122 100644
--- a/game/engines/default/modules/boot/data/rooms/weird1.lua
+++ b/game/engines/default/modules/boot/data/rooms/weird1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/weird2.lua b/game/engines/default/modules/boot/data/rooms/weird2.lua
index 8479f96bc8b2e929811800100fdc8dc1dfa83d97..86ce09985d7acc3ec7646b7c60b3f0e156ebed64 100644
--- a/game/engines/default/modules/boot/data/rooms/weird2.lua
+++ b/game/engines/default/modules/boot/data/rooms/weird2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/womb.lua b/game/engines/default/modules/boot/data/rooms/womb.lua
index 5c635ff6a183e7eca33030e077315cfd885bb8bd..e55454ec70602e16b24863375c8ed4fe7b93196d 100644
--- a/game/engines/default/modules/boot/data/rooms/womb.lua
+++ b/game/engines/default/modules/boot/data/rooms/womb.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/xroads.lua b/game/engines/default/modules/boot/data/rooms/xroads.lua
index a9d95a6510892a477f0379c4fec8ce3d933202a8..324f242bd2cc62ab8c7336204d2ffbd9e56ced79 100644
--- a/game/engines/default/modules/boot/data/rooms/xroads.lua
+++ b/game/engines/default/modules/boot/data/rooms/xroads.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/rooms/y.lua b/game/engines/default/modules/boot/data/rooms/y.lua
index b539f04df822bb651bf1cfbe15645fc665e40f91..86bd4bd511fdf46fcf86b114e5892548dc464f85 100644
--- a/game/engines/default/modules/boot/data/rooms/y.lua
+++ b/game/engines/default/modules/boot/data/rooms/y.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/talents.lua b/game/engines/default/modules/boot/data/talents.lua
index 71ba3ea0a0a40511bcc1beb8d034cc5ecc0d7d2c..df49fea950c86ca98e2dd3fc78423116b91f7976 100644
--- a/game/engines/default/modules/boot/data/talents.lua
+++ b/game/engines/default/modules/boot/data/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/timed_effects.lua b/game/engines/default/modules/boot/data/timed_effects.lua
index 54f0e2b81df6ade6f0ad56fc09f9bc1972d1a1ec..f4bb94a8afb2961d54b85258dad9d6df02aee465 100644
--- a/game/engines/default/modules/boot/data/timed_effects.lua
+++ b/game/engines/default/modules/boot/data/timed_effects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/zones/dungeon/grids.lua b/game/engines/default/modules/boot/data/zones/dungeon/grids.lua
index 233a55b5d2dbc841a0390cfe654bc0de715ce32f..581ce46af522ea5c5485039e8360f832c27ccb3c 100644
--- a/game/engines/default/modules/boot/data/zones/dungeon/grids.lua
+++ b/game/engines/default/modules/boot/data/zones/dungeon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/zones/dungeon/npcs.lua b/game/engines/default/modules/boot/data/zones/dungeon/npcs.lua
index df86fda8cabf6423a2ef18d368720728f6316a1f..5d628b28af862aeeeef3316697fecd72f0071978 100644
--- a/game/engines/default/modules/boot/data/zones/dungeon/npcs.lua
+++ b/game/engines/default/modules/boot/data/zones/dungeon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/zones/dungeon/objects.lua b/game/engines/default/modules/boot/data/zones/dungeon/objects.lua
index 0914cd107b361584cba396fca1147f517da28eb5..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/engines/default/modules/boot/data/zones/dungeon/objects.lua
+++ b/game/engines/default/modules/boot/data/zones/dungeon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/zones/dungeon/traps.lua b/game/engines/default/modules/boot/data/zones/dungeon/traps.lua
index 0914cd107b361584cba396fca1147f517da28eb5..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/engines/default/modules/boot/data/zones/dungeon/traps.lua
+++ b/game/engines/default/modules/boot/data/zones/dungeon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/data/zones/dungeon/zone.lua b/game/engines/default/modules/boot/data/zones/dungeon/zone.lua
index ec0b69464956cd398cffa0efd09cf674aadc300b..12eca6f952886825dd1489e19e2d8b02ec41a0e0 100644
--- a/game/engines/default/modules/boot/data/zones/dungeon/zone.lua
+++ b/game/engines/default/modules/boot/data/zones/dungeon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/Addons.lua b/game/engines/default/modules/boot/dialogs/Addons.lua
index d35de4bdb159e0b6b5851144dc7173be06ae0802..548efff18d5120cc4b44614a518446fd1259eadb 100644
--- a/game/engines/default/modules/boot/dialogs/Addons.lua
+++ b/game/engines/default/modules/boot/dialogs/Addons.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/Credits.lua b/game/engines/default/modules/boot/dialogs/Credits.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a77b42df800dde524100bc7d9cf2236e78ba16a7
--- /dev/null
+++ b/game/engines/default/modules/boot/dialogs/Credits.lua
@@ -0,0 +1,264 @@
+-- TE4 - T-Engine 4
+-- Copyright (C) 2009 - 2014 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
+
+require "engine.class"
+local Dialog = require "engine.ui.Dialog"
+local Shader = require "engine.Shader"
+
+module(..., package.seeall, class.inherit(Dialog))
+
+__show_only = true
+
+local title_font = core.display.newFont("/data/font/DroidSans-Bold.ttf", 32)
+local aura = {
+	Shader.new("awesomeaura", {flameScale=0.6, time_factor=8000}),
+	Shader.new("crystalineaura", {time_factor=8000}),
+}
+local aura_texture = {
+	core.display.loadImage("/data/gfx/flame_credits.png"):glTexture(),
+	core.display.loadImage("/data/gfx/spikes_credits.png"):glTexture(),
+}
+local fallback_colors = {
+	colors.GOLD,
+	colors.FIREBRICK,
+}
+local outline = Shader.new("textoutline", {})
+
+local credits = {
+	{img="/data/gfx/background/tome-logo.png"},
+	false,
+	{"Project Lead", title=1},
+	{"Nicolas 'DarkGod' Casalini"},
+	false,
+	false,
+
+	{"Lead Coder", title=2},
+	{"Nicolas 'DarkGod' Casalini"},
+	false,
+	false,
+
+	{"World Builders", title=1},
+	{"Aaron 'Sage Acrin' Vandegrift"},
+	{"Chris 'Shibari' Davidson"},
+	{"Em 'Susramanian' Jay"},
+	{"Eric 'Edge2054' Wykoff"},
+	{"Evan 'Fortescue' Williams"},
+	{"Hetdegon"},
+	{"John 'Benli' Truchard"},
+	{"Shoob"},
+	{"Taylor 'PureQuestion' Miller"},
+	false,
+	false,
+
+	{"Graphic Artists", title=2},
+	{"Assen 'Rexorcorum' Kanev"},
+	{"Raymond 'Shockbolt' Gaustadnes"},
+	false,
+	false,
+
+	{"Expert Shaders Design", title=1},
+	{"Alex 'Suslik' Sannikov"},
+	false,
+	false,
+
+	{"Soundtracks", title=2},
+	{"Anne van Schothorst"},
+	{"Carlos Saura"},
+	{"Matti Paalanen - 'Celestial Aeon Project'"},
+	false,
+	false,
+
+	{"Sound Designer", title=1},
+	{"Ryan Sim"},
+	false,
+	false,
+
+	{"Lore Creation and Writing", title=2},
+	{"Burb Lulls"},
+	{"Darren Grey"},
+	{"Gwai"},
+	{"Nicolas 'DarkGod' Casalini"},
+	{"Ron Billingsley"},
+	false,
+	false,
+
+	{"Code Helpers", title=1},
+	{"Antagonist"},
+	{"Graziel"},
+	{"Hachem Muche"},
+	{"Jules 'Quicksilver' Bean"},
+	{"Madmonk"},
+	{"Neil Stevens"},
+	{"Shani"},
+	{"Tiger Eye"},
+	{"Yufra"},
+	false,
+	false,
+
+	{"Community Managers", title=2},
+	{"Aura of the Dawn"},
+	{"Faeryan"},
+	{"Lord Xandor"},
+	{"Michael 'Dekar' Olscher"},
+	{"Reenen 'Canderel' Laurie"},
+	{"The Revanchist"},
+	{"Yottle"},
+	false,
+	false,
+
+
+	{"Text Editors", title=1},
+	{"Brian Jeffears"},
+	{"Greg Wooledge"},
+	{"Ralph Versteegen"},
+	false,
+	false,
+
+	{"Others", title=2},
+	{"J.R.R Tolkien - making the world an interesting place"},
+	false,
+	{"Lua Creators - making the world a better place"},
+	{"Lua - http://lua.org/"},
+	{"LibSDL - http://libsdl.org/"},
+	{"OpenGL - http://www.opengl.org/"},
+	{"OpenAL - http://kcat.strangesoft.net/openal.html"},
+	{"zlib - http://www.zlib.net/"},
+	{"LuaJIT - http://luajit.org/"},
+	{"lpeg - http://www.inf.puc-rio.br/~roberto/lpeg/"},
+	{"LuaSocket - http://w3.impa.br/~diego/software/luasocket/"},
+	{"Physfs - https://icculus.org/physfs/"},
+	{"Font: Droid - http://www.droidfonts.com/"},
+	{"Font: Vera - http://www.gnome.org/fonts/"},
+	{"Font: INSULA, USENET: http://www.dafont.com/fr/apostrophic-labs.d128"},
+	{"Font: SVBasicManual: http://www.dafont.com/fr/johan-winge.d757"},
+	{"Font FSEX300: http://www.fixedsysexcelsior.com/"},
+	{"Font: square: http://strlen.com/square"},
+}
+
+function _M:init()
+	Dialog.init(self, "", game.w, game.h, nil, nil, nil, nil, false, "invisible")
+
+	self:loadUI{}
+	self:setupUI(false, false)
+
+	self.key:addBinds{
+		EXIT = function() game:unregisterDialog(self) end,
+	}
+
+	self.list = { self:makeEntry(credits[1]) }
+	self.next_credit = 2
+end
+
+function _M:makeLogo(img)
+	local txt = {y=game.h}
+	local i, w, h = core.display.loadImage(img)
+	txt._tex, txt._tex_w, txt._tex_h = i:glTexture()
+	txt.w, txt.h = w, h
+	txt.step_h = h
+	txt.offset_y = 0
+	txt.img = true
+	return txt
+end
+
+function _M:makeEntry(credit)
+	if not credit then return {none=true, y=game.h, h=32, step_h=32, offset_y=0} end
+
+	if credit.img then return self:makeLogo(credit.img) end
+
+	local txt
+	if credit.title then
+		local w, h = title_font:size(credit[1]) + 20, 32 * 2
+		local s = core.display.newSurface(w, h)
+		s:alpha(0)
+		s:drawStringBlended(title_font, credit[1], 10, 16, 255, 255, 255, false)
+		txt = {title=credit.title}
+		txt.w, txt.h = w, h
+		txt._tex, txt._tex_w, txt._tex_h = s:glTexture()
+		txt._texf = txt._tex:generateSDM(false)
+		txt.step_h = txt.h
+		txt.offset_y = 0
+	else
+		local w, h = title_font:size(credit[1]) + 20, 36
+		local s = core.display.newSurface(w, h)
+		s:alpha(0)
+		s:drawStringBlended(title_font, credit[1], 10, 0, 255, 255, 255, false)
+		txt = {}
+		txt.w, txt.h = w, h
+		txt._tex, txt._tex_w, txt._tex_h = s:glTexture()
+		txt.step_h = 32
+		txt.offset_y = 0
+	end
+	txt.y = game.h
+	return txt
+end
+
+function _M:displayCredit(txt, x, y)
+	if txt.none then return end
+	local x, y = x + (game.w - txt.w) / 2, y + txt.y - txt.offset_y
+	if aura[1].shad and aura[2].shad then
+		if txt.title then
+			aura_texture[txt.title]:bind(1)
+			aura[txt.title].shad:use(true)
+			txt._texf:toScreenPrecise(x, y, txt.w, txt.h, 0, txt.w/txt._tex_w, 0, txt.h/txt._tex_h)
+			aura[txt.title].shad:use(false)
+
+			outline.shad:use(true)
+			outline.shad:uniOutlineSize(0.7, 0.7)
+			outline.shad:uniTextSize(txt._tex_w, txt._tex_h)
+			txt._tex:toScreenFull(x, y, txt.w, txt.h, txt._tex_w, txt._tex_h)
+			outline.shad:use(false)
+		else
+			outline.shad:use(true)
+			outline.shad:uniOutlineSize(0.7, 0.7)
+			outline.shad:uniTextSize(txt._tex_w, txt._tex_h)
+			txt._tex:toScreenFull(x, y, txt.w, txt.h, txt._tex_w, txt._tex_h)
+			outline.shad:use(false)
+		end
+	else
+		if not txt.img then txt._tex:toScreenFull(x + 3, y + 3, txt.w, txt.h, txt._tex_w, txt._tex_h, 0, 0, 0, 1) end
+		if txt.title and not txt.img then
+			local c = fallback_colors[txt.title]
+			txt._tex:toScreenFull(x, y, txt.w, txt.h, txt._tex_w, txt._tex_h, c.r/255, c.g/255, c.b/255, 1)
+		else
+			txt._tex:toScreenFull(x, y, txt.w, txt.h, txt._tex_w, txt._tex_h)
+		end
+	end
+end
+
+function _M:innerDisplay(x, y, nb_keyframes)
+	for i = #self.list, 1, -1 do
+		local txt = self.list[i]
+		self:displayCredit(txt, x, y)
+
+		txt.y = txt.y - nb_keyframes * 1.5
+		if i == #self.list and txt.y < game.h then
+			if credits[self.next_credit] ~= nil then
+				local t = self:makeEntry(credits[self.next_credit])
+				self.next_credit = self.next_credit + 1
+				t.y = txt.y + txt.step_h
+				table.insert(self.list, t)
+			end
+			if #self.list == 1 and credits[self.next_credit] == nil then
+				game:unregisterDialog(self)
+			end
+		elseif i == 1 and txt.y + txt.h < 0 then
+			table.remove(self.list, 1)
+		end
+	end
+end
diff --git a/game/engines/default/modules/boot/dialogs/LoadGame.lua b/game/engines/default/modules/boot/dialogs/LoadGame.lua
index 22003757a93215ce51d7ffce7da82f57b50368b3..9278f8f37602c0353487ab86222f727679063e7c 100644
--- a/game/engines/default/modules/boot/dialogs/LoadGame.lua
+++ b/game/engines/default/modules/boot/dialogs/LoadGame.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -33,6 +33,7 @@ function _M:init()
 	Dialog.init(self, "Load Game", game.w * 0.8, game.h * 0.8)
 
 	self.c_compat = Checkbox.new{default=false, width=math.floor(self.iw / 3 - 40), title="Show older versions", on_change=function() self:switch() end}
+	self.c_force_addons = Checkbox.new{default=false, width=math.floor(self.iw / 3 - 40), title="Ignore unloadable addons"}
 	self.c_play = Button.new{text="  Play!  ", fct=function(text) self:playSave() end}
 	self.c_delete = Button.new{text="Delete", fct=function(text) self:deleteSave() end}
 	self.c_desc = Textzone.new{width=math.floor(self.iw / 3 * 2 - 10), height=self.ih - self.c_delete.h - 10, text=""}
@@ -56,14 +57,20 @@ function _M:init()
 	}
 
 	local sep = Separator.new{dir="horizontal", size=self.ih - 10}
-	self:loadUI{
+	local uis = {
 		{left=0, top=0, ui=self.c_tree},
 		{left=self.c_tree.w+sep.w, top=0, ui=self.c_desc},
 		{right=0, bottom=0, ui=self.c_delete, hidden=true},
 		{left=0, bottom=0, ui=self.c_play, hidden=true},
 		{left=self.c_tree.w + 5, top=5, ui=sep},
-		{left=self.c_tree.w - self.c_compat.w, bottom=0, ui=self.c_compat},
 	}
+	if __module_extra_info.show_ignore_addons_not_loading then
+		uis[#uis+1] = {left=self.c_tree.w - self.c_compat.w, bottom=self.c_force_addons.h, ui=self.c_compat}
+		uis[#uis+1] = {left=self.c_tree.w - self.c_force_addons.w, bottom=0, ui=self.c_force_addons}
+	else
+		uis[#uis+1] = {left=self.c_tree.w - self.c_compat.w, bottom=0, ui=self.c_compat}
+	end
+	self:loadUI(uis)
 	self:setFocus(self.c_tree)
 	self:setupUI(false, true)
 
@@ -162,12 +169,14 @@ end
 
 function _M:playSave()
 	if not self.save_sel then return end
-	if config.settings.cheat then
+	if config.settings.cheat and not self.save_sel.cheat then
 		Dialog:yesnoPopup("Developer Mode", "#LIGHT_RED#WARNING: #LAST#Loading a savefile while in developer mode will permanently invalidate it. Proceed?", function(ret) if not ret then
 			Module:instanciate(self.save_sel.mod, self.save_sel.base_name, false)
 		end end, "Cancel", "Load anyway", true)
 	else
-		Module:instanciate(self.save_sel.mod, self.save_sel.base_name, false)
+		local extra_info = nil
+		if self.c_force_addons.checked then extra_info = "ignore_addons_not_loading=true" end
+		Module:instanciate(self.save_sel.mod, self.save_sel.base_name, false, nil, extra_info)
 	end
 end
 
diff --git a/game/engines/default/modules/boot/dialogs/MainMenu.lua b/game/engines/default/modules/boot/dialogs/MainMenu.lua
index 63ddf825ba0a5912aef0640c3118a8b5bccf0d20..bbe2a02c2f6433ec3350f428bbff5c483c4b0d15 100644
--- a/game/engines/default/modules/boot/dialogs/MainMenu.lua
+++ b/game/engines/default/modules/boot/dialogs/MainMenu.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -21,6 +21,7 @@ require "engine.class"
 local Dialog = require "engine.ui.Dialog"
 local List = require "engine.ui.List"
 local Button = require "engine.ui.Button"
+local ButtonImage = require "engine.ui.ButtonImage"
 local Textzone = require "engine.ui.Textzone"
 local Textbox = require "engine.ui.Textbox"
 local Separator = require "engine.ui.Separator"
@@ -53,21 +54,35 @@ function _M:init()
 		local menu = require("engine.dialogs.GameMenu").new(list)
 		game:registerDialog(menu)
 	end}
+	l[#l+1] = {name="Credits", fct=function() game:registerDialog(require("mod.dialogs.Credits").new()) end}
 	l[#l+1] = {name="Exit", fct=function() game:onQuit() end}
 	if config.settings.cheat then l[#l+1] = {name="Reboot", fct=function() util.showMainMenu() end} end
-	if config.settings.cheat then l[#l+1] = {name="webtest", fct=function() util.browserOpenUrl("asset://te4/data/html/test.html") end} end
+	if config.settings.cheat then l[#l+1] = {name="webtest", fct=function() util.browserOpenUrl("http://te4.org/addons/tome?_te4") end} end
 
 	self.c_background = Button.new{text=game.stopped and "Enable background" or "Disable background", fct=function() self:switchBackground() end}
 	self.c_version = Textzone.new{auto_width=true, auto_height=true, text=("#{bold}##B9E100#T-Engine4 version: %d.%d.%d"):format(engine.version[1], engine.version[2], engine.version[3])}
 
 	self.c_list = List.new{width=self.iw, nb_items=#self.list, list=self.list, fct=function(item) end, font={"/data/font/DroidSans-Bold.ttf", 16}}
 
+	self.c_facebook = ButtonImage.new{no_decoration=true, alpha_unfocus=0.5, file="facebook.png", fct=function() util.browserOpenUrl("https://www.facebook.com/tales.of.maj.eyal") end}
+	self.c_twitter = ButtonImage.new{no_decoration=true, alpha_unfocus=0.5, file="twitter.png", fct=function() util.browserOpenUrl("https://twitter.com/darkgodone") end}
+	self.c_forums = ButtonImage.new{no_decoration=true, alpha_unfocus=0.5, file="forums.png", fct=function() util.browserOpenUrl("http://forums.te4.org/") end}
+
 	self.base_uis = {
 		{left=0, top=0, ui=self.c_list},
 		{left=0, bottom=0, absolute=true, ui=self.c_background},
 		{right=0, top=0, absolute=true, ui=self.c_version},
+		{right=0, bottom=self.c_facebook.h+self.c_twitter.h, absolute=true, ui=self.c_forums},
+		{right=0, bottom=self.c_twitter.h, absolute=true, ui=self.c_facebook},
+		{right=0, bottom=0, absolute=true, ui=self.c_twitter},
 	}
 
+	if core.webview and game.webtooltip then
+		self.c_tooltip = game.webtooltip
+		self.base_uis[#self.base_uis+1] = {left=9, top=9, absolute=true, ui=self.c_tooltip}
+
+	end
+
 	self:updateUI()	
 end
 
diff --git a/game/engines/default/modules/boot/dialogs/NewGame.lua b/game/engines/default/modules/boot/dialogs/NewGame.lua
index 4ca8d0370763c0c315e6976a8cadcb18f3f6df98..ea57973b372484b3a03d8695b9177eb0a33e5c97 100644
--- a/game/engines/default/modules/boot/dialogs/NewGame.lua
+++ b/game/engines/default/modules/boot/dialogs/NewGame.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/Profile.lua b/game/engines/default/modules/boot/dialogs/Profile.lua
index 4d6fc4545b2c32789c79115068180b987f44bf21..dd69afeadb6fd23e288ef1090e4a57a7e8df1130 100644
--- a/game/engines/default/modules/boot/dialogs/Profile.lua
+++ b/game/engines/default/modules/boot/dialogs/Profile.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/ProfileLogin.lua b/game/engines/default/modules/boot/dialogs/ProfileLogin.lua
index 6a11d30b114522e55159e6a06af5e7f4fe6a3c44..cc71c5b5009791ed9ea71c42c4b7692a8899cecb 100644
--- a/game/engines/default/modules/boot/dialogs/ProfileLogin.lua
+++ b/game/engines/default/modules/boot/dialogs/ProfileLogin.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/ProfileSteamRegister.lua b/game/engines/default/modules/boot/dialogs/ProfileSteamRegister.lua
index aaf96cfaf062d42053b70b93e6b8bc86aeda0e4f..b611fa2ed0fc3bad9c754c197d04936f18bd4bbe 100644
--- a/game/engines/default/modules/boot/dialogs/ProfileSteamRegister.lua
+++ b/game/engines/default/modules/boot/dialogs/ProfileSteamRegister.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/UpdateAll.lua b/game/engines/default/modules/boot/dialogs/UpdateAll.lua
index c46aab68a77745944eca9ca90dc18cf8fe65c9cb..0b68ce4fdc89f875636bef3eb0b32653564adad7 100644
--- a/game/engines/default/modules/boot/dialogs/UpdateAll.lua
+++ b/game/engines/default/modules/boot/dialogs/UpdateAll.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/dialogs/ViewHighScores.lua b/game/engines/default/modules/boot/dialogs/ViewHighScores.lua
index d9fc35d4d84778a6d4298442d309ab0d3ef46645..fed1d696fa570225c5271f7466a525a0ede1bca7 100644
--- a/game/engines/default/modules/boot/dialogs/ViewHighScores.lua
+++ b/game/engines/default/modules/boot/dialogs/ViewHighScores.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/init.lua b/game/engines/default/modules/boot/init.lua
index c4ad221d6967066533cd7e9842dc18cabac423ce..c0b5b6a082884bb3622d129cbd3ecff4a15f2d58 100644
--- a/game/engines/default/modules/boot/init.lua
+++ b/game/engines/default/modules/boot/init.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/engines/default/modules/boot/load.lua b/game/engines/default/modules/boot/load.lua
index 477504384e05f41b3bbb9d9a0fb4231b8fb1da79..a68c1881a04230aea6c1b218b4e09673c27c9c14 100644
--- a/game/engines/default/modules/boot/load.lua
+++ b/game/engines/default/modules/boot/load.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/loader/init.lua b/game/loader/init.lua
index bd968d845fbb852c90c23635d9fabd76f5cc5418..3a237f30d018639ba6f39f1e41d86986ad6f84a5 100644
--- a/game/loader/init.lua
+++ b/game/loader/init.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/loader/pre-init.lua b/game/loader/pre-init.lua
index 184feb32464e19656ba2bd1d09341f6a8002ba6d..d1c4d1ae941f9219b6b2c9b9eebae6dfa94e7a20 100644
--- a/game/loader/pre-init.lua
+++ b/game/loader/pre-init.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/class/Actor.lua b/game/modules/example/class/Actor.lua
index 4a84e2d6e742e05ed6b2ef6d2bb2a0c7df5b82ec..f6338a090903aa894f8c01281aca06b3845280e1 100644
--- a/game/modules/example/class/Actor.lua
+++ b/game/modules/example/class/Actor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/class/Game.lua b/game/modules/example/class/Game.lua
index fa6e4e7827aaa0d2acd10be03f047ad260946e28..4d63bc46e89a71b879c6939369fc5917b9fdb043 100644
--- a/game/modules/example/class/Game.lua
+++ b/game/modules/example/class/Game.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/class/Grid.lua b/game/modules/example/class/Grid.lua
index bd4ed55c120a11ee4cd1f3196461e8ee0fba06b7..ac6caaac833cfe8626928310259e8dd7b16bce8b 100644
--- a/game/modules/example/class/Grid.lua
+++ b/game/modules/example/class/Grid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/class/NPC.lua b/game/modules/example/class/NPC.lua
index c3c894ff064c17914c7c49b5abb1f51f743919e6..44e21fd18bb1ab3176eb6bfb08f1b0c3b3a4ff0a 100644
--- a/game/modules/example/class/NPC.lua
+++ b/game/modules/example/class/NPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/class/Player.lua b/game/modules/example/class/Player.lua
index fa6144907a561e3ae18efe006306ba1d0ef59bdc..84c7e93edff24912299365be35a3b782cafe81ae 100644
--- a/game/modules/example/class/Player.lua
+++ b/game/modules/example/class/Player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/class/interface/Combat.lua b/game/modules/example/class/interface/Combat.lua
index f1136908f57bce2e42ee234b7461d76d2910b795..4b70886972cd990073e747c6401cd56b38f022db 100644
--- a/game/modules/example/class/interface/Combat.lua
+++ b/game/modules/example/class/interface/Combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/birth/descriptors.lua b/game/modules/example/data/birth/descriptors.lua
index f520c9dcef2e86d23e367b03c047c5e330bd91af..ace642560644bd8be8aca4e081b4dec1317d4fde 100644
--- a/game/modules/example/data/birth/descriptors.lua
+++ b/game/modules/example/data/birth/descriptors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/damage_types.lua b/game/modules/example/data/damage_types.lua
index 489609e8501ba037ba7de0580e107229703f3a35..b965e49aaa32121debeb1fae4b197d2d815cb03b 100644
--- a/game/modules/example/data/damage_types.lua
+++ b/game/modules/example/data/damage_types.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/general/grids/basic.lua b/game/modules/example/data/general/grids/basic.lua
index e0fee7e68871fe4b1c65e1a2dab1d059a6814881..aef171a9b4a215d5ef9e83a519a2f13c3846e963 100644
--- a/game/modules/example/data/general/grids/basic.lua
+++ b/game/modules/example/data/general/grids/basic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/general/npcs/kobold.lua b/game/modules/example/data/general/npcs/kobold.lua
index 0cd5856e2e97439e681aaa1cbdda4d7171e4f925..687dc21ffff6e9dd0227dab9004de90a22b292fb 100644
--- a/game/modules/example/data/general/npcs/kobold.lua
+++ b/game/modules/example/data/general/npcs/kobold.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/gfx/particles/acid.lua b/game/modules/example/data/gfx/particles/acid.lua
index c7c37867af794af1aaa59c1e75deb13ae982e7d5..ddf4cfc04c25eea8fcf765c791190efa81d29fbf 100644
--- a/game/modules/example/data/gfx/particles/acid.lua
+++ b/game/modules/example/data/gfx/particles/acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/rooms/pilar.lua b/game/modules/example/data/rooms/pilar.lua
index aa2963c3c696d7d8a6f7e38b5558ec50e716f303..f3cbf6b5a1ab612ae3b158ed16ba4228b32f42aa 100644
--- a/game/modules/example/data/rooms/pilar.lua
+++ b/game/modules/example/data/rooms/pilar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/rooms/simple.lua b/game/modules/example/data/rooms/simple.lua
index cdb37a692075ff9fe0c63d486b75471b8587b59a..2b132a10793675208c5d9791d6884762bbb57c68 100644
--- a/game/modules/example/data/rooms/simple.lua
+++ b/game/modules/example/data/rooms/simple.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/talents.lua b/game/modules/example/data/talents.lua
index 7e6d79e20779db99b66612c96b7cd4f5653a7c52..33a9e2fd71fc241bf50357b9b7a5423479050d4d 100644
--- a/game/modules/example/data/talents.lua
+++ b/game/modules/example/data/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/timed_effects.lua b/game/modules/example/data/timed_effects.lua
index 21992afb6e9e1992981e9fad0cdec9e2c6130f1c..b567512bb5f91b14946573888017d1c6285a3b3f 100644
--- a/game/modules/example/data/timed_effects.lua
+++ b/game/modules/example/data/timed_effects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/zones/dungeon/grids.lua b/game/modules/example/data/zones/dungeon/grids.lua
index 5832131be7a237220cad308ea22787711d955aff..ed7f229c8b9c87db63984899d470cde108839594 100644
--- a/game/modules/example/data/zones/dungeon/grids.lua
+++ b/game/modules/example/data/zones/dungeon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/zones/dungeon/npcs.lua b/game/modules/example/data/zones/dungeon/npcs.lua
index eab65b627fbbfc7a3495013b48558d3425f0566c..ec5382314072dcef45fa6862b06a5ec37e20074f 100644
--- a/game/modules/example/data/zones/dungeon/npcs.lua
+++ b/game/modules/example/data/zones/dungeon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/zones/dungeon/objects.lua b/game/modules/example/data/zones/dungeon/objects.lua
index 16c6ffbed089914a87d0ca2b644dec785b652e68..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/modules/example/data/zones/dungeon/objects.lua
+++ b/game/modules/example/data/zones/dungeon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/zones/dungeon/traps.lua b/game/modules/example/data/zones/dungeon/traps.lua
index 16c6ffbed089914a87d0ca2b644dec785b652e68..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/modules/example/data/zones/dungeon/traps.lua
+++ b/game/modules/example/data/zones/dungeon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/data/zones/dungeon/zone.lua b/game/modules/example/data/zones/dungeon/zone.lua
index 9c98ecf8a9b05528757b957d622955a592a6b107..2e965b232c7f9fe015fc959581bd65eed70a13f4 100644
--- a/game/modules/example/data/zones/dungeon/zone.lua
+++ b/game/modules/example/data/zones/dungeon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/dialogs/DeathDialog.lua b/game/modules/example/dialogs/DeathDialog.lua
index 05285eaa3edfb2007a6662446bb151fd316eb5b1..0d931a30cb093202c79c757cdf405793057db089 100644
--- a/game/modules/example/dialogs/DeathDialog.lua
+++ b/game/modules/example/dialogs/DeathDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/dialogs/Quit.lua b/game/modules/example/dialogs/Quit.lua
index 1fbce8ab4198c17a3d2a45234f99c50d551ef0b7..37dada0dbda14499a38f0588153c43ba9ffd248b 100644
--- a/game/modules/example/dialogs/Quit.lua
+++ b/game/modules/example/dialogs/Quit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example/init.lua b/game/modules/example/init.lua
index 7ff39f817b39c8a8093945dd60c0434728f6f84a..b828669db7f0c97224a52778de7446a8701274d1 100644
--- a/game/modules/example/init.lua
+++ b/game/modules/example/init.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,8 +22,8 @@ long_name = "Example Module for T-Engine4"
 short_name = "example"
 author = { "DarkGod", "darkgod@te4.org" }
 homepage = "http://te4.org/modules:example"
-version = {1,1,3}
-engine = {1,1,3,"te4"}
+version = {1,1,5}
+engine = {1,1,5,"te4"}
 description = [[
 This is *NOT* a game, just an example/template to make your own using the T-Engine4.
 ]]
diff --git a/game/modules/example/load.lua b/game/modules/example/load.lua
index 9db69c12dd780eedfe449b6364dd4c43dc3a53c2..d5f17564ce7cbb2a27d22b2675845e2c3bf66e26 100644
--- a/game/modules/example/load.lua
+++ b/game/modules/example/load.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/class/Actor.lua b/game/modules/example_realtime/class/Actor.lua
index 472f55248b41540b00beaf251adf3c79c650cdc5..c507dc91cdbfcc0229d6ebcb598a591f685904f9 100644
--- a/game/modules/example_realtime/class/Actor.lua
+++ b/game/modules/example_realtime/class/Actor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/class/Game.lua b/game/modules/example_realtime/class/Game.lua
index 99d02942a499a4b45e36138ea99f683b06b872dc..a16aa9e0c5575670e800fcf6e20233392e7f2402 100644
--- a/game/modules/example_realtime/class/Game.lua
+++ b/game/modules/example_realtime/class/Game.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/class/Grid.lua b/game/modules/example_realtime/class/Grid.lua
index bd4ed55c120a11ee4cd1f3196461e8ee0fba06b7..ac6caaac833cfe8626928310259e8dd7b16bce8b 100644
--- a/game/modules/example_realtime/class/Grid.lua
+++ b/game/modules/example_realtime/class/Grid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/class/NPC.lua b/game/modules/example_realtime/class/NPC.lua
index c3c894ff064c17914c7c49b5abb1f51f743919e6..44e21fd18bb1ab3176eb6bfb08f1b0c3b3a4ff0a 100644
--- a/game/modules/example_realtime/class/NPC.lua
+++ b/game/modules/example_realtime/class/NPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/class/Player.lua b/game/modules/example_realtime/class/Player.lua
index e28d8928c15295edfc9988f7bf7111804eedb289..e8cd48370e82ed4cf739748d3814d630efc310c2 100644
--- a/game/modules/example_realtime/class/Player.lua
+++ b/game/modules/example_realtime/class/Player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/class/interface/Combat.lua b/game/modules/example_realtime/class/interface/Combat.lua
index f1136908f57bce2e42ee234b7461d76d2910b795..4b70886972cd990073e747c6401cd56b38f022db 100644
--- a/game/modules/example_realtime/class/interface/Combat.lua
+++ b/game/modules/example_realtime/class/interface/Combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/birth/descriptors.lua b/game/modules/example_realtime/data/birth/descriptors.lua
index f520c9dcef2e86d23e367b03c047c5e330bd91af..ace642560644bd8be8aca4e081b4dec1317d4fde 100644
--- a/game/modules/example_realtime/data/birth/descriptors.lua
+++ b/game/modules/example_realtime/data/birth/descriptors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/damage_types.lua b/game/modules/example_realtime/data/damage_types.lua
index 489609e8501ba037ba7de0580e107229703f3a35..b965e49aaa32121debeb1fae4b197d2d815cb03b 100644
--- a/game/modules/example_realtime/data/damage_types.lua
+++ b/game/modules/example_realtime/data/damage_types.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/general/grids/basic.lua b/game/modules/example_realtime/data/general/grids/basic.lua
index e0fee7e68871fe4b1c65e1a2dab1d059a6814881..aef171a9b4a215d5ef9e83a519a2f13c3846e963 100644
--- a/game/modules/example_realtime/data/general/grids/basic.lua
+++ b/game/modules/example_realtime/data/general/grids/basic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/general/npcs/kobold.lua b/game/modules/example_realtime/data/general/npcs/kobold.lua
index 0cd5856e2e97439e681aaa1cbdda4d7171e4f925..687dc21ffff6e9dd0227dab9004de90a22b292fb 100644
--- a/game/modules/example_realtime/data/general/npcs/kobold.lua
+++ b/game/modules/example_realtime/data/general/npcs/kobold.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/gfx/particles/acid.lua b/game/modules/example_realtime/data/gfx/particles/acid.lua
index c7c37867af794af1aaa59c1e75deb13ae982e7d5..ddf4cfc04c25eea8fcf765c791190efa81d29fbf 100644
--- a/game/modules/example_realtime/data/gfx/particles/acid.lua
+++ b/game/modules/example_realtime/data/gfx/particles/acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/rooms/pilar.lua b/game/modules/example_realtime/data/rooms/pilar.lua
index aa2963c3c696d7d8a6f7e38b5558ec50e716f303..f3cbf6b5a1ab612ae3b158ed16ba4228b32f42aa 100644
--- a/game/modules/example_realtime/data/rooms/pilar.lua
+++ b/game/modules/example_realtime/data/rooms/pilar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/rooms/simple.lua b/game/modules/example_realtime/data/rooms/simple.lua
index cdb37a692075ff9fe0c63d486b75471b8587b59a..2b132a10793675208c5d9791d6884762bbb57c68 100644
--- a/game/modules/example_realtime/data/rooms/simple.lua
+++ b/game/modules/example_realtime/data/rooms/simple.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/talents.lua b/game/modules/example_realtime/data/talents.lua
index 7e6d79e20779db99b66612c96b7cd4f5653a7c52..33a9e2fd71fc241bf50357b9b7a5423479050d4d 100644
--- a/game/modules/example_realtime/data/talents.lua
+++ b/game/modules/example_realtime/data/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/timed_effects.lua b/game/modules/example_realtime/data/timed_effects.lua
index 21992afb6e9e1992981e9fad0cdec9e2c6130f1c..b567512bb5f91b14946573888017d1c6285a3b3f 100644
--- a/game/modules/example_realtime/data/timed_effects.lua
+++ b/game/modules/example_realtime/data/timed_effects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/zones/dungeon/grids.lua b/game/modules/example_realtime/data/zones/dungeon/grids.lua
index 5832131be7a237220cad308ea22787711d955aff..ed7f229c8b9c87db63984899d470cde108839594 100644
--- a/game/modules/example_realtime/data/zones/dungeon/grids.lua
+++ b/game/modules/example_realtime/data/zones/dungeon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/zones/dungeon/npcs.lua b/game/modules/example_realtime/data/zones/dungeon/npcs.lua
index eab65b627fbbfc7a3495013b48558d3425f0566c..ec5382314072dcef45fa6862b06a5ec37e20074f 100644
--- a/game/modules/example_realtime/data/zones/dungeon/npcs.lua
+++ b/game/modules/example_realtime/data/zones/dungeon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/zones/dungeon/objects.lua b/game/modules/example_realtime/data/zones/dungeon/objects.lua
index 16c6ffbed089914a87d0ca2b644dec785b652e68..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/modules/example_realtime/data/zones/dungeon/objects.lua
+++ b/game/modules/example_realtime/data/zones/dungeon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/zones/dungeon/traps.lua b/game/modules/example_realtime/data/zones/dungeon/traps.lua
index 16c6ffbed089914a87d0ca2b644dec785b652e68..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/modules/example_realtime/data/zones/dungeon/traps.lua
+++ b/game/modules/example_realtime/data/zones/dungeon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/data/zones/dungeon/zone.lua b/game/modules/example_realtime/data/zones/dungeon/zone.lua
index 9c98ecf8a9b05528757b957d622955a592a6b107..2e965b232c7f9fe015fc959581bd65eed70a13f4 100644
--- a/game/modules/example_realtime/data/zones/dungeon/zone.lua
+++ b/game/modules/example_realtime/data/zones/dungeon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/dialogs/DeathDialog.lua b/game/modules/example_realtime/dialogs/DeathDialog.lua
index 05285eaa3edfb2007a6662446bb151fd316eb5b1..0d931a30cb093202c79c757cdf405793057db089 100644
--- a/game/modules/example_realtime/dialogs/DeathDialog.lua
+++ b/game/modules/example_realtime/dialogs/DeathDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/dialogs/Quit.lua b/game/modules/example_realtime/dialogs/Quit.lua
index 1fbce8ab4198c17a3d2a45234f99c50d551ef0b7..37dada0dbda14499a38f0588153c43ba9ffd248b 100644
--- a/game/modules/example_realtime/dialogs/Quit.lua
+++ b/game/modules/example_realtime/dialogs/Quit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/example_realtime/init.lua b/game/modules/example_realtime/init.lua
index 033f6c4073be48ea858fdfc2ce86fa37bc2da09e..dd6beb17c4321736ae1225bd8c99b034659ecdf9 100644
--- a/game/modules/example_realtime/init.lua
+++ b/game/modules/example_realtime/init.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,8 +22,8 @@ long_name = "Realtime Example Module for T-Engine4"
 short_name = "example_realtime"
 author = { "DarkGod", "darkgod@te4.org" }
 homepage = "http://te4.org/modules:example"
-version = {1,1,3}
-engine = {1,1,3,"te4"}
+version = {1,1,5}
+engine = {1,1,5,"te4"}
 description = [[
 This is *NOT* a game, just an example/template to make your own using the T-Engine4.
 ]]
diff --git a/game/modules/example_realtime/load.lua b/game/modules/example_realtime/load.lua
index ad79f7041041ef840bb2056e8d121cf7f34c6a0e..a9ab4f11d8cb7a58664091e13721e6eb919aa399 100644
--- a/game/modules/example_realtime/load.lua
+++ b/game/modules/example_realtime/load.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/ai/adventurer.lua b/game/modules/gruesome/ai/adventurer.lua
index 4a3ba5237eab6daeef96d6824fe03e34fa07b565..8f1b9e09fd6cb0436c1a43a4f08977fdb431af0d 100644
--- a/game/modules/gruesome/ai/adventurer.lua
+++ b/game/modules/gruesome/ai/adventurer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/Actor.lua b/game/modules/gruesome/class/Actor.lua
index 7106d45817032a09d31f94874f592ebb8579234e..8fc8f9dfddbadd93a4502fe0966c9cb735442c29 100644
--- a/game/modules/gruesome/class/Actor.lua
+++ b/game/modules/gruesome/class/Actor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/Game.lua b/game/modules/gruesome/class/Game.lua
index 71e453d823874c525d14702a27262b25c0f3d6f0..c05f5001a6f39803b38b096424be2e7d109652ea 100644
--- a/game/modules/gruesome/class/Game.lua
+++ b/game/modules/gruesome/class/Game.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/Grid.lua b/game/modules/gruesome/class/Grid.lua
index bd4ed55c120a11ee4cd1f3196461e8ee0fba06b7..ac6caaac833cfe8626928310259e8dd7b16bce8b 100644
--- a/game/modules/gruesome/class/Grid.lua
+++ b/game/modules/gruesome/class/Grid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/NPC.lua b/game/modules/gruesome/class/NPC.lua
index 42ef214ed0fe1a410d88bb8399f399880aa3024e..d4012e544bbe4227962ab237d9ffa4ca5209d07c 100644
--- a/game/modules/gruesome/class/NPC.lua
+++ b/game/modules/gruesome/class/NPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/Player.lua b/game/modules/gruesome/class/Player.lua
index ea2ecb0083bad62c4e56151dc874c60b779b05a9..f2b9b8ffa50b3b356996e826a2f3ab271420e01e 100644
--- a/game/modules/gruesome/class/Player.lua
+++ b/game/modules/gruesome/class/Player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/PlayerDisplay.lua b/game/modules/gruesome/class/PlayerDisplay.lua
index 9b13b5d0f9304d15965c40683f609f270d805a3d..ec3db28096d2e958c56d69d24e2a29cce8783ba1 100644
--- a/game/modules/gruesome/class/PlayerDisplay.lua
+++ b/game/modules/gruesome/class/PlayerDisplay.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/class/interface/Combat.lua b/game/modules/gruesome/class/interface/Combat.lua
index 19d30f3647351394bc4f5091c6931d9a0c641299..635acfed464cacde00e76d90b294e0ebc3e20387 100644
--- a/game/modules/gruesome/class/interface/Combat.lua
+++ b/game/modules/gruesome/class/interface/Combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/birth/descriptors.lua b/game/modules/gruesome/data/birth/descriptors.lua
index 573261c2641ba22b4e284006b481aceb7f65fcc3..6057a4a5725944ab837d25af29a22750fd841b05 100644
--- a/game/modules/gruesome/data/birth/descriptors.lua
+++ b/game/modules/gruesome/data/birth/descriptors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/damage_types.lua b/game/modules/gruesome/data/damage_types.lua
index 6df5b7d998b6eddd3e8ea486f14e7a655d5adeb7..6f95bb9ed126a74a568dc19af462357cd50176ff 100644
--- a/game/modules/gruesome/data/damage_types.lua
+++ b/game/modules/gruesome/data/damage_types.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/general/grids/basic.lua b/game/modules/gruesome/data/general/grids/basic.lua
index c2a8bfe202157938edc53b261e60a8b8ce65e0e3..b5d640a0029f01dc74050e25cfd84751826eb24a 100644
--- a/game/modules/gruesome/data/general/grids/basic.lua
+++ b/game/modules/gruesome/data/general/grids/basic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/general/npcs/adventurer.lua b/game/modules/gruesome/data/general/npcs/adventurer.lua
index 2b9870a24457e17e17a82b89fd706da79a750114..24f178873264582be2bea2eb756a4d8597c4ad28 100644
--- a/game/modules/gruesome/data/general/npcs/adventurer.lua
+++ b/game/modules/gruesome/data/general/npcs/adventurer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/gfx/particles/acid.lua b/game/modules/gruesome/data/gfx/particles/acid.lua
index c7c37867af794af1aaa59c1e75deb13ae982e7d5..ddf4cfc04c25eea8fcf765c791190efa81d29fbf 100644
--- a/game/modules/gruesome/data/gfx/particles/acid.lua
+++ b/game/modules/gruesome/data/gfx/particles/acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/gfx/particles/ball_shadow.lua b/game/modules/gruesome/data/gfx/particles/ball_shadow.lua
index 8c97b5ab315d276f3c4eb17353d29292b96e1565..3156b86288808095e4862048fb14ec7c0d9d807b 100644
--- a/game/modules/gruesome/data/gfx/particles/ball_shadow.lua
+++ b/game/modules/gruesome/data/gfx/particles/ball_shadow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/rooms/pilar.lua b/game/modules/gruesome/data/rooms/pilar.lua
index aa2963c3c696d7d8a6f7e38b5558ec50e716f303..f3cbf6b5a1ab612ae3b158ed16ba4228b32f42aa 100644
--- a/game/modules/gruesome/data/rooms/pilar.lua
+++ b/game/modules/gruesome/data/rooms/pilar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/rooms/simple.lua b/game/modules/gruesome/data/rooms/simple.lua
index cdb37a692075ff9fe0c63d486b75471b8587b59a..2b132a10793675208c5d9791d6884762bbb57c68 100644
--- a/game/modules/gruesome/data/rooms/simple.lua
+++ b/game/modules/gruesome/data/rooms/simple.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/talents.lua b/game/modules/gruesome/data/talents.lua
index 7f66dcc0ad94c95e8dea5a58d9410643cefc2494..b8752f8c5cf0f88166cf5d84ed1fb3a694157106 100644
--- a/game/modules/gruesome/data/talents.lua
+++ b/game/modules/gruesome/data/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/timed_effects.lua b/game/modules/gruesome/data/timed_effects.lua
index 21992afb6e9e1992981e9fad0cdec9e2c6130f1c..b567512bb5f91b14946573888017d1c6285a3b3f 100644
--- a/game/modules/gruesome/data/timed_effects.lua
+++ b/game/modules/gruesome/data/timed_effects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/zones/dungeon/grids.lua b/game/modules/gruesome/data/zones/dungeon/grids.lua
index 5832131be7a237220cad308ea22787711d955aff..ed7f229c8b9c87db63984899d470cde108839594 100644
--- a/game/modules/gruesome/data/zones/dungeon/grids.lua
+++ b/game/modules/gruesome/data/zones/dungeon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/zones/dungeon/npcs.lua b/game/modules/gruesome/data/zones/dungeon/npcs.lua
index 3780af788de39c2026779f95ced6e21a581b44be..50fe2f3ee690dd6631dc238376f43b9ebf8ecc5c 100644
--- a/game/modules/gruesome/data/zones/dungeon/npcs.lua
+++ b/game/modules/gruesome/data/zones/dungeon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/zones/dungeon/objects.lua b/game/modules/gruesome/data/zones/dungeon/objects.lua
index 16c6ffbed089914a87d0ca2b644dec785b652e68..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/modules/gruesome/data/zones/dungeon/objects.lua
+++ b/game/modules/gruesome/data/zones/dungeon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/zones/dungeon/traps.lua b/game/modules/gruesome/data/zones/dungeon/traps.lua
index 16c6ffbed089914a87d0ca2b644dec785b652e68..b3648a10c1f33d215c42d06f26d38b937851f457 100644
--- a/game/modules/gruesome/data/zones/dungeon/traps.lua
+++ b/game/modules/gruesome/data/zones/dungeon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/data/zones/dungeon/zone.lua b/game/modules/gruesome/data/zones/dungeon/zone.lua
index 26c4178b9e595b16278d978d25189334afcc8d37..1f12aa86df68406fab2c77cd52294af43f0d7218 100644
--- a/game/modules/gruesome/data/zones/dungeon/zone.lua
+++ b/game/modules/gruesome/data/zones/dungeon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/dialogs/DeathDialog.lua b/game/modules/gruesome/dialogs/DeathDialog.lua
index 05285eaa3edfb2007a6662446bb151fd316eb5b1..0d931a30cb093202c79c757cdf405793057db089 100644
--- a/game/modules/gruesome/dialogs/DeathDialog.lua
+++ b/game/modules/gruesome/dialogs/DeathDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/dialogs/MapMenu.lua b/game/modules/gruesome/dialogs/MapMenu.lua
index 1fac925f545e2d3d2c5a0be5190ed9a906f4fe15..db258d138aafaa65345571de032c3f95261610f2 100644
--- a/game/modules/gruesome/dialogs/MapMenu.lua
+++ b/game/modules/gruesome/dialogs/MapMenu.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/dialogs/Quit.lua b/game/modules/gruesome/dialogs/Quit.lua
index 1fbce8ab4198c17a3d2a45234f99c50d551ef0b7..37dada0dbda14499a38f0588153c43ba9ffd248b 100644
--- a/game/modules/gruesome/dialogs/Quit.lua
+++ b/game/modules/gruesome/dialogs/Quit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/init.lua b/game/modules/gruesome/init.lua
index 6ea63959110ea63b4961f1e7c1ed8c44503540ae..3b85800c95abe841ac865ac606d5abfc95788f6c 100644
--- a/game/modules/gruesome/init.lua
+++ b/game/modules/gruesome/init.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/load.lua b/game/modules/gruesome/load.lua
index 0a0d05cbc77922db2ee567b9802665fbab9404c0..07e20e2d80d1849f04756a1429f225cc58899e97 100644
--- a/game/modules/gruesome/load.lua
+++ b/game/modules/gruesome/load.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/gruesome/map_config.lua b/game/modules/gruesome/map_config.lua
index cbb9bf35d8416728c3b05eaabec280d8755daec4..ae7c55ff9b3f89264cb62fde027c5bf039a1f028 100644
--- a/game/modules/gruesome/map_config.lua
+++ b/game/modules/gruesome/map_config.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/escort.lua b/game/modules/tome/ai/escort.lua
index 37b1416d675f9874bd6df3990962c727c9167678..5aae47c3fe9774771eb7d6e62376744a89cd7edf 100644
--- a/game/modules/tome/ai/escort.lua
+++ b/game/modules/tome/ai/escort.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/heal.lua b/game/modules/tome/ai/heal.lua
index 4006f5215368d8e3090d1e427e36abd580adc887..16d148a193544b4914c025d39766aa3cb563191f 100644
--- a/game/modules/tome/ai/heal.lua
+++ b/game/modules/tome/ai/heal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/party.lua b/game/modules/tome/ai/party.lua
index d2c7272a496ded4425b9dfe04298ee35f2d4141a..ada933a11df0a8670adbe5326a21dabd60775cac 100644
--- a/game/modules/tome/ai/party.lua
+++ b/game/modules/tome/ai/party.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/quests.lua b/game/modules/tome/ai/quests.lua
index 2e1a749f57975d4c7578aea64deb499fd54c7dfa..57dfdaa59731f46eacf3d090aa21d787546126d1 100644
--- a/game/modules/tome/ai/quests.lua
+++ b/game/modules/tome/ai/quests.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/sandworm_tunneler.lua b/game/modules/tome/ai/sandworm_tunneler.lua
index 5009ab45e91fbcb1aa43589128452ff6acf1e158..8d3ece590731ce9a52e3ed37273a15fc372a16b7 100644
--- a/game/modules/tome/ai/sandworm_tunneler.lua
+++ b/game/modules/tome/ai/sandworm_tunneler.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/shadow.lua b/game/modules/tome/ai/shadow.lua
index 6a7d6f0446955c9a41f965b63007aa5ef65f0f87..b1f495181871b748c43413ea4dc4ed69cd5145c9 100644
--- a/game/modules/tome/ai/shadow.lua
+++ b/game/modules/tome/ai/shadow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/summon.lua b/game/modules/tome/ai/summon.lua
index 74cdcd575b45add34b1b8911e78384422226d0c0..34b5d9e5942308f8339c8da917488db2b25d442f 100644
--- a/game/modules/tome/ai/summon.lua
+++ b/game/modules/tome/ai/summon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/tactical.lua b/game/modules/tome/ai/tactical.lua
index 3cadfb7a8006c5cb65afa6746397bac58dfda122..1fa2aca35741289dec1f502e13ec345b2de9b752 100644
--- a/game/modules/tome/ai/tactical.lua
+++ b/game/modules/tome/ai/tactical.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -173,7 +173,7 @@ newAI("use_tactical", function(self)
 						if not avail[tact] then avail[tact] = {} end
 						-- Save the tactic, if the talent is instant it gets a huge bonus
 						-- Note the addition of a less than one random value, this means the sorting will randomly shift equal values
-						val = ((t.no_energy==true) and val * 10 or val) + rng.float(0, 0.9)
+						val = ((util.getval(t.no_energy, self, t)==true) and val * 10 or val) + rng.float(0, 0.9)
 						avail[tact][#avail[tact]+1] = {val=val, tid=tid, nb_foes_hit=nb_foes_hit, nb_allies_hit=nb_allies_hit, nb_self_hit=nb_self_hit}
 						print(self.name, self.uid, "tactical ai talents can use", t.name, tid, tact, "weight", val)
 						ok = true
diff --git a/game/modules/tome/ai/target.lua b/game/modules/tome/ai/target.lua
index 3711b6f68ba687d4d631f5b4f956c4acc6af93e2..68a719b3461d4392a6de1f55e485696456f6342b 100644
--- a/game/modules/tome/ai/target.lua
+++ b/game/modules/tome/ai/target.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/ai/worldnpcs.lua b/game/modules/tome/ai/worldnpcs.lua
index b804b910eb994e76893daaa71e0534449082a325..84faef32f73f13e8f763614bbb0ed44ae9ca2330 100644
--- a/game/modules/tome/ai/worldnpcs.lua
+++ b/game/modules/tome/ai/worldnpcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index b7545e080b57ab863f7e9bece2eda8ec9dcbaa27..7c65ca8d46e2a34a03e772b4945b17ebdf46e11a 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -1039,7 +1039,12 @@ function _M:move(x, y, force)
 				self:incStamina(-self:attr("move_stamina_instead_of_energy"))
 			else
 				local speed = self:combatMovementSpeed(x, y)
-				self:useEnergy(game.energy_to_act * speed)
+				local use_energy = true
+				if self:attr("walk_sun_path") then
+					for i, e in ipairs(game.level.map.effects) do if e.damtype == DamageType.SUN_PATH and e.grids[x] and e.grids[x][y] then use_energy = false break end end
+				end
+
+				if use_energy then self:useEnergy(game.energy_to_act * speed) end
 
 				if speed <= 0.125 and self:knowTalent(self.T_FAST_AS_LIGHTNING) then
 					local t = self:getTalentFromId(self.T_FAST_AS_LIGHTNING)
@@ -1648,12 +1653,12 @@ function _M:onTakeHit(value, src, death_note)
 
 	if self:attr("phase_shift") and not self.turn_procs.phase_shift then
 		self.turn_procs.phase_shift = true
-
 		local nx, ny = util.findFreeGrid(self.x, self.y, 1, true, {[Map.ACTOR]=true})
 		if nx then
 			local ox, oy = self.x, self.y
 			self:move(nx, ny, true)
 			game.level.map:particleEmitter(ox, oy, math.max(math.abs(nx-ox), math.abs(ny-oy)), "lightning", {tx=nx-ox, ty=ny-oy})
+			game:delayedLogDamage(src or {}, self, 0, ("#STEEL_BLUE#(%d shifted)#LAST#"):format(value), nil)
 			return 0
 		end
 	end
@@ -1725,9 +1730,7 @@ function _M:onTakeHit(value, src, death_note)
 			game:delayedLogMessage(self, nil, "mitosis_damage", "#DARK_GREEN##Source# shares damage with %s oozes!", string.his_her(self))
 			value = value / (#acts+1)
 			for _, act in ipairs(acts) do 
-				act.resists.all = act.resists.all - 50
 				act:takeHit(value, src) 
-				act.resists.all = act.resists.all + 50
 			end
 		end
 	end
@@ -2147,6 +2150,7 @@ function _M:onTakeHit(value, src, death_note)
 			game.logSeen(self, "#YELLOW#%s has been saved by a blast of positive energy!#LAST#", self.name:capitalize())
 			game:delayedLogDamage(tal, self, -sl, ("#LIGHT_GREEN#%d healing#LAST#"):format(sl), false)
 			self:forceUseTalent(self.T_SECOND_LIFE, {ignore_energy=true})
+			if self.player then world:gainAchievement("AVOID_DEATH", self) end
 		end
 	end
 	
@@ -2224,6 +2228,15 @@ function _M:onTakeHit(value, src, death_note)
 			game:delayedLogMessage(src, self, "life_leech"..self.uid, "#CRIMSON##Source# leeches life from #Target#!")
 		end
 	end
+	
+	-- Life steal from weapon
+	if value > 0 and src and not src.dead and src.attr and src:attr("lifesteal") then
+		local leech = math.min(value, self.life) * src.lifesteal / 100
+		if leech > 0 then
+			src:heal(leech, self)
+			game:delayedLogMessage(src, self, "lifesteal"..self.uid, "#CRIMSON##Source# steals life from #Target#!")
+		end
+	end
 
 	-- Flat damage cap
 	if self.flat_damage_cap and self.max_life and death_note and death_note.damtype then
@@ -2238,6 +2251,11 @@ function _M:onTakeHit(value, src, death_note)
 		end
 	end
 
+	local cb = {value=value}
+	if self:fireTalentCheck("callbackOnHit", cb, src, death_note) then
+		value = cb.value
+	end
+	
 	local hd = {"Actor:takeHit", value=value, src=src, death_note=death_note}
 	if self:triggerHook(hd) then value = hd.value end
 
@@ -2277,8 +2295,11 @@ function _M:takeHit(value, src, death_note)
 		end
 	end
 
+
 	local dead, val = mod.class.interface.ActorLife.takeHit(self, value, src, death_note)
 
+	if src.fireTalentCheck then src:fireTalentCheck("callbackOnDealDamage", val, self, dead, death_note) end
+
 	if dead and src and src.attr and src:attr("overkill") and src.project and not src.turn_procs.overkill then
 		src.turn_procs.overkill = true
 		local dam = (self.die_at - self.life) * src:attr("overkill") / 100
@@ -2383,6 +2404,8 @@ function _M:die(src, death_note)
 		return
 	end
 
+	if self:fireTalentCheck("callbackOnDeath", src, death_note) then return end
+
 	mod.class.interface.ActorLife.die(self, src, death_note)
 
 	-- Trigegr on_die effects if any
@@ -2640,10 +2663,12 @@ function _M:die(src, death_note)
 	if src and death_note and death_note.source_talent and death_note.source_talent.vim and src.last_vim_turn ~= game.turn then
 		src.last_vim_turn = game.turn
 		game:onTickEnd(function() -- Do it on tick end to make sure Vim is spent by the talent code before being refunded
-			src:incVim(death_note.source_talent.vim)
+			src:incVim(util.getval(death_note.source_talent.vim, self, death_note.source_talent))
 		end)
 	end
 
+	if src and src.fireTalentCheck then src:fireTalentCheck("callbackOnKill", self, death_note) end
+
 	if src and ((src.resolveSource and src:resolveSource().player) or src.player) then
 		-- Achievements
 		local p = game.party:findMember{main=true}
@@ -3045,7 +3070,7 @@ function _M:updateModdableTile()
 
 	self:triggerHook{"Actor:updateModdableTile:back", base=base, add=add}
 
-	i = self.inven[self.INVEN_CLOAK]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile):format("behind")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
+	i = self.inven[self.INVEN_CLOAK]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile):format("behind")..".png", auto_tall=1} end
 
 	if self.shader_auras and next(self.shader_auras) then
 		for _, def in pairs(self.shader_auras) do
@@ -3057,41 +3082,41 @@ function _M:updateModdableTile()
 
 	if not self:attr("disarmed") then
 		i = self.inven[self.INVEN_MAINHAND]; if i and i[1] and i[1].moddable_tile_back then
-			add[#add+1] = {image = base..(i[1].moddable_tile_back):format("right")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1}
+			add[#add+1] = {image = base..(i[1].moddable_tile_back):format("right")..".png", auto_tall=1}
 		end
 		i = self.inven[self.INVEN_OFFHAND]; if i and i[1] and i[1].moddable_tile_back then
-			add[#add+1] = {image = base..(i[1].moddable_tile_back):format("left")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1}
+			add[#add+1] = {image = base..(i[1].moddable_tile_back):format("left")..".png", auto_tall=1}
 		end
 	end
 
-	i = self.inven[self.INVEN_CLOAK]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile):format("shoulder")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
-	i = self.inven[self.INVEN_FEET]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
-	i = self.inven[self.INVEN_BODY]; if i and i[1] and i[1].moddable_tile2 then add[#add+1] = {image = base..(i[1].moddable_tile2)..".png"}
+	i = self.inven[self.INVEN_CLOAK]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile):format("shoulder")..".png", auto_tall=1} end
+	i = self.inven[self.INVEN_FEET]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", auto_tall=1} end
+	i = self.inven[self.INVEN_BODY]; if i and i[1] and i[1].moddable_tile2 then add[#add+1] = {image = base..(i[1].moddable_tile2)..".png", auto_tall=1}
 	elseif not self.moddable_tile_nude then add[#add+1] = {image = base.."lower_body_01.png"} end
-	i = self.inven[self.INVEN_BODY]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1}
+	i = self.inven[self.INVEN_BODY]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", auto_tall=1}
 	elseif not self.moddable_tile_nude then add[#add+1] = {image = base.."upper_body_01.png"} end
-	i = self.inven[self.INVEN_HEAD]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
-	i = self.inven[self.INVEN_HANDS]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
-	i = self.inven[self.INVEN_CLOAK]; if i and i[1] and i[1].moddable_tile_hood then add[#add+1] = {image = base..(i[1].moddable_tile):format("hood")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
+	i = self.inven[self.INVEN_HEAD]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", auto_tall=1} end
+	i = self.inven[self.INVEN_HANDS]; if i and i[1] and i[1].moddable_tile then add[#add+1] = {image = base..(i[1].moddable_tile)..".png", auto_tall=1} end
+	i = self.inven[self.INVEN_CLOAK]; if i and i[1] and i[1].moddable_tile_hood then add[#add+1] = {image = base..(i[1].moddable_tile):format("hood")..".png", auto_tall=1} end
 	if not self:attr("disarmed") then
 		i = self.inven[self.INVEN_MAINHAND]; if i and i[1] and i[1].moddable_tile then
-			add[#add+1] = {image = base..(i[1].moddable_tile):format("right")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1}
+			add[#add+1] = {image = base..(i[1].moddable_tile):format("right")..".png", auto_tall=1}
 			if i[1].moddable_tile_particle then
 				add[#add].particle = i[1].moddable_tile_particle[1]
 				add[#add].particle_args = i[1].moddable_tile_particle[2]
 			end
-			if i[1].moddable_tile_ornament then add[#add+1] = {image = base..(i[1].moddable_tile_ornament):format("right")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
+			if i[1].moddable_tile_ornament then add[#add+1] = {image = base..(i[1].moddable_tile_ornament):format("right")..".png", auto_tall=1} end
 		end
 		i = self.inven[self.INVEN_OFFHAND]; if i and i[1] and i[1].moddable_tile then
-			add[#add+1] = {image = base..(i[1].moddable_tile):format("left")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1}
-			if i[1].moddable_tile_ornament then add[#add+1] = {image = base..(i[1].moddable_tile_ornament):format("left")..".png", display_y=i[1].moddable_tile_big and -1 or 0, display_h=i[1].moddable_tile_big and 2 or 1} end
+			add[#add+1] = {image = base..(i[1].moddable_tile):format("left")..".png", auto_tall=1}
+			if i[1].moddable_tile_ornament then add[#add+1] = {image = base..(i[1].moddable_tile_ornament):format("left")..".png", auto_tall=1} end
 		end
 	end
 
 	self:triggerHook{"Actor:updateModdableTile:front", base=base, add=add}
 
-	if self.moddable_tile_ornament and self.moddable_tile_ornament[self.female and "female" or "male"] then add[#add+1] = {image = base..self.moddable_tile_ornament[self.female and "female" or "male"]..".png"} end
-	if self.moddable_tile_ornament2 and self.moddable_tile_ornament2[self.female and "female" or "male"] then add[#add+1] = {image = base..self.moddable_tile_ornament2[self.female and "female" or "male"]..".png"} end
+	if self.moddable_tile_ornament and self.moddable_tile_ornament[self.female and "female" or "male"] then add[#add+1] = {image = base..self.moddable_tile_ornament[self.female and "female" or "male"]..".png", auto_tall=1} end
+	if self.moddable_tile_ornament2 and self.moddable_tile_ornament2[self.female and "female" or "male"] then add[#add+1] = {image = base..self.moddable_tile_ornament2[self.female and "female" or "male"]..".png", auto_tall=1} end
 
 	if self.x and game.level then game.level.map:updateMap(self.x, self.y) end
 end
@@ -3413,15 +3438,18 @@ end
 -- @param t_id the id of the talent to learn
 -- @return true if the talent was learnt, nil and an error message otherwise
 function _M:learnTalent(t_id, force, nb, extra)
+	local just_learnt = not self:knowTalent(tid)
 	if not engine.interface.ActorTalents.learnTalent(self, t_id, force, nb) then return false end
 
 	-- If we learned a spell, get mana, if you learned a technique get stamina, if we learned a wild gift, get power
 	local t = _M.talents_def[t_id]
 
-	for event, store in pairs(sustainCallbackCheck) do
-		if t[event] and t.mode ~= "sustained" then
-			self[store] = self[store] or {}
-			self[store][t_id] = "talent"
+	if just_learnt then
+		for event, store in pairs(sustainCallbackCheck) do
+			if t[event] and t.mode ~= "sustained" then
+				self[store] = self[store] or {}
+				self[store][t_id] = "talent"
+			end
 		end
 	end
 
@@ -3582,10 +3610,12 @@ function _M:unlearnTalent(t_id, nb, no_unsustain, extra)
 
 	local t = _M.talents_def[t_id]
 
-	for event, store in pairs(sustainCallbackCheck) do
-		if t[event] and t.mode ~= "sustained" then
-			self[store][t_id] = nil
-			if not next(self[store]) then self[store] = nil end
+	if not self:knowTalent(t_id) then
+		for event, store in pairs(sustainCallbackCheck) do
+			if t[event] and t.mode ~= "sustained" then
+				self[store][t_id] = nil
+				if not next(self[store]) then self[store] = nil end
+			end
 		end
 	end
 
@@ -3981,12 +4011,12 @@ function _M:preUseTalent(ab, silent, fake)
 		end
 	end
 
-	if self:triggerHook{"Actor:preUseTalent", t=ab, silent=silent, fale=fake} then
+	if self:triggerHook{"Actor:preUseTalent", t=ab, silent=silent, fake=fake} then
 		return false
 	end
 
 	-- Confused ? lose a turn!
-	if self:attr("confused") and (ab.mode ~= "sustained" or not self:isTalentActive(ab.id)) and ab.no_energy ~= true and not fake and not self:attr("force_talent_ignore_ressources") then
+	if self:attr("confused") and (ab.mode ~= "sustained" or not self:isTalentActive(ab.id)) and util.getval(ab.no_energy, self, ab) ~= true and not fake and not self:attr("force_talent_ignore_ressources") then
 		if rng.percent(self:attr("confused")) then
 			if not silent then game.logSeen(self, "%s is confused and fails to use %s.", self.name:capitalize(), ab.name) end
 			self:useEnergy()
@@ -3995,7 +4025,7 @@ function _M:preUseTalent(ab, silent, fake)
 	end
 
 	-- Failure chance?
-	if self:attr("talent_fail_chance") and (ab.mode ~= "sustained" or not self:isTalentActive(ab.id)) and ab.no_energy ~= true and not fake and not self:attr("force_talent_ignore_ressources") then
+	if self:attr("talent_fail_chance") and (ab.mode ~= "sustained" or not self:isTalentActive(ab.id)) and util.getval(ab.no_energy, self, ab) ~= true and not fake and not self:attr("force_talent_ignore_ressources") then
 		if rng.percent(self:attr("talent_fail_chance")) then
 			if not silent then game.logSeen(self, "%s fails to use %s.", self.name:capitalize(), ab.name) end
 			self:useEnergy()
@@ -4004,7 +4034,7 @@ function _M:preUseTalent(ab, silent, fake)
 	end
 
 	-- terrified effect
-	if self:attr("terrified") and (ab.mode ~= "sustained" or not self:isTalentActive(ab.id)) and ab.no_energy ~= true and not fake and not self:attr("force_talent_ignore_ressources") then
+	if self:attr("terrified") and (ab.mode ~= "sustained" or not self:isTalentActive(ab.id)) and util.getval(ab.no_energy, self, ab) ~= true and not fake and not self:attr("force_talent_ignore_ressources") then
 		local eff = self:hasEffect(self.EFF_TERRIFIED)
 		if rng.percent(self:attr("terrified")) then
 			if not silent then game.logSeen(self, "%s is too terrified to use %s.", self.name:capitalize(), ab.name) end
@@ -4051,15 +4081,21 @@ function _M:preUseTalent(ab, silent, fake)
 end
 
 local sustainCallbackCheck = {
+	callbackOnDealDamage = "talents_on_deal_damage",
+	callbackOnHit = "talents_on_hit",
 	callbackOnAct = "talents_on_act",
 	callbackOnActBase = "talents_on_act_base",
 	callbackOnMove = "talents_on_move",
 	callbackOnRest = "talents_on_rest",
+	callbackOnDeath = "talents_on_death",
+	callbackOnKill = "talents_on_kill",
 	callbackOnMeleeAttack = "talents_on_melee_attack",
 	callbackOnMeleeHit = "talents_on_melee_hit",
 	callbackOnMeleeMiss = "talents_on_melee_miss",
+	callbackOnArcheryAttack = "talents_on_archery_attack",
 	callbackOnArcheryHit = "talents_on_archery_hit",
 	callbackOnArcheryMiss = "talents_on_archery_miss",
+	callbackOnCrit = "talents_on_crit",
 }
 _M.sustainCallbackCheck = sustainCallbackCheck
 
@@ -4069,10 +4105,13 @@ function _M:fireTalentCheck(event, ...)
 	if self[store] and next(self[store]) then
 		for tid, kind in pairs(self[store]) do
 			if kind == "effect" then
+				self.__project_source = self.tmp[tid]
 				ret = self:callEffect(tid, event, ...) or ret
 			else
+				self.__project_source = self.sustain_talents[tid]
 				ret = self:callTalent(tid, event, ...) or ret
 			end
+			self.__project_source = nil
 		end
 	end
 	return ret
@@ -4107,13 +4146,21 @@ function _M:postUseTalent(ab, ret, silent)
 		end
 	end)
 
-	if not ab.no_energy then
+	if not util.getval(ab.no_energy, self, ab) then
 		if ab.is_spell then
 			self:useEnergy(game.energy_to_act * self:combatSpellSpeed())
 		elseif ab.is_summon then
 			self:useEnergy(game.energy_to_act * self:combatSummonSpeed())
 		elseif ab.type[1]:find("^technique/") then
-			self:useEnergy(game.energy_to_act * self:combatSpeed())
+			local combat = self.combat
+			if self:getInven(self.INVEN_MAINHAND) then
+				local o = self:getInven(self.INVEN_MAINHAND)[1]
+				combat = self:getObjectCombat(o, "mainhand")
+			elseif self:getInven(self.INVEN_OFFHAND) then
+				local o = self:getInven(self.INVEN_OFFHAND)[1]
+				combat = self:getObjectCombat(o, "offhand")
+			end
+			self:useEnergy(game.energy_to_act * self:combatSpeed(combat))
 		elseif ab.is_mind then
 			self:useEnergy(game.energy_to_act * self:combatMindSpeed())
 		else
@@ -4231,7 +4278,7 @@ function _M:postUseTalent(ab, ret, silent)
 		end
 		-- Vim is not affected by fatigue
 		if ab.vim and not self:attr("zero_resource_cost") then
-			trigger = true; self:incVim(-util.getval(ab.vim, self, ab)) self:incEquilibrium(ab.vim * 5)
+			trigger = true; self:incVim(-util.getval(ab.vim, self, ab)) self:incEquilibrium(util.getval(ab.vim, self, ab) * 5)
 		end
 		if ab.positive and not (self:attr("zero_resource_cost") and ab.positive > 0) then
 			trigger = true; self:incPositive(-util.getval(ab.positive, self, ab) * (100 + self:combatFatigue()) / 100)
@@ -4246,7 +4293,7 @@ function _M:postUseTalent(ab, ret, silent)
 		if ab.equilibrium and not self:attr("zero_resource_cost") then
 			trigger = true; self:incEquilibrium(util.getval(ab.equilibrium, self, ab))
 		end
-		-- Paradox is not affected by fatigue but it's cost does increase exponentially
+		-- Paradox is not affected by fatigue but its cost does increase exponentially
 		if ab.paradox and not (self:attr("zero_resource_cost") or game.zone.no_anomalies) then
 			trigger = true; self:incParadox(util.getval(ab.paradox, self, ab) * (1 + (self.paradox / 300)))
 		end
@@ -4277,7 +4324,7 @@ function _M:postUseTalent(ab, ret, silent)
 	if ab.id ~= self.T_GATHER_THE_THREADS and ab.id ~= self.T_SPACETIME_TUNING and ab.is_spell then self:breakChronoSpells() end
 	if not ab.no_reload_break then self:breakReloading() end
 	self:breakStepUp()
-	--if not (ab.no_energy or ab.no_break_channel) and not (ab.mode == "sustained" and self:isTalentActive(ab.id)) then self:breakPsionicChannel(ab.id) end
+	--if not (util.getval(ab.no_energy, self, ab) or ab.no_break_channel) and not (ab.mode == "sustained" and self:isTalentActive(ab.id)) then self:breakPsionicChannel(ab.id) end
 
 	for tid, _ in pairs(self.sustain_talents) do
 		local t = self:getTalentFromId(tid)
@@ -4369,6 +4416,9 @@ function _M:breakStepUp()
 	if self:hasEffect(self.EFF_WILD_SPEED) then
 		self:removeEffect(self.EFF_WILD_SPEED)
 	end
+	if self:hasEffect(self.EFF_HUNTER_SPEED) then
+		self:removeEffect(self.EFF_HUNTER_SPEED)
+	end
 	if self:hasEffect(self.EFF_REFLEXIVE_DODGING) then
 		self:removeEffect(self.EFF_REFLEXIVE_DODGING)
 	end
@@ -4475,7 +4525,8 @@ function _M:getTalentFullDescription(t, addlevel, config, fake_mastery)
 		end
 		if not config.ignore_use_time then
 			local uspeed = "1 turn"
-			if t.no_energy and type(t.no_energy) == "boolean" and t.no_energy == true then uspeed = "instant" end
+			local no_energy = util.getval(t.no_energy, self, t)
+			if no_energy and type(no_energy) == "boolean" and no_energy == true then uspeed = "instant" end
 			d:add({"color",0x6f,0xff,0x83}, "Usage Speed: ", {"color",0xFF,0xFF,0xFF}, uspeed, true)
 		end
 		local is_a = {}
@@ -4548,6 +4599,7 @@ function _M:startTalentCooldown(t)
 	t = self:getTalentFromId(t)
 	if not t.cooldown then return end
 	self.talents_cd[t.id] = self:getTalentCooldown(t)
+	if self.talents_cd[t.id] <= 0 then self.talents_cd[t.id] = nil end
 	self.changed = true
 end
 
@@ -4569,7 +4621,7 @@ function _M:checkSetTalentAuto(tid, v, opt)
 		end
 
 		local list = {}
-		if t.no_energy ~= true then list[#list+1] = "- requires a turn to use" end
+		if util.getval(t.no_energy, self, t) ~= true then list[#list+1] = "- requires a turn to use" end
 		if t.requires_target then list[#list+1] = "- requires a target, your last hostile one will be automatically used" end
 		if t.auto_use_warning then list[#list+1] = t.auto_use_warning end
 		if opt == 2 then 
@@ -4955,9 +5007,12 @@ end
 
 --- Called when we are initiating a projection
 function _M:on_project_init(t, x, y, damtype, dam, particles)
-	if self:attr("nullify_all_friendlyfire") then
-		t.friendlyfire = false
-		t.selffire = false
+	if self:attr("nullify_all_friendlyfire") and not t.ignore_nullify_all_friendlyfire then
+		local dt = DamageType:exists(damtype)
+		if not dt or not dt.ignore_nullify_all_friendlyfire then
+			t.friendlyfire = false
+			t.selffire = false
+		end
 	end
 end
 
diff --git a/game/modules/tome/class/BigNews.lua b/game/modules/tome/class/BigNews.lua
index feb19b892824422682587ddd91d63066ccaa4c81..83c28cadc23aff3d854a4f459df9deb0e237c310 100644
--- a/game/modules/tome/class/BigNews.lua
+++ b/game/modules/tome/class/BigNews.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Encounter.lua b/game/modules/tome/class/Encounter.lua
index 0d648513fa00d216316de61c4040bc6cef4f4e66..56782c5a137f506b7d01ae272a362d2c4418fd97 100644
--- a/game/modules/tome/class/Encounter.lua
+++ b/game/modules/tome/class/Encounter.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/FortressPC.lua b/game/modules/tome/class/FortressPC.lua
index f5c41a39751a493cf230fed325cd2f17f3b87fca..e7de163599f042290d4886164d3ec141b3243cbd 100644
--- a/game/modules/tome/class/FortressPC.lua
+++ b/game/modules/tome/class/FortressPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 4ea8f1061d196e0589ce3fa9d4a87a5ac870fa90..c6e2337a501e99aac6cf60ef672a3b7d1d8acfd8 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -408,18 +408,28 @@ function _M:computeAttachementSpotsFromTable(ta)
 end
 
 function _M:computeAttachementSpots()
+	local t = {}
 	if fs.exists(Tiles.prefix.."attachements.lua") then
 		print("Loading tileset attachements from ", Tiles.prefix.."attachements.lua")
 		local f, err = loadfile(Tiles.prefix.."attachements.lua")
 		if not f then print("Loading tileset attachements error", err)
 		else
-			local t = {}
 			setfenv(f, t)
 			local ok, err = pcall(f)
 			if not ok then print("Loading tileset attachements error", err) end
-			self:computeAttachementSpotsFromTable(t)
 		end		
 	end
+	for _, file in ipairs(fs.list(Tiles.prefix)) do if file:find("^attachements%-.+.lua$") then
+		print("Loading tileset attachements from ", Tiles.prefix..file)
+		local f, err = loadfile(Tiles.prefix..file)
+		if not f then print("Loading tileset attachements error", err)
+		else
+			setfenv(f, t)
+			local ok, err = pcall(f)
+			if not ok then print("Loading tileset attachements error", err) end
+		end		
+	end end
+	self:computeAttachementSpotsFromTable(t)
 end
 
 function _M:setupDisplayMode(reboot, mode)
@@ -493,7 +503,7 @@ function _M:setupDisplayMode(reboot, mode)
 		end
 		self:setupMiniMap()
 
-		self:createFBOs()
+		self:createFBOs()		
 	end
 end
 
@@ -504,6 +514,13 @@ function _M:createFBOs()
 	self.fbo = core.display.newFBO(Map.viewport.width, Map.viewport.height)
 	if self.fbo then
 		self.fbo_shader = Shader.new("main_fbo")
+		self.posteffects = {
+			wobbling = Shader.new("main_fbo/wobbling"),
+			underwater = Shader.new("main_fbo/underwater"),
+			motionblur = Shader.new("main_fbo/motionblur"),
+			blur = Shader.new("main_fbo/blur"),
+		}
+		self.posteffects_use = { self.fbo_shader.shad }
 		if not self.fbo_shader.shad then self.fbo = nil self.fbo_shader = nil end 
 		self.fbo2 = core.display.newFBO(Map.viewport.width, Map.viewport.height)
 	end
@@ -518,6 +535,8 @@ function _M:createFBOs()
 
 	if self.target then self.target:enableFBORenderer("ui/targetshader.png", "target_fbo") end
 
+	Map:enableFBORenderer("target_fbo")
+
 --	self.mm_fbo = core.display.newFBO(200, 200)
 --	if self.mm_fbo then self.mm_fbo_shader = Shader.new("mm_fbo") if not self.mm_fbo_shader.shad then self.mm_fbo = nil self.mm_fbo_shader = nil end end
 end
@@ -879,6 +898,16 @@ function _M:changeLevelReal(lev, zone, params)
 				end
 			end end
 			if #list > 0 then x, y = unpack(rng.table(list)) end
+		elseif params.auto_level_stair then
+			-- Dirty but quick
+			local list = {}
+			for i = 0, self.level.map.w - 1 do for j = 0, self.level.map.h - 1 do
+				local idx = i + j * self.level.map.w
+				if self.level.map.map[idx][Map.TERRAIN] and not self.level.map.map[idx][Map.TERRAIN].change_zone and self.level.map.map[idx][Map.TERRAIN].change_level == old_lev - self.level.level then
+					list[#list+1] = {i, j}
+				end
+			end end
+			if #list > 0 then x, y = unpack(rng.table(list)) end
 		end
 
 		-- Default to stairs
@@ -1356,7 +1385,7 @@ function _M:displayMap(nb_keyframes)
 		if self.fbo then
 			self.fbo:use(true)
 				if self.level.data.background then self.level.data.background(self.level, 0, 0, nb_keyframes) end
-				map:display(0, 0, nb_keyframes, config.settings.tome.smooth_fov)
+				map:display(0, 0, nb_keyframes, config.settings.tome.smooth_fov, self.fbo)
 				if self.level.data.foreground then self.level.data.foreground(self.level, 0, 0, nb_keyframes) end
 				if self.level.data.weather_particle then self.state:displayWeather(self.level, self.level.data.weather_particle, nb_keyframes) end
 				if self.level.data.weather_shader then self.state:displayWeatherShader(self.level, self.level.data.weather_shader, map.display_x, map.display_y, nb_keyframes) end
@@ -1370,13 +1399,13 @@ function _M:displayMap(nb_keyframes)
 			self.fbo2:use(false, self.full_fbo)
 
 			_2DNoise:bind(1, false)
-			self.fbo2:toScreen(map.display_x, map.display_y, map.viewport.width, map.viewport.height, self.fbo_shader.shad)
+			self.fbo2:postEffects(self.fbo, self.full_fbo, map.display_x, map.display_y, map.viewport.width, map.viewport.height, unpack(self.posteffects_use))
 			if self.target then self.target:display(nil, nil, self.full_fbo, nb_keyframes) end
 
 		-- Basic display; no FBOs
 		else
 			if self.level.data.background then self.level.data.background(self.level, map.display_x, map.display_y, nb_keyframes) end
-			map:display(nil, nil, nb_keyframes, config.settings.tome.smooth_fov)
+			map:display(nil, nil, nb_keyframes, config.settings.tome.smooth_fov, nil)
 			if self.target then self.target:display(nil, nil, self.full_fbo, nb_keyframes) end
 			if self.level.data.foreground then self.level.data.foreground(self.level, map.display_x, map.display_y, nb_keyframes) end
 			if self.level.data.weather_particle then self.state:displayWeather(self.level, self.level.data.weather_particle, nb_keyframes) end
@@ -1507,7 +1536,8 @@ function _M:setupCommands()
 			print("===============")
 		end end,
 		[{"_g","ctrl"}] = function() if config.settings.cheat then
---do return end
+			error("for johnny0, with love :)")
+do return end
 			local f, err = loadfile("/data/general/events/glimmerstone.lua")
 			print(f, err)
 			setfenv(f, setmetatable({level=self.level, zone=self.zone}, {__index=_G}))
@@ -1658,7 +1688,7 @@ do return end
 				else
 					-- Do not unpause, the player is allowed first move on next level
 					if e.change_level_check and e:change_level_check(self.player) then return end
-					self:changeLevel(e.change_zone and e.change_level or self.level.level + e.change_level, e.change_zone, {keep_old_lev=e.keep_old_lev, force_down=e.force_down, auto_zone_stair=e.change_zone_auto_stairs, temporary_zone_shift_back=e.change_level_shift_back})
+					self:changeLevel(e.change_zone and e.change_level or self.level.level + e.change_level, e.change_zone, {keep_old_lev=e.keep_old_lev, force_down=e.force_down, auto_zone_stair=e.change_zone_auto_stairs, auto_level_stair=e.change_level_auto_stairs, temporary_zone_shift_back=e.change_level_shift_back})
 				end
 			else
 				self.log("There is no way out of this level here.")
diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua
index 10cab225bc4d874be00031bbbd2a0fe4e9f7590e..6c789694df20d6fcd165cee1c2b85c72877b7ce5 100644
--- a/game/modules/tome/class/GameState.lua
+++ b/game/modules/tome/class/GameState.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -1665,89 +1665,8 @@ function _M:createRandomZone(zbase)
 	return zone, boss
 end
 
-function _M:createRandomBoss(base, data)
-	local b = base:clone()
-	data = data or {level=1}
-
-	------------------------------------------------------------
-	-- Basic stuff, name, rank, ...
-	------------------------------------------------------------
-	local ngd, name
-	if base.random_name_def then
-		ngd = NameGenerator2.new("/data/languages/names/"..base.random_name_def:gsub("#sex#", base.female and "female" or "male")..".txt")
-		name = ngd:generate(nil, base.random_name_min_syllables, base.random_name_max_syllables)
-	else
-		ngd = NameGenerator.new(randart_name_rules.default)
-		name = ngd:generate()
-	end
-	if data.name_scheme then
-		b.name = data.name_scheme:gsub("#rng#", name):gsub("#base#", b.name)
-	else
-		b.name = name.." the "..b.name
-	end
-	b.unique = b.name
-	b.randboss = true
-	local boss_id = "RND_BOSS_"..b.name:upper():gsub("[^A-Z]", "_")
-	b.define_as = boss_id
-	b.color = colors.VIOLET
-	b.rank = data.rank or (rng.percent(30) and 4 or 3.5)
-	b.level_range[1] = data.level
-	b.fixed_rating = true
-	if data.life_rating then
-		b.life_rating = data.life_rating(b.life_rating)
-	else
-		b.life_rating = b.life_rating * 1.7 + rng.range(4, 9)
-	end
-	b.max_life = b.max_life or 150
-
-	if b.can_multiply or b.clone_on_hit then
-		b.clone_base = base:clone()
-		b.clone_base:resolve()
-		b.clone_base:resolve(nil, true)
-	end
-
-	-- Force resolving some stuff
-	if type(b.max_life) == "table" and b.max_life.__resolver then b.max_life = resolvers.calc[b.max_life.__resolver](b.max_life, b, b, b, "max_life", {}) end
-
-	-- All bosses have alll body parts .. yes snake bosses can use archery and so on ..
-	-- This is to prevent them from having unusable talents
-	b.inven = {}
-	b.body = { INVEN = 1000, QS_MAINHAND = 1, QS_OFFHAND = 1, MAINHAND = 1, OFFHAND = 1, FINGER = 2, NECK = 1, LITE = 1, BODY = 1, HEAD = 1, CLOAK = 1, HANDS = 1, BELT = 1, FEET = 1, TOOL = 1, QUIVER = 1 }
-	b:initBody()
-
-	b:resolve()
-
-	-- Start with sustains sustained
-	b[#b+1] = resolvers.sustains_at_birth()
-
-	-- Leveling stats
-	b.autolevel = "random_boss"
-	b.auto_stats = {}
-
-	-- Always smart
-	if data.ai then b.ai = data.ai
-	else b.ai = (b.rank > 3) and "tactical" or b.ai
-	end
-	b.ai_state = { talent_in=1, ai_move=data.ai_move or "move_astar" }
-
-	-- Remove default equipment, if any
-	local todel = {}
-	for k, resolver in pairs(b) do if type(resolver) == "table" and resolver.__resolver and (resolver.__resolver == "equip" or resolver.__resolver == "drops") then todel[#todel+1] = k end end
-	for _, k in ipairs(todel) do b[k] = nil end
-
-	-- Boss worthy drops
-	b[#b+1] = resolvers.drops{chance=100, nb=data.loot_quantity or 3, {tome_drops=data.loot_quality or "boss"} }
-	if not data.no_loot_randart then b[#b+1] = resolvers.drop_randart{} end
-
-	-- On die
-	if data.on_die then
-		b.rng_boss_on_die = b.on_die
-		b.rng_boss_on_die_custom = data.on_die
-		b.on_die = function(self, src)
-			self:check("rng_boss_on_die_custom", src)
-			self:check("rng_boss_on_die", src)
-		end
-	end
+function _M:applyRandomClass(b, data, instant)
+	if not data.level then data.level = b.level end
 
 	------------------------------------------------------------
 	-- Apply talents from classes
@@ -1768,10 +1687,12 @@ function _M:createRandomBoss(base, data)
 		if config.settings.cheat then b.desc = (b.desc or "").."\nClass: "..class.name end
 
 		-- Add stats
-		b.stats = b.stats or {}
-		for stat, v in pairs(class.stats or {}) do
-			b.stats[stat] = (b.stats[stat] or 10) + v
-			for i = 1, v do b.auto_stats[#b.auto_stats+1] = b.stats_def[stat].id end
+		if b.auto_stats then
+			b.stats = b.stats or {}
+			for stat, v in pairs(class.stats or {}) do
+				b.stats[stat] = (b.stats[stat] or 10) + v
+				for i = 1, v do b.auto_stats[#b.auto_stats+1] = b.stats_def[stat].id end
+			end
 		end
 
 		-- Add talent categories
@@ -1782,7 +1703,7 @@ function _M:createRandomBoss(base, data)
 
 		-- Add starting equipment
 		local apply_resolvers = function(k, resolver)
-			if type(resolver) == "table" and resolver.__resolver and resolver.__resolver == "equip" then
+			if type(resolver) == "table" and resolver.__resolver and resolver.__resolver == "equip" and not data.forbid_equip then
 				resolver[1].id = nil
 				-- Make sure we equip some nifty stuff instead of player's starting iron stuff
 				for i, d in ipairs(resolver[1]) do
@@ -1796,6 +1717,7 @@ function _M:createRandomBoss(base, data)
 				b.innate_alchemy_golem = true
 			elseif k == "birth_create_alchemist_golem" then
 				b.birth_create_alchemist_golem = resolver
+				if instant then b:check("birth_create_alchemist_golem") end
 			elseif k == "soul" then
 				b.soul = util.bound(1 + math.ceil(data.level / 10), 1, 10) -- Does this need to scale?
 			end
@@ -1845,7 +1767,13 @@ function _M:createRandomBoss(base, data)
 				print(" * talent", tid)
 				local max = (t.points == 1) and 1 or math.ceil(t.points * 1.2)
 				local step = max / 50
-				b.learn_tids[tid] = math.ceil(step * data.level)
+				local lev = math.ceil(step * data.level)
+				if instant then
+					if b:getTalentLevelRaw(tid) < lev then b:learnTalent(tid, true, lev - b:getTalentLevelRaw(tid)) end
+					if t.mode == "sustained" and data.auto_sustain then b:forceUseTalent(tid, {ignore_energy=true}) end
+				else
+					b.learn_tids[tid] = lev
+				end
 			end
 		end
 	end
@@ -1864,6 +1792,96 @@ function _M:createRandomBoss(base, data)
 		if not c then break end
 		apply_class(table.clone(c, true))
 	end
+end
+
+function _M:createRandomBoss(base, data)
+	local b = base:clone()
+	data = data or {level=1}
+
+	------------------------------------------------------------
+	-- Basic stuff, name, rank, ...
+	------------------------------------------------------------
+	local ngd, name
+	if base.random_name_def then
+		ngd = NameGenerator2.new("/data/languages/names/"..base.random_name_def:gsub("#sex#", base.female and "female" or "male")..".txt")
+		name = ngd:generate(nil, base.random_name_min_syllables, base.random_name_max_syllables)
+	else
+		ngd = NameGenerator.new(randart_name_rules.default)
+		name = ngd:generate()
+	end
+	if data.name_scheme then
+		b.name = data.name_scheme:gsub("#rng#", name):gsub("#base#", b.name)
+	else
+		b.name = name.." the "..b.name
+	end
+	b.unique = b.name
+	b.randboss = true
+	local boss_id = "RND_BOSS_"..b.name:upper():gsub("[^A-Z]", "_")
+	b.define_as = boss_id
+	b.color = colors.VIOLET
+	b.rank = data.rank or (rng.percent(30) and 4 or 3.5)
+	b.level_range[1] = data.level
+	b.fixed_rating = true
+	if data.life_rating then
+		b.life_rating = data.life_rating(b.life_rating)
+	else
+		b.life_rating = b.life_rating * 1.7 + rng.range(4, 9)
+	end
+	b.max_life = b.max_life or 150
+
+	if b.can_multiply or b.clone_on_hit then
+		b.clone_base = base:clone()
+		b.clone_base:resolve()
+		b.clone_base:resolve(nil, true)
+	end
+
+	-- Force resolving some stuff
+	if type(b.max_life) == "table" and b.max_life.__resolver then b.max_life = resolvers.calc[b.max_life.__resolver](b.max_life, b, b, b, "max_life", {}) end
+
+	-- All bosses have alll body parts .. yes snake bosses can use archery and so on ..
+	-- This is to prevent them from having unusable talents
+	b.inven = {}
+	b.body = { INVEN = 1000, QS_MAINHAND = 1, QS_OFFHAND = 1, MAINHAND = 1, OFFHAND = 1, FINGER = 2, NECK = 1, LITE = 1, BODY = 1, HEAD = 1, CLOAK = 1, HANDS = 1, BELT = 1, FEET = 1, TOOL = 1, QUIVER = 1 }
+	b:initBody()
+
+	b:resolve()
+
+	-- Start with sustains sustained
+	b[#b+1] = resolvers.sustains_at_birth()
+
+	-- Leveling stats
+	b.autolevel = "random_boss"
+	b.auto_stats = {}
+
+	-- Always smart
+	if data.ai then b.ai = data.ai
+	else b.ai = (b.rank > 3) and "tactical" or b.ai
+	end
+	b.ai_state = { talent_in=1, ai_move=data.ai_move or "move_astar" }
+
+	-- Remove default equipment, if any
+	local todel = {}
+	for k, resolver in pairs(b) do if type(resolver) == "table" and resolver.__resolver and (resolver.__resolver == "equip" or resolver.__resolver == "drops") then todel[#todel+1] = k end end
+	for _, k in ipairs(todel) do b[k] = nil end
+
+	-- Boss worthy drops
+	b[#b+1] = resolvers.drops{chance=100, nb=data.loot_quantity or 3, {tome_drops=data.loot_quality or "boss"} }
+	if not data.no_loot_randart then b[#b+1] = resolvers.drop_randart{} end
+
+	-- On die
+	if data.on_die then
+		b.rng_boss_on_die = b.on_die
+		b.rng_boss_on_die_custom = data.on_die
+		b.on_die = function(self, src)
+			self:check("rng_boss_on_die_custom", src)
+			self:check("rng_boss_on_die", src)
+		end
+	end
+
+	------------------------------------------------------------
+	-- Apply talents from classes
+	------------------------------------------------------------
+	self:applyRandomClass(b, data)
 
 	b.rnd_boss_on_added_to_level = b.on_added_to_level
 	b._rndboss_resources_boost = data.resources_boost
diff --git a/game/modules/tome/class/Grid.lua b/game/modules/tome/class/Grid.lua
index bd55114a1e36f716d52393a64bef105df78ca11e..79cf2f05044b016b09baf2a6c13a486f5510f37f 100644
--- a/game/modules/tome/class/Grid.lua
+++ b/game/modules/tome/class/Grid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -186,7 +186,81 @@ function _M:tooltip(x, y)
 end
 
 --- Generate sub entities to make nice trees
-function _M:makeTrees(base, max, bigheight_limit, tint)
+function _M:makeNewTrees(g, kindsdefs, max_trees)
+	max_trees = max_trees or 3
+	g.add_displays = g.add_displays or {}
+	g.add_mos = g.add_mos or {}
+	local basemos = g.add_mos
+	local add = g.add_displays
+	add[#add+1] = engine.Entity.new{image="invis.png", z=3, display_on_seen = true, display_on_remember = true, add_mos={}}
+	local mos = add[#add].add_mos
+	local function getname(n)
+		if type(n) == "string" then return n end
+		return n[1]:format(rng.range(n[2], n[3]))
+	end
+	local function makeTree(nb, z)
+		local inb = 4 - nb
+		local treedef = rng.table(kindsdefs)
+		local treeid = treedef[1]
+		local parts = treedef[2]
+		if not parts.tall then parts.tall = 0 end
+
+		local scale = rng.float(0.5 + inb / 6, 1)
+		local x = rng.float(-1 / 3 * nb / 3, 1 / 3 * nb / 3)
+		local y = rng.float(-1 / 5 * nb / 3, 1 / 4 * nb / 3)
+
+		for i = 1, #parts - 1 do
+			mos[#mos+1] = {image="terrain/trees/"..treeid.."_"..getname(parts[i])..".png", display_x=x, display_y=y, display_w=scale, display_h=scale}
+		end
+		if parts.base then
+			basemos[#basemos+1] = {image="terrain/trees/"..treeid.."_"..getname(parts.base)..".png", display_x=x, display_y=y, display_w=scale, display_h=scale}
+		end
+		if parts.adds then
+			local name = parts.adds[1]
+			local t = {
+				z = z,
+				display_x = x,
+				display_y = y,
+				display_w = scale,
+				display_h = scale,
+				display_on_seen = true,
+				display_on_remember = true,
+				image = "terrain/trees/"..treeid.."_"..getname(name)..".png",
+			}
+			table.merge(t, parts.adds)
+			add[#add+1] = engine.Entity.new(t)
+		end
+		add[#add+1] = engine.Entity.new{
+			z = z,
+			_st = y,
+			display_x = x,
+			display_y = y + scale * parts.tall,
+			display_w = scale,
+			display_h = scale * (1 - parts.tall),
+			display_on_seen = true,
+			display_on_remember = true,
+			image = "terrain/trees/"..treeid.."_"..getname(parts[#parts])..".png",
+			shader = "tree", shader_args = parts.shader_args,
+		}
+		return add[#add]
+	end
+
+	local v = rng.range(0, 100)
+	local tbl
+	if v < 33 and max_trees >= 3 then
+		tbl = { makeTree(3, 16), makeTree(3, 17), makeTree(3, 18), }
+	elseif v < 66 and max_trees >= 2 then
+		tbl = { makeTree(2, 16), makeTree(2, 17), }
+	else
+		tbl = { makeTree(1, 16), }
+	end
+	table.sort(tbl, function(a,b) return a._st < b._st end)
+	for i = 1, #tbl do tbl[i].z = 16 + i - 1 end
+	return g
+end
+
+--- Generate sub entities to make nice trees
+function _M:makeTrees(base, max, bigheight_limit, tint, attenuation)
 	local function makeTree(nb, z)
 		local inb = 4 - nb
 		local treeid = rng.range(1, max or 5)
@@ -201,6 +275,7 @@ function _M:makeTrees(base, max, bigheight_limit, tint)
 			display_h = treeid < (bigheight_limit or 9) and 1 or 2,
 			image = (base or "terrain/tree_alpha")..treeid..".png",
 			tint = tint,
+			shader = "tree", shader_args={attenuation=attenuation},
 		}
 	end
 
diff --git a/game/modules/tome/class/MapEffects.lua b/game/modules/tome/class/MapEffects.lua
index 72ca171bdb4cea39f3e6a160f474dfd031ef52f2..b178b969d4dff32370cfce050825d2418510c62e 100644
--- a/game/modules/tome/class/MapEffects.lua
+++ b/game/modules/tome/class/MapEffects.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/NPC.lua b/game/modules/tome/class/NPC.lua
index 0c72a87d7f600550352249d10421e588e96220b1..ce9c9b563c5e3a1395752031efb73683132773f7 100644
--- a/game/modules/tome/class/NPC.lua
+++ b/game/modules/tome/class/NPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -435,12 +435,37 @@ function _M:addedToLevel(level, x, y)
 			for tid, lev in pairs(self.talents) do
 				self:learnTalent(tid, true, lev)
 			end
+			if not self.randboss and self.rank >= 3.5 then
+				local data = {}
+				if self.rank == 3.5 then data = {nb_classes=1}
+				elseif self.rank == 4 then data = {nb_classes=1}
+				elseif self.rank == 5 then data = {nb_classes=2}
+				elseif self.rank >= 10 then data = {nb_classes=3}
+				end
+				data.auto_sustain = true
+				data.forbid_equip = true
+				game.state:applyRandomClass(self, data, true)
+			end
 			self:attr("difficulty_boosted", 1)
 		elseif game.difficulty == game.DIFFICULTY_MADNESS and not game.party:hasMember(self) then
 			-- Increase talent level
 			for tid, lev in pairs(self.talents) do
 				self:learnTalent(tid, true, math.ceil(lev * 1.7))
 			end
+			if not self.randboss and self.rank >= 3.5 then
+				local data = {}
+				if self.rank == 3.5 then data = {nb_classes=1}
+				elseif self.rank == 4 then data = {nb_classes=2}
+				elseif self.rank == 5 then data = {nb_classes=3}
+				elseif self.rank >= 10 then data = {nb_classes=5}
+				end
+				data.auto_sustain = true
+				data.forbid_equip = true
+				game.state:applyRandomClass(self, data, true)
+			end
+			local lifeadd = self.max_life * self:getRankLifeAdjust(1) * self.level / 65 / 1.5
+			self.max_life = self.max_life + lifeadd
+			self.life = self.life + lifeadd
 			self:attr("difficulty_boosted", 1)
 		end
 	end
@@ -474,7 +499,7 @@ end
 function _M:aiCanPass(x, y)
 	-- If there is a friendly actor, add shove_pressure to it
 	local target = game.level.map(x, y, engine.Map.ACTOR)
-	if target and target ~= game.player and self:reactionToward(target) > 0 and not target:attr("never_move") then
+	if target and target ~= game.player and self:reactionToward(target) > 0 and not target:attr("never_move") and target.x then
 		target.shove_pressure = (target.shove_pressure or 0) + shove_algorithm(self) + (self.shove_pressure or 0)
 		-- Shove the target?
 		if target.shove_pressure > shove_algorithm(target) * 1.7 then
diff --git a/game/modules/tome/class/NicerTiles.lua b/game/modules/tome/class/NicerTiles.lua
index 099d276ab4814e595b1603b94229777b60741690..0608b33499ce48d1d23d49414cc06f54230be8d6 100644
--- a/game/modules/tome/class/NicerTiles.lua
+++ b/game/modules/tome/class/NicerTiles.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,7 +22,7 @@ local Map = require "engine.Map"
 
 module(..., package.seeall, class.make)
 
-local NB_VARIATIONS = 1
+local NB_VARIATIONS = 20
 
 function _M:init()
 	self.repo = {}
@@ -394,7 +394,38 @@ grass = { method="borders", type="grass", forbid={lava=true, rock=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},
 },
-grass_wm = { method="borders", type="grass", forbid={lava=true},
+autumn_grass = { method="borders", type="autumn_grass", forbid={grass=true, lava=true, rock=true},
+	default8={add_mos={{image="terrain/grass/autumn_grass_2_%02d.png", display_y=-1}}, min=1, max=2},
+	default2={add_mos={{image="terrain/grass/autumn_grass_8_%02d.png", display_y=1}}, min=1, max=2},
+	default4={add_mos={{image="terrain/grass/autumn_grass_6_%02d.png", display_x=-1}}, min=1, max=2},
+	default6={add_mos={{image="terrain/grass/autumn_grass_4_%02d.png", display_x=1}}, min=1, max=2},
+
+	default1={add_mos={{image="terrain/grass/autumn_grass_9_%02d.png", display_x=-1, display_y=1}}, min=1, max=1},
+	default3={add_mos={{image="terrain/grass/autumn_grass_7_%02d.png", display_x=1, display_y=1}}, min=1, max=1},
+	default7={add_mos={{image="terrain/grass/autumn_grass_3_%02d.png", display_x=-1, display_y=-1}}, min=1, max=1},
+	default9={add_mos={{image="terrain/grass/autumn_grass_1_%02d.png", display_x=1, display_y=-1}}, min=1, max=1},
+
+	default1i={add_mos={{image="terrain/grass/autumn_grass_inner_1_%02d.png", display_x=-1, display_y=1}}, min=1, max=2},
+	default3i={add_mos={{image="terrain/grass/autumn_grass_inner_3_%02d.png", display_x=1, display_y=1}}, min=1, max=2},
+	default7i={add_mos={{image="terrain/grass/autumn_grass_inner_7_%02d.png", display_x=-1, display_y=-1}}, min=1, max=2},
+	default9i={add_mos={{image="terrain/grass/autumn_grass_inner_9_%02d.png", display_x=1, display_y=-1}}, min=1, max=2},
+
+	water8={add_mos={{image="terrain/grass/autumn_grass_2_%02d.png", display_y=-1}}, min=1, max=1},
+	water2={add_mos={{image="terrain/grass/autumn_grass_8_%02d.png", display_y=1}}, min=1, max=1},
+	water4={add_mos={{image="terrain/grass/autumn_grass_6_%02d.png", display_x=-1}}, min=1, max=1},
+	water6={add_mos={{image="terrain/grass/autumn_grass_4_%02d.png", display_x=1}}, min=1, max=1},
+
+	water1={add_mos={{image="terrain/grass/autumn_grass_9_%02d.png", display_x=-1, display_y=1}}, min=1, max=1},
+	water3={add_mos={{image="terrain/grass/autumn_grass_7_%02d.png", display_x=1, display_y=1}}, min=1, max=1},
+	water7={add_mos={{image="terrain/grass/autumn_grass_3_%02d.png", display_x=-1, display_y=-1}}, min=1, max=1},
+	water9={add_mos={{image="terrain/grass/autumn_grass_1_%02d.png", display_x=1, display_y=-1}}, min=1, max=1},
+
+	water1i={add_mos={{image="terrain/grass/autumn_grass_inner_1_%02d.png", display_x=-1, display_y=1}}, min=1, max=1},
+	water3i={add_mos={{image="terrain/grass/autumn_grass_inner_3_%02d.png", display_x=1, display_y=1}}, min=1, max=1},
+	water7i={add_mos={{image="terrain/grass/autumn_grass_inner_7_%02d.png", display_x=-1, display_y=-1}}, min=1, max=1},
+	water9i={add_mos={{image="terrain/grass/autumn_grass_inner_9_%02d.png", display_x=1, display_y=-1}}, min=1, max=1},
+},
+grass_wm = { method="borders", type="grass", forbid={lava=true, rock=true},
 	default8={add_mos={{image="terrain/grass_worldmap/grass_2_%02d.png", display_y=-1}}, min=1, max=2},
 	default2={add_mos={{image="terrain/grass_worldmap/grass_8_%02d.png", display_y=1}}, min=1, max=2},
 	default4={add_mos={{image="terrain/grass_worldmap/grass_6_%02d.png", display_x=-1}}, min=1, max=2},
@@ -968,6 +999,27 @@ dirt = { method="road", marker="road",
 	default2={add_mos={{image="terrain/road_dirt/road_end_a_03.png"}}, min=1, max=1},
 	default8={add_mos={{image="terrain/road_dirt/road_end_a_04.png"}}, min=1, max=1},
 },
+wooden_barricade = { method="road", marker="barricade",
+	default82={add_mos={{image="terrain/wooden_barricade/barricade_vertical_a_%02d.png"}}, min=1, max=3},
+	default46={add_mos={{image="terrain/wooden_barricade/barricade_horizontal_a_%02d.png"}}, min=1, max=3},
+
+	default8246={add_mos={{image="terrain/wooden_barricade/barricade_cross_a_%02d.png"}}, min=1, max=1},
+
+	default846={add_mos={{image="terrain/wooden_barricade/barricade_t_section_c_%02d.png"}}, min=1, max=1},
+	default246={add_mos={{image="terrain/wooden_barricade/barricade_t_section_a_%02d.png"}}, min=1, max=1},
+	default824={add_mos={{image="terrain/wooden_barricade/barricade_t_section_b_%02d.png"}}, min=1, max=1},
+	default826={add_mos={{image="terrain/wooden_barricade/barricade_t_section_d_%02d.png"}}, min=1, max=1},
+
+	default84={add_mos={{image="terrain/wooden_barricade/barricade_turn_c_%02d.png"}}, min=1, max=2},
+	default86={add_mos={{image="terrain/wooden_barricade/barricade_turn_d_%02d.png"}}, min=1, max=2},
+	default26={add_mos={{image="terrain/wooden_barricade/barricade_turn_a_%02d.png"}}, min=1, max=2},
+	default24={add_mos={{image="terrain/wooden_barricade/barricade_turn_b_%02d.png"}}, min=1, max=2},
+
+	default4={add_mos={{image="terrain/wooden_barricade/barricade_end_a_02.png"}}, min=1, max=1},
+	default6={add_mos={{image="terrain/wooden_barricade/barricade_end_a_01.png"}}, min=1, max=1},
+	default2={add_mos={{image="terrain/wooden_barricade/barricade_end_a_03.png"}}, min=1, max=1},
+	default8={add_mos={{image="terrain/wooden_barricade/barricade_end_a_04.png"}}, min=1, max=1},
+},
 }
 _M.generic_roads_defs = defs
 
diff --git a/game/modules/tome/class/NicerTilesOverlays.lua b/game/modules/tome/class/NicerTilesOverlays.lua
index ebc7119207c52181ea71b6a7da75135f4123135f..098dd249e50321e546befe77f0a715403210ec83 100644
--- a/game/modules/tome/class/NicerTilesOverlays.lua
+++ b/game/modules/tome/class/NicerTilesOverlays.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua
index 1e878c03bce1e71750a187c3ee1d58458584f206..ae0585c88968010bfef71e0289a275e89318fbd0 100644
--- a/game/modules/tome/class/Object.lua
+++ b/game/modules/tome/class/Object.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -375,10 +375,13 @@ function _M:getTextualDesc(compare_with, use_actor)
 		local added = 0
 		local add = false
 		ret:add(text)
+		local outformatres
+		if type(outformat) == "function" then outformatres = outformat()
+		else outformatres = outformat:format(((item1[field] or 0) + (add_table[field] or 0)) * mod) end
 		if isinversed then
-			ret:add(((item1[field] or 0) + (add_table[field] or 0)) > 0 and {"color","RED"} or {"color","LIGHT_GREEN"}, outformat:format(((item1[field] or 0) + (add_table[field] or 0)) * mod), {"color", "LAST"})
+			ret:add(((item1[field] or 0) + (add_table[field] or 0)) > 0 and {"color","RED"} or {"color","LIGHT_GREEN"}, outformatres, {"color", "LAST"})
 		else
-			ret:add(((item1[field] or 0) + (add_table[field] or 0)) < 0 and {"color","RED"} or {"color","LIGHT_GREEN"}, outformat:format(((item1[field] or 0) + (add_table[field] or 0)) * mod), {"color", "LAST"})
+			ret:add(((item1[field] or 0) + (add_table[field] or 0)) < 0 and {"color","RED"} or {"color","LIGHT_GREEN"}, outformatres, {"color", "LAST"})
 		end
 		if item1[field] then
 			add = true
@@ -393,10 +396,13 @@ function _M:getTextualDesc(compare_with, use_actor)
 				added = added + 1
 				add = true
 				if items[i][infield][field] ~= (item1[field] or 0) then
+					local outformatres
+					if type(outformat) == "function" then outformatres = outformat()
+					else outformatres = outformat:format(((item1[field] or 0) - items[i][infield][field]) * mod) end
 					if isdiffinversed then
-						ret:add(items[i][infield][field] < (item1[field] or 0) and {"color","RED"} or {"color","LIGHT_GREEN"}, outformat:format(((item1[field] or 0) - items[i][infield][field]) * mod), {"color", "LAST"})
+						ret:add(items[i][infield][field] < (item1[field] or 0) and {"color","RED"} or {"color","LIGHT_GREEN"}, outformatres, {"color", "LAST"})
 					else
-						ret:add(items[i][infield][field] > (item1[field] or 0) and {"color","RED"} or {"color","LIGHT_GREEN"}, outformat:format(((item1[field] or 0) - items[i][infield][field]) * mod), {"color", "LAST"})
+						ret:add(items[i][infield][field] > (item1[field] or 0) and {"color","RED"} or {"color","LIGHT_GREEN"}, outformatres, {"color", "LAST"})
 					end
 				else
 					ret:add("-")
@@ -478,7 +484,7 @@ function _M:getTextualDesc(compare_with, use_actor)
 		end
 	end
 
-	local desc_combat = function(combat, compare_with, field, add_table)
+	local desc_combat = function(combat, compare_with, field, add_table, is_fake_add)
 		add_table = add_table or {}
 		add_table.dammod = add_table.dammod or {}
 		combat = combat[field] or {}
@@ -533,7 +539,7 @@ function _M:getTextualDesc(compare_with, use_actor)
 		compare_fields(combat, compare_with, field, "atk", "%+d", "Accuracy: ", 1, false, false, add_table)
 		compare_fields(combat, compare_with, field, "apr", "%+d", "Armour Penetration: ", 1, false, false, add_table)
 		compare_fields(combat, compare_with, field, "physcrit", "%+.1f%%", "Physical crit. chance: ", 1, false, false, add_table)
-		compare_fields(combat, compare_with, field, "physspeed", "%.0f%%", "Attack speed: ", 100, false, true, add_table)
+		compare_fields(combat, compare_with, field, "physspeed", function() return ("%.0f%%"):format(100/((is_fake_add and 1 or 0) + (combat.physspeed or 1))) end, "Attack speed: ", 100, false, true, add_table)
 
 		compare_fields(combat, compare_with, field, "block", "%+d", "Block value: ", 1, false, false, add_table)
 
@@ -647,10 +653,16 @@ function _M:getTextualDesc(compare_with, use_actor)
 		elseif found then
 			desc:add({"color","RED"}, "When used from stealth a simple attack with it will not break stealth.", {"color","LAST"}, true)
 		end
+		
+		if combat.crushing_blow then
+			desc:add({"color", "YELLOW"}, "Crushing Blows: ", {"color", "LAST"}, "Damage dealt by this weapon is increased by half your critical multiplier, if doing so would kill the target.", true)
+		end
 
 		compare_fields(combat, compare_with, field, "travel_speed", "%+d%%", "Travel speed: ", 100, false, false, add_table)
 
 		compare_fields(combat, compare_with, field, "phasing", "%+d%%", "Damage Shield penetration (this weapon only): ", 1, false, false, add_table)
+		
+		compare_fields(combat, compare_with, field, "lifesteal", "%+d%%", "Lifesteal (this weapon only): ", 1, false, false, add_table)
 
 		if combat.tg_type and combat.tg_type == "beam" then
 			desc:add({"color","YELLOW"}, ("Shots beam through all targets."), {"color","LAST"}, true)
@@ -961,6 +973,7 @@ function _M:getTextualDesc(compare_with, use_actor)
 		end
 
 		compare_fields(w, compare_with, field, "combat_critical_power", "%+.2f%%", "Critical mult.: ")
+		compare_fields(w, compare_with, field, "ignore_direct_crits", "%-.2f%%", "Reduces incoming crit damage: ")
 		compare_fields(w, compare_with, field, "combat_crit_reduction", "%-d%%", "Reduces opponents crit chance: ")
 
 		compare_fields(w, compare_with, field, "disarm_bonus", "%+d", "Trap disarming bonus: ")
@@ -1016,6 +1029,7 @@ function _M:getTextualDesc(compare_with, use_actor)
 		compare_fields(w, compare_with, field, "die_at", "%+.2f life", "Only die when reaching: ", 1, true, true)
 		compare_fields(w, compare_with, field, "max_life", "%+.2f", "Maximum life: ")
 		compare_fields(w, compare_with, field, "max_mana", "%+.2f", "Maximum mana: ")
+		compare_fields(w, compare_with, field, "max_soul", "%+.2f", "Maximum souls: ")
 		compare_fields(w, compare_with, field, "max_stamina", "%+.2f", "Maximum stamina: ")
 		compare_fields(w, compare_with, field, "max_hate", "%+.2f", "Maximum hate: ")
 		compare_fields(w, compare_with, field, "max_psi", "%+.2f", "Maximum psi: ")
@@ -1057,6 +1071,8 @@ function _M:getTextualDesc(compare_with, use_actor)
 		compare_fields(w, compare_with, field, "damage_shield_penetrate", "%+d%%", "Damage Shield penetration: ")
 
 		compare_fields(w, compare_with, field, "projectile_evasion", "%+d%%", "Deflect projectiles away: ")
+		compare_fields(w, compare_with, field, "evasion", "%+d%%", "Chance to avoid attacks: ")
+		compare_fields(w, compare_with, field, "cancel_damage_chance", "%+d%%", "Chance to avoid any damage: ")
 
 		compare_fields(w, compare_with, field, "defense_on_teleport", "%+d", "Defense after a teleport: ")
 		compare_fields(w, compare_with, field, "resist_all_on_teleport", "%+d%%", "Resist all after a teleport: ")
@@ -1068,11 +1084,20 @@ function _M:getTextualDesc(compare_with, use_actor)
 
 		compare_fields(w, compare_with, field, "nature_summon_max", "%+d", "Max wilder summons: ")
 		compare_fields(w, compare_with, field, "nature_summon_regen", "%+.2f", "Life regen bonus (wilder-summons): ")
+		
+		compare_fields(w, compare_with, field, "shield_dur", "%+d", "Damage Shield Duration: ")
+		compare_fields(w, compare_with, field, "shield_factor", "%+d%%", "Damage Shield Power: ")
+		
+		compare_fields(w, compare_with, field, "iceblock_pierce", "%+d%%", "Ice block penetration: ")
 
 		compare_fields(w, compare_with, field, "slow_projectiles", "%+d%%", "Slows Projectiles: ")
 
 		compare_fields(w, compare_with, field, "paradox_reduce_fails", "%+d", "Reduces paradox failures(equivalent to willpower): ")
 
+		compare_fields(w, compare_with, field, "damage_backfire", "%+d%%", "Damage Backlash: ", nil, true)
+		
+		compare_fields(w, compare_with, field, "resist_unseen", "%-d%%", "Reduce all damage from unseen attackers: ")
+
 		if w.undead then
 			desc:add("The wearer is treated as an undead.", true)
 		end
@@ -1090,11 +1115,11 @@ function _M:getTextualDesc(compare_with, use_actor)
 		end
 
 		if w.blind_fight then
-			desc:add({"color", "YELLOW"}, "Blind-Fight:", {"color", "LAST"}, "This item allows the wearer to attack unseen targets without any penalties.", true)
+			desc:add({"color", "YELLOW"}, "Blind-Fight: ", {"color", "LAST"}, "This item allows the wearer to attack unseen targets without any penalties.", true)
 		end
 		
 		if w.lucid_dreamer then
-			desc:add({"color", "YELLOW"}, "Lucid-Dreamer:", {"color", "LAST"}, "This item allows the wearer to act while sleeping.", true)
+			desc:add({"color", "YELLOW"}, "Lucid Dreamer: ", {"color", "LAST"}, "This item allows the wearer to act while sleeping.", true)
 		end
 
 		if w.no_breath then
@@ -1127,7 +1152,7 @@ function _M:getTextualDesc(compare_with, use_actor)
 		if (w and w.combat or can_combat_unarmed) and (use_actor:knowTalent(use_actor.T_EMPTY_HAND) or use_actor:attr("show_gloves_combat")) then
 			desc:add({"color","YELLOW"}, "When used to modify unarmed attacks:", {"color", "LAST"}, true)
 			compare_tab = { dam=1, atk=1, apr=0, physcrit=0, physspeed =0.6, dammod={str=1}, damrange=1.1 }
-			desc_combat(w, compare_unarmed, "combat", compare_tab)
+			desc_combat(w, compare_unarmed, "combat", compare_tab, true)
 		end
 	end
 	local can_combat = false
@@ -1204,7 +1229,7 @@ function _M:getTextualDesc(compare_with, use_actor)
 	if self.alchemist_bomb or self.type == "gem" and use_actor:knowTalent(Talents.T_CREATE_ALCHEMIST_GEMS) then
 		local a = self.alchemist_bomb
 		if not a then
-			a = game.zone.object_list["ALCHEMIST_GEM_"..self.name:upper()]
+			a = game.zone.object_list["ALCHEMIST_GEM_"..self.name:gsub(" ", "_"):upper()]
 			if a then a = a.alchemist_bomb end
 		end
 		if a then
@@ -1214,7 +1239,13 @@ function _M:getTextualDesc(compare_with, use_actor)
 			if a.mana then desc:add(("Mana regain %d"):format(a.mana), true) end
 			if a.daze then desc:add(("%d%% chance to daze for %d turns"):format(a.daze.chance, a.daze.dur), true) end
 			if a.stun then desc:add(("%d%% chance to stun for %d turns"):format(a.stun.chance, a.stun.dur), true) end
-			if a.splash then desc:add(("Additional %d %s damage"):format(a.splash.dam, DamageType:get(DamageType[a.splash.type]).name), true) end
+			if a.splash then
+				if a.splash.desc then
+					desc:add(a.splash.desc, true)
+				else
+					desc:add(("Additional %d %s damage"):format(a.splash.dam, DamageType:get(DamageType[a.splash.type]).name), true)
+				end
+			end
 			if a.leech then desc:add(("Life regen %d%% of max life"):format(a.leech), true) end
 		end
 	end
@@ -1310,7 +1341,7 @@ function _M:getUseDesc(use_actor)
 	local ret = tstring{}
 	local reduce = 100 - util.bound(use_actor:attr("use_object_cooldown_reduce") or 0, 0, 100)
 	local usepower = function(power) return math.ceil(power * reduce / 100) end
-	if self.use_power then
+	if self.use_power and not self.use_power.hidden then
 		if self.show_charges then
 			ret = tstring{{"color","YELLOW"}, ("It can be used to %s, with %d charges out of %d."):format(util.getval(self.use_power.name, self), math.floor(self.power / usepower(self.use_power.power)), math.floor(self.max_power / usepower(self.use_power.power))), {"color","LAST"}}
 		elseif self.talent_cooldown then
diff --git a/game/modules/tome/class/Party.lua b/game/modules/tome/class/Party.lua
index 5b8fa37ccd939f937a5ae60f5eafecde72de658e..b7f19832235a50fe24b1bfc347a320845e5dfe00 100644
--- a/game/modules/tome/class/Party.lua
+++ b/game/modules/tome/class/Party.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/PartyMember.lua b/game/modules/tome/class/PartyMember.lua
index 5f8d3faaa0a4b587d0604133ec8ba830fa47129e..3aaf44a47bfd420874facdb73af8098f382c7c16 100644
--- a/game/modules/tome/class/PartyMember.lua
+++ b/game/modules/tome/class/PartyMember.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index 1d4cfd09a82b57fdf7aaff2ac5e204ba57813e86..b299fb5b71ef76c7b97e066833c32dfcbfd211c1 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -374,6 +374,9 @@ end
 --- Funky shader stuff
 function _M:updateMainShader()
 	if game.fbo_shader then
+		local effects = {}
+		local pf = game.posteffects
+
 		-- Set shader HP warning
 		if self.life ~= self.shader_old_life then
 			if self.life < self.max_life / 2 then game.fbo_shader:setUniform("hp_warning", 1 - (self.life / self.max_life))
@@ -408,22 +411,26 @@ function _M:updateMainShader()
 		end
 
 		-- Blur shader
-		if self:attr("confused") and self.confused >= 1 then game.fbo_shader:setUniform("blur", 2)
---		elseif game:hasDialogUp() then game.fbo_shader:setUniform("blur", 3)
-		else game.fbo_shader:setUniform("blur", 0) -- Disable
+		if self:attr("confused") and self.confused >= 1 then pf.blur.shad:uniBlur(2) effects[pf.blur.shad] = true
 		end
 
 		-- Moving Blur shader
-		if self:attr("invisible") then game.fbo_shader:setUniform("motionblur", 3)
-		elseif self:attr("lightning_speed") then game.fbo_shader:setUniform("motionblur", 2)
-		elseif game.level and game.level.data and game.level.data.motionblur then game.fbo_shader:setUniform("motionblur", game.level.data.motionblur)
-		else game.fbo_shader:setUniform("motionblur", 0) -- Disable
+		if self:attr("invisible") then pf.motionblur.shad:uniMotionblur(3) effects[pf.motionblur.shad] = true
+		elseif self:attr("lightning_speed") then pf.motionblur.shad:uniMotionblur(2) effects[pf.motionblur.shad] = true
+		elseif game.level and game.level.data and game.level.data.motionblur then pf.motionblur.shad:uniMotionblur(game.level.data.motionblur) effects[pf.motionblur.shad] = true
 		end
 
 		-- Underwater shader
-		if game.level and game.level.data and game.level.data.underwater then game.fbo_shader:setUniform("underwater", 1)
-		else game.fbo_shader:setUniform("underwater", 0) -- Disable
+		if game.level and game.level.data and game.level.data.underwater then effects[pf.underwater.shad] = true
+		end
+
+		-- Wobbling shader
+		if self:attr("stunned") and self.stunned >= 1 then pf.wobbling.shad:uniWobbling(1) effects[pf.wobbling.shad] = true
+		elseif self:attr("dazed") and self.dazed >= 1 then pf.wobbling.shad:uniWobbling(0.7) effects[pf.wobbling.shad] = true
 		end
+
+		game.posteffects_use = table.keys(effects)
+		game.posteffects_use[#game.posteffects_use+1] = game.fbo_shader.shad
 	end
 end
 
@@ -560,14 +567,16 @@ function _M:playerFOV()
 		self:computeFOV(self.sight or 10, "block_sight", function(x, y, dx, dy, sqdist)
 			game.level.map:apply(x, y, fovdist[sqdist])
 		end, true, false, true)
+		local lradius = self.lite
+		if self.radiance_aura and lradius < self.radiance_aura then lradius = self.radiance_aura end
 		if self.lite <= 0 then game.level.map:applyLite(self.x, self.y)
-		else self:computeFOV(self.lite + bonus, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y) end, true, true, true) end
+		else self:computeFOV(lradius + bonus, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y) end, true, true, true) end
 
 		-- For each entity, generate lite
 		local uid, e = next(game.level.entities)
 		while uid do
-			if e ~= self and e.lite and e.lite > 0 and e.computeFOV then
-				e:computeFOV(e.lite, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyExtraLite(x, y, fovdist[sqdist]) end, true, true)
+			if e ~= self and ((e.lite and e.lite > 0) or (e.radiance_aura and e.radiance_aura > 0)) and e.computeFOV then
+				e:computeFOV(math.max(e.lite or 0, e.radiance_aura or 0), "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyExtraLite(x, y, fovdist[sqdist]) end, true, true)
 			end
 			uid, e = next(game.level.entities, uid)
 		end
@@ -778,25 +787,26 @@ function _M:automaticTalents()
 		if (t.mode ~= "sustained" or not self.sustain_talents[tid]) and not self.talents_cd[tid] and self:preUseTalent(t, true, true) and (not t.auto_use_check or t.auto_use_check(self, t)) then
 			if (c == 1) or (c == 2 and #spotted <= 0) or (c == 3 and #spotted > 0) then
 				if c ~= 2 then
-					uses[#uses+1] = {name=t.name, no_energy=t.no_energy == true and 0 or 1, cd=self:getTalentCooldown(t) or 0, fct=function() self:useTalent(tid) end}
+					uses[#uses+1] = {name=t.name, no_energy=util.getval(t.no_energy, self, t) == true and 0 or 1, cd=self:getTalentCooldown(t) or 0, fct=function() self:useTalent(tid) end}
 				else
 					if not self:attr("blind") then
-						uses[#uses+1] = {name=t.name, no_energy=t.no_energy == true and 0 or 1, cd=self:getTalentCooldown(t) or 0, fct=function() self:useTalent(tid,nil,nil,nil,self) end}
+						uses[#uses+1] = {name=t.name, no_energy=util.getval(t.no_energy, self, t) == true and 0 or 1, cd=self:getTalentCooldown(t) or 0, fct=function() self:useTalent(tid,nil,nil,nil,self) end}
 					end
 				end
 			end
 			if c == 4 and #spotted > 0 then
 				for fid, foe in pairs(spotted) do
 					if foe.x >= self.x-1 and foe.x <= self.x+1 and foe.y >= self.y-1 and foe.y <= self.y+1 then
-						uses[#uses+1] = {name=t.name, no_energy=t.no_energy == true and 0 or 1, cd=self:getTalentCooldown(t) or 0, fct=function() self:useTalent(tid) end}
+						uses[#uses+1] = {name=t.name, no_energy=util.getval(t.no_energy, self, t) == true and 0 or 1, cd=self:getTalentCooldown(t) or 0, fct=function() self:useTalent(tid) end}
 					end
 				end
 			end
 		end
 	end
 	table.sort(uses, function(a, b)
-		if a.no_energy < b.no_energy then return true
-		elseif a.no_energy > b.no_energy then return false
+		local an, nb = util.getval(a.no_energy, self, a), util.getval(b.no_energy, self, b)
+		if an < bn then return true
+		elseif an > bn then return false
 		else
 			if a.cd > b.cd then return true
 			else return false
@@ -806,7 +816,7 @@ function _M:automaticTalents()
 	table.print(uses)
 	for _, use in ipairs(uses) do
 		use.fct()
-		if use.no_energy == 1 then break end
+		if util.getval(use.no_energy, self, use) == 1 then break end
 	end
 	self:attr("_forbid_sounds", -1)
 end
diff --git a/game/modules/tome/class/PlayerDisplay.lua b/game/modules/tome/class/PlayerDisplay.lua
index 2e23ac40779a00ddbfae7d5862244ebaae68a5fc..f5f5132354d49c47d1a122d02789a4616a046b46 100644
--- a/game/modules/tome/class/PlayerDisplay.lua
+++ b/game/modules/tome/class/PlayerDisplay.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Projectile.lua b/game/modules/tome/class/Projectile.lua
index a52c91a259bda5d689e2062a9a40fc7b31d53fd0..b6abcbb3a92f857d5113c155ae17e247f9bf9bc4 100644
--- a/game/modules/tome/class/Projectile.lua
+++ b/game/modules/tome/class/Projectile.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/StellarBody.lua b/game/modules/tome/class/StellarBody.lua
index b383f00d5992a37554709fe4029dbdd1dbd69ef5..944f7034904784a0dd331220aa67f1e6c0a14e51 100644
--- a/game/modules/tome/class/StellarBody.lua
+++ b/game/modules/tome/class/StellarBody.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Store.lua b/game/modules/tome/class/Store.lua
index 96a979cb4d25adb8c01fc97f85bf05c6670b85af..121bb7f5568a063dc72befd6a6c909daf3ce7e8a 100644
--- a/game/modules/tome/class/Store.lua
+++ b/game/modules/tome/class/Store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Tooltip.lua b/game/modules/tome/class/Tooltip.lua
index 90cbe193f772ce069ba6622673a2a1e0f9e7bd53..8c52014365a86f3c8e9429765d79ab0d0aa689f3 100644
--- a/game/modules/tome/class/Tooltip.lua
+++ b/game/modules/tome/class/Tooltip.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Trap.lua b/game/modules/tome/class/Trap.lua
index 757f00a2c3381358c8669433bf5cac974ff2fd34..5da578dfebbbbd6bfb11d5c54ea748963533c9f4 100644
--- a/game/modules/tome/class/Trap.lua
+++ b/game/modules/tome/class/Trap.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/UserChatExtension.lua b/game/modules/tome/class/UserChatExtension.lua
index f289241ab469480647bb1a8bc8a34d5a7fde99fd..1667afc37be02604ba4283804f2351b6fe8300ee 100644
--- a/game/modules/tome/class/UserChatExtension.lua
+++ b/game/modules/tome/class/UserChatExtension.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,6 +18,7 @@
 -- darkgod@te4.org
 
 require "engine.class"
+local Dialog = require "engine.ui.Dialog"
 
 --- Module that handles multiplayer chats extensions, automatically loaded by engine.UserChat if found
 module(..., package.seeall, class.make)
@@ -74,6 +75,23 @@ function _M:event(e)
 			self.chat:addMessage("link", e.channel, e.login, {e.name, color}, "#ANTIQUE_WHITE#has linked a creature: #WHITE# "..data.name, {mode="tooltip", tooltip=data.desc})
 		elseif data.kind == "killer-link" then
 			self.chat:addMessage("death", e.channel, e.login, {e.name, color}, "#CRIMSON#"..data.msg.."#WHITE#", data.desc and {mode="tooltip", tooltip=data.desc} or nil)
+		elseif data.kind == "donator-update" and data.donated > 0 then
+			if data.donated <= 5 then world:gainAchievement("BRONZE_DONATOR", game:getPlayer(true))
+			elseif data.donated <= 15 then world:gainAchievement("SILVER_DONATOR", game:getPlayer(true))
+			elseif data.donated <= 30 then world:gainAchievement("GOLD_DONATOR", game:getPlayer(true))
+			elseif data.donated <= 60 then world:gainAchievement("STRALITE_DONATOR", game:getPlayer(true))
+			else world:gainAchievement("VORATUN_DONATOR", game:getPlayer(true))
+			end
+
+			local text = ([[#{bold}#Thank you#{normal}# for you donation, your support means a lot for the continued survival of this game.
+
+Your current donation total is #LIGHT_GREEN#%0.2f euro#WHITE# which equals to #ROYAL_BLUE#%d voratun coins to use on te4.org.
+Your Item's Vault has #TEAL#%d slots#WHITE#.
+
+Again, thank you, and enjoy Eyal!
+
+#{italic}#Your malevolent local god of darkness, #GOLD#DarkGod#{normal}#]]):format(data.donated, data.donated * 10, data.items_vault_slots)
+			Dialog:simpleLongPopup("Thank you", text, 600)
 		end
 	end
 end
diff --git a/game/modules/tome/class/WildernessGrid.lua b/game/modules/tome/class/WildernessGrid.lua
index 0fd7d517337279a4ac43d42699e18ced1a05a0d3..906526cc92dcd37bf55a900d88bfbb53b2d9a21e 100644
--- a/game/modules/tome/class/WildernessGrid.lua
+++ b/game/modules/tome/class/WildernessGrid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/World.lua b/game/modules/tome/class/World.lua
index ed1d8c4585086ddeaecc2012e71e4fbd11ea9259..67ea995d8c423866790e561fad86cedff5fa527d 100644
--- a/game/modules/tome/class/World.lua
+++ b/game/modules/tome/class/World.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/WorldNPC.lua b/game/modules/tome/class/WorldNPC.lua
index 3a4c7df7668bb63df8e01fc40eb5b9f1e411f690..d06db032192c9c84d8c7f35af90b1e6ffe59aeb3 100644
--- a/game/modules/tome/class/WorldNPC.lua
+++ b/game/modules/tome/class/WorldNPC.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/Zone.lua b/game/modules/tome/class/Zone.lua
index 62ffd60b159ddfb75499699e90fbf495d3f3671c..69c025dd50aca570c6325fb383d4c1a321704d88 100644
--- a/game/modules/tome/class/Zone.lua
+++ b/game/modules/tome/class/Zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -66,7 +66,7 @@ function _M:doQuake(rad, x, y, check)
 		game.level.map.attrs[l.x + l.y * w] = m.attrs
 		for z, e in pairs(m.map or {}) do
 			if e.move then
-				e.x = nil e.y = nil e:move(l.x, l.y, true)
+				e:move(l.x, l.y, true)
 			end
 		end
 	end
diff --git a/game/modules/tome/class/generator/actor/Arena.lua b/game/modules/tome/class/generator/actor/Arena.lua
index 2cc45160e50774926741afe89d56e9de3bcc153d..7ede121cd1e0e7e65b7c383b77ee1ad69bcf5acb 100644
--- a/game/modules/tome/class/generator/actor/Arena.lua
+++ b/game/modules/tome/class/generator/actor/Arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/CharredScar.lua b/game/modules/tome/class/generator/actor/CharredScar.lua
index 96682bb7a9dc4688d88350e60896736908d53d26..95c9abe141febfe6492066b2d8542f36ffc6be75 100644
--- a/game/modules/tome/class/generator/actor/CharredScar.lua
+++ b/game/modules/tome/class/generator/actor/CharredScar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/HighPeakFinal.lua b/game/modules/tome/class/generator/actor/HighPeakFinal.lua
index 2fe2510e65b161929031990264eb41dffde617a9..801da86480318c3f5e233937e23e495d7979d736 100644
--- a/game/modules/tome/class/generator/actor/HighPeakFinal.lua
+++ b/game/modules/tome/class/generator/actor/HighPeakFinal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/OnSpots.lua b/game/modules/tome/class/generator/actor/OnSpots.lua
index 25cb306456f88679a057b8e68057ba6e643902c6..1b17683958be38826dea0f2a3548da5d500b99bd 100644
--- a/game/modules/tome/class/generator/actor/OnSpots.lua
+++ b/game/modules/tome/class/generator/actor/OnSpots.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/Random.lua b/game/modules/tome/class/generator/actor/Random.lua
index 6641218eb632cac364e3bcab85d1345da987ea68..af8ce03a5d3cd0c4e086f40f23316f8ea2f254ba 100644
--- a/game/modules/tome/class/generator/actor/Random.lua
+++ b/game/modules/tome/class/generator/actor/Random.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/RandomStairGuard.lua b/game/modules/tome/class/generator/actor/RandomStairGuard.lua
index bd4ed22092619744c3e2826794d3ce535cb4bcfb..6c8078772ab0e882d0173cbd7d71a0516f9d88c4 100644
--- a/game/modules/tome/class/generator/actor/RandomStairGuard.lua
+++ b/game/modules/tome/class/generator/actor/RandomStairGuard.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/Sandworm.lua b/game/modules/tome/class/generator/actor/Sandworm.lua
index 19fa686aff0b0769d97832e0b223ca46a5a2f9a2..d4230c5c46c103795be353778420425117a9563c 100644
--- a/game/modules/tome/class/generator/actor/Sandworm.lua
+++ b/game/modules/tome/class/generator/actor/Sandworm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/actor/ValleyMoon.lua b/game/modules/tome/class/generator/actor/ValleyMoon.lua
index 67e424f990555ffbda689d365a03269a2df675d6..89c1bd847af8933aa84d61c92acdc45132db9e43 100644
--- a/game/modules/tome/class/generator/actor/ValleyMoon.lua
+++ b/game/modules/tome/class/generator/actor/ValleyMoon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/map/Caldera.lua b/game/modules/tome/class/generator/map/Caldera.lua
index b38b281d0d6ff01a1639ece91bfd61fef4d9fb2c..735502aa59089723e56a346146fb48f2bf2295fa 100644
--- a/game/modules/tome/class/generator/map/Caldera.lua
+++ b/game/modules/tome/class/generator/map/Caldera.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/map/CharredScar.lua b/game/modules/tome/class/generator/map/CharredScar.lua
index 21b66425b62a46c5aa5421a80227e750f0ad43d0..224485726bbae8a77ac003c9989a5227411262e6 100644
--- a/game/modules/tome/class/generator/map/CharredScar.lua
+++ b/game/modules/tome/class/generator/map/CharredScar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/map/GenericTunnel.lua b/game/modules/tome/class/generator/map/GenericTunnel.lua
index cdd6484517b42992874c1f434d7ba5e05a973b88..0f49a17819949496a2c15a2129b685f2c8937d69 100644
--- a/game/modules/tome/class/generator/map/GenericTunnel.lua
+++ b/game/modules/tome/class/generator/map/GenericTunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/generator/map/SlimeTunnels.lua b/game/modules/tome/class/generator/map/SlimeTunnels.lua
index f613980bde507422a8e1cd5094c7865d2c7653c3..8a6b5952b99738a9c181444e50adeb216ef4953d 100644
--- a/game/modules/tome/class/generator/map/SlimeTunnels.lua
+++ b/game/modules/tome/class/generator/map/SlimeTunnels.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/ActorInscriptions.lua b/game/modules/tome/class/interface/ActorInscriptions.lua
index 3b81af2978b8dc538046c537bf0dd113d032f83d..91c609eb49014f4272fb5d0a7e8a43b5eb122d94 100644
--- a/game/modules/tome/class/interface/ActorInscriptions.lua
+++ b/game/modules/tome/class/interface/ActorInscriptions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/ActorLife.lua b/game/modules/tome/class/interface/ActorLife.lua
index 7a6301c2656babac9e85e4734e8c48050407ce1e..fd4fe69c7be718fdf4f90963b75d37c8e24ad39c 100644
--- a/game/modules/tome/class/interface/ActorLife.lua
+++ b/game/modules/tome/class/interface/ActorLife.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/ActorPartyQuest.lua b/game/modules/tome/class/interface/ActorPartyQuest.lua
index 3504233ab3bcafc6a28154dd497697ba4af06755..2adc06b590cd3457df1dd32b615a9450a73583d1 100644
--- a/game/modules/tome/class/interface/ActorPartyQuest.lua
+++ b/game/modules/tome/class/interface/ActorPartyQuest.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/Archery.lua b/game/modules/tome/class/interface/Archery.lua
index 3694de3ca212d601deb7d702c359e4148f83a0a4..7b217813d7d71c612e59e2ebe41163e8c3c70ea8 100644
--- a/game/modules/tome/class/interface/Archery.lua
+++ b/game/modules/tome/class/interface/Archery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -32,14 +32,18 @@ module(..., package.seeall, class.make)
 function _M:archeryAcquireTargets(tg, params)
 	params = params or {}
 	local weapon, ammo, offweapon = self:hasArcheryWeapon()
+	-- Awesome, we can shoot from our offhand!
+	if self.can_offshoot and not weapon and offweapon then weapon, offweapon = offweapon, nil end
 	if not weapon then
 		game.logPlayer(self, "You must wield a bow or a sling (%s)!", ammo)
+		print("== no weapon")
 		return nil
 	end
 	local infinite = ammo.infinite or self:attr("infinite_ammo") or params.infinite
 
 	if not ammo or (ammo.combat.shots_left <= 0 and not infinite) then
 		game.logPlayer(self, "You do not have enough ammo left!")
+		print("== no ammo")
 		return nil
 	end
 
@@ -51,6 +55,7 @@ function _M:archeryAcquireTargets(tg, params)
 		local val = self['get'..weapon.use_resource.kind:capitalize()](self)
 		if val < weapon.use_resource.value then
 			game.logPlayer(self, "You do not have enough %s left!", weapon.use_resource.kind)
+			print("== no ressource")
 			return nil
 		end
 	end
@@ -403,6 +408,17 @@ local function archery_projectile(tx, ty, tg, self, tmp)
 	if hitted and ammo and ammo.special_on_kill and ammo.special_on_kill.fct and target.dead then
 		ammo.special_on_kill.fct(ammo, self, target)
 	end
+	
+	-- Siege Arrows
+	if hitted and ammo and ammo.siege_impact and (not self.shattering_impact_last_turn or self.shattering_impact_last_turn < game.turn) then
+		local dam = dam * ammo.siege_impact
+		local invuln = target.invulnerable
+		game.logSeen(target, "The shattering blow creates a shockwave!")
+		target.invulnerable = 1 -- Target already hit, don't damage it twice
+		self:project({type="ball", radius=1, friendlyfire=false}, target.x, target.y, DamageType.PHYSICAL, dam)
+		target.invulnerable = invuln
+		self.shattering_impact_last_turn = game.turn
+	end
 
 	-- Temporal cast
 	if hitted and not target.dead and self:knowTalent(self.T_WEAPON_FOLDING) and self:isTalentActive(self.T_WEAPON_FOLDING) then
@@ -579,6 +595,8 @@ end
 
 function _M:hasDualArcheryWeapon(type)
 	local w, a, o = self:hasArcheryWeapon(type)
+	if self.can_solo_dual_archery and w and not o then w, o = w, w end
+	if self.can_solo_dual_archery and not w and o then w, o = o, o end
 	if w and a and o then return w, a, o end
 	return nil
 end
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 4ce7903e570f7f87a0ea32f7abff2f9832dd7a57..163f4a947d708826eeadf6ce417a618d42170302 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -235,6 +235,7 @@ end
 --- Determines the combat field to use for this item
 function _M:getObjectCombat(o, kind)
 	if kind == "barehand" then return self.combat end
+	if not o then return nil end
 	if kind == "mainhand" then return o.combat end
 	if kind == "offhand" then return o.combat end
 	return nil
@@ -317,6 +318,7 @@ end
 --- Try to totally evade an attack
 function _M:checkEvasion(target)
 	if not target:attr("evasion") or self == target then return end
+	if target:attr("no_evasion") then return end
 
 	local evasion = target:attr("evasion")
 	print("checkEvasion", evasion, target.level, self.level)
@@ -340,6 +342,12 @@ end
 function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	damtype = damtype or (weapon and weapon.damtype) or DamageType.PHYSICAL
 	mult = mult or 1
+	
+	--Life Steal
+	if weapon and weapon.lifesteal then
+		self:attr("lifesteal", weapon.lifesteal)
+		self:attr("silent_heal", 1)
+	end
 
 	local mode = "other"
 	if self:hasShield() then mode = "shield"
@@ -393,12 +401,11 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	elseif self:checkEvasion(target) then
 		evaded = true
 		self:logCombat(target, "#Target# evades #Source#.")
-	elseif self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or rng.chance(3)) then
+	elseif self.turn_procs.auto_melee_hit or (self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or target:attr("blind_fighted") or rng.chance(3))) then
 		local pres = util.bound(target:combatArmorHardiness() / 100, 0, 1)
 		if target.knowTalent and target:hasEffect(target.EFF_DUAL_WEAPON_DEFENSE) then
 			local deflect = math.min(dam, target:callTalent(target.T_DUAL_WEAPON_DEFENSE, "doDeflect"))
 			if deflect > 0 then
---				self:logCombat(target, "#Target# parries %d damage from #Source#'s attack.", deflect)
 				game:delayedLogDamage(self, target, 0, ("%s(%d parried#LAST#)"):format(DamageType:get(damtype).text_color or "#aaaaaa#", deflect), false)
 				dam = math.max(dam - deflect,0)
 				print("[ATTACK] after DUAL_WEAPON_DEFENSE", dam)
@@ -406,7 +413,6 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		end
 		if target.knowTalent and target:hasEffect(target.EFF_GESTURE_OF_GUARDING) and not target:attr("encased_in_ice") then
 			local deflected = math.min(dam, target:callTalent(target.T_GESTURE_OF_GUARDING, "doGuard")) or 0
---			if deflected > 0 then self:logCombat(target, "#Target# dismisses %d damage from #Source#'s attack with a sweeping gesture.", deflected) end
 			if deflected > 0 then
 				game:delayedLogDamage(self, target, 0, ("%s(%d gestured#LAST#)"):format(DamageType:get(damtype).text_color or "#aaaaaa#", deflected), false)
 				dam = dam - deflected
@@ -463,6 +469,8 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	
 		local oldproj = DamageType:getProjectingFor(self)
 		if self.__talent_running then DamageType:projectingFor(self, {project_type={talent=self.__talent_running}}) end
+		
+		if weapon and weapon.crushing_blow then self:attr("crushing_blow", 1) end
 
 		-- Damage conversion?
 		-- Reduces base damage but converts it into another damage type
@@ -486,6 +494,8 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		if dam > 0 then
 			DamageType:get(damtype).projector(self, target.x, target.y, damtype, math.max(0, dam))
 		end
+		
+		if weapon and weapon.crushing_blow then self:attr("crushing_blow", -1) end
 
 		if self.__talent_running then DamageType:projectingFor(self, oldproj) end
 
@@ -499,12 +509,12 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 			dam = dam + total_conversion
 		end
 
-		target:fireTalentCheck("callbackOnMeleeHit", self)
+		target:fireTalentCheck("callbackOnMeleeHit", self, dam)
 
 		hitted = true
 	else
 		self:logCombat(target, "#Source# misses #Target#.")
-		target:fireTalentCheck("callbackOnMeleeMiss", self)
+		target:fireTalentCheck("callbackOnMeleeMiss", self, dam)
 	end
 
 	-- cross-tier effect for accuracy vs. defense
@@ -633,9 +643,17 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		target.invulnerable = 1 -- Target already hit, don't damage it twice
 		self:project({type="ball", radius=1, selffire=false}, target.x, target.y, DamageType.PHYSICAL, dam)
 		target.invulnerable = invuln
-		self:incStamina(-15)
+		self:incStamina(-8)
 		self.shattering_impact_last_turn = game.turn
 	end
+	
+	-- Damage Backlash
+	if dam > 0 and self.attr and self:attr("damage_backfire") then
+		local hurt = math.min(dam, target.life) * self.damage_backfire / 100
+		if hurt > 0 then
+			self:takeHit(hurt, self)
+		end
+	end
 
 	-- Burst on Hit
 	if hitted and weapon and weapon.burst_on_hit then
@@ -739,15 +757,15 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 
 	-- Special effect
 	if hitted and weapon and weapon.special_on_hit and weapon.special_on_hit.fct and (not target.dead or weapon.special_on_hit.on_kill) then
-		weapon.special_on_hit.fct(weapon, self, target)
+		weapon.special_on_hit.fct(weapon, self, target, dam)
 	end
 
 	if hitted and crit and weapon and weapon.special_on_crit and weapon.special_on_crit.fct and (not target.dead or weapon.special_on_crit.on_kill) then
-		weapon.special_on_crit.fct(weapon, self, target)
+		weapon.special_on_crit.fct(weapon, self, target, dam)
 	end
 
 	if hitted and weapon and weapon.special_on_kill and weapon.special_on_kill.fct and target.dead then
-		weapon.special_on_kill.fct(weapon, self, target)
+		weapon.special_on_kill.fct(weapon, self, target, dam)
 	end
 
 	if hitted and crit and not target.dead and self:knowTalent(self.T_BACKSTAB) and not target:attr("stunned") and rng.percent(self:callTalent(self.T_BACKSTAB, "getStunChance")) then
@@ -797,7 +815,7 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	end
 
 	-- Counter Attack!
-	if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_COUNTER_ATTACK) and self:isNear(target.x,target.y, 1) then --Adjacency check
+	if not hitted and not target.dead and target:knowTalent(target.T_COUNTER_ATTACK) and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_COUNTER_ATTACK) and self:isNear(target.x,target.y, 1) then --Adjacency check
 		local cadam = target:callTalent(target.T_COUNTER_ATTACK,"checkCounterAttack")
 		if cadam then
 			game.logSeen(self, "%s counters the attack!", target.name:capitalize())
@@ -812,7 +830,7 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	end
 
 	-- Defensive Throw!
-	if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_DEFENSIVE_THROW) and target:isNear(self.x,self.y,1) then
+	if not hitted and not target.dead and target:knowTalent(target.T_DEFENSIVE_THROW) and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:isNear(self.x,self.y,1) then
 		local t = target:getTalentFromId(target.T_DEFENSIVE_THROW)
 		t.do_throw(target, self, t)
 	end
@@ -925,6 +943,12 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 
 	self.turn_procs.weapon_type = nil
 	self.__global_accuracy_damage_bonus = nil
+	
+	--Life Steal
+	if weapon and weapon.lifesteal then
+		self:attr("lifesteal", -weapon.lifesteal)
+		self:attr("silent_heal", -1)
+	end
 
 	return self:combatSpeed(weapon), hitted
 end
@@ -1348,7 +1372,7 @@ function _M:combatStatLimit(stat, limit, low, high)
 end
 
 --- Gets the damage
-function _M:combatDamage(weapon)
+function _M:combatDamage(weapon, adddammod)
 	weapon = weapon or self.combat or {}
 
 	local sub_cun_to_str = false
@@ -1362,6 +1386,11 @@ function _M:combatDamage(weapon)
 		if self.use_psi_combat and stat == "dex" then stat = "cun" end
 		totstat = totstat + self:getStat(stat) * mod
 	end
+	if adddammod then
+		for stat, mod in pairs(adddammod) do
+			totstat = totstat + self:getStat(stat) * mod
+		end
+	end
 	if self.use_psi_combat then
 		if self:knowTalent(self.T_GREATER_TELEKINETIC_GRASP) then
 			local g = self:getTalentFromId(self.T_GREATER_TELEKINETIC_GRASP)
@@ -1383,7 +1412,7 @@ function _M:combatDamage(weapon)
 
 	local power = math.max((weapon.dam or 1), 1)
 	power = (math.sqrt(power / 10) - 1) * 0.5 + 1
-	--print(("[COMBAT DAMAGE] power(%f) totstat(%f) talent_mod(%f)"):format(power, totstat, talented_mod))
+--	print(("[COMBAT DAMAGE] power(%f) totstat(%f) talent_mod(%f)"):format(power, totstat, talented_mod))
 	return self:rescaleDamage(0.3*(self:combatPhysicalpower(nil, weapon) + totstat) * power * talented_mod)
 end
 
@@ -1594,8 +1623,8 @@ function _M:physicalCrit(dam, weapon, target, atk, def, add_chance, crit_power_a
 
 	chance = util.bound(chance, 0, 100)
 
-	print("[PHYS CRIT %]", chance)
-	if rng.percent(chance) then
+	print("[PHYS CRIT %]", self.turn_procs.auto_phys_crit and 100 or chance)
+	if self.turn_procs.auto_phys_crit or rng.percent(chance) then
 		if target:hasEffect(target.EFF_OFFGUARD) then
 			crit_power_add = crit_power_add + 0.1
 		end
@@ -1612,6 +1641,8 @@ function _M:physicalCrit(dam, weapon, target, atk, def, add_chance, crit_power_a
 		crit = true
 
 		if self:knowTalent(self.T_EYE_OF_THE_TIGER) then self:triggerTalent(self.T_EYE_OF_THE_TIGER, nil, "physical") end
+
+		self:fireTalentCheck("callbackOnCrit", "physical", dam, chance, target)
 	end
 	return dam, crit
 end
@@ -1630,8 +1661,8 @@ function _M:spellCrit(dam, add_chance, crit_power_add)
 		crit_power_add = crit_power_add + self:callTalent(self.T_SHADOWSTRIKE,"getMultiplier")
 	end
 
-	print("[SPELL CRIT %]", chance)
-	if rng.percent(chance) then
+	print("[SPELL CRIT %]", self.turn_procs.auto_spell_crit and 100 or chance)
+	if self.turn_procs.auto_spell_crit or rng.percent(chance) then
 		self.turn_procs.is_crit = "spell"
 		self.turn_procs.crit_power = (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
 		dam = dam * (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
@@ -1660,6 +1691,8 @@ function _M:spellCrit(dam, add_chance, crit_power_add)
 		end
 
 		if self:knowTalent(self.T_EYE_OF_THE_TIGER) then self:triggerTalent(self.T_EYE_OF_THE_TIGER, nil, "spell") end
+
+		self:fireTalentCheck("callbackOnCrit", "spell", dam, chance)
 	end
 	return dam, crit
 end
@@ -1678,8 +1711,8 @@ function _M:mindCrit(dam, add_chance, crit_power_add)
 		crit_power_add = crit_power_add + self:callTalent(self.T_SHADOWSTRIKE,"getMultiplier")
 	end
 
-	print("[MIND CRIT %]", chance)
-	if rng.percent(chance) then
+	print("[MIND CRIT %]", self.turn_procs.auto_mind_crit and 100 or chance)
+	if self.turn_procs.auto_mind_crit or rng.percent(chance) then
 		self.turn_procs.is_crit = "mind"
 		self.turn_procs.crit_power = (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
 		dam = dam * (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
@@ -1692,6 +1725,8 @@ function _M:mindCrit(dam, add_chance, crit_power_add)
 
 		if self:knowTalent(self.T_EYE_OF_THE_TIGER) then self:triggerTalent(self.T_EYE_OF_THE_TIGER, nil, "mind") end
 		if self:knowTalent(self.T_LIVING_MUCUS) then self:callTalent(self.T_LIVING_MUCUS, "on_crit") end
+
+		self:fireTalentCheck("callbackOnCrit", "mind", dam, chance)
 	end
 	return dam, crit
 end
@@ -2217,26 +2252,36 @@ end
 -- Starts the grapple
 function _M:startGrapple(target)
 	-- pulls boosted grapple effect from the clinch talent if known
+	local grappledParam = {src = self, apply_power = 1, silence = 0, power = 1, slow = 0, reduction = 0}
+	local grappleParam = {sharePct = 0, drain = 0, trgt = target }
+	local duration = 5
 	if self:knowTalent(self.T_CLINCH) then
 		local t = self:getTalentFromId(self.T_CLINCH)
-		power = t.getPower(self, t)
+		if self:knowTalent(self.T_CRUSHING_HOLD) then
+			local t2 = self:getTalentFromId(self.T_CRUSHING_HOLD)
+			grappledParam = t2.getBonusEffects(self, t2) -- get the 4 bonus parameters first
+		end
+		local power = self:physicalCrit(t.getPower(self, t), nil, target, self:combatAttack(), target:combatDefense())
+		grappledParam["power"] = power -- damage/turn set by Clinch
 		duration = t.getDuration(self, t)
-		hitbonus = self:getTalentLevel(t)/2
-	else
-		power = 5
-		duration = 4
-		hitbonus = 0
+
+		grappleParam["drain"] = t.getDrain(self, t) -- stamina/turn set by Clinch
+		grappleParam["sharePct"] = t.getSharePct(self, t) -- damage shared with grappled set by Clinch
+
 	end
+	-- oh for the love of god why didn't I rewrite this entire structure
+	grappledParam["src"] = self
+	grappledParam["apply_power"] = self:combatPhysicalpower()
 	-- Breaks the grapple before reapplying
 	if self:hasEffect(self.EFF_GRAPPLING) then
 		self:removeEffect(self.EFF_GRAPPLING, true)
-		target:setEffect(target.EFF_GRAPPLED, duration, {src=self, power=power}, true)
-		self:setEffect(self.EFF_GRAPPLING, duration, {trgt=target}, true)
+		target:setEffect(target.EFF_GRAPPLED, duration, grappledParam, true)
+		self:setEffect(self.EFF_GRAPPLING, duration, grappleParam, true)
 		return true
 	elseif target:canBe("pin") then
-		target:setEffect(target.EFF_GRAPPLED, duration, {src=self, power=power, apply_power=self:combatPhysicalpower()})
+		target:setEffect(target.EFF_GRAPPLED, duration, grappledParam)
 		target:crossTierEffect(target.EFF_GRAPPLED, self:combatPhysicalpower())
-		self:setEffect(self.EFF_GRAPPLING, duration, {trgt=target})
+		self:setEffect(self.EFF_GRAPPLING, duration, grappleParam)
 		return true
 	else
 		game.logSeen(target, "%s resists the grapple!", target.name:capitalize())
diff --git a/game/modules/tome/class/interface/PartyDeath.lua b/game/modules/tome/class/interface/PartyDeath.lua
index aa7a9951933396097bb3bc58fb7fe4e94aced670..dcd594ed56518d49302aae39739a94a7dfc18ce0 100644
--- a/game/modules/tome/class/interface/PartyDeath.lua
+++ b/game/modules/tome/class/interface/PartyDeath.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/PartyIngredients.lua b/game/modules/tome/class/interface/PartyIngredients.lua
index 2ba1e610bc3bb68f5d5cd844a0bbc72334352891..d4f4c7cfef2078e83586424ab71b20631cf8d462 100644
--- a/game/modules/tome/class/interface/PartyIngredients.lua
+++ b/game/modules/tome/class/interface/PartyIngredients.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/PartyLore.lua b/game/modules/tome/class/interface/PartyLore.lua
index fa7502a324c560486386d6d27b4f87adef7a90e6..2852e7a4b3c7ce95642141dc10db1102b34283f0 100644
--- a/game/modules/tome/class/interface/PartyLore.lua
+++ b/game/modules/tome/class/interface/PartyLore.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/PlayerDumpJSON.lua b/game/modules/tome/class/interface/PlayerDumpJSON.lua
index 9a04ea9b031c4c16c69db645dc4583b8ccc4b84c..09c8258e791f78affdf0e9850f53e5df55920b21 100644
--- a/game/modules/tome/class/interface/PlayerDumpJSON.lua
+++ b/game/modules/tome/class/interface/PlayerDumpJSON.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/PlayerExplore.lua b/game/modules/tome/class/interface/PlayerExplore.lua
index 1e805574f12317f794edc8ba332e78d44fc1acda..50c0024dd1374a30743185583540874d871e4c13 100644
--- a/game/modules/tome/class/interface/PlayerExplore.lua
+++ b/game/modules/tome/class/interface/PlayerExplore.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/PlayerStats.lua b/game/modules/tome/class/interface/PlayerStats.lua
index 03fbb2900fbc538efb1c26251a8879891dafbdde..3b19e28f4940eb14bb9063de06aa885602f4e568 100644
--- a/game/modules/tome/class/interface/PlayerStats.lua
+++ b/game/modules/tome/class/interface/PlayerStats.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/interface/TooltipsData.lua b/game/modules/tome/class/interface/TooltipsData.lua
index 5e87447dabb1b0b84484c0af758d40e808b0cc89..0333432625d7d3b40af1d5aafa272d429a42f891 100644
--- a/game/modules/tome/class/interface/TooltipsData.lua
+++ b/game/modules/tome/class/interface/TooltipsData.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -157,29 +157,26 @@ Those inscriptions give the bearer always-accessible powers. Usually most people
 -- Speeds
 -------------------------------------------------------------
 TOOLTIP_SPEED_GLOBAL = [[#GOLD#Global Speed#LAST#
-Global speed affects everything you do.
-It represents how much "energy" you get per game turn. Once you reach a certain point you can act.
-E.g.: at 200% global speed you get twice as much energy per game turn and thus can act twice when other creatures only act once.
+Global speed represents how fast you are and affects everything you do.
+Higher is faster, so at 200% global speed you can performa twice as many actions as you would at 100% speed.
+Note that the amount of time to performa various actions like moving, casting spells, and attacking is also affected by their respective speeds.
 ]]
 TOOLTIP_SPEED_MOVEMENT = [[#GOLD#Movement Speed#LAST#
-The additional time you have to move.
-It represents how many more movements you can do in the same time.
-E.g.: at 100% you will be able to do 100% more movements (aka twice as many) in the same time it would have taken you to do one at 0% speed.
+How quickly you move compared to normal.
+Higher is faster, so 200% means that you move twice as fast as normal.
 ]]
 TOOLTIP_SPEED_SPELL = [[#GOLD#Spell Speed#LAST#
-The additional time you have cast a spell.
-It represents how many more spells you can cast in the same time.
-E.g.: at 100% you will be able to cast 100% more spells (aka twice as many) in the same time it would have taken you to do one at 0% speed.
+How quickly you cast spells.
+Higher is faster, so 200% means that you can cast spells twice as fast as normal.
 ]]
 TOOLTIP_SPEED_ATTACK = [[#GOLD#Attack Speed#LAST#
-The additional time you have to attack (in melee or ranged).
-It represents how many more attacks you can do in the same time.
-E.g.: at 100% you will be able to do 100% more attacks (aka twice as many) in the same time it would have taken you to do one at 0% speed.
+How quickly you attack with weapons, either ranged or melee.
+Higher is faster, so 200% means that you can attack twice as fast as normal.
+The actual speed may also be affected by the weapon used.
 ]]
 TOOLTIP_SPEED_MENTAL = [[#GOLD#Mental Speed#LAST#
-The additional time you have to use a mental power.
-It represents how many more mental powers you can do in the same time.
-E.g.: at 100% you will be able to do 100% more attacks (aka twice as many) in the same time it would have taken you to do one at 0% speed.
+How quickly you perform mind powers.
+Higher is faster, so 200% means that you can use mind powers twice as fast as normal.
 ]]
 -------------------------------------------------------------
 -- Stats
@@ -231,8 +228,8 @@ Some talents allow you to increase this percentage.
 It is improved by Cunning.
 ]]
 TOOLTIP_COMBAT_SPEED = [[#GOLD#Attack speed#LAST#
-Attack speed represents how fast your attacks are compared to a normal turn.
-The lower it is the faster your attacks are.
+Attack speed represents how fast your attacks are compared to normal.
+Higher is faster, representing more attacks performed in the same amount of time.
 ]]
 TOOLTIP_COMBAT_RANGE = [[#GOLD#Firing range#LAST#
 The maximum distance your weapon can reach.
@@ -295,8 +292,8 @@ Some talents allow you to increase this percentage.
 It is improved by Cunning.
 ]]
 TOOLTIP_SPELL_SPEED = [[#GOLD#Spellcasting speed#LAST#
-Spellcasting speed represents how fast your spellcasting is compared to a normal turn.
-The lower the number, the faster it is.
+Spellcasting speed represents how fast your spellcasting is compared to normal.
+Higher is faster - 200% means that you cast spells twice as fast as someone at 100%.
 ]]
 TOOLTIP_SPELL_COOLDOWN = [[#GOLD#Spellcooldown#LAST#
 Spell cooldown represents how fast your spells will come off of cooldown.
@@ -315,8 +312,8 @@ Some talents allow you to increase this percentage.
 It is improved by Cunning.
 ]]
 TOOLTIP_MIND_SPEED = [[#GOLD#Mental speed#LAST#
-Mental speed represents how fast you use psionic abilities compared to a normal turn.
-The lower the number, the faster it is.
+Mental speed represents how fast you use psionic abilities compared to normal.
+Higher is faster.
 ]]
 -------------------------------------------------------------
 -- Damage and resists
diff --git a/game/modules/tome/class/interface/WorldAchievements.lua b/game/modules/tome/class/interface/WorldAchievements.lua
index c5fc59d6c17c2428a0fb549d5f2ff6b81b0dcc38..ec444eda651079b986e8d057dbbe124d881cae55 100644
--- a/game/modules/tome/class/interface/WorldAchievements.lua
+++ b/game/modules/tome/class/interface/WorldAchievements.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/uiset/Classic.lua b/game/modules/tome/class/uiset/Classic.lua
index 590a32d53433910e5e6a80279518b62775b1bb36..0cf7057cc73a4ee26f7fa7c87a85cd9d3f6aa2fa 100644
--- a/game/modules/tome/class/uiset/Classic.lua
+++ b/game/modules/tome/class/uiset/Classic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/class/uiset/Minimalist.lua b/game/modules/tome/class/uiset/Minimalist.lua
index b5980c8f757d6e66f25753e354f939c2c99a6ea4..6db1a6e4fe284e8f3a1e2f5572bff1574058fb51 100644
--- a/game/modules/tome/class/uiset/Minimalist.lua
+++ b/game/modules/tome/class/uiset/Minimalist.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -1207,6 +1207,16 @@ function _M:displayResources(scale, bx, by, a)
 			end
 		end
 
+		-----------------------------------------------------------------------------------
+		-- Specific display for zone
+		if game.zone and game.zone.specific_ui then
+			local w, h = game.zone.specific_ui(self, game.zone, x, y)
+			if w and h then
+				self:showResourceTooltip(bx+x*scale, by+y*scale, w, h, "res:levelspec", "")
+				x, y = self:resourceOrientStep(orient, bx, by, scale, x, y, w, h)
+			end
+		elseif game.mouse:getZone("res:levelspec") then game.mouse:unregisterZone("res:levelspec") end
+
 		-----------------------------------------------------------------------------------
 		-- Saving
 		if savefile_pipe.saving then
diff --git a/game/modules/tome/class/uiset/UISet.lua b/game/modules/tome/class/uiset/UISet.lua
index f64a21848b103ea5112d04a19f83c655de302131..bda906b3241f69490857c4c1ab72d80f8e2dbede 100644
--- a/game/modules/tome/class/uiset/UISet.lua
+++ b/game/modules/tome/class/uiset/UISet.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/arena.lua b/game/modules/tome/data/achievements/arena.lua
index 2135504f1973b61f48ddabd996ba9d852e9242b0..792eabef30661bb1b0ab1f6a030d3b3557e8849e 100644
--- a/game/modules/tome/data/achievements/arena.lua
+++ b/game/modules/tome/data/achievements/arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/donator.lua b/game/modules/tome/data/achievements/donator.lua
new file mode 100644
index 0000000000000000000000000000000000000000..68ff0c5dad2a257fddf39cbcebee53076d0ad36c
--- /dev/null
+++ b/game/modules/tome/data/achievements/donator.lua
@@ -0,0 +1,44 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+newAchievement{
+	name = "Bronze Donator", id = "BRONZE_DONATOR",
+	desc = [[Donated up to 5 euros to Tales of Maj'Eyal.]],
+	no_difficulty_duplicate = true, no_chat_broadcast = true,
+}
+newAchievement{
+	name = "Silver Donator", id = "SILVER_DONATOR",
+	desc = [[Donated at least 6 euros to Tales of Maj'Eyal.]],
+	no_difficulty_duplicate = true, no_chat_broadcast = true,
+}
+newAchievement{
+	name = "Gold Donator", id = "GOLD_DONATOR",
+	desc = [[Donated at least 16 euros to Tales of Maj'Eyal.]],
+	no_difficulty_duplicate = true, no_chat_broadcast = true,
+}
+newAchievement{
+	name = "Stralite Donator", id = "STRALITE_DONATOR",
+	desc = [[Donated at least 31 euros to Tales of Maj'Eyal.]],
+	no_difficulty_duplicate = true, no_chat_broadcast = true,
+}
+newAchievement{
+	name = "Voratun Donator", id = "VORATUN_DONATOR",
+	desc = [[Donated more than 60 euros to Tales of Maj'Eyal.]],
+	no_difficulty_duplicate = true, no_chat_broadcast = true,
+}
diff --git a/game/modules/tome/data/achievements/events.lua b/game/modules/tome/data/achievements/events.lua
index a61661359fbf28c1182b453caa24cc0aebcfb685..aa51e8862874705362755acac80f01ced467731d 100644
--- a/game/modules/tome/data/achievements/events.lua
+++ b/game/modules/tome/data/achievements/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/infinite-dungeon.lua b/game/modules/tome/data/achievements/infinite-dungeon.lua
index 9d3e66833e95ebdcfd3a0cf1da16ab9a9f5d017c..ce5945c9cf2c5e663b6a5a55783163f467327e80 100644
--- a/game/modules/tome/data/achievements/infinite-dungeon.lua
+++ b/game/modules/tome/data/achievements/infinite-dungeon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/items.lua b/game/modules/tome/data/achievements/items.lua
index db566ba611ede1eead0b46ee1768ffe3d4ed6263..21a1182140a015920c966f4f8db2776183a629b9 100644
--- a/game/modules/tome/data/achievements/items.lua
+++ b/game/modules/tome/data/achievements/items.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/kills.lua b/game/modules/tome/data/achievements/kills.lua
index 227494da4346899b723cf5b76889a060173b60ee..2cc38f3c41327d0fab1e5cb124ff9a9a94e064d5 100644
--- a/game/modules/tome/data/achievements/kills.lua
+++ b/game/modules/tome/data/achievements/kills.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -262,3 +262,14 @@ newAchievement{
 	desc = [[Deal one million damage to training dummies in a single training session.]],
 	mode = "player",
 }
+newAchievement{
+	name = "I meant to do that...", id = "AVOID_DEATH",
+	show = "full",
+	desc = [[Avoid death 50 times with a life-saving talent.]],
+	mode = "player",
+	can_gain = function(self, who)
+		self.nb = (self.nb or 0) + 1
+		if self.nb >= 50 then return true end
+	end,
+	track = function(self) return tstring{tostring(self.nb or 0)," / 50"} end,
+}
diff --git a/game/modules/tome/data/achievements/lore.lua b/game/modules/tome/data/achievements/lore.lua
index 60295b5976f8b4da772ebcf93b1b428ca70a1037..f57aa03a8e8c8d4042ede2f17d1718c20285836c 100644
--- a/game/modules/tome/data/achievements/lore.lua
+++ b/game/modules/tome/data/achievements/lore.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/player.lua b/game/modules/tome/data/achievements/player.lua
index c93dbcce76f56a6e1a2ddde32633f073facaf482..5c59349f7016579f212694c0897eb15f90afdfc8 100644
--- a/game/modules/tome/data/achievements/player.lua
+++ b/game/modules/tome/data/achievements/player.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/achievements/quests.lua b/game/modules/tome/data/achievements/quests.lua
index 49bab432ca1baa7b68b2082e5b84bc3c3ccdb2c9..10e4fa33a975305629ee4815fc54c5de999fd6bb 100644
--- a/game/modules/tome/data/achievements/quests.lua
+++ b/game/modules/tome/data/achievements/quests.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -297,7 +297,7 @@ newAchievement{
 	name = "Thralless", id = "RING_BLOOD_FREED",
 	show = "full",
 	mode = "player",
-	desc = [[Freed at least 30 enthralled slaves in the slavers compound.]],
+	desc = [[Freed at least 30 enthralled slaves in the slavers' compound.]],
 	can_gain = function(self)
 		self.nb = (self.nb or 0) + 1
 		if self.nb >= 30 then return true end
diff --git a/game/modules/tome/data/achievements/talents.lua b/game/modules/tome/data/achievements/talents.lua
index 8f9252342fe8c4a98fd43f3de4ff985986b1d009..b94936ef3f64a94fef54a1e9215f839c08a75441 100644
--- a/game/modules/tome/data/achievements/talents.lua
+++ b/game/modules/tome/data/achievements/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/autolevel_schemes.lua b/game/modules/tome/data/autolevel_schemes.lua
index 7b459409a5fa9f4c3f4790f03492a763d612dc41..0d3624f9ce5fa395b642c9dbd8c7d4ace4a892b7 100644
--- a/game/modules/tome/data/autolevel_schemes.lua
+++ b/game/modules/tome/data/autolevel_schemes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/adventurer.lua b/game/modules/tome/data/birth/classes/adventurer.lua
index a36b817f8b6af74543c6c3c38ded2d848c7e004f..43f243089f62ae75d813cb3e32c3eb05468d1d13 100644
--- a/game/modules/tome/data/birth/classes/adventurer.lua
+++ b/game/modules/tome/data/birth/classes/adventurer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/afflicted.lua b/game/modules/tome/data/birth/classes/afflicted.lua
index a3f10a68291de1b10b598c8eb4feaa55d1898289..e104d8115995d9fa3d5c7fe286c56e4c60fc7c9b 100644
--- a/game/modules/tome/data/birth/classes/afflicted.lua
+++ b/game/modules/tome/data/birth/classes/afflicted.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/celestial.lua b/game/modules/tome/data/birth/classes/celestial.lua
index e9cb0f2d5bfaec3096cd8d0bd0c33a5341a3f762..4658924699fca4fcc500d2ec55c9c41986481cfb 100644
--- a/game/modules/tome/data/birth/classes/celestial.lua
+++ b/game/modules/tome/data/birth/classes/celestial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -73,15 +73,17 @@ newBirthDescriptor{
 		["technique/combat-techniques-passive"]={true, 0.1},
 		["technique/combat-training"]={true, 0.1},
 		["cunning/survival"]={false, 0.1},
-		["celestial/sun"]={true, 0},
+		["celestial/sun"]={true, 0.3},
 		["celestial/chants"]={true, 0.3},
 		["celestial/combat"]={true, 0.3},
 		["celestial/light"]={true, 0.3},
 		["celestial/guardian"]={false, 0.3},
+		["celestial/radiance"]={false, 0.3},
+		["celestial/crusader"]={true, 0.3},
 	},
 	birth_example_particles = "golden_shield",
 	talents = {
-		[ActorTalents.T_SEARING_LIGHT] = 1,
+		[ActorTalents.T_SUN_BEAM] = 1,
 		[ActorTalents.T_WEAPON_OF_LIGHT] = 1,
 		[ActorTalents.T_CHANT_OF_FORTITUDE] = 1,
 		[ActorTalents.T_ARMOUR_TRAINING] = 2,
@@ -119,7 +121,7 @@ newBirthDescriptor{
 	stats = { mag=6, cun=3, },
 	talents_types = {
 		["cunning/survival"]={false, 0.1},
-		["celestial/sun"]={true, 0.3},
+		["celestial/sunlight"]={true, 0.3},
 		["celestial/chants"]={true, 0.3},
 		["celestial/glyphs"]={false, 0.3},
 		["celestial/circles"]={false, 0.3},
diff --git a/game/modules/tome/data/birth/classes/chronomancer.lua b/game/modules/tome/data/birth/classes/chronomancer.lua
index 55ac72583bc48fbc5fbb76cd2638c40b8555e5e4..2abfa68920ab1598d988ded3c0891f06178f3499 100644
--- a/game/modules/tome/data/birth/classes/chronomancer.lua
+++ b/game/modules/tome/data/birth/classes/chronomancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/corrupted.lua b/game/modules/tome/data/birth/classes/corrupted.lua
index 520e33531e190fd2a0f5c8a44081c855bfaa09de..f92f3deeca9a889a989843d02a9e45638c0668b0 100644
--- a/game/modules/tome/data/birth/classes/corrupted.lua
+++ b/game/modules/tome/data/birth/classes/corrupted.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/mage.lua b/game/modules/tome/data/birth/classes/mage.lua
index 5f56727d10ae43af453d24b560d4e70455d3a0ac..c143c05a4c1bc22d9a61435eeb2367b70a7b6268 100644
--- a/game/modules/tome/data/birth/classes/mage.lua
+++ b/game/modules/tome/data/birth/classes/mage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -62,14 +62,19 @@ newBirthDescriptor{
 		function(actor)
 			actor:addShaderAura("body_of_fire", "awesomeaura", {time_factor=3500, alpha=1, flame_scale=1.1}, "particles_images/wings.png")
 		end,
+		function(actor)
+			actor:addShaderAura("body_of_ice", "crystalineaura", {}, "particles_images/spikes.png")
+		end,
 	},
 	talents_types = {
 		["spell/explosives"]={true, 0.3},
-		["spell/infusion"]={true, 0.3},
 		["spell/golemancy"]={true, 0.3},
 		["spell/advanced-golemancy"]={false, 0.3},
 		["spell/stone-alchemy"]={true, 0.3},
-		["spell/fire-alchemy"]={false, 0.3},
+		["spell/fire-alchemy"]={true, 0.3},
+		["spell/acid-alchemy"]={true, 0.3},
+		["spell/frost-alchemy"]={true, 0.3},
+		["spell/energy-alchemy"]={false, 0.3},
 		["spell/staff-combat"]={true, 0.3},
 		["cunning/survival"]={false, -0.1},
 	},
diff --git a/game/modules/tome/data/birth/classes/none.lua b/game/modules/tome/data/birth/classes/none.lua
index 910ce7344d9dcaa67b95ae68bb4721513cf3214d..05859c3f4564fd1b7252260033a8305e0630b0f0 100644
--- a/game/modules/tome/data/birth/classes/none.lua
+++ b/game/modules/tome/data/birth/classes/none.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/psionic.lua b/game/modules/tome/data/birth/classes/psionic.lua
index 800fe107d9b6f78b1add1932f8bd25ee08c99517..d17df0b46d6c58852701805e3fe663e61235dabe 100644
--- a/game/modules/tome/data/birth/classes/psionic.lua
+++ b/game/modules/tome/data/birth/classes/psionic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/rogue.lua b/game/modules/tome/data/birth/classes/rogue.lua
index 6accd8f732d19211066b5a42f30103613274c3f8..df8310b8598905bcad0c24dc055e21bbeb593f4f 100644
--- a/game/modules/tome/data/birth/classes/rogue.lua
+++ b/game/modules/tome/data/birth/classes/rogue.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/tutorial.lua b/game/modules/tome/data/birth/classes/tutorial.lua
index f77324698ab597a504e1ac1c8aa2937294be2ab2..31c736b4961f8c4ba46e7f297f4ec09be6a30573 100644
--- a/game/modules/tome/data/birth/classes/tutorial.lua
+++ b/game/modules/tome/data/birth/classes/tutorial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/classes/warrior.lua b/game/modules/tome/data/birth/classes/warrior.lua
index 3763dce91b72dab8c63fced7ac98713575e8a086..b299a928fc87b5cfb66bab5df4d889d93c70e448 100644
--- a/game/modules/tome/data/birth/classes/warrior.lua
+++ b/game/modules/tome/data/birth/classes/warrior.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -59,8 +59,8 @@ newBirthDescriptor{
 	talents_types = {
 		["technique/archery-training"]={false, 0.1},
 		["technique/shield-defense"]={false, -0.1},
-		["technique/2hweapon-offense"]={true, 0.3},
-		["technique/2hweapon-cripple"]={true, 0.3},
+		["technique/2hweapon-assault"]={true, 0.3},
+		["technique/strength-of-the-berserker"]={true, 0.3},
 		["technique/combat-techniques-active"]={true, 0.3},
 		["technique/combat-techniques-passive"]={true, 0.3},
 		["technique/combat-training"]={true, 0.3},
@@ -73,8 +73,8 @@ newBirthDescriptor{
 		["cunning/dirty"]={false, 0},
 	},
 	talents = {
-		[ActorTalents.T_DEATH_DANCE] = 1,
-		[ActorTalents.T_STUNNING_BLOW] = 1,
+		[ActorTalents.T_WARSHOUT_BERSERKER] = 1,
+		[ActorTalents.T_STUNNING_BLOW_ASSAULT] = 1,
 		[ActorTalents.T_WEAPON_COMBAT] = 1,
 		[ActorTalents.T_ARMOUR_TRAINING] = 1,
 	},
@@ -305,6 +305,7 @@ newBirthDescriptor{
 		[ActorTalents.T_DOUBLE_STRIKE] = 1,
 		[ActorTalents.T_WEAPON_COMBAT] = 1,
 		[ActorTalents.T_ARMOUR_TRAINING] = 1,
+		[ActorTalents.T_UNARMED_MASTERY] = 1, -- early game is absolutely stupid without this
 	},
 	copy = {
 		resolvers.equip{ id=true,
diff --git a/game/modules/tome/data/birth/classes/wilder.lua b/game/modules/tome/data/birth/classes/wilder.lua
index f411a4fe1da14d83b23fd4a6ab7fd1fcdafc4d0a..087f3f70d3387880f355bba81cba2788e7e7791e 100644
--- a/game/modules/tome/data/birth/classes/wilder.lua
+++ b/game/modules/tome/data/birth/classes/wilder.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -207,7 +207,7 @@ newBirthDescriptor{
 		["wild-gift/oozing-blades"]={false, 0.3},
 		["wild-gift/corrosive-blades"]={false, 0.3},
 		["wild-gift/moss"]={true, 0.3},
---		["wild-gift/malleable-body"]={true, 0.3},
+		["wild-gift/eyals-fury"]={false, 0.3},
 		["wild-gift/slime"]={true, 0.3},
 	},
 	talents = {
diff --git a/game/modules/tome/data/birth/descriptors.lua b/game/modules/tome/data/birth/descriptors.lua
index f6bcb27a36d72ba63b01d97bb2019a1cc1dde3b6..23e92c392b31a84f44f4080cf9214e9597382694 100644
--- a/game/modules/tome/data/birth/descriptors.lua
+++ b/game/modules/tome/data/birth/descriptors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -214,6 +214,7 @@ newBirthDescriptor{
 		"Absolutely unfair game setting.  You are really mentally ill to play this mode!",
 		"All zone levels increased by 120% + 5",
 		"All creature talent levels increased by 100%",
+		"Bosses will have randomly selected talents",
 		"Player rank is normal instead of elite",
 		"Player can earn Insane version of achievements if also playing in Roguelike or Adventure permadeath mode.",
 	},
@@ -239,6 +240,7 @@ newBirthDescriptor{
 		"All zone levels increased by 150% + 10",
 		"All creature talent levels increased by 170%",
 		"Rare creatures are far more frequent and random bosses start to appear",
+		"Bosses will have randomly selected talents",
 		"Player is being hunted! Randomly all foes in a radius will get a feeling of where she/he is",
 		"Player rank is normal instead of elite",
 		"Player can earn Madness version of achievements if also playing in Roguelike or Adventure permadeath mode.",
diff --git a/game/modules/tome/data/birth/races/construct.lua b/game/modules/tome/data/birth/races/construct.lua
index 1f6018ef80f39107a27b4b131cd5fb5546cbffa2..5ac96e753630418c8b423d9426133a341b1ec38e 100644
--- a/game/modules/tome/data/birth/races/construct.lua
+++ b/game/modules/tome/data/birth/races/construct.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/races/dwarf.lua b/game/modules/tome/data/birth/races/dwarf.lua
index bca05104f5514013fcba90271f0c4a38b7a46d46..c0966273f9a75fc83970e739ddcc1e3cf0e56b66 100644
--- a/game/modules/tome/data/birth/races/dwarf.lua
+++ b/game/modules/tome/data/birth/races/dwarf.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/races/elf.lua b/game/modules/tome/data/birth/races/elf.lua
index 10c92f72acebe0eb2c0b9e3a48a44ef6213d74e4..aedebe9deb16c788ef01fb84f50eb12e84408d1c 100644
--- a/game/modules/tome/data/birth/races/elf.lua
+++ b/game/modules/tome/data/birth/races/elf.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/races/halfling.lua b/game/modules/tome/data/birth/races/halfling.lua
index ab15de7aede878e48e70055f7c90f9ec0eec60ec..402460c40f3148aa90c4fa54815879e9de1f5f13 100644
--- a/game/modules/tome/data/birth/races/halfling.lua
+++ b/game/modules/tome/data/birth/races/halfling.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/races/human.lua b/game/modules/tome/data/birth/races/human.lua
index 2284a09c2e92c8bdacef978c7523f8078e3d50a3..5620526762308fe4e28bbab9d34aa6e74112b7e1 100644
--- a/game/modules/tome/data/birth/races/human.lua
+++ b/game/modules/tome/data/birth/races/human.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/races/tutorial.lua b/game/modules/tome/data/birth/races/tutorial.lua
index 2fe3d0ee8d50599b02e144546e21aecc41e9d2fd..848e5ecdeab97420108fb546d8d728f863d2eaa7 100644
--- a/game/modules/tome/data/birth/races/tutorial.lua
+++ b/game/modules/tome/data/birth/races/tutorial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/races/undead.lua b/game/modules/tome/data/birth/races/undead.lua
index ae8a3349dde00b9e3004c66149d92ea0de747e01..ef8193cf68f8780a9162fc9a6cb4a22f508057a6 100644
--- a/game/modules/tome/data/birth/races/undead.lua
+++ b/game/modules/tome/data/birth/races/undead.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -62,9 +62,14 @@ newBirthDescriptor{
 		undead = 1,
 		forbid_nature = 1,
 		inscription_restrictions = { ["inscriptions/runes"] = true, ["inscriptions/taints"] = true, },
-		resolvers.inscription("RUNE:_SHIELDING", {cooldown=14, dur=5, power=100}),
-		resolvers.inscription("RUNE:_PHASE_DOOR", {cooldown=7, range=10, dur=5, power=15}),
+		resolvers.inscription("RUNE:_SHIELDING", {cooldown=14, dur=5, power=130}),
+		--resolvers.inscription("RUNE:_PHASE_DOOR", {cooldown=7, range=10, dur=5, power=15}),
+		resolvers.inscription("RUNE:_HEAT_BEAM", {cooldown=18, range=8, power=40}), -- yeek and undead starts are unfun to the point of absurdity
+		resolvers.inventory({id=true, transmo=false,
+			{type="scroll", subtype="rune", name="phase door rune", ego_chance=-1000, ego_chance=-1000}}), -- keep this in inventory incase people actually want it, can't add it baseline because some classes start with 3 inscribed
 	},
+
+	
 	random_escort_possibilities = { {"tier1.1", 1, 2}, {"tier1.2", 1, 2}, {"daikara", 1, 2}, {"old-forest", 1, 4}, {"dreadfell", 1, 8}, {"reknor", 1, 2}, },
 }
 
diff --git a/game/modules/tome/data/birth/races/yeek.lua b/game/modules/tome/data/birth/races/yeek.lua
index 16d4e4b20a1c694d3b7b9344906925f2798e692f..69072b2a140849281435c667d7f16abd1a94f8f4 100644
--- a/game/modules/tome/data/birth/races/yeek.lua
+++ b/game/modules/tome/data/birth/races/yeek.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/sexes.lua b/game/modules/tome/data/birth/sexes.lua
index 65c92da7694eabd0156ea538167f7eccba546054..88f669246e6ce91123b4cb05c5c7a521b945ba6b 100644
--- a/game/modules/tome/data/birth/sexes.lua
+++ b/game/modules/tome/data/birth/sexes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/birth/worlds.lua b/game/modules/tome/data/birth/worlds.lua
index dba6bdb1449f2eb656d707abee53a9689a808a89..1d94fa85473ad4ebd3cd4b4fb5a0158ba18d7151 100644
--- a/game/modules/tome/data/birth/worlds.lua
+++ b/game/modules/tome/data/birth/worlds.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/calendar_allied.lua b/game/modules/tome/data/calendar_allied.lua
index ff03b3c1f4b3e1fe84dc4643b0697899b75239f0..ab2d1a842686f7e9aef8eca4521997316ddf8d49 100644
--- a/game/modules/tome/data/calendar_allied.lua
+++ b/game/modules/tome/data/calendar_allied.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/calendar_dwarf.lua b/game/modules/tome/data/calendar_dwarf.lua
index 90da5336e6cb21ccdc93458a25cfea66c15af7bb..54c1232af35649236cf670e6ab6bdec8d4011989 100644
--- a/game/modules/tome/data/calendar_dwarf.lua
+++ b/game/modules/tome/data/calendar_dwarf.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/alchemist-derth.lua b/game/modules/tome/data/chats/alchemist-derth.lua
index 6e1450802e329f6f5f65a0c5c7e8a9d26abd661e..19e3b226cd08e8fc2c634fe1373c99de3cbda3bb 100644
--- a/game/modules/tome/data/chats/alchemist-derth.lua
+++ b/game/modules/tome/data/chats/alchemist-derth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/alchemist-elvala.lua b/game/modules/tome/data/chats/alchemist-elvala.lua
index eb97a68c0d5dd9e6232824bde4bd889ca0bc6088..406fb446a97e427c482e404c9e048cfdee1e6c65 100644
--- a/game/modules/tome/data/chats/alchemist-elvala.lua
+++ b/game/modules/tome/data/chats/alchemist-elvala.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/alchemist-golem.lua b/game/modules/tome/data/chats/alchemist-golem.lua
index 1d13cbb779aaffe634a0708904197b8bfdbf79a8..77162b199469605a7d97f16ff163d2ada819986c 100644
--- a/game/modules/tome/data/chats/alchemist-golem.lua
+++ b/game/modules/tome/data/chats/alchemist-golem.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/alchemist-hermit.lua b/game/modules/tome/data/chats/alchemist-hermit.lua
index 0f8cf56539d333735aeb6a8fccf78cfdc994c41c..326be7bcda8f84d130083d53a42a82a0f882ed4a 100644
--- a/game/modules/tome/data/chats/alchemist-hermit.lua
+++ b/game/modules/tome/data/chats/alchemist-hermit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/alchemist-last-hope.lua b/game/modules/tome/data/chats/alchemist-last-hope.lua
index 92122934f2fd8e982e8e710f0198b8d7c42fc058..b89dbc1db65ccfa06b928bc7f49f37bb6260fc0e 100644
--- a/game/modules/tome/data/chats/alchemist-last-hope.lua
+++ b/game/modules/tome/data/chats/alchemist-last-hope.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/angolwen-leader.lua b/game/modules/tome/data/chats/angolwen-leader.lua
index f4b7bd515255e3261b3192b210abcf315aeb104e..a21824e25e804f94ad3a314b79ad43069bb7ebd7 100644
--- a/game/modules/tome/data/chats/angolwen-leader.lua
+++ b/game/modules/tome/data/chats/angolwen-leader.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/angolwen-staves-store.lua b/game/modules/tome/data/chats/angolwen-staves-store.lua
index c2501cf52c71efb61696764997a621cf156d6bf9..dbe5c46ade7a140e67c8159069bb686f7816de93 100644
--- a/game/modules/tome/data/chats/angolwen-staves-store.lua
+++ b/game/modules/tome/data/chats/angolwen-staves-store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/antimagic-end.lua b/game/modules/tome/data/chats/antimagic-end.lua
index 821835e87ca23f44ec9b4a4707b0a79f6e746af8..d1c35acbf6797341bd0d7e67c3c6bade5b578f93 100644
--- a/game/modules/tome/data/chats/antimagic-end.lua
+++ b/game/modules/tome/data/chats/antimagic-end.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ardhungol-end.lua b/game/modules/tome/data/chats/ardhungol-end.lua
index 46d6e93e4a0d0e51c0bfaf671d6d200841a792c5..7dd5e617282e2dff6ccd2aa0cba108228276b6cb 100644
--- a/game/modules/tome/data/chats/ardhungol-end.lua
+++ b/game/modules/tome/data/chats/ardhungol-end.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ardhungol-start.lua b/game/modules/tome/data/chats/ardhungol-start.lua
index 6152a4ae3f33f9fcce92714d542011b7af6ea6a1..ef48e44b291e258e5fc27646c3759c2671cef831 100644
--- a/game/modules/tome/data/chats/ardhungol-start.lua
+++ b/game/modules/tome/data/chats/ardhungol-start.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/arena-start.lua b/game/modules/tome/data/chats/arena-start.lua
index 215d829721aa3bfd474b50e47d102743cd7732a4..e54701e0caaf0e358ded17065e31505d5a467910 100644
--- a/game/modules/tome/data/chats/arena-start.lua
+++ b/game/modules/tome/data/chats/arena-start.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/arena-unlock.lua b/game/modules/tome/data/chats/arena-unlock.lua
index 32ade87ee249fdc8b6d3d186fb6b8353d126b05b..4a5dc35b06e817bad725d62b7c5c7be40d434e1e 100644
--- a/game/modules/tome/data/chats/arena-unlock.lua
+++ b/game/modules/tome/data/chats/arena-unlock.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/arena.lua b/game/modules/tome/data/chats/arena.lua
index 40e64d28e973bed7a4d9f5eca3485d6593f44b95..b255caf0eb58dcb021b82c4995aa8eeead25fdc3 100644
--- a/game/modules/tome/data/chats/arena.lua
+++ b/game/modules/tome/data/chats/arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/assassin-lord-thieves.lua b/game/modules/tome/data/chats/assassin-lord-thieves.lua
index ffd86de90b70c7864be3a7fcc28d05afc3e85a6a..84277dbb4769158f167f51e6ff62c4c2eb5f68d1 100644
--- a/game/modules/tome/data/chats/assassin-lord-thieves.lua
+++ b/game/modules/tome/data/chats/assassin-lord-thieves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/assassin-lord.lua b/game/modules/tome/data/chats/assassin-lord.lua
index 48b5414bd1de3da6757fa9e0c82e84c307cdc774..e85b50579addf73e2b3e1a8c4bc77e7d032a94f2 100644
--- a/game/modules/tome/data/chats/assassin-lord.lua
+++ b/game/modules/tome/data/chats/assassin-lord.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/chronomancy-see-threads.lua b/game/modules/tome/data/chats/chronomancy-see-threads.lua
index 558d774ba08517027cdf2daa0d7232cb6413bcb7..be1724f5067a225a18a9a4199c54622ffb99cd56 100644
--- a/game/modules/tome/data/chats/chronomancy-see-threads.lua
+++ b/game/modules/tome/data/chats/chronomancy-see-threads.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/command-staff.lua b/game/modules/tome/data/chats/command-staff.lua
index 60d9a76d8000612e9d9d11a63c5dd724ba3dd805..ca83ce15520868703af7ecb215dec04520899d26 100644
--- a/game/modules/tome/data/chats/command-staff.lua
+++ b/game/modules/tome/data/chats/command-staff.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/corruptor-quest.lua b/game/modules/tome/data/chats/corruptor-quest.lua
index b81079ace63209dc1660ef94191c82f8178cf513..bd25fe2ff3a003da19141d5dd1b2ce1be7d24182 100644
--- a/game/modules/tome/data/chats/corruptor-quest.lua
+++ b/game/modules/tome/data/chats/corruptor-quest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/derth-attack-over.lua b/game/modules/tome/data/chats/derth-attack-over.lua
index 568e06f30dce21a62048ccd6128f5130180265ba..69ce997cb22a9f66eec7997385902a6b1f8070c0 100644
--- a/game/modules/tome/data/chats/derth-attack-over.lua
+++ b/game/modules/tome/data/chats/derth-attack-over.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/dreadfell-ambush.lua b/game/modules/tome/data/chats/dreadfell-ambush.lua
index 85fb366e13b2c99c2b60e1231761bac250440fda..caeef7a9c5f4175df9f1bc986c3248d553faa05c 100644
--- a/game/modules/tome/data/chats/dreadfell-ambush.lua
+++ b/game/modules/tome/data/chats/dreadfell-ambush.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/east-portal-end.lua b/game/modules/tome/data/chats/east-portal-end.lua
index b33f491cc0913ae02d1ae97be762d63a51109350..9b4a751e17d6e81ca79666d59332981ced1d3331 100644
--- a/game/modules/tome/data/chats/east-portal-end.lua
+++ b/game/modules/tome/data/chats/east-portal-end.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/eidolon-plane.lua b/game/modules/tome/data/chats/eidolon-plane.lua
index 6b50623b177667d6f63a5f66d6229c01e2785251..09c9434cdd02b694a8c1ff7f614f015abd02634f 100644
--- a/game/modules/tome/data/chats/eidolon-plane.lua
+++ b/game/modules/tome/data/chats/eidolon-plane.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,15 +27,15 @@ As for your probable many questions, they will stay unanswered. I may help, but
 	answers = {
 		{"Thank you. I will rest for a while."},
 		{"Thank you. I am ready to go back!", 
-			cond=function() return game.level.source_level end,
+			cond=function() return game.level.source_level and not game.level.source_level.no_return_from_eidolon end,
 			action=function() game.level.data.eidolon_exit(false) end
 		},
 		{"Thank you, but I fear I will not survive anyway, can you send me back somewhere else please?",
-			cond=function() return game.level.source_level and (not game.level.source_level.data or not game.level.source_level.data.no_worldport) end,
+			cond=function() return game.level.source_level and not game.level.source_level.no_return_from_eidolon and (not game.level.source_level.data or not game.level.source_level.data.no_worldport) end,
 			action=function() game.level.data.eidolon_exit(true) end
 		},
 		{"Thank you, I am ready to go back!",
-			cond=function() return not game.level.source_level end,
+			cond=function() return not game.level.source_level or game.level.source_level.no_return_from_eidolon end,
 			jump="jump_error",
 		},
 		{"Thank you, but I am weary of this life, I wish no more, please let me go.", jump="die"},
@@ -43,7 +43,7 @@ As for your probable many questions, they will stay unanswered. I may help, but
 }
 
 newChat{ id="jump_error",
-	text = [[It seems the threads of time have been disrupted...
+	text = [[It seems the threads of time and space have been disrupted...
 I will try to send you to safety.]],
 	answers = {
 		{"Thanks.", action=function(npc, player) game:changeLevel(1, "wilderness") end},
diff --git a/game/modules/tome/data/chats/elisa-orb-scrying.lua b/game/modules/tome/data/chats/elisa-orb-scrying.lua
index 950964e3a41a5d77b3bbfeefa16cca7c715b872a..2e840fbbb1a254b382e81d3e23001531994f2908 100644
--- a/game/modules/tome/data/chats/elisa-orb-scrying.lua
+++ b/game/modules/tome/data/chats/elisa-orb-scrying.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/elisa-shop.lua b/game/modules/tome/data/chats/elisa-shop.lua
index 5d3f12cdd4e11264735d029ca90f8e15eea97441..a96b24511c1473394eea8330669b470ff9426ae6 100644
--- a/game/modules/tome/data/chats/elisa-shop.lua
+++ b/game/modules/tome/data/chats/elisa-shop.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/escort-quest-start.lua b/game/modules/tome/data/chats/escort-quest-start.lua
index 8172a46deb02136f79e4ff448f760c2514665dd6..7cf7a89c5957c7231dca94d34b5dadf106f04b02 100644
--- a/game/modules/tome/data/chats/escort-quest-start.lua
+++ b/game/modules/tome/data/chats/escort-quest-start.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/escort-quest.lua b/game/modules/tome/data/chats/escort-quest.lua
index 2ff1ca35bed9cb67f7501be6b1e5047948108f31..24aa910b702bb38fe10e4f99f46468f44e467de1 100644
--- a/game/modules/tome/data/chats/escort-quest.lua
+++ b/game/modules/tome/data/chats/escort-quest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/fallen-aeryn.lua b/game/modules/tome/data/chats/fallen-aeryn.lua
index 5272fb41f9539fa314df0ee73576ca6d6c3d6c1c..791f077f5507559a320f4793090a75bfd442652c 100644
--- a/game/modules/tome/data/chats/fallen-aeryn.lua
+++ b/game/modules/tome/data/chats/fallen-aeryn.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/gates-of-morning-main.lua b/game/modules/tome/data/chats/gates-of-morning-main.lua
index f572f173b04487a80512f238111c0a70595c1f0d..7fbde248e6fd3d13ea356d3cfec666664b15b492 100644
--- a/game/modules/tome/data/chats/gates-of-morning-main.lua
+++ b/game/modules/tome/data/chats/gates-of-morning-main.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -26,6 +26,7 @@ newChat{ id="welcome",
 		{"I need help in my hunt for clues about the staff.", jump="clues", cond=function(npc, player) return game.state:isAdvanced() and not player:hasQuest("orc-pride") end},
 		{"I have destroyed the leaders of all the Orc Prides.", jump="prides-dead", cond=function(npc, player) return player:isQuestStatus("orc-pride", engine.Quest.COMPLETED) end},
 		{"I am back from the Charred Scar, where the orcs took the staff.", jump="charred-scar", cond=function(npc, player) return player:hasQuest("charred-scar") and player:hasQuest("charred-scar"):isCompleted() end},
+		{"A dying paladin gave me this map; something about orc breeding pits. [tell her the story]", jump="orc-breeding-pits", cond=function(npc, player) return player:hasQuest("orc-breeding-pits") and player:isQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED, "wuss-out") and not player:isQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED, "wuss-out-done") end},
 		{"Sorry, I have to go!"},
 	}
 }
@@ -144,5 +145,25 @@ I am afraid with the power they gained today they will be even harder to stop, b
 	},
 }
 
+newChat{ id="orc-breeding-pits",
+	text = [[Ah! This is wonderful! Finally a ray of hope amidst the darkness. I will assign my best troops to this. Thank you, @playername@ - take this as a token of gratitude.]],
+	answers = {
+		{"Good luck.", action=function(npc, player)
+			player:setQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED, "wuss-out-done")
+			player:setQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED)
+
+			for i = 1, 5 do
+				local ro = game.zone:makeEntity(game.level, "object", {ignore_material_restriction=true, type="gem", special=function(o) return o.material_level and o.material_level >= 5 end}, nil, true)
+				if ro then
+					ro:identify(true)
+					game.logPlayer(player, "Aeryn gives you: %s", ro:getName{do_color=true})
+					game.zone:addEntity(game.level, ro, "object")
+					player:addObject(player:getInven("INVEN"), ro)
+				end
+			end
+		end}
+	},
+}
+
 
 return "welcome"
diff --git a/game/modules/tome/data/chats/gates-of-morning-welcome.lua b/game/modules/tome/data/chats/gates-of-morning-welcome.lua
index 3eedcf089e51cc0c32265e476a8b442e4970f47c..e0ee92c1860e0dc63c015d16fd4cd9d44e42508e 100644
--- a/game/modules/tome/data/chats/gates-of-morning-welcome.lua
+++ b/game/modules/tome/data/chats/gates-of-morning-welcome.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/golbug-explains.lua b/game/modules/tome/data/chats/golbug-explains.lua
index 59b407ba0bf61bca1f3186c69966cb316fa39164..464c78c121550e857f5fb307fbf88ed259c7c9ff 100644
--- a/game/modules/tome/data/chats/golbug-explains.lua
+++ b/game/modules/tome/data/chats/golbug-explains.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/jewelry-store.lua b/game/modules/tome/data/chats/jewelry-store.lua
index 624f9da159dfc87af8ded6bb4d6e8828adbf7db9..f00fbb9ff818fa17e9c747309bdc029b81ceb773 100644
--- a/game/modules/tome/data/chats/jewelry-store.lua
+++ b/game/modules/tome/data/chats/jewelry-store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/keepsake-berethh-encounter.lua b/game/modules/tome/data/chats/keepsake-berethh-encounter.lua
index 31a5dadd21501f6b9e21487eae5163cba1fdc470..3903611ccd33efc8ef08102876c2862b8aee0e84 100644
--- a/game/modules/tome/data/chats/keepsake-berethh-encounter.lua
+++ b/game/modules/tome/data/chats/keepsake-berethh-encounter.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/keepsake-caravan-destroyed.lua b/game/modules/tome/data/chats/keepsake-caravan-destroyed.lua
index 467391b3f19de267ee39b8b454367bfa88839fde..5e94a3be4956a2de3968c18facc1f9c4e2594764 100644
--- a/game/modules/tome/data/chats/keepsake-caravan-destroyed.lua
+++ b/game/modules/tome/data/chats/keepsake-caravan-destroyed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/keepsake-kyless-death.lua b/game/modules/tome/data/chats/keepsake-kyless-death.lua
index 035b070df59c4d218048cc0d9065dddd7c39bf95..c771b6b984026c5737bbeb46051f482a06c289ac 100644
--- a/game/modules/tome/data/chats/keepsake-kyless-death.lua
+++ b/game/modules/tome/data/chats/keepsake-kyless-death.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/last-hope-elder.lua b/game/modules/tome/data/chats/last-hope-elder.lua
index 12ecdd14ccd22e016492320355f4bb8bfb24f9fa..adebc06d0b3a111f73faf934417a5db57a27aecb 100644
--- a/game/modules/tome/data/chats/last-hope-elder.lua
+++ b/game/modules/tome/data/chats/last-hope-elder.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/last-hope-lost-merchant.lua b/game/modules/tome/data/chats/last-hope-lost-merchant.lua
index 5a71ba439b41f8f1d7404a011efdd7e461c7f28e..3e21f8ba9b35bfe6470dea9af92fba4dfa5b3db4 100644
--- a/game/modules/tome/data/chats/last-hope-lost-merchant.lua
+++ b/game/modules/tome/data/chats/last-hope-lost-merchant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/last-hope-melinda-father.lua b/game/modules/tome/data/chats/last-hope-melinda-father.lua
index ab12f3f4feaf28336a84e960a1910c1053a36651..7f56945910f08a1124beb152b966e2fbc685a52a 100644
--- a/game/modules/tome/data/chats/last-hope-melinda-father.lua
+++ b/game/modules/tome/data/chats/last-hope-melinda-father.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -20,7 +20,17 @@ local q = game.player:hasQuest("kryl-feijan-escape")
 local qs = game.player:hasQuest("shertul-fortress")
 local ql = game.player:hasQuest("love-melinda")
 
-if not q or not q:isStatus(q.DONE) then
+if ql and ql:isStatus(q.COMPLETED, "death-beach") then
+
+newChat{ id="welcome",
+	text = [[#LIGHT_GREEN#*A man talks to you from inside, the door half open. His voice is sad.*#WHITE#
+Sorry, the store is closed.]],
+	answers = {
+		{"[leave]"},
+	}
+}
+
+elseif not q or not q:isStatus(q.DONE) then
 
 newChat{ id="welcome",
 	text = [[#LIGHT_GREEN#*A man talks to you from inside, the door half open. His voice is sad.*#WHITE#
diff --git a/game/modules/tome/data/chats/last-hope-weapon-store.lua b/game/modules/tome/data/chats/last-hope-weapon-store.lua
index 8c5c52a2582746ef6abe5e9b1e3d9854e42a9d32..a2fddc2f7ec7dd702ee8a6d13ae8f0b1bdb8f9e9 100644
--- a/game/modules/tome/data/chats/last-hope-weapon-store.lua
+++ b/game/modules/tome/data/chats/last-hope-weapon-store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/limmir-valley-moon.lua b/game/modules/tome/data/chats/limmir-valley-moon.lua
index ef8a985d464526716db6067e4b7f265cdccb2014..5fb6bda70d1911b62eff63515b05c50a42d92739 100644
--- a/game/modules/tome/data/chats/limmir-valley-moon.lua
+++ b/game/modules/tome/data/chats/limmir-valley-moon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/lost-merchant.lua b/game/modules/tome/data/chats/lost-merchant.lua
index e0275266c8291c25f367a6a1725e9a0b3183cdf3..71ee86f304e3fbd7def495b4d41311c4ffc702f9 100644
--- a/game/modules/tome/data/chats/lost-merchant.lua
+++ b/game/modules/tome/data/chats/lost-merchant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/lumberjack-quest-done.lua b/game/modules/tome/data/chats/lumberjack-quest-done.lua
index 920b5ba061a7d724da2dc74bb3048a4c06e97fff..7336b19d3a16efcf31cd77cbee1f54e01bffd4fb 100644
--- a/game/modules/tome/data/chats/lumberjack-quest-done.lua
+++ b/game/modules/tome/data/chats/lumberjack-quest-done.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/lumberjack-quest.lua b/game/modules/tome/data/chats/lumberjack-quest.lua
index 946e70cf3842d7e7c08aad95ea33d4e7251deda0..4b332fe5825dffad5c00f20fcabc417e263cf38a 100644
--- a/game/modules/tome/data/chats/lumberjack-quest.lua
+++ b/game/modules/tome/data/chats/lumberjack-quest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/mage-apprentice-quest.lua b/game/modules/tome/data/chats/mage-apprentice-quest.lua
index d6631b40a31f685704e6858dac18234b3abf0751..fd2a9e9115d008733df87af55f6975ff63d60f5e 100644
--- a/game/modules/tome/data/chats/mage-apprentice-quest.lua
+++ b/game/modules/tome/data/chats/mage-apprentice-quest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/magic-store.lua b/game/modules/tome/data/chats/magic-store.lua
index 16e076f5814c6f41970c9bed94a0f50d850d45f5..bc7375da756a0619df307b11068afc56f6a3cd33 100644
--- a/game/modules/tome/data/chats/magic-store.lua
+++ b/game/modules/tome/data/chats/magic-store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/melinda-beach-end.lua b/game/modules/tome/data/chats/melinda-beach-end.lua
index 045885e197c933c7493c67fad1be71ff619a5546..87b532c25ad546abdb8110fc42f20913a6b2d9ef 100644
--- a/game/modules/tome/data/chats/melinda-beach-end.lua
+++ b/game/modules/tome/data/chats/melinda-beach-end.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/melinda-beach.lua b/game/modules/tome/data/chats/melinda-beach.lua
index 3d0dd26d8a89c876f6d2f94c4c15d3990be82ad7..a66f8812b32f5688fa50fc718af361119f1eaada 100644
--- a/game/modules/tome/data/chats/melinda-beach.lua
+++ b/game/modules/tome/data/chats/melinda-beach.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/melinda-fortress.lua b/game/modules/tome/data/chats/melinda-fortress.lua
index 6415f632e044f126906fbe5f8a5f5beb90b4aa30..3a9c45d742c347cd54c677a2d7f132687fddff2e 100644
--- a/game/modules/tome/data/chats/melinda-fortress.lua
+++ b/game/modules/tome/data/chats/melinda-fortress.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/message-last-hope.lua b/game/modules/tome/data/chats/message-last-hope.lua
index d65554170436900b5425481005e5627778bc2126..8bb0fbf85c9a73771d5f7f91fa4204c3ffd0878d 100644
--- a/game/modules/tome/data/chats/message-last-hope.lua
+++ b/game/modules/tome/data/chats/message-last-hope.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/myssil.lua b/game/modules/tome/data/chats/myssil.lua
index 5e1d796109ccb9fef3bc331ae22d72ae2308014a..3e4692b66aa270f40df4aaefaa73fee99c25fba8 100644
--- a/game/modules/tome/data/chats/myssil.lua
+++ b/game/modules/tome/data/chats/myssil.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/norgan-saved.lua b/game/modules/tome/data/chats/norgan-saved.lua
index df23cc1d56a67dc50026949fad7f31b0c3bccc24..33d3b1ee8e867e66faa9a25784bfc0646125c982 100644
--- a/game/modules/tome/data/chats/norgan-saved.lua
+++ b/game/modules/tome/data/chats/norgan-saved.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/orc-breeding-pits.lua b/game/modules/tome/data/chats/orc-breeding-pits.lua
new file mode 100644
index 0000000000000000000000000000000000000000..17f6a47dda890c428849d14cc2c31ae219ffe949
--- /dev/null
+++ b/game/modules/tome/data/chats/orc-breeding-pits.lua
@@ -0,0 +1,50 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+newChat{ id="welcome",
+	text = [[#LIGHT_GREEN#*A ray of light illuminates the gleam of steal amidst the grass. Investigating, you find a lone sun paladin lying stricken on the ground. Her wounds are minor, but her pallid features bely a poison that is taking its final toll. She whispers to you.*#WHITE#
+Help, Help me.
+]],
+	answers = {
+		{"What should I do?", jump="next1"},
+	}
+}
+
+newChat{ id="next1",
+	text = [[I found it... the abomination Aeryn sent me to seek out. The breeding pits of the orcs... It is more vile than you can imagine... They have it hidden away from their encampments, out of sight of all their people. Their mothers, their young, all there - all vulnerable!
+#LIGHT_GREEN#*She pulls out a sketched map, and with some effort puts it in your palm.*#WHITE#
+
+This could be the final solution, the end to the war... forever. We must strike soon, before reinforcements...
+
+#LIGHT_GREEN#*She looks hard at you, exerting all her effort into a final pleading stare.*#WHITE#]],
+	answers = {
+		{"I cannot do this myself... I will tell Aeryn about it, it is in her hands.", action=function(npc, player)
+			player:grantQuest("orc-breeding-pits")
+			player:setQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED, "wuss-out")
+		end},
+		{"I will go myself and ensure this is thoroughly dealt with.", action=function(npc, player)
+			player:grantQuest("orc-breeding-pits")
+			local q = player:hasQuest("orc-breeding-pits")
+			q:reveal()
+		end},
+		{"You want me to kill mothers and children? This is barbaric, I'll have nothing to do with it!"},
+	}
+}
+
+return "welcome"
diff --git a/game/modules/tome/data/chats/paradoxology.lua b/game/modules/tome/data/chats/paradoxology.lua
index 3e664d658e1f0587620d76006e4c808212cf7880..723ad0563592d529fdfe4b4d54fcaf43df883c3c 100644
--- a/game/modules/tome/data/chats/paradoxology.lua
+++ b/game/modules/tome/data/chats/paradoxology.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/player-inscription.lua b/game/modules/tome/data/chats/player-inscription.lua
index 644a15b3460098737051f348ba6e92cbe9712bb4..eb097d028fc75a99e99d490ccefee325fcbc8502 100644
--- a/game/modules/tome/data/chats/player-inscription.lua
+++ b/game/modules/tome/data/chats/player-inscription.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/point-zero-zemekkys.lua b/game/modules/tome/data/chats/point-zero-zemekkys.lua
index 24a414f6d788ea48f0721078def8bbb5fc45ce04..55da389124560541fbb56d8ce97d51952c015f19 100644
--- a/game/modules/tome/data/chats/point-zero-zemekkys.lua
+++ b/game/modules/tome/data/chats/point-zero-zemekkys.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/pre-charred-scar-eruan.lua b/game/modules/tome/data/chats/pre-charred-scar-eruan.lua
index 91b0dd06f242e2dba2965f0f5ba1c1e9836845c5..0167666d907b19c8648c22134fcecc692de10f22 100644
--- a/game/modules/tome/data/chats/pre-charred-scar-eruan.lua
+++ b/game/modules/tome/data/chats/pre-charred-scar-eruan.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/pre-charred-scar.lua b/game/modules/tome/data/chats/pre-charred-scar.lua
index eff71d9a279fde77c3fbd7cd6eb9ee51fb0664c8..cf593d7c542e81de7cf749669fa85edf4feb05cb 100644
--- a/game/modules/tome/data/chats/pre-charred-scar.lua
+++ b/game/modules/tome/data/chats/pre-charred-scar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ring-of-blood-master.lua b/game/modules/tome/data/chats/ring-of-blood-master.lua
index 48e2537b7ef0dd95b95a4a23a127611ff7d33213..a6497e79e0b4f8dfcf19a93ec2a4d02aa85b6ea6 100644
--- a/game/modules/tome/data/chats/ring-of-blood-master.lua
+++ b/game/modules/tome/data/chats/ring-of-blood-master.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ring-of-blood-orb.lua b/game/modules/tome/data/chats/ring-of-blood-orb.lua
index 7baa275caa00196d872977329e655d2a090b5570..cdf76302c6aa6e8e23b8a4da181d1ad99816fa91 100644
--- a/game/modules/tome/data/chats/ring-of-blood-orb.lua
+++ b/game/modules/tome/data/chats/ring-of-blood-orb.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ring-of-blood-win.lua b/game/modules/tome/data/chats/ring-of-blood-win.lua
index 7300e8176b4fda66d052c1e45625579f756803fa..21f12edec47bb375dfad422288949efe603cb424 100644
--- a/game/modules/tome/data/chats/ring-of-blood-win.lua
+++ b/game/modules/tome/data/chats/ring-of-blood-win.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/sage-kitty.lua b/game/modules/tome/data/chats/sage-kitty.lua
index 5625cd7a5ae659b89036705e88ba5816c21e535e..a27a4bbd768339b095f873c42262ce705adc3cf0 100644
--- a/game/modules/tome/data/chats/sage-kitty.lua
+++ b/game/modules/tome/data/chats/sage-kitty.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/shertul-fortress-butler.lua b/game/modules/tome/data/chats/shertul-fortress-butler.lua
index 5557a5aefd3f03b54f3e8886e5fff2a184698d6f..4f02225a8f87c96fee85020387a482f64d4d7abb 100644
--- a/game/modules/tome/data/chats/shertul-fortress-butler.lua
+++ b/game/modules/tome/data/chats/shertul-fortress-butler.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/shertul-fortress-caldizar.lua b/game/modules/tome/data/chats/shertul-fortress-caldizar.lua
index 6f8c9b10e4164defb083911559f34cad49ebd5e5..49269af6c97fcae5daf49732bcbdcc2102bc69b8 100644
--- a/game/modules/tome/data/chats/shertul-fortress-caldizar.lua
+++ b/game/modules/tome/data/chats/shertul-fortress-caldizar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/shertul-fortress-command-orb.lua b/game/modules/tome/data/chats/shertul-fortress-command-orb.lua
index f12f9d152683d292dfa632f376234e1c584024cc..49391ab8ff4d05402f49699db775eacb2bdbe6c3 100644
--- a/game/modules/tome/data/chats/shertul-fortress-command-orb.lua
+++ b/game/modules/tome/data/chats/shertul-fortress-command-orb.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/shertul-fortress-gladium-orb.lua b/game/modules/tome/data/chats/shertul-fortress-gladium-orb.lua
index 07f685a35a7bc3af880a26c6f9f279d00cfde9c6..c446d535baad5827568bc6319c5dd4f1bad9f1a0 100644
--- a/game/modules/tome/data/chats/shertul-fortress-gladium-orb.lua
+++ b/game/modules/tome/data/chats/shertul-fortress-gladium-orb.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/shertul-fortress-training-orb.lua b/game/modules/tome/data/chats/shertul-fortress-training-orb.lua
index 9626b56fec722c8fa2a7b59482b631c70f9474e4..9504ccbfea5b02c7bede7986ccda81da9563ff5d 100644
--- a/game/modules/tome/data/chats/shertul-fortress-training-orb.lua
+++ b/game/modules/tome/data/chats/shertul-fortress-training-orb.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/slasul.lua b/game/modules/tome/data/chats/slasul.lua
index a02962f70fd59bac1057b803f3af3ee4dac6237d..422acc895f04b4a8a75307a6d4dc32f6b2694b3a 100644
--- a/game/modules/tome/data/chats/slasul.lua
+++ b/game/modules/tome/data/chats/slasul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/sorcerer-end.lua b/game/modules/tome/data/chats/sorcerer-end.lua
index f7b9632b5ab58d887f5e24e811975e4a23039842..8841cb209635d23c82dc74dd35efc3a409b07e69 100644
--- a/game/modules/tome/data/chats/sorcerer-end.lua
+++ b/game/modules/tome/data/chats/sorcerer-end.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/sorcerer-fight.lua b/game/modules/tome/data/chats/sorcerer-fight.lua
index d1806d2ab4d0710e39e0431d00d20ac20a29e73a..aa2487d7bd68176a3fa8c72b72cf9600c0f90b4e 100644
--- a/game/modules/tome/data/chats/sorcerer-fight.lua
+++ b/game/modules/tome/data/chats/sorcerer-fight.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/tannen.lua b/game/modules/tome/data/chats/tannen.lua
index 7a3193a13445e1f72b167a9d75c38a8c0401ae64..efc0ffedbf032e67852c9dd490cd48b7434d50c4 100644
--- a/game/modules/tome/data/chats/tannen.lua
+++ b/game/modules/tome/data/chats/tannen.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/tarelion-start-archmage.lua b/game/modules/tome/data/chats/tarelion-start-archmage.lua
index 86bda65c5cd1dd38cc10750fec5e7542f7675808..e12eee92b912251aacd3a6faeb650152dc04d7c1 100644
--- a/game/modules/tome/data/chats/tarelion-start-archmage.lua
+++ b/game/modules/tome/data/chats/tarelion-start-archmage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/tarelion.lua b/game/modules/tome/data/chats/tarelion.lua
index 91456a698af28a33882a9b6803fe37ef7b453575..ef8d8f1409180e39c70ded592c96f811636ce78b 100644
--- a/game/modules/tome/data/chats/tarelion.lua
+++ b/game/modules/tome/data/chats/tarelion.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/temporal-rift-end.lua b/game/modules/tome/data/chats/temporal-rift-end.lua
index f2289945e22fba9aec7fee70e3ddf54068018385..e73e56a615683e053bdb1b70b99928afafe157e2 100644
--- a/game/modules/tome/data/chats/temporal-rift-end.lua
+++ b/game/modules/tome/data/chats/temporal-rift-end.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/temporal-rift-start.lua b/game/modules/tome/data/chats/temporal-rift-start.lua
index a9064003ace9f95c6fb5c518b8f38535b1193b21..d62df25a3ec7929219b943a0e3acd3a25e3a878e 100644
--- a/game/modules/tome/data/chats/temporal-rift-start.lua
+++ b/game/modules/tome/data/chats/temporal-rift-start.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/the-master-resurrect.lua b/game/modules/tome/data/chats/the-master-resurrect.lua
index 46b75003e1e0c769452a6638f3c60adef57dc058..138e9a786509b63dd47341a66394503a2023d1b9 100644
--- a/game/modules/tome/data/chats/the-master-resurrect.lua
+++ b/game/modules/tome/data/chats/the-master-resurrect.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/tutorial-start.lua b/game/modules/tome/data/chats/tutorial-start.lua
index d0c007b359baf9fbb4503580bce7b09287b54410..f0915584cb7e78c381fadc8cadf048f0535b7a40 100644
--- a/game/modules/tome/data/chats/tutorial-start.lua
+++ b/game/modules/tome/data/chats/tutorial-start.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ukllmswwik.lua b/game/modules/tome/data/chats/ukllmswwik.lua
index fea60621e9d388bc2043f59ca6044c14fb8c95ca..92e38c0113b5213cc77c96360b9916a9d6fabf07 100644
--- a/game/modules/tome/data/chats/ukllmswwik.lua
+++ b/game/modules/tome/data/chats/ukllmswwik.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/undead-start-game.lua b/game/modules/tome/data/chats/undead-start-game.lua
index 1c750ce741907dd046adee5465d0786813accf3d..8ff86b7b15ab044b25ca84445cdfe6a538863f58 100644
--- a/game/modules/tome/data/chats/undead-start-game.lua
+++ b/game/modules/tome/data/chats/undead-start-game.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/undead-start-kill.lua b/game/modules/tome/data/chats/undead-start-kill.lua
index e6b5f7748bb55e2175e7501ef1e4417fdb821d9f..5a8d6a57e9e1d6ac3d8da0e23065e165d273b16f 100644
--- a/game/modules/tome/data/chats/undead-start-kill.lua
+++ b/game/modules/tome/data/chats/undead-start-kill.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/unremarkable-cave-bosses.lua b/game/modules/tome/data/chats/unremarkable-cave-bosses.lua
index edbd52eb7ecb318de13d0a3a356bd14100776787..24723c3b69e791a2a1c953415e3e8adf068fcbf7 100644
--- a/game/modules/tome/data/chats/unremarkable-cave-bosses.lua
+++ b/game/modules/tome/data/chats/unremarkable-cave-bosses.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua b/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua
index 0526e98103147f8a9c992644acec32f85496fee3..93f159d1e7e013d57e604789e4cf513e9d39e4b9 100644
--- a/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua
+++ b/game/modules/tome/data/chats/unremarkable-cave-fillarel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/unremarkable-cave-krogar.lua b/game/modules/tome/data/chats/unremarkable-cave-krogar.lua
index 7aaaf3aa8e609d8d6568c4b3587385096bda38cd..ac148ba3bc5813eed6798fc647c03b0a7c871d7c 100644
--- a/game/modules/tome/data/chats/unremarkable-cave-krogar.lua
+++ b/game/modules/tome/data/chats/unremarkable-cave-krogar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/ward.lua b/game/modules/tome/data/chats/ward.lua
index 5ae34d5c518d640bc6dd92f23e60f1f218f8d052..5d065a84c9d9538933cabca56e8c358b991142f4 100644
--- a/game/modules/tome/data/chats/ward.lua
+++ b/game/modules/tome/data/chats/ward.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/worldly-knowledge.lua b/game/modules/tome/data/chats/worldly-knowledge.lua
index ec2f17c988be0b4bb785b4fb933604d547858c2d..2afb5a93ec5498c0f7d541ecd3a4f3597c0785fd 100644
--- a/game/modules/tome/data/chats/worldly-knowledge.lua
+++ b/game/modules/tome/data/chats/worldly-knowledge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/yeek-wayist.lua b/game/modules/tome/data/chats/yeek-wayist.lua
index b12ebef919771747c0f0ed1dc467bf35c40b6c65..31f432f4b1d7db2bdb134c76b2ef202b38e3c5f7 100644
--- a/game/modules/tome/data/chats/yeek-wayist.lua
+++ b/game/modules/tome/data/chats/yeek-wayist.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/zemekkys-done.lua b/game/modules/tome/data/chats/zemekkys-done.lua
index 151c5256fb13cf3f49737ee4f1300798fd1b50fa..6150d93595cd7d5d8fd0d40ab3a7b3a53b080617 100644
--- a/game/modules/tome/data/chats/zemekkys-done.lua
+++ b/game/modules/tome/data/chats/zemekkys-done.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/zemekkys-start-chronomancers.lua b/game/modules/tome/data/chats/zemekkys-start-chronomancers.lua
index 65f22eb3722d7d98998751d90293b27a3ec0d028..05cb25101be8d9e1ff3f3ce9da92aca447b2849e 100644
--- a/game/modules/tome/data/chats/zemekkys-start-chronomancers.lua
+++ b/game/modules/tome/data/chats/zemekkys-start-chronomancers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/zemekkys.lua b/game/modules/tome/data/chats/zemekkys.lua
index d5c419f677eafdd7f7a76ae69bcd5ef89f457638..0729f868fdcbca7e022da61073506f3760b3a716 100644
--- a/game/modules/tome/data/chats/zemekkys.lua
+++ b/game/modules/tome/data/chats/zemekkys.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/zigur-mindstar-store.lua b/game/modules/tome/data/chats/zigur-mindstar-store.lua
index 5aecd6eb49444d9e75b327555a8ea2169ad35cfe..c3810281d675d7cb5b8ed21116c4a33a0cab744b 100644
--- a/game/modules/tome/data/chats/zigur-mindstar-store.lua
+++ b/game/modules/tome/data/chats/zigur-mindstar-store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/zigur-trainer.lua b/game/modules/tome/data/chats/zigur-trainer.lua
index c5289b1971a21c301e41fa23267b4c5a748a8178..52f73d4009140735ae2dcef409159cb4693d29d9 100644
--- a/game/modules/tome/data/chats/zigur-trainer.lua
+++ b/game/modules/tome/data/chats/zigur-trainer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/chats/zoisla.lua b/game/modules/tome/data/chats/zoisla.lua
index 80bc4e5bef27a7125d75940849056defdeb00b6e..a236d76db1468140d5ccae26b493f49832b861f0 100644
--- a/game/modules/tome/data/chats/zoisla.lua
+++ b/game/modules/tome/data/chats/zoisla.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index 858661a3dfda075900727eb070afcdce1e7caa4c..f5f3b922ca0557cb8cdd188a18e21cd3f5a9aa03 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -127,6 +127,7 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
 			local inc
 			if src.combatGetDamageIncrease then inc = src:combatGetDamageIncrease(type)
 			else inc = (src.inc_damage.all or 0) + (src.inc_damage[type] or 0) end
+			if src.getVim and src:attr("demonblood_dam") then inc = inc + ((src.demonblood_dam or 0) * (src:getVim() or 0)) end
 
 			-- Increases damage for the entity type (Demon, Undead, etc)
 			if target.type and src.inc_damage_actor_type then
@@ -289,6 +290,13 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
 			print("[PROJECTOR] after self-resists dam", dam)
 		end
 
+		--Vim based defence
+		if target:attr("demonblood_def") and target.getVim then
+			local demon_block = math.min(dam*0.5,target.demonblood_def*(target:getVim() or 0))
+			dam= dam - demon_block
+			target:incVim((-demon_block)/20)
+		end
+		
 		-- Static reduce damage
 		if dam > 0 and target.isTalentActive and target:isTalentActive(target.T_ANTIMAGIC_SHIELD) then
 			local t = target:getTalentFromId(target.T_ANTIMAGIC_SHIELD)
@@ -337,6 +345,16 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
 			local def = src.tempeffect_def[src.EFF_CURSE_OF_MISFORTUNE]
 			dam = def.doUnfortunateEnd(src, eff, target, dam)
 		end
+		
+		if src:attr("crushing_blow") and (dam * (1.25 + (src.combat_critical_power or 0)/200)) > target.life then
+			dam = dam * (1.25 + (src.combat_critical_power or 0)/200)
+			game.logPlayer(src, "You end your target with a crushing blow!")
+		end
+		
+		if target:attr("resist_unseen") and not target:canSee(src) then
+			dam = dam * (1 - math.min(target.resist_unseen,100)/100)
+		end
+		
 		-- Sanctuary: reduces damage if it comes from outside of Gloom
 		if target.isTalentActive and target:isTalentActive(target.T_GLOOM) and target:knowTalent(target.T_SANCTUARY) then
 			if tmp and tmp.sanctuaryDamageChange then
@@ -493,10 +511,14 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
 					src:triggerTalent(src.T_METEORIC_CRASH, nil, target)
 				end
 
-				if not target.dead and t.is_spell and target.knowTalent and target:knowTalent(src.T_SPELL_FEEDBACK) then
-					target:triggerTalent(target.T_SPELL_FEEDBACK, nil, src, t)
+				if not target.dead and t.is_spell and target.knowTalent then
+					if target:knowTalent(target.T_SPELL_FEEDBACK) then
+						target:triggerTalent(target.T_SPELL_FEEDBACK, nil, src, t)
+					end
+					if target:knowTalent(target.T_NATURE_S_DEFIANCE) then
+						target:triggerTalent(target.T_NATURE_S_DEFIANCE, nil, src, t)
+					end
 				end
-
 				if t.is_spell and src.knowTalent and src:knowTalent(src.T_BORN_INTO_MAGIC) then
 					src:triggerTalent(target.T_BORN_INTO_MAGIC, nil, type)
 				end
@@ -561,6 +583,13 @@ local function tryDestroy(who, inven, dam, destroy_prop, proof_prop, msg)
 	end
 end
 
+newDamageType{
+	name = "cosmetic", type = "COSMETIC", text_color = "#WHITE#",
+	projector = function(src, x, y, type, dam)
+	end,
+	death_message = {"cosmeticed"},
+}
+
 newDamageType{
 	name = "physical", type = "PHYSICAL",
 	death_message = {"battered", "bludgeoned", "sliced", "maimed", "raked", "bled", "impaled", "dissected", "disembowelled", "decapitated", "stabbed", "pierced", "torn limb from limb", "crushed", "shattered", "smashed", "cleaved", "swiped", "struck", "mutilated", "tortured", "skewered", "squished", "mauled", "chopped into tiny pieces", "splattered", "ground", "minced", "punctured", "hacked apart", "eviscerated"},
@@ -607,6 +636,9 @@ newDamageType{
 			local a = game.level.map(x, y, Map.ACTOR)
 			if src.player and a and not a.training_dummy then world:gainAchievement("CRYOMANCER", src, realdam) end
 		end
+		if realdam > 0 and src:attr("cold_freezes") and rng.percent(src.cold_freezes) then
+			DamageType:get(DamageType.FREEZE).projector(src, x, y, DamageType.FREEZE, {dur=2, hp=70+dam*1.5})
+		end
 		return realdam
 	end,
 	death_message = {"frozen", "chilled", "iced", "cooled", "frozen and shattered into a million little shards"},
@@ -625,12 +657,11 @@ newDamageType{
 	name = "acid", type = "ACID", text_color = "#GREEN#",
 	antimagic_resolve = true,
 	projector = function(src, x, y, type, dam)
-		local realdam = DamageType.defaultProjector(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
-		if realdam > 0 and target and src.knowTalent and src:knowTalent(src.T_NATURAL_ACID) and not src:isTalentCoolingDown(src.T_NATURAL_ACID) then
-			src:startTalentCooldown(src.T_NATURAL_ACID)
+		local realdam = DamageType.defaultProjector(src, x, y, type, dam)
+		if realdam > 0 and target and src.knowTalent and src:knowTalent(src.T_NATURAL_ACID) then
 			local t = src:getTalentFromId(src.T_NATURAL_ACID)
-			target:setEffect(target.EFF_NATURAL_ACID, 2, {power=t.getResist(src, t)})
+			src:setEffect(src.EFF_NATURAL_ACID, t.getDuration(src, t), {})
 		end
 		return realdam
 	end,
@@ -642,12 +673,11 @@ newDamageType{
 	name = "nature", type = "NATURE", text_color = "#LIGHT_GREEN#",
 	antimagic_resolve = true,
 	projector = function(src, x, y, type, dam)
-		local realdam = DamageType.defaultProjector(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
-		if realdam > 0 and target and src.knowTalent and src:knowTalent(src.T_CORROSIVE_NATURE) and not src:isTalentCoolingDown(src.T_CORROSIVE_NATURE) then
-			src:startTalentCooldown(src.T_CORROSIVE_NATURE)
+		local realdam = DamageType.defaultProjector(src, x, y, type, dam)
+		if realdam > 0 and target and src.knowTalent and src:knowTalent(src.T_CORROSIVE_NATURE) then
 			local t = src:getTalentFromId(src.T_CORROSIVE_NATURE)
-			target:setEffect(target.EFF_CORROSIVE_NATURE, 2, {power=t.getResist(src, t)})
+			src:setEffect(src.EFF_CORROSIVE_NATURE, t.getDuration(src, t), {})
 		end
 		return realdam
 	end,
@@ -719,6 +749,25 @@ newDamageType{
 	death_message = {"psyched", "mentally tortured", "mindraped"},
 }
 
+newDamageType{
+	name = "winter", type = "WINTER",
+	projector = function(src, x, y, type, dam)
+		local srcx, srcy = dam.x, dam.y
+		local base = dam
+		dam = dam.dam
+		if not base.st then
+			DamageType:get(DamageType.COLD).projector(src, x, y, DamageType.COLD, dam)
+		else
+			DamageType:get(base.st).projector(src, x, y, base.st, dam)
+		end
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target then
+			local energyDrain = (game.energy_to_act * 0.2)	
+			target.energy.value = target.energy.value - energyDrain
+		end
+	end,
+}
+
 -- Temporal damage
 newDamageType{
 	name = "temporal", type = "TEMPORAL", text_color = "#LIGHT_STEEL_BLUE#",
@@ -980,6 +1029,7 @@ newDamageType{
 newDamageType{
 	name = "flameshock", type = "FLAMESHOCK",
 	projector = function(src, x, y, type, dam)
+		if _G.type(dam) == "number" then dam = {dam=dam, dur=4} end
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
 			-- Set on fire!
@@ -1091,7 +1141,7 @@ newDamageType{
 
 -- Light damage + blind chance
 newDamageType{
-	name = "blinding light", type = "LIGHT_BLIND",
+	name = "blinding light", type = "LIGHT_BLIND", text_color = "#YELLOW#",
 	projector = function(src, x, y, type, dam)
 		local realdam = DamageType:get(DamageType.LIGHT).projector(src, x, y, DamageType.LIGHT, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
@@ -1108,7 +1158,7 @@ newDamageType{
 
 -- Lightning damage + daze chance
 newDamageType{
-	name = "lightning", type = "LIGHTNING_DAZE", text_color = "#ROYAL_BLUE#",
+	name = "dazing lightning", type = "LIGHTNING_DAZE", text_color = "#ROYAL_BLUE#",
 	projector = function(src, x, y, type, dam)
 		if _G.type(dam) == "number" then dam = {dam=dam, daze=25} end
 		dam.daze = dam.daze or 25
@@ -1155,6 +1205,27 @@ newDamageType{
 	end,
 }
 
+-- Bloodspring damage + repulsion; checks for spell power against physical resistance
+newDamageType{
+	name = "bloodspring", type = "BLOODSPRING",
+	projector = function(src, x, y, type, dam)
+		local srcx, srcy = dam.x, dam.y
+		local base = dam
+		dam = dam.dam
+		DamageType:get(base.st).projector(src, x, y, base.st, dam)
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target then
+			if target:checkHit(base.power or src:combatSpellpower(), target:combatPhysicalResist(), 0, 95, 15) and target:canBe("knockback") then
+				target:knockback(srcx, srcy, base.dist or 1)
+				target:crossTierEffect(target.EFF_OFFBALANCE, base.power or src:combatSpellpower())
+				game.logSeen(target, "%s is knocked back!", target.name:capitalize())
+			else
+				game.logSeen(target, "%s resists the bloody wave!", target.name:capitalize())
+			end
+		end
+	end,
+}
+
 -- Fireburn damage + repulsion; checks for spell power against physical resistance
 newDamageType{
 	name = "fire repulsion", type = "FIREKNOCKBACK",
@@ -1507,7 +1578,7 @@ newDamageType{
 
 -- Confusion
 newDamageType{
-	name = "confusion", type = "RANDOM_CONFUSION",
+	name = "% chance of confusion", type = "RANDOM_CONFUSION",
 	projector = function(src, x, y, type, dam)
 		if _G.type(dam) == "number" then dam = {dam=dam} end
 		local target = game.level.map(x, y, Map.ACTOR)
@@ -1521,8 +1592,24 @@ newDamageType{
 	end,
 }
 
+-- Confusion
+newDamageType{
+	name = "% chance of confusion", type = "RANDOM_CONFUSION_PHYS",
+	projector = function(src, x, y, type, dam)
+		if _G.type(dam) == "number" then dam = {dam=dam} end
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target and rng.percent(dam.dam) then
+			if target:canBe("confusion") then
+				target:setEffect(target.EFF_CONFUSED, 4, {power=75, apply_power=src:combatPhysicalpower(), no_ct_effect=true})
+			else
+				game.logSeen(target, "%s resists!", target.name:capitalize())
+			end
+		end
+	end,
+}
+
 newDamageType{
-	name = "gloom", type = "RANDOM_GLOOM",
+	name = "% chance of gloom effects", type = "RANDOM_GLOOM",
 	projector = function(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target and rng.percent(dam) then
@@ -1632,7 +1719,7 @@ newDamageType{
 
 -- Drain Vim
 newDamageType{
-	name = "enervating blight", type = "DRAIN_VIM",
+	name = "vim draining blight", type = "DRAIN_VIM", text_color = "#DARK_GREEN#",
 	projector = function(src, x, y, type, dam)
 		if _G.type(dam) == "number" then dam = {dam=dam, vim=0.2} end
 		local target = game.level.map(x, y, Map.ACTOR)
@@ -1779,7 +1866,7 @@ newDamageType{
 
 -- blood boiled, blight damage + slow
 newDamageType{
-	name = "hindering_blight", type = "BLOOD_BOIL",
+	name = "hindering blight", type = "BLOOD_BOIL", text_color = "#DARK_GREEN#",
 	projector = function(src, x, y, type, dam)
 		DamageType:get(DamageType.BLIGHT).projector(src, x, y, DamageType.BLIGHT, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
@@ -2370,7 +2457,7 @@ newDamageType{
 			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.]],
+			desc = [[An orc clad in massive armour, wielding a huge axe.]],
 			level_range = {35, nil}, exp_worth = 0,
 			max_life = resolvers.rngavg(110,120), life_rating = 12,
 			resolvers.equip{
@@ -2598,7 +2685,6 @@ newDamageType{
 	end,
 }
 
-
 newDamageType{
 	name = "natural mucus", type = "MUCUS",
 	projector = function(src, x, y, type, dam, tmp)
@@ -2606,7 +2692,12 @@ newDamageType{
 		if target and not target.turn_procs.mucus then
 			target.turn_procs.mucus = true
 			if src:reactionToward(target) >= 0 then
-				target:incEquilibrium(-dam.equi)
+				if src == target then
+					target:incEquilibrium(-(dam.self_equi or 1))
+				else
+					target:incEquilibrium(-(dam.equi or 1))
+					src:incEquilibrium(-(dam.equi or 1))
+				end
 			elseif target:canBe("poison") then
 				target:setEffect(target.EFF_POISONED, 5, {src=src, power=dam.dam, apply_power=src:combatMindpower()})
 			end
@@ -2641,6 +2732,7 @@ newDamageType{
 newDamageType{
 	name = "corrosive acid", type = "ACID_CORRODE",
 	projector = function(src, x, y, type, dam, tmp)
+		if _G.type(dam) == "number" then dam = {dur = 4, armor = dam/2, defense = dam/2, dam = dam, atk=dam/2} end
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
 			DamageType:get(DamageType.ACID).projector(src, x, y, DamageType.ACID, dam.dam)
@@ -2652,15 +2744,16 @@ newDamageType{
 -- Bouncy slime!
 newDamageType{
 	name = "bouncing slime", type = "BOUNCE_SLIME",
-	projector = function(src, x, y, type, dam, tmp)
+	projector = function(src, x, y, type, dam, tmp, _, tg)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
-			local realdam = DamageType:get(DamageType.SLIME).projector(src, x, y, DamageType.SLIME, dam.dam)
+			local realdam = DamageType:get(DamageType.SLIME).projector(src, x, y, DamageType.SLIME, {dam=dam.dam, power=0.30})
+			
 			if dam.nb > 0 then
 				dam.done = dam.done or {}
 				dam.done[target.uid] = true
 				dam.nb = dam.nb - 1
-
+				dam.dam = dam.dam*(dam.bounce_factor or 0.5) -- lose 50% damage by default
 				local list = {}
 				src:project({type="ball", selffire=false, x=x, y=y, radius=6, range=0}, x, y, function(bx, by)
 					local actor = game.level.map(bx, by, Map.ACTOR)
@@ -2671,10 +2764,34 @@ newDamageType{
 				end)
 				if #list > 0 then
 					local st = rng.table(list)
-					src:projectile({type="bolt", range=6, x=x, y=y, selffire=false, display={particle="bolt_slime"}}, st.x, st.y, DamageType.BOUNCE_SLIME, dam, {type="slime"})
+					src:projectile({type="bolt", range=6, x=x, y=y, speed = tg.speed or 6, name=tg.name or "bouncing slime", selffire=false, display={particle="bolt_slime"}}, st.x, st.y, DamageType.BOUNCE_SLIME, dam, {type="slime"})
 				end
 			end
 			return realdam
 		end		
 	end,
 }
+
+-- Acid damage + Slow
+newDamageType{
+	name = "caustic mire", type = "CAUSTIC_MIRE",
+	projector = function(src, x, y, type, dam, tmp)
+		if _G.type(dam) == "number" then dam = {dur = 2, slow=20} end
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target then
+			DamageType:get(DamageType.ACID).projector(src, x, y, DamageType.ACID, dam.dam)
+			target:setEffect(target.EFF_SLOW, dam.dur, {power=dam.slow/100, apply_power=src:combatSpellpower()})
+		end
+	end,
+}
+
+-- Sun Path damage
+newDamageType{
+	name = "sun path", type = "SUN_PATH",
+	projector = function(src, x, y, type, dam)
+		local target = game.level.map(x, y, Map.ACTOR)
+		if target and src:reactionToward(target) < 0 then
+			return DamageType:get(DamageType.LIGHT).projector(src, x, y, DamageType.LIGHT, dam)
+		end
+	end,
+}
diff --git a/game/modules/tome/data/factions.lua b/game/modules/tome/data/factions.lua
index b59817b259fd1b8a76a7b44b50d13c66d967bd09..f53c15edeecdeb596c2bf8b8a783e55a72a63cf4 100644
--- a/game/modules/tome/data/factions.lua
+++ b/game/modules/tome/data/factions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/encounters/fareast-npcs.lua b/game/modules/tome/data/general/encounters/fareast-npcs.lua
index 74d50cfdca598d39e44ea0d237a233393450ccbd..1b64ee0b743dd95f560467289477dbde46b10dae 100644
--- a/game/modules/tome/data/general/encounters/fareast-npcs.lua
+++ b/game/modules/tome/data/general/encounters/fareast-npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/encounters/fareast.lua b/game/modules/tome/data/general/encounters/fareast.lua
index ca55dabc838590b78d61382f40685a0f78519a53..d441d07237eade579c37bee5d887b3c131dd00e1 100644
--- a/game/modules/tome/data/general/encounters/fareast.lua
+++ b/game/modules/tome/data/general/encounters/fareast.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -68,24 +68,24 @@ newEntity{
 	end
 }
 
+--[[
+-- A little more context; this made people so annoyed on both sides, taht I've had enough of it.
+-- This was never intended as a reference to any real world thing and if people are annoyed at it i'm sorry
+-- It's gone now
 newEntity{
-	name = "Orc Breeding Pit",
-	type = "hostile", subtype = "special", unique = true,
-	immediate = {"world-encounter", "fareast"},
+	name = "Orc Breeding Pits",
+	type = "harmless", subtype = "special", unique = true,
+	level_range = {35, 50},
+	rarity = 20,
+	on_world_encounter = "orc-breeding-pits",
 	on_encounter = function(self, who)
-		local x, y = self:findSpot(who)
-		if not x then return end
-
-		local g = game.level.map(x, y, engine.Map.TERRAIN):cloneFull()
-		g.__nice_tile_base = nil
-		g.name = "Entrance to the orc breeding pit"
-		g.display='>' g.color_r=colors.GREEN.r g.color_g=colors.GREEN.g g.color_b=colors.GREEN.b g.notice = true
-		g.change_level=1 g.change_zone="orc-breeding-pit" g.glow=true
-		g.add_displays = g.add_displays or {}
-		g.add_displays[#g.add_displays+1] = mod.class.Grid.new{image="terrain/ladder_down.png"}
-		g.nice_tiler = nil
-		g:initGlow()
-		game.zone:addEntity(game.level, g, "terrain", x, y)
+		who.energy.value = game.energy_to_act
+		game.paused = true
+		who:runStop()
+		local Chat = require "engine.Chat"
+		local chat = Chat.new("orc-breeding-pits", {name="Dying sun paladin"}, who)
+		chat:invoke()
 		return true
-	end
+	end,
 }
+]]
\ No newline at end of file
diff --git a/game/modules/tome/data/general/encounters/maj-eyal-npcs.lua b/game/modules/tome/data/general/encounters/maj-eyal-npcs.lua
index dce5cde24c774dd3d47961f827d2d22c34141a47..d976c87649cee0ed36d641e1f8550d0749a6bf43 100644
--- a/game/modules/tome/data/general/encounters/maj-eyal-npcs.lua
+++ b/game/modules/tome/data/general/encounters/maj-eyal-npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/encounters/maj-eyal.lua b/game/modules/tome/data/general/encounters/maj-eyal.lua
index ae783540b67892665a1142683dfeb17ff8566fac..1dfa7b979a5d531b1779cd1ee99aeeaee76a4c2a 100644
--- a/game/modules/tome/data/general/encounters/maj-eyal.lua
+++ b/game/modules/tome/data/general/encounters/maj-eyal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/antimagic-bush.lua b/game/modules/tome/data/general/events/antimagic-bush.lua
index 3c86a5bd7f5831b6ee662d3c7c9c27cb27217c6b..bfd8327f65e750791fb43f77eef202d1dedadb1b 100644
--- a/game/modules/tome/data/general/events/antimagic-bush.lua
+++ b/game/modules/tome/data/general/events/antimagic-bush.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/bligthed-soil.lua b/game/modules/tome/data/general/events/bligthed-soil.lua
index 85a5aa50b4f8c936f99d9c02661daafc90bcb0da..8148070f64a07162b07432658f6e56ec80991216 100644
--- a/game/modules/tome/data/general/events/bligthed-soil.lua
+++ b/game/modules/tome/data/general/events/bligthed-soil.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/crystaline-forest.lua b/game/modules/tome/data/general/events/crystaline-forest.lua
index 715131c17c008970fd8251e07e30d83e92aaaa75..4757e124579556c764cd540652227f6e8ff0c31a 100644
--- a/game/modules/tome/data/general/events/crystaline-forest.lua
+++ b/game/modules/tome/data/general/events/crystaline-forest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/cultists.lua b/game/modules/tome/data/general/events/cultists.lua
index 76de31b60b07609bfac65e92578609d5ebf8221f..2278a2cf2cc4b4607e44cdadd1aae0347a432a3c 100644
--- a/game/modules/tome/data/general/events/cultists.lua
+++ b/game/modules/tome/data/general/events/cultists.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -201,7 +201,7 @@ game.zone.on_turn = function()
 				type = "armor", subtype="head",
 				name = "Crown of Burning Pain", image = "object/artifact/crown_of_burning_pain.png",
 				unided_name = "burning crown",
-				desc = [[This crown of pure flames possess a myriad of small molten rocks floating wildly above it. Each can be removed to throw as a true meteor.]],
+				desc = [[This crown of pure flames possesses a myriad of small molten rocks floating wildly above it. Each can be removed to throw as a true meteor.]],
 				add_name = " (#ARMOR#)",
 				power_source = {arcane=true},
 				display = "]", color=colors.SLATE,
diff --git a/game/modules/tome/data/general/events/damp-cave.lua b/game/modules/tome/data/general/events/damp-cave.lua
index 4f5adba92836f73ff76f6ce84f740eb33cd93c04..92d0af8687cdb8354e9541db190766bdb49e8de8 100644
--- a/game/modules/tome/data/general/events/damp-cave.lua
+++ b/game/modules/tome/data/general/events/damp-cave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/drake-cave.lua b/game/modules/tome/data/general/events/drake-cave.lua
index 04bb642bcf53c07eec1d6a6ed17762cfa315e3b5..fbe3e48193b76ed9a4342a8ecb32ea2e4ff5e5e7 100644
--- a/game/modules/tome/data/general/events/drake-cave.lua
+++ b/game/modules/tome/data/general/events/drake-cave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/fearscape-portal.lua b/game/modules/tome/data/general/events/fearscape-portal.lua
index d013d12e6e0a120e284f3ce301ea4b48e13851c0..75e80ef5c2706277651b84dd535abac277859089 100644
--- a/game/modules/tome/data/general/events/fearscape-portal.lua
+++ b/game/modules/tome/data/general/events/fearscape-portal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/fell-aura.lua b/game/modules/tome/data/general/events/fell-aura.lua
index 84fcd04372f9f9f3c78c2f75ea91bbffb5d1111f..8fb5fc4b4dcadebf4d34e5764e5f3a94efe029a0 100644
--- a/game/modules/tome/data/general/events/fell-aura.lua
+++ b/game/modules/tome/data/general/events/fell-aura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/font-life.lua b/game/modules/tome/data/general/events/font-life.lua
index 8b363bab914bd824a2f42ffdb1f5763bcff759c6..6cf15b18d01ff5abf492a94b6792a016707ef364 100644
--- a/game/modules/tome/data/general/events/font-life.lua
+++ b/game/modules/tome/data/general/events/font-life.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/glimmerstone.lua b/game/modules/tome/data/general/events/glimmerstone.lua
index f0331c11a99963ca4658a59f100b3da9b637c61d..4caf2c7668bbe7a4abd6e52aec163cfa2491bc79 100644
--- a/game/modules/tome/data/general/events/glimmerstone.lua
+++ b/game/modules/tome/data/general/events/glimmerstone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/glowing-chest.lua b/game/modules/tome/data/general/events/glowing-chest.lua
index 34c851c465b3ff1f3a31ea8937959907690f0b06..a2ab528c08d7e5f833fc05c0fd3ca6ec56f0e9e2 100644
--- a/game/modules/tome/data/general/events/glowing-chest.lua
+++ b/game/modules/tome/data/general/events/glowing-chest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/groups/fareast-generic.lua b/game/modules/tome/data/general/events/groups/fareast-generic.lua
index eeb8d29e469fd90c94e96bf18ca4c3bb6350d303..abebbd827a68a3165b1c14fbb034d57490082802 100644
--- a/game/modules/tome/data/general/events/groups/fareast-generic.lua
+++ b/game/modules/tome/data/general/events/groups/fareast-generic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/groups/majeyal-generic.lua b/game/modules/tome/data/general/events/groups/majeyal-generic.lua
index 492bc6fcd7dcdd78046d3958eb34a27b9a31a1cf..2b49bec1e5730c39eb3b44b1984ad5cb4f5f170d 100644
--- a/game/modules/tome/data/general/events/groups/majeyal-generic.lua
+++ b/game/modules/tome/data/general/events/groups/majeyal-generic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/groups/outdoor-fareast-generic.lua b/game/modules/tome/data/general/events/groups/outdoor-fareast-generic.lua
index 8058359a639c60d7991f152222903c19494b8ac3..de07dcd15c5a46b0cad97b4399325515c0144873 100644
--- a/game/modules/tome/data/general/events/groups/outdoor-fareast-generic.lua
+++ b/game/modules/tome/data/general/events/groups/outdoor-fareast-generic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua b/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua
index c9d187fb00b658427c1eda5fac6eb2376d370765..c4373330d83375094ab3d0e164d3d918a87a7dd9 100644
--- a/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua
+++ b/game/modules/tome/data/general/events/groups/outdoor-majeyal-generic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua b/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua
index 59b1044ec9600eec7c8e17506f0995a1cc309307..25a1e9bf22b5dfca4d161100d351444b02ef0219 100644
--- a/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua
+++ b/game/modules/tome/data/general/events/groups/outdoor-majeyal-gloomy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/icy-ground.lua b/game/modules/tome/data/general/events/icy-ground.lua
index ac030ffa10c22c39487194b4a9c8412674a4d590..160eb9ef31a32a4ac863d4b280a4c6df7e582538 100644
--- a/game/modules/tome/data/general/events/icy-ground.lua
+++ b/game/modules/tome/data/general/events/icy-ground.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/meteor.lua b/game/modules/tome/data/general/events/meteor.lua
index 33759d72b773c0356cfc9771b425d9fd0c106e27..eb9f598e2f92f67b385382dedf97872cb7621904 100644
--- a/game/modules/tome/data/general/events/meteor.lua
+++ b/game/modules/tome/data/general/events/meteor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/naga-portal.lua b/game/modules/tome/data/general/events/naga-portal.lua
index d8bd80503c89625ed300dde7a21a194d825bd4f1..4f49513bf34c4af000ecdc07d24cab1b0a1d2f5a 100644
--- a/game/modules/tome/data/general/events/naga-portal.lua
+++ b/game/modules/tome/data/general/events/naga-portal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/necrotic-air.lua b/game/modules/tome/data/general/events/necrotic-air.lua
index 7bee2e3434e66d03d96f31c37d35ae69bf98e868..2fe32d416408ccf281671562b3ec5fa706805e1c 100644
--- a/game/modules/tome/data/general/events/necrotic-air.lua
+++ b/game/modules/tome/data/general/events/necrotic-air.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/noxious-caldera.lua b/game/modules/tome/data/general/events/noxious-caldera.lua
index 6d52ce4f29cae806531c8694983cec12347553d1..483de96ce6264f637325c0a46249b7960d47116a 100644
--- a/game/modules/tome/data/general/events/noxious-caldera.lua
+++ b/game/modules/tome/data/general/events/noxious-caldera.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/old-battle-field.lua b/game/modules/tome/data/general/events/old-battle-field.lua
index 0c254b9f1053ff1a3f40fcf74e0ec0acf277ec65..4669add732eb9777f59c7cdb7228364dab828b96 100644
--- a/game/modules/tome/data/general/events/old-battle-field.lua
+++ b/game/modules/tome/data/general/events/old-battle-field.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/protective-aura.lua b/game/modules/tome/data/general/events/protective-aura.lua
index b49b4762a22246cead2df97ca1ee81fe83199027..abcd10b096711ad4f09fada800c10565a052ed3e 100644
--- a/game/modules/tome/data/general/events/protective-aura.lua
+++ b/game/modules/tome/data/general/events/protective-aura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/pyroclast.lua b/game/modules/tome/data/general/events/pyroclast.lua
index 52293eb3b9237334225f1fc88dc3eec915a6e0ff..6f8e6d5e4a5745969c150627ad4506146fe788ad 100644
--- a/game/modules/tome/data/general/events/pyroclast.lua
+++ b/game/modules/tome/data/general/events/pyroclast.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/rat-lich.lua b/game/modules/tome/data/general/events/rat-lich.lua
index 3ce0f015d6b6141bae8d1c27cb93d88a286384f6..b9ecb88c7f2a0fdea23d31c0db1aff2f017b4e6d 100644
--- a/game/modules/tome/data/general/events/rat-lich.lua
+++ b/game/modules/tome/data/general/events/rat-lich.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -51,7 +51,7 @@ local changer = function(id)
 		cost = 150,
 		encumber = 1,
 		material_level = 3,
-		desc = [[This ancient skull is all that remains of the Rat Lich. Some fragments of its power remain and a faint red light still glows within its eyes]],
+		desc = [[This ancient skull is all that remains of the Rat Lich. Some fragments of its power remain and a faint red light still glows within its eyes.]],
 
 		wielder = {
 			combat_spellpower = 10,
diff --git a/game/modules/tome/data/general/events/slimey-pool.lua b/game/modules/tome/data/general/events/slimey-pool.lua
index 089f35597c217ff1f53eaeac08bed0894145973e..1f33b5a3778fc5d657f1135d1f92f8276def534a 100644
--- a/game/modules/tome/data/general/events/slimey-pool.lua
+++ b/game/modules/tome/data/general/events/slimey-pool.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/sludgenest.lua b/game/modules/tome/data/general/events/sludgenest.lua
index 3f00d0528f4b96004a4dbe8ba6d04b8e078f6acd..57322d253ede2a223f4dd7f8b27ffa4ecf7e1188 100644
--- a/game/modules/tome/data/general/events/sludgenest.lua
+++ b/game/modules/tome/data/general/events/sludgenest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/snowstorm.lua b/game/modules/tome/data/general/events/snowstorm.lua
index 9ecc820444ec8cf9396730db69fbcd8b714d8cc7..c66d3d6d0dd70b89f3920b289040a862ad90ec2e 100644
--- a/game/modules/tome/data/general/events/snowstorm.lua
+++ b/game/modules/tome/data/general/events/snowstorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/spellblaze-scar.lua b/game/modules/tome/data/general/events/spellblaze-scar.lua
index 60160713d9ae4f48f18034ab1ef6f037663c0c03..4b5e282e790b78e61929b8ed3e6dca5632e80ad7 100644
--- a/game/modules/tome/data/general/events/spellblaze-scar.lua
+++ b/game/modules/tome/data/general/events/spellblaze-scar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/thunderstorm.lua b/game/modules/tome/data/general/events/thunderstorm.lua
index 32be6c3ff8845af531b494db975b2423ac5fbbe9..bdcfe79dabd96fe830ac1cd1b0ac43308031e8e1 100644
--- a/game/modules/tome/data/general/events/thunderstorm.lua
+++ b/game/modules/tome/data/general/events/thunderstorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/tombstones.lua b/game/modules/tome/data/general/events/tombstones.lua
index 391c5505bed846ec20c37cb29a8d49a280f64d85..97e94f882cc13fc0ee73f1a967eeb673607fcea6 100644
--- a/game/modules/tome/data/general/events/tombstones.lua
+++ b/game/modules/tome/data/general/events/tombstones.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/weird-pedestals.lua b/game/modules/tome/data/general/events/weird-pedestals.lua
index 7c8a99ee890291702e97532ff61bab91467b0170..5d1550d3b6e242c2b141c30ad57b1b640a8ce226 100644
--- a/game/modules/tome/data/general/events/weird-pedestals.lua
+++ b/game/modules/tome/data/general/events/weird-pedestals.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/events/whistling-vortex.lua b/game/modules/tome/data/general/events/whistling-vortex.lua
index 29b16825cce6be930e39be545498d9d1a87c19f6..1f0f343e94ac1f4eaf3e5fe25d54419f075e678a 100644
--- a/game/modules/tome/data/general/events/whistling-vortex.lua
+++ b/game/modules/tome/data/general/events/whistling-vortex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/autumn_forest.lua b/game/modules/tome/data/general/grids/autumn_forest.lua
new file mode 100644
index 0000000000000000000000000000000000000000..e67d46c93104aa2bf2ea362f0b5592d542107fa7
--- /dev/null
+++ b/game/modules/tome/data/general/grids/autumn_forest.lua
@@ -0,0 +1,191 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+local autumn_grass_editer = { method="borders_def", def="autumn_grass"}
+
+newEntity{
+	define_as = "AUTUMN_GRASS",
+	type = "floor", subtype = "autumn_grass",
+	name = "autumn grass", image = "terrain/grass/autumn_grass_main_01.png",
+	display = '.', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	grow = "AUTUMN_TREE",
+	nice_tiler = { method="replace", base={"AUTUMN_GRASS_PATCH", 100, 1, 14}},
+	nice_editer = autumn_grass_editer,
+}
+for i = 1, 14 do newEntity{ base = "AUTUMN_GRASS", define_as = "AUTUMN_GRASS_PATCH"..i, image = ("terrain/grass/autumn_grass_main_%02d.png"):format(i) } end
+
+local autumn_treesdef = {
+	{"small_elm", {"shadow", "trunk", "foliage_autumn"}},
+	{"elm", {tall=-1, "shadow", "trunk", "foliage_autumn"}},
+}
+
+newEntity{
+	define_as = "AUTUMN_TREE",
+	type = "wall", subtype = "autumn_grass",
+	name = "autumn tree",
+	image = "terrain/autumn_tree.png",
+	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	always_remember = true,
+	can_pass = {pass_tree=1},
+	does_block_move = true,
+	block_sight = true,
+	dig = "AUTUMN_GRASS",
+	nice_tiler = { method="replace", base={"AUTUMN_TREE", 100, 1, 30}},
+	nice_editer = autumn_grass_editer,
+}
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="AUTUMN_TREE", define_as = "AUTUMN_TREE"..i, image = "terrain/grass/autumn_grass_main_01.png"}, autumn_treesdef))
+end
+
+newEntity{
+	define_as = "HARDAUTUMN_TREE",
+	type = "wall", subtype = "autumn_grass",
+	name = "tall thick tree",
+	image = "terrain/autumn_tree.png",
+	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	always_remember = true,
+	does_block_move = true,
+	block_sight = true,
+	block_sense = true,
+	block_esp = true,
+	nice_tiler = { method="replace", base={"HARDAUTUMN_TREE", 100, 1, 30}},
+	nice_editer = autumn_grass_editer,
+}
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="HARDAUTUMN_TREE", define_as = "HARDAUTUMN_TREE"..i, image = "terrain/grass/autumn_grass_main_01.png"}, autumn_treesdef))
+end
+
+-----------------------------------------
+-- Forest road
+-----------------------------------------
+newEntity{
+	define_as = "AUTUMN_GRASS_ROAD_STONE",
+	type = "floor", subtype = "autumn_grass", road="oldstone",
+	name = "old road", image = "terrain/grass/autumn_grass_main_01.png",
+	display = '=', color=colors.DARK_GREY,
+	always_remember = true,
+	nice_editer = autumn_grass_editer,
+	nice_editer2 = { method="roads_def", def="oldstone" },
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_ROAD_DIRT",
+	type = "floor", subtype = "autumn_grass", road="dirt",
+	name = "old road", image = "terrain/grass/autumn_grass_main_01.png",
+	display = '=', color=colors.DARK_GREY,
+	always_remember = true,
+	nice_editer = autumn_grass_editer,
+	nice_editer2 = { method="roads_def", def="dirt" },
+}
+
+-----------------------------------------
+-- Autumn_grassy exits
+-----------------------------------------
+newEntity{
+	define_as = "AUTUMN_GRASS_UP_WILDERNESS",
+	type = "floor", subtype = "autumn_grass",
+	name = "exit to the worldmap", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+
+newEntity{
+	define_as = "AUTUMN_GRASS_UP8",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the previous level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_UP2",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the previous level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_UP4",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the previous level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_UP6",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the previous level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+
+newEntity{
+	define_as = "AUTUMN_GRASS_DOWN8",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the next level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_DOWN2",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the next level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_DOWN4",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the next level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
+newEntity{
+	define_as = "AUTUMN_GRASS_DOWN6",
+	type = "floor", subtype = "autumn_grass",
+	name = "way to the next level", image = "terrain/grass/autumn_grass_main_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 = autumn_grass_editer,
+}
diff --git a/game/modules/tome/data/general/grids/basic.lua b/game/modules/tome/data/general/grids/basic.lua
index 261753a4f53f0451e1e1696614bb769ddd3849bf..8ad93ad5cd9eb7138b9597c488904a723477cf14 100644
--- a/game/modules/tome/data/general/grids/basic.lua
+++ b/game/modules/tome/data/general/grids/basic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/bone.lua b/game/modules/tome/data/general/grids/bone.lua
index 35e0d2ff9245e587f945860884acf0ddaa2229c1..f8ac82117b2e728276609ccf5a25ec582c2d0293 100644
--- a/game/modules/tome/data/general/grids/bone.lua
+++ b/game/modules/tome/data/general/grids/bone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/burntland.lua b/game/modules/tome/data/general/grids/burntland.lua
index 236441091abccb91838ebe1e61e60d7519ae01f9..514312782431cd7e53c0255cdbcefd40c3e7b4c3 100644
--- a/game/modules/tome/data/general/grids/burntland.lua
+++ b/game/modules/tome/data/general/grids/burntland.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -17,20 +17,40 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-for i = 1, 20 do
 newEntity{
-	define_as = "BURNT_TREE"..i,
+	define_as = "BURNT_TREE",
 	type = "wall", subtype = "burnt",
 	name = "burnt tree",
 	image = "terrain/grass_burnt1.png",
-	add_displays = class:makeTrees("terrain/burnttree_alpha", 8, 0),
 	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
 	always_remember = true,
 	can_pass = {pass_tree=1},
 	does_block_move = true,
 	block_sight = true,
 	dig = "BURNT_GROUND1",
+	nice_tiler = { method="replace", base={"BURNT_TREE", 100, 1, 20} },
 }
+for i = 1, 20 do
+	newEntity(class:makeNewTrees({base="BURNT_TREE", define_as = "BURNT_TREE"..i, image = "terrain/grass_burnt1.png", nice_tiler = false}, {
+		-- {"gnarled_tree", {"shadow", "trunk", "foliage_bare"}},
+		-- {"small_elm", {"shadow", "trunk", "foliage_bare"}},
+		-- {"elm", {tall=-1, "shadow", "trunk", "foliage_bare"}},
+		{"burned_tree_01", {tall=-1, "shadow", "trunk", "foliage"}},
+		{"burned_tree_01", {tall=-1, "shadow", "trunk", {"foliage_ash_%02d",1,2}}},
+		{"burned_tree_02", {tall=-1, "shadow", "trunk", "foliage"}},
+		{"burned_tree_02", {tall=-1, "shadow", "trunk", {"foliage_ash_%02d",1,2}}},
+		{"small_burned_tree_01", {"shadow", "trunk"}},
+		{"small_burned_tree_01", {"shadow", {"trunk_ash_%02d",1,2}}},
+		{"small_burned_tree_02", {"shadow", "trunk", "foliage"}},
+		{"small_burned_tree_02", {"shadow", "trunk", {"foliage_ash_%02d",1,2}}},
+		{"small_burned_tree_03", {"shadow", "trunk", "foliage"}},
+		{"small_burned_tree_03", {"shadow", "trunk", {"foliage_ash_%02d",1,2}}},
+		-- {"burned_tree_01", {tall=-1, "shadow", "trunk", "foliage_winter"}},
+		-- {"burned_tree_02", {tall=-1, "shadow", "trunk", "foliage_winter"}},
+		-- {"small_burned_tree_01", {"shadow", "trunk_winter"}},
+		-- {"small_burned_tree_02", {"shadow", "trunk", "foliage_winter"}},
+		-- {"small_burned_tree_03", {"shadow", "trunk", "foliage_winter"}},
+	}))
 end
 
 newEntity{ define_as = "BURNT_GROUND",
diff --git a/game/modules/tome/data/general/grids/cave.lua b/game/modules/tome/data/general/grids/cave.lua
index eefbd7dda27195dde7a8773a56a3c864a304b586..3f0937b0b0e26efc12df67a8a489c9fbb39371b6 100644
--- a/game/modules/tome/data/general/grids/cave.lua
+++ b/game/modules/tome/data/general/grids/cave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/elven_forest.lua b/game/modules/tome/data/general/grids/elven_forest.lua
new file mode 100644
index 0000000000000000000000000000000000000000..ebce21178a243af44f239b8379650b28d6c2b933
--- /dev/null
+++ b/game/modules/tome/data/general/grids/elven_forest.lua
@@ -0,0 +1,108 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+local grass_editer = { method="borders_def", def="grass"}
+local autumn_grass_editer = { method="borders_def", def="autumn_grass"}
+
+local treesdef = {
+	{"elventree", {tall=-1, "shadow", "trunk", "foliage_summer"}},
+	{"fat_elventree", {tall=-1, "shadow", "trunk", {"foliage_summer_%02d",1,2}}},
+}
+
+newEntity{
+	define_as = "ELVEN_TREE",
+	type = "wall", subtype = "grass",
+	name = "tree",
+	image = "terrain/tree.png",
+	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	always_remember = true,
+	can_pass = {pass_tree=1},
+	does_block_move = true,
+	block_sight = true,
+	dig = "GRASS",
+	nice_tiler = { method="replace", base={"ELVEN_TREE", 100, 1, 30}},
+	nice_editer = grass_editer,
+}
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="ELVEN_TREE", define_as = "ELVEN_TREE"..i, image = "terrain/grass/grass_main_01.png"}, treesdef))
+end
+
+newEntity{
+	define_as = "HARDELVEN_TREE",
+	type = "wall", subtype = "grass",
+	name = "tall thick tree",
+	image = "terrain/tree.png",
+	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	always_remember = true,
+	does_block_move = true,
+	block_sight = true,
+	block_sense = true,
+	block_esp = true,
+	nice_tiler = { method="replace", base={"HARDELVEN_TREE", 100, 1, 30}},
+	nice_editer = grass_editer,
+}
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="HARDELVEN_TREE", define_as = "HARDELVEN_TREE"..i, image = "terrain/grass/grass_main_01.png"}, treesdef))
+end
+
+
+local snow_treesdef = {
+	{"elventree", {tall=-1, "shadow", "trunk", "foliage_winter"}},
+	{"fat_elventree", {tall=-1, "shadow", "trunk", "foliage_winter"}},
+}
+
+newEntity{
+	define_as = "SNOW_ELVEN_TREE",
+	type = "wall", subtype = "grass",
+	name = "tree",
+	image = "terrain/tree.png",
+	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	always_remember = true,
+	can_pass = {pass_tree=1},
+	does_block_move = true,
+	block_sight = true,
+	dig = "GRASS",
+	nice_tiler = { method="replace", base={"SNOW_ELVEN_TREE", 100, 1, 30}},
+}
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="SNOW_ELVEN_TREE", define_as = "SNOW_ELVEN_TREE"..i, image = "terrain/snowy_grass.png"}, snow_treesdef))
+end
+
+local autumn_treesdef = {
+	{"elventree", {tall=-1, "shadow", "trunk", "foliage_autumn"}},
+	{"fat_elventree", {tall=-1, "shadow", "trunk", {"foliage_autumn_%02d",1,2}}},
+}
+
+newEntity{
+	define_as = "AUTUMN_ELVEN_TREE",
+	type = "wall", subtype = "autumn_grass",
+	name = "tree",
+	image = "terrain/tree.png",
+	display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43},
+	always_remember = true,
+	can_pass = {pass_tree=1},
+	does_block_move = true,
+	block_sight = true,
+	dig = "AUTUMN_GRASS",
+	nice_tiler = { method="replace", base={"AUTUMN_ELVEN_TREE", 100, 1, 30}},
+	nice_editer = autumn_grass_editer,
+}
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="AUTUMN_ELVEN_TREE", define_as = "AUTUMN_ELVEN_TREE"..i, image = "terrain/grass/grass_main_01.png"}, autumn_treesdef))
+end
diff --git a/game/modules/tome/data/general/grids/forest.lua b/game/modules/tome/data/general/grids/forest.lua
index 64b6eeee70341ccc772c1412272cebbaacf2f919..a06d2a336118d671bb0756982dc1265400b6d418 100644
--- a/game/modules/tome/data/general/grids/forest.lua
+++ b/game/modules/tome/data/general/grids/forest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -41,6 +41,18 @@ newEntity{
 	nice_editer = grasswm_editer,
 }
 
+local treesdef = {
+	{"small_elm", {"shadow", "trunk", "foliage_summer"}},
+	{"small_elm", {"shadow", "trunk", "foliage_summer"}},
+	{"elm", {tall=-1, "shadow", "trunk", "foliage_summer"}},
+	{"elm", {tall=-1, "shadow", "trunk", "foliage_summer"}},
+	{"light_pine", {tall=-1, "shadow", "trunk", {"foliage_%02d",1,4}}},
+	{"light_small_wider_pine", {"shadow", "trunk", {"foliage_%02d",1,4}}},
+	{"light_small_narrow_pine", {"shadow", "trunk", {"foliage_%02d",1,4}}},
+	{"cypress", {tall=-1, "shadow", "trunk", {"foliage_%02d",1,4}}},
+	{"small_cypress", {tall=-1, "shadow", "trunk", {"foliage_%02d",1,4}}},
+	{"tiny_cypress", {"shadow", "trunk", {"foliage_%02d",1,4}}},
+}
 
 newEntity{
 	define_as = "TREE",
@@ -56,7 +68,9 @@ newEntity{
 	nice_tiler = { method="replace", base={"TREE", 100, 1, 30}},
 	nice_editer = grass_editer,
 }
-for i = 1, 30 do newEntity{ base="TREE", define_as = "TREE"..i, image = "terrain/grass.png", add_displays = class:makeTrees("terrain/tree_alpha", 14, 9)} end
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="TREE", define_as = "TREE"..i, image = "terrain/grass.png"}, treesdef))
+end
 
 newEntity{
 	define_as = "HARDTREE",
@@ -72,7 +86,9 @@ newEntity{
 	nice_tiler = { method="replace", base={"HARDTREE", 100, 1, 30}},
 	nice_editer = grass_editer,
 }
-for i = 1, 30 do newEntity{ base="HARDTREE", define_as = "HARDTREE"..i, image = "terrain/grass.png", add_displays = class:makeTrees("terrain/tree_alpha", 14, 9) } end
+for i = 1, 30 do
+	newEntity(class:makeNewTrees({base="HARDTREE", define_as = "HARDTREE"..i, image = "terrain/grass.png"}, treesdef))
+end
 
 newEntity{
 	define_as = "FLOWER",
@@ -136,6 +152,7 @@ newEntity{
 	change_level = 1,
 	change_zone = "wilderness",
 	nice_editer = grass_editer,
+	shader = "tree",
 }
 
 newEntity{
diff --git a/game/modules/tome/data/general/grids/fortress.lua b/game/modules/tome/data/general/grids/fortress.lua
index ce6a0fa8654536a4f582e61ff94a252f278dc354..795f6a94a82803489e89f717cc46bc177f78fbdf 100644
--- a/game/modules/tome/data/general/grids/fortress.lua
+++ b/game/modules/tome/data/general/grids/fortress.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/ice.lua b/game/modules/tome/data/general/grids/ice.lua
index e59b0266a83f69dac5233275d293ba9c75b01767..c534bdb0a6e838d0ed23d3ca5cc6e5795327be9b 100644
--- a/game/modules/tome/data/general/grids/ice.lua
+++ b/game/modules/tome/data/general/grids/ice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/icecave.lua b/game/modules/tome/data/general/grids/icecave.lua
index ec8408989fb92d0909093264ebaa0c6388721539..adbb45db89f358069211ed603ce30fc566c6e312 100644
--- a/game/modules/tome/data/general/grids/icecave.lua
+++ b/game/modules/tome/data/general/grids/icecave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -78,7 +78,7 @@ newEntity{
 newEntity{ base = "ICECAVE_DOOR", define_as = "ICECAVE_DOOR_HORIZ", z=3, image = "terrain/icecave/icecave_door1.png", add_displays = {class.new{image="terrain/icecave/icecavewall_8_2.png", z=18, display_y=-1}}, door_opened = "ICECAVE_DOOR_HORIZ_OPEN"}
 newEntity{ base = "ICECAVE_DOOR_OPEN", define_as = "ICECAVE_DOOR_HORIZ_OPEN", image = "terrain/icecave/icecave_floor_1_01.png", add_mos={{image="terrain/icecave/icecave_door1_open_backg.png"}}, add_displays = {class.new{image="terrain/icecave/icecave_door1_open.png", z=17}, class.new{image="terrain/icecave/icecavewall_8_2.png", z=18, display_y=-1}}, door_closed = "ICECAVE_DOOR_HORIZ"}
 newEntity{ base = "ICECAVE_DOOR", define_as = "ICECAVE_DOOR_VERT", image = "terrain/icecave/icecave_floor_1_01.png", add_displays = {class.new{image="terrain/icecave/icecave_door1_vert.png", z=17}, class.new{image="terrain/icecave/icecave_door1_vert_north.png", z=18, display_y=-1}}, door_opened = "ICECAVE_DOOR_OPEN_VERT", dig = "ICECAVE_DOOR_OPEN_VERT"}
-newEntity{ base = "ICECAVE_DOOR_OPEN", define_as = "ICECAVE_DOOR_OPEN_VERT", z=3, image = "terrain/icecave/icecave_floor_1_01.png", add_mos={{image="terrain/icecave/icecave_door1_open_vert_backg.png"}}, add_displays = {class.new{image="terrain/icecave/icecave_door1_open_vert.png", z=17}, class.new{image="terrain/icecave/icecave_door1_open_vert_north.png", z=18, display_y=-1}}, door_closed = "ICECAVE_DOOR_VERT"}
+newEntity{ base = "ICECAVE_DOOR_OPEN", define_as = "ICECAVE_DOOR_OPEN_VERT", z=3, image = "terrain/icecave/icecave_floor_1_01.png", add_mos={{image="terrain/icecave/icecave_door1_open_vert_backg.png"}}, add_displays = {class.new{image="terrain/icecave/icecave_door1_open_vert.png", z=17, add_mos={{image="terrain/icecave/icecave_door1_open_vert_north_backg.png", display_y=-1}}}, class.new{image="terrain/icecave/icecave_door1_open_vert_north.png", z=18, display_y=-1}}, door_closed = "ICECAVE_DOOR_VERT"}
 
 -----------------------------------------
 -- Cavy exits
@@ -105,7 +105,7 @@ newEntity{
 newEntity{
 	define_as = "ICECAVE_LADDER_UP_WILDERNESS",
 	type = "floor", subtype = "icecave",
-	name = "ladder to worldmap", image = "terrain/icecave/icecave_floor_1_01.png", add_displays = {class.new{image="terrain/icecave/icecave_stairs_up_2_01.png"}},
+	name = "ladder to worldmap", image = "terrain/icecave/icecave_floor_1_01.png", add_displays = {class.new{image="terrain/icecave/icecave_stairs_exit_1_01.png"}},
 	display = '<', color_r=255, color_g=255, color_b=0,
 	notice = true,
 	change_level = 1,
diff --git a/game/modules/tome/data/general/grids/jungle.lua b/game/modules/tome/data/general/grids/jungle.lua
index f40b161edca8d63b79cb3aa3971e80d82fa46a78..0c9e0aee056c9bcafac0bc9b1e540cb55e9e22a6 100644
--- a/game/modules/tome/data/general/grids/jungle.lua
+++ b/game/modules/tome/data/general/grids/jungle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -41,7 +41,7 @@ for i = 1, 4 do
 	newEntity{ base = "JUNGLE_GRASS", define_as = "JUNGLE_GRASS_PATCH"..(i+5+8+3), add_displays={class.new{z=3,image = "terrain/jungle/jungle_dirt_var_"..i.."_64_01.png"}} }
 end
 for i = 1, 4 do
-	newEntity{ base = "JUNGLE_GRASS", define_as = "JUNGLE_GRASS_PATCH"..(i+5+8+3+4), add_displays={class.new{z=3,image = "terrain/jungle/jungle_plant_0"..i..".png"}} }
+	newEntity{ base = "JUNGLE_GRASS", define_as = "JUNGLE_GRASS_PATCH"..(i+5+8+3+4), add_displays={class.new{z=3,image = "terrain/jungle/jungle_plant_0"..i..".png", shader="tree"}} }
 end
 
 newEntity{
diff --git a/game/modules/tome/data/general/grids/jungle_hut.lua b/game/modules/tome/data/general/grids/jungle_hut.lua
index cd9ae8bc0c64daa0c672e093da94859764940f9b..28aa6ae2d23d95efa266f8d44f55bea484308909 100644
--- a/game/modules/tome/data/general/grids/jungle_hut.lua
+++ b/game/modules/tome/data/general/grids/jungle_hut.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,7 +22,7 @@
 -----------------------------------------
 newEntity{
 	define_as = "BAMBOO_HUT_FLOOR",
-	type = "floor", subtype = "bamboo hut",
+	type = "floor", subtype = "bamboo floor",
 	name = "bamboo hut floor", image = "terrain/bamboo/hut_dirt_floor_01.png",
 	display = '.', color=colors.UMBER, back_color=colors.DARK_UMBER,
 	grow = "BAMBOO_HUT_WALL",
@@ -42,7 +42,7 @@ newEntity{
 	block_sight = true,
 	air_level = -5,
 	dig = "BAMBOO_HUT_FLOOR",
-	nice_tiler = { method="singleWall", type="wall",
+	nice_tiler = { method="singleWall",  use_subtype=true, type="bamboo hut",
 		v_full={"BHW_V_FULL", 100, 1, 1},
 		h_full={"BHW_H_FULL", 20, 1, 8},
 		n_cross={"BHW_N_CROSS", 100, 1, 1},
@@ -82,7 +82,7 @@ newEntity{base="BAMBOO_HUT_WALL", define_as="BHW_SW1", add_displays={class.new{z
 -----------------------------------------
 newEntity{
 	define_as = "BAMBOO_HUT_DOOR",
-	type = "wall", subtype = "floor",
+	type = "wall", subtype = "bamboo hut",
 	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" },
@@ -95,7 +95,7 @@ newEntity{
 }
 newEntity{
 	define_as = "BAMBOO_HUT_DOOR_OPEN",
-	type = "wall", subtype = "floor",
+	type = "wall", subtype = "bamboo hut",
 	name = "open door", image = "terrain/bamboo/hut_dirt_floor_01.png",
 	display = "'", color=colors.LIGHT_UMBER, back_color=colors.DARK_UMBER,
 	always_remember = true,
diff --git a/game/modules/tome/data/general/grids/lava.lua b/game/modules/tome/data/general/grids/lava.lua
index c5d24bd8270fd4991c4aa8f05d01f7b7dfd7c81a..05ba74b480329238fc03316139d03e885263cdce 100644
--- a/game/modules/tome/data/general/grids/lava.lua
+++ b/game/modules/tome/data/general/grids/lava.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/mountain.lua b/game/modules/tome/data/general/grids/mountain.lua
index 1a41a54f8cd87a4510cbc93da7590e45fade3af4..9f51546ae8eac1631499d0b6a7396fac8e93fce7 100644
--- a/game/modules/tome/data/general/grids/mountain.lua
+++ b/game/modules/tome/data/general/grids/mountain.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -56,12 +56,16 @@ newEntity{
 	nice_tiler = { method="replace", base={"ROCKY_SNOWY_TREE", 100, 1, 30} },
 }
 for i = 1, 30 do
-newEntity{ base="ROCKY_SNOWY_TREE",
-	define_as = "ROCKY_SNOWY_TREE"..i,
-	image = "terrain/rocky_ground.png",
-	add_displays = class:makeTrees("terrain/tree_dark_snow", 13, 10),
-	nice_tiler = false,
-}
+	newEntity(class:makeNewTrees({base="ROCKY_SNOWY_TREE", define_as = "ROCKY_SNOWY_TREE"..i, image = "terrain/rocky_ground.png", nice_tiler = false}, {
+		{"small_elm", {"shadow", "trunk", "foliage_winter"}},
+		{"elm", {tall=-1, "shadow", "trunk", "foliage_winter"}},
+		{"pine", {tall=-1, "shadow", "trunk", {"foliage_winter_%02d", 1, 2}, shader_args={attenuation=14}}},
+		{"small_narrow_pine", {"shadow", "trunk", {"foliage_winter_%02d", 1, 2}, shader_args={attenuation=14}}},
+		{"small_wider_pine", {"shadow", "trunk", {"foliage_winter_%02d", 1, 2}, shader_args={attenuation=14}}},
+		{"cypress", {tall=-1, "shadow", "trunk", {"foliage_winter_%02d",1,2}}},
+		{"small_cypress", {tall=-1, "shadow", "trunk", {"foliage_winter_%02d",1,2}}},
+		{"tiny_cypress", {"shadow", "trunk", {"foliage_winter_%02d",1,2}}},
+	}))
 end
 
 newEntity{
diff --git a/game/modules/tome/data/general/grids/sand.lua b/game/modules/tome/data/general/grids/sand.lua
index b695bc1c418fcdc88cd86495b748520fd38758a2..edbc1e663520757a888ac414f2af55b2a3a0765c 100644
--- a/game/modules/tome/data/general/grids/sand.lua
+++ b/game/modules/tome/data/general/grids/sand.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -122,7 +122,7 @@ newEntity{
 	nice_tiler = { method="replace", base={"PALMTREE", 100, 1, 20}},
 	nice_editer = sand_editer,
 }
-for i = 1, 20 do newEntity{ base="PALMTREE", define_as = "PALMTREE"..i, image = "terrain/sandfloor.png", add_displays = class:makeTrees("terrain/palmtree_alpha", 8, 5) } end
+for i = 1, 20 do newEntity{ base="PALMTREE", define_as = "PALMTREE"..i, image = "terrain/sandfloor.png", add_displays = class:makeTrees("terrain/palmtree_alpha", 8, 5, nil, 25) } end
 
 -----------------------------------------
 -- Sandy exits
diff --git a/game/modules/tome/data/general/grids/slime.lua b/game/modules/tome/data/general/grids/slime.lua
index dbef0923139602dcc6e8fbc236b24816523135be..3a40f267614f67a20c51ee4db90b7db24b00f956 100644
--- a/game/modules/tome/data/general/grids/slime.lua
+++ b/game/modules/tome/data/general/grids/slime.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/underground.lua b/game/modules/tome/data/general/grids/underground.lua
index 029ee1f6465a249d486e00eaa05b3eb891a448fe..f40f352c5c1e48f1982137575a99d9571527a8ab 100644
--- a/game/modules/tome/data/general/grids/underground.lua
+++ b/game/modules/tome/data/general/grids/underground.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/void.lua b/game/modules/tome/data/general/grids/void.lua
index df493e3aed7a585d3b307ef78924c46b02762729..d8c2b6eb97a9856bdafde5cc72278ac8b570a9a5 100644
--- a/game/modules/tome/data/general/grids/void.lua
+++ b/game/modules/tome/data/general/grids/void.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/grids/water.lua b/game/modules/tome/data/general/grids/water.lua
index 1884bebabc94f6b2df82bd1b036d3559d08aeda8..fbed20788c8b1d938fc6aaabef16c9ed83b5adfb 100644
--- a/game/modules/tome/data/general/grids/water.lua
+++ b/game/modules/tome/data/general/grids/water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/all.lua b/game/modules/tome/data/general/npcs/all.lua
index e1673bcf9b6c6bfeeabe2bf8c83c31ffc47a5cd0..f0e74376f7c0c57438ab7bec3755e58e8022d0b2 100644
--- a/game/modules/tome/data/general/npcs/all.lua
+++ b/game/modules/tome/data/general/npcs/all.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/ant.lua b/game/modules/tome/data/general/npcs/ant.lua
index 689dd64f600c8d069b08b9ec58e56ea9f537e601..05cb98ad3088256a93754de95bc094d41eba40ba 100644
--- a/game/modules/tome/data/general/npcs/ant.lua
+++ b/game/modules/tome/data/general/npcs/ant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/aquatic_critter.lua b/game/modules/tome/data/general/npcs/aquatic_critter.lua
index 9dbead7c1d5e0ea80b970789f7f727a6b9ecb53c..7a2c0a7965e74981d42f73c129cb2cca15d3cef2 100644
--- a/game/modules/tome/data/general/npcs/aquatic_critter.lua
+++ b/game/modules/tome/data/general/npcs/aquatic_critter.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/aquatic_demon.lua b/game/modules/tome/data/general/npcs/aquatic_demon.lua
index 465cd9c9b8ffb6661ae5a5428645331ae2d651c1..35f9185ab0155d4442933a0e8a97479d4281e57f 100644
--- a/game/modules/tome/data/general/npcs/aquatic_demon.lua
+++ b/game/modules/tome/data/general/npcs/aquatic_demon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -60,7 +60,7 @@ newEntity{ base = "BASE_NPC_AQUATIC_DEMON",
 
 newEntity{ base = "BASE_NPC_AQUATIC_DEMON",
 	name = "Walrog", color=colors.DARK_SEA_GREEN, unique=true,
-	desc = "Walrog, the lord of Water",
+	desc = "Walrog, the lord of Water, is fearsome to behold. The water writhes around him as if trying to escape, making his form indistinct. He does not seem surprised to see you.",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/aquatic_demon_walrog.png", display_h=2, display_y=-1}}},
 	level_range = {20, 30}, exp_worth = 1,
 	rarity = 50,
diff --git a/game/modules/tome/data/general/npcs/bear.lua b/game/modules/tome/data/general/npcs/bear.lua
index 801fffce6449de2f7132b027aedd3b20c3ee8e31..4f2f178a359f6aa1f01fae5ed88ccb6e9d1fc83e 100644
--- a/game/modules/tome/data/general/npcs/bear.lua
+++ b/game/modules/tome/data/general/npcs/bear.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/bird.lua b/game/modules/tome/data/general/npcs/bird.lua
index 29e2cf51121e5a99a16c94429fec2d4851f7e1a6..bfacce1c34d128cf5eace197f3df8980930fc0ef 100644
--- a/game/modules/tome/data/general/npcs/bird.lua
+++ b/game/modules/tome/data/general/npcs/bird.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/bone-giant.lua b/game/modules/tome/data/general/npcs/bone-giant.lua
index e26387c97d79c8d8f4a8212b32c452bd31b9c2db..0a40a37db5e79b5eb97b1232dcd61b1b88fbdb5e 100644
--- a/game/modules/tome/data/general/npcs/bone-giant.lua
+++ b/game/modules/tome/data/general/npcs/bone-giant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/canine.lua b/game/modules/tome/data/general/npcs/canine.lua
index c3571cba5df6450d2dea8bee93deb3b4b9f275b9..3364d7543639af216f4e723e325a7cf2198a435b 100644
--- a/game/modules/tome/data/general/npcs/canine.lua
+++ b/game/modules/tome/data/general/npcs/canine.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/cold-drake.lua b/game/modules/tome/data/general/npcs/cold-drake.lua
index 7110bb6477476ec0e0724b5a2c97c8a09af744a0..29c01568267856d0841a17c9f0f1bb895fa51355 100644
--- a/game/modules/tome/data/general/npcs/cold-drake.lua
+++ b/game/modules/tome/data/general/npcs/cold-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -64,7 +64,7 @@ newEntity{ base = "BASE_NPC_COLD_DRAKE",
 
 newEntity{ base = "BASE_NPC_COLD_DRAKE", define_as = "NPC_COLD_DRAKE",
 	name = "cold drake", color=colors.SLATE, display="D",
-	desc = [[A mature cold drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[A mature cold drake, armed with deadly breath and nasty claws.]],
 	level_range = {14, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(100,110),
@@ -88,7 +88,7 @@ newEntity{ base = "BASE_NPC_COLD_DRAKE", define_as = "NPC_COLD_DRAKE",
 
 newEntity{ base = "BASE_NPC_COLD_DRAKE",
 	name = "ice wyrm", color=colors.AQUAMARINE, display="D",
-	desc = [[An old and powerful cold drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[An old and powerful cold drake, armed with deadly breath and nasty claws.]],
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/dragon_cold_ice_wyrm.png", display_h=2, display_y=-1}}},
 	level_range = {25, nil}, exp_worth = 1,
 	rarity = 5,
diff --git a/game/modules/tome/data/general/npcs/construct.lua b/game/modules/tome/data/general/npcs/construct.lua
index c6f498c7792f2f5459cd1f7a048150251988d8b0..3e55d8510559420c39d50242351daa3fc896406f 100644
--- a/game/modules/tome/data/general/npcs/construct.lua
+++ b/game/modules/tome/data/general/npcs/construct.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/elven-caster.lua b/game/modules/tome/data/general/npcs/elven-caster.lua
index 28a894d169e7181bc519219c562d784530b87bbc..9650140ea44742db4153b092be474f741b0df0fc 100644
--- a/game/modules/tome/data/general/npcs/elven-caster.lua
+++ b/game/modules/tome/data/general/npcs/elven-caster.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/elven-warrior.lua b/game/modules/tome/data/general/npcs/elven-warrior.lua
index d8ab57420f29b00b947e93a59211ff98e55bdec0..2ec94b2ed68f933cb495bd240aff6d820e932120 100644
--- a/game/modules/tome/data/general/npcs/elven-warrior.lua
+++ b/game/modules/tome/data/general/npcs/elven-warrior.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/faeros.lua b/game/modules/tome/data/general/npcs/faeros.lua
index aaef93d540914a0047b76959cc8dd32cb558c636..b900a03e1adaac0719dc6b12d9dca7fba45bc2eb 100644
--- a/game/modules/tome/data/general/npcs/faeros.lua
+++ b/game/modules/tome/data/general/npcs/faeros.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/feline.lua b/game/modules/tome/data/general/npcs/feline.lua
index 1b51d21ead7fb349e114712064d94576e5b3dba4..cf91c213f88330c5489ac93305da56c4538fd33a 100644
--- a/game/modules/tome/data/general/npcs/feline.lua
+++ b/game/modules/tome/data/general/npcs/feline.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/fire-drake.lua b/game/modules/tome/data/general/npcs/fire-drake.lua
index 07b5e3841233906cc6e91550e5b543981c1ff1fa..5dabc16986e4a4beb8049e6508165d1d5bdc3508 100644
--- a/game/modules/tome/data/general/npcs/fire-drake.lua
+++ b/game/modules/tome/data/general/npcs/fire-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -61,7 +61,7 @@ newEntity{ base = "BASE_NPC_FIRE_DRAKE",
 
 newEntity{ base = "BASE_NPC_FIRE_DRAKE",
 	name = "fire drake", color=colors.RED, display="D",
-	desc = [[A mature fire drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[A mature fire drake, armed with deadly breath and nasty claws.]],
 	level_range = {14, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(100,110),
@@ -83,7 +83,7 @@ newEntity{ base = "BASE_NPC_FIRE_DRAKE",
 
 newEntity{ base = "BASE_NPC_FIRE_DRAKE",
 	name = "fire wyrm", color=colors.LIGHT_RED, display="D",
-	desc = [[An old and powerful fire drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[An old and powerful fire drake, armed with deadly breath and nasty claws.]],
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/dragon_fire_fire_wyrm.png", display_h=2, display_y=-1}}},
 	level_range = {25, nil}, exp_worth = 1,
 	rarity = 5,
diff --git a/game/modules/tome/data/general/npcs/ghost.lua b/game/modules/tome/data/general/npcs/ghost.lua
index f7e3ff702656a0db4938adcaa14a95d636b5353c..dc4a48b08f583f9dbe8ce8fce7b8efa18ba68530 100644
--- a/game/modules/tome/data/general/npcs/ghost.lua
+++ b/game/modules/tome/data/general/npcs/ghost.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -79,7 +79,7 @@ newEntity{ base = "BASE_NPC_GHOST",
 
 newEntity{ base = "BASE_NPC_GHOST",
 	name = "dreadmaster", color=colors.YELLOW, image="npc/dreadmaster.png",
-	desc = [[It is an unlife of power almost unequalled. An affront to existence, its very touch abuses and disrupts the flow of life, and its unearthly limbs, of purest black, crumble rock and wither flesh with ease.]],
+	desc = [[It is an unlife of power almost unequaled. An affront to existence, its very touch abuses and disrupts the flow of life, and its unearthly limbs, of purest black, crumble rock and wither flesh with ease.]],
 	level_range = {32, nil}, exp_worth = 1,
 	rarity = 15,
 	rank = 3,
diff --git a/game/modules/tome/data/general/npcs/ghoul.lua b/game/modules/tome/data/general/npcs/ghoul.lua
index f1b920fff685ace9730aca3273a4659291ffed55..82ac786be969da607ffec7f620d0ee7950649f7a 100644
--- a/game/modules/tome/data/general/npcs/ghoul.lua
+++ b/game/modules/tome/data/general/npcs/ghoul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -86,7 +86,7 @@ newEntity{ base = "BASE_NPC_GHOUL",
 
 newEntity{ base = "BASE_NPC_GHOUL",
 	name = "ghoulking", color={0,0,0},
-	desc = [[Stench rises from this rotting abomination. Its brow is adorned with gold, and it moves at you with hatred gleaming from its eyes.]],
+	desc = [[Stench rises from this rotting abomination. Its brow is adorned with gold, and it moves at you with hatred gleaming in its eyes.]],
 	level_range = {15, nil}, exp_worth = 1,
 	rarity = 6,
 	max_life = resolvers.rngavg(90,100),
diff --git a/game/modules/tome/data/general/npcs/gwelgoroth.lua b/game/modules/tome/data/general/npcs/gwelgoroth.lua
index 6118a2a33a14805f8687c73f7678831e0789fbea..76207aecdf103aa076d1c4c5fba404a78a64ea3d 100644
--- a/game/modules/tome/data/general/npcs/gwelgoroth.lua
+++ b/game/modules/tome/data/general/npcs/gwelgoroth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/horror-corrupted.lua b/game/modules/tome/data/general/npcs/horror-corrupted.lua
index 32d97a6b0f6c4dae6b65cf14e98e060f909b0e31..465c900ac9aeea9504abfd37bf96f53e81f07003 100644
--- a/game/modules/tome/data/general/npcs/horror-corrupted.lua
+++ b/game/modules/tome/data/general/npcs/horror-corrupted.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/horror-undead.lua b/game/modules/tome/data/general/npcs/horror-undead.lua
index 16d4338bb20977e8dd03171979cc945b24a6d925..0843706f065a5a35634a1c1ea5599663657d9c15 100644
--- a/game/modules/tome/data/general/npcs/horror-undead.lua
+++ b/game/modules/tome/data/general/npcs/horror-undead.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -48,7 +48,7 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
 	desc ="This putrid mass of rotting flesh shifts and quivers, but shows no signs of intelligence or mobility.",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_necrotic_mass.png", display_h=2, display_y=-1}}},
 	level_range = {15, nil}, exp_worth = 1,
-	rarity = 3,
+	rarity = 4,
 	rank = 1,
 	size_category = 2, life_rating = 7,
 	combat_armor = 0, combat_def = 0,
@@ -63,17 +63,17 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
 	desc ="This monstrous form of putrid, torn flesh and chipped bone drags its mass towards you, spurting blood and viscera along the way.",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_necrotic_abomination.png", display_h=2, display_y=-1}}},
 	level_range = {30, nil}, exp_worth = 1,
-	rarity = 8,
+	rarity = 7,
 	rank = 3,
 	size_category = 4,
 	combat_armor = 0, combat_def = 40,
-	max_life=400,
+	max_life=400, life_rating=11,
 	disease_immune = 1,
 	
 	combat = {
 		dam=resolvers.levelup(resolvers.rngavg(40,45), 1, 1.2),
 		atk=resolvers.rngavg(60,80), apr=20,
-		dammod={mag=1.2}, physcrit = 10,
+		dammod={mag=1.3}, physcrit = 10,
 		damtype=engine.DamageType.BLIGHT,
 	},
 	
@@ -106,7 +106,7 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
 	desc ="The massive ribcage in the middle beats with loud, audible cracks, as many a skeletal hand protrude forth, entwining, fusing, forming long skeletal appendages to support itself, while others crumble and collapse inward. During all this, somehow, it seems they grasp for you.",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_bone_horror.png", display_h=2, display_y=-1}}},
 	level_range = {30, nil}, exp_worth = 1,
-	rarity = 8,
+	rarity = 7,
 	rank = 3,
 	size_category = 4,
 	combat_armor = 30, combat_def = 0,
@@ -124,7 +124,7 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
 	autolevel = "warriormage",
 	
 	summon = {
-		{type="undead", subtype = "skeleton", number=4, hasxp=false},
+		{type="undead", subtype = "skeleton", number=5, hasxp=false},
 	},
 	
 	resolvers.talents{
@@ -151,13 +151,15 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
 	desc ="This pulsing, quivering form is a deep crimson, and appears to be composed entirely of thick, virulent blood. Waves rhythmically ripple across its surface, indicating a still beating heart somewhere in its body.",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_sanguine_horror.png", display_h=2, display_y=-1}}},
 	level_range = {30, nil}, exp_worth = 1,
-	rarity = 8,
-	rank = 3,
+	rarity = 7,
+	rank = 3, life_rating = 13,
 	size_category = 4,
 	combat_armor = 30, combat_def = 0,
 	max_life=400,
 	stats = { con=50, },
 	
+	lifesteal=15,
+	
 	combat = {
 		dam=resolvers.levelup(resolvers.rngavg(50,60), 1, 1.2),
 		atk=resolvers.rngavg(60,80), apr=20,
@@ -197,5 +199,5 @@ newEntity{ base = "BASE_NPC_HORROR_UNDEAD",
 	size_category = 2, life_rating = 7,
 	combat_armor = 0, combat_def = 0,
 	max_life=100,
-	combat = {dam=resolvers.levelup(resolvers.mbonus(25, 15), 1, 1.1), apr=0, atk=resolvers.mbonus(30, 15), dammod={str=0.6}},
+	combat = {dam=resolvers.levelup(resolvers.mbonus(25, 15), 1, 1.1), apr=0, atk=resolvers.mbonus(30, 15), dammod={str=0.6}, damtype=engine.DamageType.DRAINLIFE,},
 }
\ No newline at end of file
diff --git a/game/modules/tome/data/general/npcs/horror.lua b/game/modules/tome/data/general/npcs/horror.lua
index b4f6bf5cc1a9e7126dabaf6fb06841ad6cd44426..dea319476222ca6bb148cefdf9fcc83183b78d94 100644
--- a/game/modules/tome/data/general/npcs/horror.lua
+++ b/game/modules/tome/data/general/npcs/horror.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -559,6 +559,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 
 	on_move = function(self)
 			local DamageType = require "engine.DamageType"
+			local MapEffect = require "engine.MapEffect"
 			local duration = 10
 			local radius = 0
 			local dam = 25
@@ -568,7 +569,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 				engine.DamageType.SLIME, 25,
 				radius,
 				5, nil,
-				engine.Entity.new{alpha=100, display='', color_br=25, color_bg=140, color_bb=40},
+				MapEffect.new{color_br=25, color_bg=140, color_bb=40, effect_shader="shader_images/retch_effect.png"},
 				function(e)
 					e.radius = e.radius
 					return true
@@ -901,14 +902,12 @@ newEntity{ base="BASE_NPC_HORROR", define_as = "GRGGLCK_TENTACLE",
 	end,
 }
 
-
---MUHUHAHAHAHAHAHA
 newEntity{ base = "BASE_NPC_HORROR",
 	name = "Ak'Gishil", color=colors.GREY, unique = true,
-	desc = "This blade horror has grown in power dramatically, and become a nexus of temporal energy. Rifts in space open around it constantly, summoning and banishing blades before vanishing as quickly as they appear.",
+	desc = "This Blade Horror has been infused with intense temporal magic, causing its power to increase dramatically. Rifts in space open around it constantly, summoning and banishing blades before vanishing as quickly as they appear.",
 	resolvers.nice_tile{tall=1},
 	level_range = {30, nil}, exp_worth = 2,
-	rarity = 50,
+	rarity = 45,
 	rank = 3.5,
 	levitate=1,
 	max_psi= 320,
@@ -918,14 +917,18 @@ newEntity{ base = "BASE_NPC_HORROR",
 	max_life = resolvers.rngavg(150, 180),
 	life_rating = 32,
 	life_regen = 0.25,
+	global_speed_base = 1.2,
 	combat_armor = 30, combat_def = 18,
 	is_akgishil = true,
+	can_spawn = 1,
+	psionic_shield_override = 1,
 	
 	resolvers.drops{chance=100, nb=1, {defined="BLADE_RIFT"} },
 	
 	ai = "tactical", ai_state = { ai_move="move_complex", talent_in=2, ally_compassion=0 },
 		
-	on_melee_hit = {[DamageType.PHYSICALBLEED]=resolvers.mbonus(32, 5)},
+	on_melee_hit = {[DamageType.PHYSICALBLEED]=resolvers.mbonus(12, 5)},
+	melee_project = {[DamageType.PHYSICALBLEED]=resolvers.mbonus(32, 5)},
 	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, },
 	--combat_physspeed = 4, --Crazy fast attack rate
 	
@@ -936,9 +939,12 @@ newEntity{ base = "BASE_NPC_HORROR",
 	end,
 
 	on_act = function(self)
-		if self.blades > 3 or not rng.percent(18) then return end
+		if not self:attr("can_spawn") then return end
+		if self.blades > 4 or not rng.percent(28/(self.blades+1)) then return end
+		self.can_spawn = nil
 		self.blades = self.blades + 1
-			self:forceUseTalent(self.T_ANIMATE_BLADE, {ignore_cd=true, force_level=1})
+		self:forceUseTalent(self.T_ANIMATE_BLADE, {ignore_cd=true, ignore_energy=true, force_level=1})
+		self.can_spawn = 1
 	end,
 	
 	resolvers.talents{
@@ -949,6 +955,9 @@ newEntity{ base = "BASE_NPC_HORROR",
 		[Talents.T_PSIONIC_PULL]={base=5, every=3, max=7},
 		[Talents.T_KINETIC_AURA]={base=4, every=3, max=8},
 		[Talents.T_KINETIC_SHIELD]={base=5, every=2, max=9},
+		[Talents.T_THERMAL_SHIELD]={base=3, every=2, max=9},
+		[Talents.T_CHARGED_SHIELD]={base=3, every=2, max=9},
+		[Talents.T_ABSORPTION_MASTERY]=6,
 		[Talents.T_KINETIC_LEECH]={base=3, every=3, max=5},
 		--TEMPORAL
 		[Talents.T_STATIC_HISTORY]={base=1, every=4, max=5},
@@ -956,28 +965,32 @@ newEntity{ base = "BASE_NPC_HORROR",
 		[Talents.T_WEAPON_FOLDING]={base=1, every=4, max=5},
 		[Talents.T_RETHREAD]={base=2, every=4, max=5},
 		[Talents.T_DIMENSIONAL_STEP]={base=3, every=4, max=5},
+		
+		[Talents.T_THROUGH_THE_CROWD]=1,
 	},
 	resolvers.sustains_at_birth(),
 }
 
 newEntity{ base="BASE_NPC_HORROR", define_as = "ANIMATED_BLADE",
+	resolvers.nice_tile{tall=1},
 	type = "construct", subtype = "weapon", image="object/magical_animated_sword.png",
 	name = "Animated Sword",
 	color = colors.GREY,
 	desc = [[Time seems to warp and bend around this floating weapon.]],
 	level_range = {30, nil}, exp_worth = 0,
-	max_life = 75, life_rating = 3,
+	max_life = 75, life_rating = 4, fixed_rating=true,
 	rank = 2,
 	no_breath = 1,
 	size_category = 2,
 
-	negative_status_immune = 1,
+	negative_status_effect_immune = 1,
+	body = { INVEN = 10, MAINHAND=1 },
 	
 	resolvers.equip{
 		{type="weapon", subtype="longsword", ego_chance = 100, autoreq=true},
 	},
 	
-	resists = {[DamageType.MIND] = 75, [DamageType.TEMPORAL] = 30,},
+	resists = {[DamageType.MIND] = 75, [DamageType.TEMPORAL] = 30, all=10},
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, ai_move="move_astar" },
@@ -990,7 +1003,7 @@ newEntity{ base="BASE_NPC_HORROR", define_as = "ANIMATED_BLADE",
 	},
 	
 	on_added_to_level = function(self)
-		self:teleportRandom(self.x, self.y, 3)
+		self:teleportRandom(self.x, self.y, 7)
 		game.logSeen(self, "A rift opens, spawning a free floating blade!")
 		game.level.map:addEffect(self,
 			self.x, self.y, 3,
@@ -1024,12 +1037,14 @@ newEntity{ base="BASE_NPC_HORROR", define_as = "DISTORTED_BLADE",
 	color = colors.GREY,
 	desc = [[This floating weapon shifts and shimmers, time and space warping and bending as it moves. It appears to vibrate, as if it may explode at any moment.]],
 	level_range = {30, nil}, exp_worth = 0,
-	max_life = 100, life_rating = 6,
+	max_life = 100, life_rating = 10,
 	rank = 3.5,
 	no_breath = 1,
 	size_category = 2,
 
-	negative_status_immune = 1,
+	negative_status_effect_immune = 1,
+	
+	body = { INVEN = 10, MAINHAND=1 },
 	
 	resolvers.equip{
 		{type="weapon", subtype="longsword", define_as="RIFT_SWORD", autoreq=true},
@@ -1037,20 +1052,22 @@ newEntity{ base="BASE_NPC_HORROR", define_as = "DISTORTED_BLADE",
 	
 	resolvers.drops{chance=100, nb=1, {defined="RIFT_SWORD"} },
 	
-	resists = {[DamageType.MIND] = 75, [DamageType.TEMPORAL] = 40,},
+	resists = {[DamageType.MIND] = 75, [DamageType.TEMPORAL] = 40, all=15,},
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, ai_move="move_astar" },
 	
 	resolvers.talents{
 		[Talents.T_SWAP]={base=1, every=4, max=4},
-		[Talents.T_WEAPON_COMBAT]={base=1, every=8, max=5},
-		[Talents.T_WEAPONS_MASTERY]={base=4, every=4, max=6},
+		[Talents.T_WEAPON_COMBAT]={base=3, every=8, max=8},
+		[Talents.T_WEAPONS_MASTERY]={base=4, every=4, max=7},
 		[Talents.T_DIMENSIONAL_STEP]={base=2, every=4, max=5},
+		[Talents.T_WEAPON_FOLDING]={base=2, every=4, max=5},
+		[Talents.T_TEMPORAL_WAKE]={base=2, every=4, max=5},
 	},
 	
 	on_added_to_level = function(self)
-		self:teleportRandom(self.x, self.y, 3)
+		self:teleportRandom(self.x, self.y, 10)
 		game.logSeen(self, "A rift opens, a blade emerging. It does not look like the others.")
 		game.level.map:addEffect(self,
 			self.x, self.y, 5,
@@ -1071,6 +1088,7 @@ newEntity{ base="BASE_NPC_HORROR", define_as = "DISTORTED_BLADE",
 	end,
 
 	on_act = function(self)
+		self.paradox = self.paradox + 20
 		if self.summoner and self.summoner:attr("dead") then
 			self:die()
 			game.logSeen(self, "#AQUAMARINE#With the horror's death the chaotic blade clatters to the ground!")
diff --git a/game/modules/tome/data/general/npcs/horror_aquatic.lua b/game/modules/tome/data/general/npcs/horror_aquatic.lua
index dc356c00342632f4aab8d2cc55a569603aaee706..21ec1628d58c64544bcf576fc224ddd9444f4e37 100644
--- a/game/modules/tome/data/general/npcs/horror_aquatic.lua
+++ b/game/modules/tome/data/general/npcs/horror_aquatic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/horror_temporal.lua b/game/modules/tome/data/general/npcs/horror_temporal.lua
index 1959083cc5caa5e75349f4efd7c00b66630cc3e7..6d18fa7fb4283f8760d59ccb49e7fe936c113b3b 100644
--- a/game/modules/tome/data/general/npcs/horror_temporal.lua
+++ b/game/modules/tome/data/general/npcs/horror_temporal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/humanoid_random_boss.lua b/game/modules/tome/data/general/npcs/humanoid_random_boss.lua
index a426bed6fa57b23587a11f7f2b8af1afbe0971ad..01bcdb4875288887cba677ea90a9f9b80b1ae15f 100644
--- a/game/modules/tome/data/general/npcs/humanoid_random_boss.lua
+++ b/game/modules/tome/data/general/npcs/humanoid_random_boss.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/jelly.lua b/game/modules/tome/data/general/npcs/jelly.lua
index 252065d32d0553af00ec463beeadcbcbd97b9edf..788d6b5b089da6f9a071530877716ed7c959d584 100644
--- a/game/modules/tome/data/general/npcs/jelly.lua
+++ b/game/modules/tome/data/general/npcs/jelly.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/lich.lua b/game/modules/tome/data/general/npcs/lich.lua
index 0ea9680c6a8a2a69a68d6843a3646f78cb7111b9..d4dbc782bd008ce4a9ea9eda18fb42f12d889c7c 100644
--- a/game/modules/tome/data/general/npcs/lich.lua
+++ b/game/modules/tome/data/general/npcs/lich.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/losgoroth.lua b/game/modules/tome/data/general/npcs/losgoroth.lua
index 8536a0de02bb1dd6d1413103fd0892306104c95a..9de25491cae2f9911405560e91cd32e077ee174a 100644
--- a/game/modules/tome/data/general/npcs/losgoroth.lua
+++ b/game/modules/tome/data/general/npcs/losgoroth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/major-demon.lua b/game/modules/tome/data/general/npcs/major-demon.lua
index 4400a64164996890ac5ed37f926073575247b16c..ba35589f1f7d1ac7463c300b2226c05b6f8b4eda 100644
--- a/game/modules/tome/data/general/npcs/major-demon.lua
+++ b/game/modules/tome/data/general/npcs/major-demon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -95,7 +95,7 @@ newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	name = "uruivellas", color=colors.LIGHT_RED, -- Hot strength
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/demon_major_uruivellas.png", display_h=2, display_y=-1}}},
-	desc = [[This demon would look like a minotaur, if a minotaur had a fiery aura surrounding it and horns all over the body.
+	desc = [[This demon would look like a minotaur, if a minotaur had a fiery aura surrounding it and horns all over its body.
 Oh, and it is twice as big, too.]],
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 4,
@@ -200,7 +200,7 @@ It moves swiftly toward you, casting terrible spells and swinging its weapons at
 
 newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	name = "champion of Urh'Rok", color=colors.GREY,
-	desc = [[One of Urh'Rok's own champions. A thousand nightmares made flesh and screaming steel towering before you in the form of a massive, armored humanoid.]],
+	desc = [[One of Urh'Rok's own champions. A thousand nightmares made flesh and screaming steel tower before you in the form of a massive, armored humanoid.]],
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/demon_major_champion_of_urh_rok.png", display_h=2, display_y=-1}}},
 	level_range = {43, nil}, exp_worth = 1,
 	rarity = 7,
@@ -244,7 +244,7 @@ newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 
 newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	name = "forge-giant", color=colors.RED,
-	desc = [[A burning giant wielding a forge hammer of the underworld in each hand-- weapons imbued by Urh'Rok himself with the power to crush and shape felsteel. Enter their range at your peril.]],
+	desc = [[A burning giant wielding a forge hammer of the underworld in each hand -- weapons imbued by Urh'Rok himself with the power to crush and shape felsteel. Enter their range at your peril.]],
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/demon_major_forge_giant.png", display_h=2, display_y=-1}}},
 	level_range = {47, nil}, exp_worth = 1,
 	rarity = 8,
diff --git a/game/modules/tome/data/general/npcs/minor-demon.lua b/game/modules/tome/data/general/npcs/minor-demon.lua
index eedb854283b4274fd45898e7f47acfd690bf3fdd..ba91341c7a99f9db55450242da715ff85e493cf6 100644
--- a/game/modules/tome/data/general/npcs/minor-demon.lua
+++ b/game/modules/tome/data/general/npcs/minor-demon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/minotaur.lua b/game/modules/tome/data/general/npcs/minotaur.lua
index 50d1978c71306376cdcf58222176215dc60cd540..07f051e198a4c5131dcdfa98262dec584af87abf 100644
--- a/game/modules/tome/data/general/npcs/minotaur.lua
+++ b/game/modules/tome/data/general/npcs/minotaur.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/molds.lua b/game/modules/tome/data/general/npcs/molds.lua
index c420961cbde27e4789adc18fc360948723a7e54d..5a43f2870e6446695e6b1b34c0378824d1f4058f 100644
--- a/game/modules/tome/data/general/npcs/molds.lua
+++ b/game/modules/tome/data/general/npcs/molds.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/multihued-drake.lua b/game/modules/tome/data/general/npcs/multihued-drake.lua
index e1b9077348b666829acbe45890a70c838de5b4e8..fe0de4a483a0b870e75491847cc4e8b51fa3ca1a 100644
--- a/game/modules/tome/data/general/npcs/multihued-drake.lua
+++ b/game/modules/tome/data/general/npcs/multihued-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/mummy.lua b/game/modules/tome/data/general/npcs/mummy.lua
index 97ef2409428e1486f82ecddd59c652f2d4491024..5079784c2c72451a6ed8c9ccd7d6eef69b422972 100644
--- a/game/modules/tome/data/general/npcs/mummy.lua
+++ b/game/modules/tome/data/general/npcs/mummy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/naga.lua b/game/modules/tome/data/general/npcs/naga.lua
index 12b1cdbd607fb22cd811324ecca96bd60cd13500..86f06d30668f75bb84ab321765f1b39c99946c8d 100644
--- a/game/modules/tome/data/general/npcs/naga.lua
+++ b/game/modules/tome/data/general/npcs/naga.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -51,7 +51,7 @@ newEntity{
 
 newEntity{ base = "BASE_NPC_NAGA",
 	name = "naga myrmidon", color=colors.DARK_UMBER, image="npc/naga_myrmidon.png",
-	desc = [[Before you stands a tall figure - a very tall figure, propped high by a thick serpent's tail in place of where his legs should rightly be. His torso is human-like, with bulging muscles beneath fitted armour, and large hands gripping a fiercely sharp trident. He glares at you with dark intensity, like a wolf about to pounce on unsuspecting prey.]],
+	desc = [[Before you stands a tall figure -- a very tall figure, propped high by a thick serpent's tail in place of where his legs should rightly be. His torso is human-like, with bulging muscles beneath fitted armour, and large hands gripping a fiercely sharp trident. He glares at you with dark intensity, like a wolf about to pounce on unsuspecting prey.]],
 	level_range = {30, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = resolvers.rngavg(120,150), life_rating = 16,
@@ -97,7 +97,7 @@ newEntity{ base = "BASE_NPC_NAGA",
 
 newEntity{ base = "BASE_NPC_NAGA",
 	name = "naga psyren", color=colors.YELLOW, image="npc/naga_psyren.png",
-	desc = [[Such a mix of enchanting beauty and reviling horror you have never before seen combined. Above, a beautiful, ethereal woman, of scant form and entrancing grace. Below, the thick, smooth scales of a snake, its stretched tail gently waving back and forth in the air behind her. The movement is eye-catching and hypnotic, and whilst you watch a mysterious smile plays across her seductive lips.]],
+	desc = [[Such a mix of enchanting beauty and revolting horror you have never before seen combined. Above, a beautiful, ethereal woman, of scant form and entrancing grace. Below, the thick, smooth scales of a snake, its stretched tail gently waving back and forth in the air behind her. The movement is eye-catching and hypnotic, and whilst you watch a mysterious smile plays across her seductive lips.]],
 	level_range = {36, nil}, exp_worth = 1,
 	rarity = 4,
 	rank = 3,
diff --git a/game/modules/tome/data/general/npcs/ooze.lua b/game/modules/tome/data/general/npcs/ooze.lua
index f8280db6ff4b27b67d256253ddc54dc2adcfd32d..c9a121a3cef4b62f48388ff0e0ba60185323bc4a 100644
--- a/game/modules/tome/data/general/npcs/ooze.lua
+++ b/game/modules/tome/data/general/npcs/ooze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/orc-gorbat.lua b/game/modules/tome/data/general/npcs/orc-gorbat.lua
index 1af25fe46190c2cb7cb2d3460e09e2a1dc677a69..5d11a3110e1b3fe25dbd19c22895c86867c982bb 100644
--- a/game/modules/tome/data/general/npcs/orc-gorbat.lua
+++ b/game/modules/tome/data/general/npcs/orc-gorbat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/orc-grushnak.lua b/game/modules/tome/data/general/npcs/orc-grushnak.lua
index ea3018dcc54258f51a6a4cbd1d515ecd1faeee0c..9670dd7eb97c96684186d204b465cbdaab653027 100644
--- a/game/modules/tome/data/general/npcs/orc-grushnak.lua
+++ b/game/modules/tome/data/general/npcs/orc-grushnak.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -51,7 +51,7 @@ newEntity{
 
 newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 	name = "orc fighter", color=colors.KHAKI,
-	desc = [[An orc clad in a massive armour, wielding a shield and a deadly axe.]],
+	desc = [[An orc clad in massive armour, wielding a shield and a deadly axe.]],
 	level_range = {30, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = resolvers.rngavg(110,120), life_rating = 14,
@@ -75,7 +75,7 @@ newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 
 newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 	name = "orc elite fighter", color=colors.MOCCASIN,
-	desc = [[An orc clad in a massive armour, wielding a shield and a deadly axe.]],
+	desc = [[An orc clad in massive armour, wielding a shield and a deadly axe.]],
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 3,
 	rank = 3,
@@ -106,7 +106,7 @@ newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 
 newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 	name = "orc berserker", color=colors.SALMON,
-	desc = [[An orc clad in a massive armour, wielding a huge axe.]],
+	desc = [[An orc clad in massive armour, wielding a huge axe.]],
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = resolvers.rngavg(110,120), life_rating = 14,
@@ -128,7 +128,7 @@ newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 
 newEntity{ base = "BASE_NPC_ORC_GRUSHNAK",
 	name = "orc elite berserker", color=colors.YELLOW,
-	desc = [[An orc clad in a massive armour, wielding a huge axe.]],
+	desc = [[An orc clad in massive armour, wielding a huge axe.]],
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 3,
 	rank = 3,
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 bbd4c7d8870c6b4d50fae3e84c613ca5fdb29baa..306c2b1c7b5f4f95d53a0efdabbfd6ab9600c6f3 100644
--- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua
+++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/orc-vor.lua b/game/modules/tome/data/general/npcs/orc-vor.lua
index e9511ea94c90ce80bdd1f07829f86f31a5ba2bf3..088724fb579098745b21edb49ee96d718f77e6cf 100644
--- a/game/modules/tome/data/general/npcs/orc-vor.lua
+++ b/game/modules/tome/data/general/npcs/orc-vor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/orc.lua b/game/modules/tome/data/general/npcs/orc.lua
index 2481d008a2a3743dbafff3f72c05a46d7af289d3..502ce28b04d621b5781e0134dbfe1d9b43d654a1 100644
--- a/game/modules/tome/data/general/npcs/orc.lua
+++ b/game/modules/tome/data/general/npcs/orc.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/plant.lua b/game/modules/tome/data/general/npcs/plant.lua
index 2b7af09c3200c167f02da3ef51e05866b30f652c..7136fed605ab85639d32a5724acde6d5db777eaf 100644
--- a/game/modules/tome/data/general/npcs/plant.lua
+++ b/game/modules/tome/data/general/npcs/plant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/random_zone.lua b/game/modules/tome/data/general/npcs/random_zone.lua
index 15fb81b3d93ec322ea892b4730e9c7248355d532..0d9530c93597fc6ae0906fdea548807f2f9dcaf6 100644
--- a/game/modules/tome/data/general/npcs/random_zone.lua
+++ b/game/modules/tome/data/general/npcs/random_zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/ritch.lua b/game/modules/tome/data/general/npcs/ritch.lua
index c58734f3a609563ed748b32682284e201042b406..21bff9a4b22cbaa98683debc2e644ca20d03df58 100644
--- a/game/modules/tome/data/general/npcs/ritch.lua
+++ b/game/modules/tome/data/general/npcs/ritch.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/rodent.lua b/game/modules/tome/data/general/npcs/rodent.lua
index f031c6fd2d44cb22f742bded6edd3f65f9ea7054..c2944b676f56fab6037c7f565841c32fcb5fb80c 100644
--- a/game/modules/tome/data/general/npcs/rodent.lua
+++ b/game/modules/tome/data/general/npcs/rodent.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -105,7 +105,7 @@ newEntity{ base = "BASE_NPC_RODENT",
 
 newEntity{ base = "BASE_NPC_RODENT",
 	name = "giant crystal rat", color=colors.PINK,
-	desc = [[Instead of fur, this rat has crystals growing on its back which provide extra protection.]],
+	desc = [[Instead of fur, this rat has crystals growing on its back, which provide extra protection.]],
 	level_range = {1, 5}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(35,50),
diff --git a/game/modules/tome/data/general/npcs/sandworm.lua b/game/modules/tome/data/general/npcs/sandworm.lua
index 45086dd43c1d787a8359f4db64b5a11335775b94..55c9901fa6e82b55bbcedb3a5242d103a0d21aa2 100644
--- a/game/modules/tome/data/general/npcs/sandworm.lua
+++ b/game/modules/tome/data/general/npcs/sandworm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -70,7 +70,7 @@ newEntity{ base = "BASE_NPC_SANDWORM",
 	name = "sand-drake", display = 'D',
 	type = "dragon", subtype = "sand",
 	color={r=204,g=255,b=95},
-	desc = [[This unholy creature looks like a wingless dragon in shape, but resembles a sandworm in color.]],
+	desc = [[This unholy creature looks like a wingless dragon in shape, but it is sand-colored, making it all the more dangerous for its prey.]],
 	rarity = 5,
 	rank = 3,
 	size_category = 5,
diff --git a/game/modules/tome/data/general/npcs/shade.lua b/game/modules/tome/data/general/npcs/shade.lua
index 68691bbe7b98d62a54a525afa5b12991cab9dd19..91f3e69195af8fd7aacec6195dcb75aabba1e770 100644
--- a/game/modules/tome/data/general/npcs/shade.lua
+++ b/game/modules/tome/data/general/npcs/shade.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/shertul.lua b/game/modules/tome/data/general/npcs/shertul.lua
index 5bc1fa80c6c8da8932209655fec0bee49c56f756..c0cacf12c758128381ce6243afdfaf098d1bd865 100644
--- a/game/modules/tome/data/general/npcs/shertul.lua
+++ b/game/modules/tome/data/general/npcs/shertul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/shivgoroth.lua b/game/modules/tome/data/general/npcs/shivgoroth.lua
index 39c6660e89656f2809fc3694eee4f981d7b0ae4e..3f2cae7b52e005fcae5325ea3d585c86f699d197 100644
--- a/game/modules/tome/data/general/npcs/shivgoroth.lua
+++ b/game/modules/tome/data/general/npcs/shivgoroth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/skeleton.lua b/game/modules/tome/data/general/npcs/skeleton.lua
index 783079cff79ad52d4b590aea2862aebfceab44bf..a9067cf5c5c3603caa47b2ed9abb9017979d1434 100644
--- a/game/modules/tome/data/general/npcs/skeleton.lua
+++ b/game/modules/tome/data/general/npcs/skeleton.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/snake.lua b/game/modules/tome/data/general/npcs/snake.lua
index e2270b0bfb5975857e0c6f5e55fd4de198d4e8c8..b6d8c89612a43f1b32fe40ad15111140e7ec31df 100644
--- a/game/modules/tome/data/general/npcs/snake.lua
+++ b/game/modules/tome/data/general/npcs/snake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/snow-giant.lua b/game/modules/tome/data/general/npcs/snow-giant.lua
index 7901bda14d3ebe42500938cd3e245ba005dd6b03..4362aab14d6aa72b97a68896caa8cfbf744adbf2 100644
--- a/game/modules/tome/data/general/npcs/snow-giant.lua
+++ b/game/modules/tome/data/general/npcs/snow-giant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/spider.lua b/game/modules/tome/data/general/npcs/spider.lua
index d136221e8a13bf55689e0c69fea381840d30fea6..cf0df20a878969bdaeb7e5977c4168477059f7ae 100644
--- a/game/modules/tome/data/general/npcs/spider.lua
+++ b/game/modules/tome/data/general/npcs/spider.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -181,7 +181,7 @@ newEntity{ base = "BASE_NPC_SPIDER",
 -- the brethren of Ungoliant :D  tough and deadly, probably too tough, but meh <evil laughter>
 newEntity{ base = "BASE_NPC_SPIDER",
 	name = "ungolmor", color={0,0,0},  -- spider night, don't change the color
-	desc = [[Largest of all the spiderkin, its folds of skin seem nigh impenetrable.]],
+	desc = [[Largest of all the spiderkin, its folds of skin seem nearly impenetrable.]],
 	level_range = {38, nil}, exp_worth = 1,
 	rarity = 4,
 	max_life = 120,
diff --git a/game/modules/tome/data/general/npcs/storm-drake.lua b/game/modules/tome/data/general/npcs/storm-drake.lua
index d45fdf0667eef31863aadc90cca6384908d626b1..d7923477296c3a331b422aeb32103fbfdc16dc44 100644
--- a/game/modules/tome/data/general/npcs/storm-drake.lua
+++ b/game/modules/tome/data/general/npcs/storm-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -61,7 +61,7 @@ newEntity{ base = "BASE_NPC_STORM_DRAKE",
 
 newEntity{ base = "BASE_NPC_STORM_DRAKE",
 	name = "storm drake", color=colors.BLUE, display="D",
-	desc = [[A mature storm drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[A mature storm drake, armed with deadly breath and nasty claws.]],
 	level_range = {14, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(100,110),
@@ -83,7 +83,7 @@ newEntity{ base = "BASE_NPC_STORM_DRAKE",
 
 newEntity{ base = "BASE_NPC_STORM_DRAKE",
 	name = "storm wyrm", color=colors.LIGHT_BLUE, display="D",
-	desc = [[An old and powerful storm drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[An old and powerful storm drake, armed with deadly breath and nasty claws.]],
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/dragon_storm_storm_wyrm.png", display_h=2, display_y=-1}}},
 	level_range = {25, nil}, exp_worth = 1,
 	rarity = 5,
diff --git a/game/modules/tome/data/general/npcs/sunwall-town.lua b/game/modules/tome/data/general/npcs/sunwall-town.lua
index dc302631eff98cc466c5b8341b0c8bff5c703f02..68e7b138db74c5231b6d014585423dd2710692ad 100644
--- a/game/modules/tome/data/general/npcs/sunwall-town.lua
+++ b/game/modules/tome/data/general/npcs/sunwall-town.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -79,7 +79,7 @@ newEntity{ base = "BASE_NPC_SUNWALL_TOWN",
 
 newEntity{ base = "BASE_NPC_SUNWALL_TOWN",
 	name = "human sun-paladin", color=colors.GOLD,
-	desc = [[A human in a shiny plate armour.]],
+	desc = [[A human in shiny plate armour.]],
 	level_range = {5, nil}, exp_worth = 1,
 	rarity = 3,
 	rank = 3,
diff --git a/game/modules/tome/data/general/npcs/swarm.lua b/game/modules/tome/data/general/npcs/swarm.lua
index 74c33b83019cda78ef551df57ed1779bfcbdf881..b876d41e1910aa9336bdda4140bb46b6b2051430 100644
--- a/game/modules/tome/data/general/npcs/swarm.lua
+++ b/game/modules/tome/data/general/npcs/swarm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/telugoroth.lua b/game/modules/tome/data/general/npcs/telugoroth.lua
index f98ddb0de91332e3b265dffa79774384fceda44f..a990c49064ff39c6872bf0a68a2b2b566ed97994 100644
--- a/game/modules/tome/data/general/npcs/telugoroth.lua
+++ b/game/modules/tome/data/general/npcs/telugoroth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -145,7 +145,7 @@ newEntity{ base = "BASE_NPC_TELUGOROTH",
 -- telu vorta = time storm
 newEntity{ base = "BASE_NPC_TELUGOROTH",
 	name = "teluvorta", color=colors.DARK_KHAKI,
-	desc = [[Time and space collapse in upon this erratically moving time elemental.]],
+	desc = [[Time and space collapse in upon this erratically-moving time elemental.]],
 	level_range = {12, nil}, exp_worth = 1,
 	rarity = 4,
 	max_life = resolvers.rngavg(50,70),
diff --git a/game/modules/tome/data/general/npcs/thieve.lua b/game/modules/tome/data/general/npcs/thieve.lua
index c2bbe6cac23d7e8464ecc3a29631e83dd8a968ac..b640f65ff1ad965f50da8e3da0236242d88e3d71 100644
--- a/game/modules/tome/data/general/npcs/thieve.lua
+++ b/game/modules/tome/data/general/npcs/thieve.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -61,7 +61,7 @@ newEntity{
 
 newEntity{ base = "BASE_NPC_THIEF",
 	name = "cutpurse", color_r=0, color_g=0, color_b=resolvers.rngrange(235, 255),
-	desc = [[The lowest of the thieves, they are just learning the tricks of the trade.]],
+	desc = [[The lowest of the thieves, this cutpurse is just learning the tricks of the trade.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 1,
 	combat_armor = 1, combat_def = 5,
diff --git a/game/modules/tome/data/general/npcs/troll.lua b/game/modules/tome/data/general/npcs/troll.lua
index af09971bb0a8176ee542658baa6ead977e090606..d182b8c3423fe794625ab0d3abd6ba0bda83f76b 100644
--- a/game/modules/tome/data/general/npcs/troll.lua
+++ b/game/modules/tome/data/general/npcs/troll.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/undead-rat.lua b/game/modules/tome/data/general/npcs/undead-rat.lua
index 90d7854f4614cf3f8843692ab3869f1bd50cf2bc..4d37da49e25817336e6201aa6d25faf9ebe284a6 100644
--- a/game/modules/tome/data/general/npcs/undead-rat.lua
+++ b/game/modules/tome/data/general/npcs/undead-rat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/vampire.lua b/game/modules/tome/data/general/npcs/vampire.lua
index f3310d928badd2651003abdf20110fb19eefa98c..58764dce0f0a87e598c9e404bfb2ecfaa3a08efa 100644
--- a/game/modules/tome/data/general/npcs/vampire.lua
+++ b/game/modules/tome/data/general/npcs/vampire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/venom-drake.lua b/game/modules/tome/data/general/npcs/venom-drake.lua
index 9ee90e0df6e3844efb356d48888f2218376cbef4..5de30f092e9b96f28cad256204cfc2297182e778 100644
--- a/game/modules/tome/data/general/npcs/venom-drake.lua
+++ b/game/modules/tome/data/general/npcs/venom-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -61,7 +61,7 @@ newEntity{ base = "BASE_NPC_VENOM_DRAKE",
 
 newEntity{ base = "BASE_NPC_VENOM_DRAKE",
 	name = "venom drake", color=colors.GREEN, display="D",
-	desc = [[A mature corrosive venom drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[A mature corrosive venom drake, armed with deadly breath and nasty claws.]],
 	level_range = {14, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(100,110),
@@ -83,7 +83,7 @@ newEntity{ base = "BASE_NPC_VENOM_DRAKE",
 
 newEntity{ base = "BASE_NPC_VENOM_DRAKE",
 	name = "venom wyrm", color=colors.LIGHT_GREEN, display="D",
-	desc = [[An old and powerful corrosive venom drake, armed with a deadly breath weapon and nasty claws.]],
+	desc = [[An old and powerful corrosive venom drake, armed with deadly breath and nasty claws.]],
 	resolvers.nice_tile{tall=1},
 	level_range = {25, nil}, exp_worth = 1,
 	rarity = 5,
diff --git a/game/modules/tome/data/general/npcs/vermin.lua b/game/modules/tome/data/general/npcs/vermin.lua
index dd5cf5da3b99c48d7eed7c5f3f1af1005bed17c2..30ddb58ab55da52185814ddae50ba9d3a2a47bb6 100644
--- a/game/modules/tome/data/general/npcs/vermin.lua
+++ b/game/modules/tome/data/general/npcs/vermin.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/wight.lua b/game/modules/tome/data/general/npcs/wight.lua
index f48c5752e5c403534b0199da8ee50cd251dce212..5118ce76c18382052ac11051d14a407f35a537b3 100644
--- a/game/modules/tome/data/general/npcs/wight.lua
+++ b/game/modules/tome/data/general/npcs/wight.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/wild-drake.lua b/game/modules/tome/data/general/npcs/wild-drake.lua
index 54a96a994bf1b3a030f927c94d5d19d0739ac2f7..798623943a17541771d2bfa7f35c37c5da017e8e 100644
--- a/game/modules/tome/data/general/npcs/wild-drake.lua
+++ b/game/modules/tome/data/general/npcs/wild-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/xorn.lua b/game/modules/tome/data/general/npcs/xorn.lua
index 0cd7909c79afb69b7bbfbb19201dee743741eddf..69d3e5ceb4131cecc434d1abcb2ad88e4c664b1f 100644
--- a/game/modules/tome/data/general/npcs/xorn.lua
+++ b/game/modules/tome/data/general/npcs/xorn.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/yaech.lua b/game/modules/tome/data/general/npcs/yaech.lua
index 876193b1ba7388aef184197237153676339bc825..1fd4ebc474b959e1feeeb2e613671fa003341257 100644
--- a/game/modules/tome/data/general/npcs/yaech.lua
+++ b/game/modules/tome/data/general/npcs/yaech.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/npcs/ziguranth.lua b/game/modules/tome/data/general/npcs/ziguranth.lua
index 0e9ff6b3dc0973d5a669d4afd414a9b9264c6fb8..46d45333859ecf3c0605d6029c395891711e8ac0 100644
--- a/game/modules/tome/data/general/npcs/ziguranth.lua
+++ b/game/modules/tome/data/general/npcs/ziguranth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/2haxes.lua b/game/modules/tome/data/general/objects/2haxes.lua
index c786c9ed3ada5b471b5feb2502bbea9bb2d644ba..68339fb0a1236ada45787a0842450d3585e92f3d 100644
--- a/game/modules/tome/data/general/objects/2haxes.lua
+++ b/game/modules/tome/data/general/objects/2haxes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/2hmaces.lua b/game/modules/tome/data/general/objects/2hmaces.lua
index d801f9744ad43ab2d830ca2f6bccade80d50d274..2bd3d160b5ced84077cf33e408d56b40d7b921ec 100644
--- a/game/modules/tome/data/general/objects/2hmaces.lua
+++ b/game/modules/tome/data/general/objects/2hmaces.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -29,7 +29,7 @@ newEntity{
 	rarity = 5,
 	metallic = true,
 	combat = { talented = "mace", damrange = 1.5, physspeed = 1, sound = {"actions/melee", pitch=0.6, vol=1.2}, sound_miss = {"actions/melee", pitch=0.6, vol=1.2} },
-	desc = [[Massive two-handed maul.]],
+	desc = [[Massive two-handed mauls.]],
 	twohanded = true,
 	ego_bonus_mult = 0.2,
 	randart_able = "/data/general/objects/random-artifacts/melee.lua",
diff --git a/game/modules/tome/data/general/objects/2hswords.lua b/game/modules/tome/data/general/objects/2hswords.lua
index 63aba88131c3aadd5106d1b584bb29059df77783..1e529128c52dc4ba75e0923394fb6fdcc6f2495f 100644
--- a/game/modules/tome/data/general/objects/2hswords.lua
+++ b/game/modules/tome/data/general/objects/2hswords.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/2htridents.lua b/game/modules/tome/data/general/objects/2htridents.lua
index df7568c415e7cad04ecf71eb47cf0ce7e90f83bc..32229fc59501994f8668ac226752008232b7ed92 100644
--- a/game/modules/tome/data/general/objects/2htridents.lua
+++ b/game/modules/tome/data/general/objects/2htridents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/axes.lua b/game/modules/tome/data/general/objects/axes.lua
index 2cb66186b00653d452fe06cbac173abbfb52c085..75296cbbdf5504004919e29b9a74cc7df6032a1d 100644
--- a/game/modules/tome/data/general/objects/axes.lua
+++ b/game/modules/tome/data/general/objects/axes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/boss-artifacts-far-east.lua b/game/modules/tome/data/general/objects/boss-artifacts-far-east.lua
index d8994ffb363ac3803ae38d68340962a758569f8f..d8fe2584124282312abc4b0842da7eec02c3d98d 100644
--- a/game/modules/tome/data/general/objects/boss-artifacts-far-east.lua
+++ b/game/modules/tome/data/general/objects/boss-artifacts-far-east.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{ base = "BASE_KNIFE", define_as = "LIFE_DRINKER",
 	unique = true,
 	name = "Life Drinker", image = "object/artifact/dagger_life_drinker.png",
 	unided_name = "blood coated dagger",
-	desc = [[Black blood for foul deads. This dagger serves evil.]],
+	desc = [[Black blood for foul deeds. This dagger serves evil.]],
 	level_range = {40, 50},
 	rarity = 300,
 	require = { stat = { mag=44 }, },
@@ -62,7 +62,7 @@ newEntity{ base = "BASE_TRIDENT",
 	define_as = "TRIDENT_TIDES",
 	unided_name = "ever-dripping trident",
 	name = "Trident of the Tides", unique=true, image = "object/artifact/trident_of_the_tides.png",
-	desc = [[The power of the tides rushing through this trident.
+	desc = [[The power of the tides rush through this trident.
 Tridents require the exotic weapons mastery talent to use correctly.]],
 	require = { stat = { str=35 }, },
 	level_range = {30, 40},
@@ -95,3 +95,469 @@ Tridents require the exotic weapons mastery talent to use correctly.]],
 	max_power = 150, power_regen = 1,
 	use_talent = { id = Talents.T_FREEZE, level=3, power = 60 },
 }
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {arcane=true},
+	define_as = "FIERY_CHOKER", 
+	unided_name = "flame-wrought amulet",
+	name = "Fiery Choker", unique=true, image="object/artifact/fiery_choker.png",
+	desc = [[A choker made of pure flame, casting forever shifting patterns around the neck of its wearer. Its fire seems to not harm the wearer.]],
+	level_range = {32, 42},
+	rarity = 220,
+	cost = 190,
+	material_level = 3,
+	wielder = {
+		inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 },
+		combat_spellpower = 7,
+		combat_spellcrit = 8,
+		resists = {
+			[DamageType.FIRE] = 20,
+			[DamageType.COLD] = -20,
+		},
+		inc_damage={
+			[DamageType.FIRE] = 10,
+			[DamageType.COLD] = -5,
+		},
+		damage_affinity={
+			[DamageType.FIRE] = 30,
+		},
+		blind_immune = 0.4,
+	},
+	talent_on_spell = { {chance=10, talent=Talents.T_VOLCANO, level=3} },
+}
+
+newEntity{ base = "BASE_HEAVY_ARMOR",
+	power_source = {nature=true},
+	define_as = "CHROMATIC_HARNESS", image = "object/artifact/armor_chromatic_harness.png",
+	name = "Chromatic Harness", unique=true,
+	unided_name = "multi-hued scale-mail armour", color=colors.VIOLET,
+	desc = [[This dragon scale harness shines with multiple colors, quickly shifting through them in a seemingly chaotic manner.]],
+	level_range = {40, 50},
+	rarity = 280,
+	cost = 500,
+	material_level = 5,
+	wielder = {
+		talent_cd_reduction={[Talents.T_ICE_BREATH]=3, [Talents.T_FIRE_BREATH]=3, [Talents.T_SAND_BREATH]=3, [Talents.T_LIGHTNING_BREATH]=3, [Talents.T_CORROSIVE_BREATH]=3,},
+		inc_stats = { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 4, [Stats.STAT_STR] = 6, [Stats.STAT_LCK] = 10, },
+		blind_immune = 0.5,
+		stun_immune = 0.25,
+		knockback_immune = 0.5,
+		esp = { dragon = 1 },
+		combat_def = 10,
+		combat_armor = 14,
+		fatigue = 16,
+		resists = {
+			[DamageType.COLD] = 20,
+			[DamageType.LIGHTNING] = 20,
+			[DamageType.FIRE] = 20,
+			[DamageType.ACID] = 20,
+			[DamageType.PHYSICAL] = 20,
+		},
+	},
+}
+
+newEntity{ base = "BASE_RING",
+	power_source = {technique=true},
+	define_as = "PRIDE_GLORY",
+	name = "Glory of the Pride", unique=true, image="object/artifact/glory_of_the_pride.png",
+	desc = [[The most prized treasure of the Battlemaster of the Pride, Grushnak. This gold ring is inscribed in the now lost orc tongue.]],
+	unided_name = "deep black ring",
+	level_range = {40, 50},
+	rarity = 280,
+	cost = 500,
+	material_level = 5,
+	wielder = {
+		max_mana = -40,
+		max_stamina = 40,
+		combat_physresist = 45,
+		confusion_immune = 0.5,
+		combat_atk = 10,
+		combat_dam = 10,
+		combat_def = 5,
+		combat_armor = 10,
+		fatigue = -15,
+		talent_cd_reduction={
+			[Talents.T_RUSH]=6,
+		},
+		inc_damage={ [DamageType.PHYSICAL] = 8, },
+	},
+}
+
+newEntity{ base = "BASE_CLOTH_ARMOR",
+	power_source = {arcane=true},
+	define_as = "BLACK_ROBE",
+	name = "Black Robe", unique=true,
+	unided_name = "black robe", color=colors.DARK_GREY, image = "object/artifact/robe_black_robe.png",
+	desc = [[A silk robe, darker than the darkest night sky, it radiates power.]],
+	level_range = {40, 50},
+	rarity = 280,
+	cost = 500,
+	material_level = 5,
+	wielder = {
+		inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 },
+		see_invisible = 10,
+		blind_immune = 0.5,
+		combat_spellpower = 30,
+		combat_spellresist = 25,
+		combat_dam = 10,
+		combat_def = 6,
+	},
+	talent_on_spell = {
+		{chance=5, talent=Talents.T_SOUL_ROT, level=3},
+		{chance=5, talent=Talents.T_BLOOD_GRASP, level=3},
+		{chance=5, talent=Talents.T_BONE_SPEAR, level=3},
+	},
+}
+
+newEntity{ base = "BASE_LEATHER_CAP",
+	power_source = {arcane=true},
+	define_as = "CROWN_ELEMENTS", 
+	name = "Crown of the Elements", unique=true, image = "object/artifact/crown_of_the_elements.png",
+	unided_name = "jeweled crown", color=colors.DARK_GREY,
+	desc = [[This jeweled crown shimmers with colors.]],
+	level_range = {40, 50},
+	rarity = 280,
+	cost = 500,
+	material_level = 5,
+	wielder = {
+		inc_stats = { [Stats.STAT_CON] = 5, [Stats.STAT_WIL] = 3, },
+		resists={
+			[DamageType.FIRE] = 15,
+			[DamageType.COLD] = 15,
+			[DamageType.ACID] = 15,
+			[DamageType.LIGHTNING] = 15,
+		},
+		melee_project={
+			[DamageType.FIRE] = 10,
+			[DamageType.COLD] = 10,
+			[DamageType.ACID] = 10,
+			[DamageType.LIGHTNING] = 10,
+		},
+		inc_damage = {
+			[DamageType.FIRE] = 8,
+			[DamageType.COLD] = 8,
+			[DamageType.ACID] = 8,
+			[DamageType.LIGHTNING] = 8,
+		},
+		see_invisible = 15,
+		combat_armor = 5,
+		fatigue = 5,
+	},
+}
+
+newEntity{ base = "BASE_GREATSWORD",
+	power_source = {technique=true},
+	define_as = "MURDERBLADE",
+	name = "Warmaster Gnarg's Murderblade", unique=true, image="object/artifact/warmaster_gnargs_murderblade.png",
+	unided_name = "blood-etched greatsword", color=colors.CRIMSON,
+	desc = [[A blood-etched greatsword, it has seen many foes. From the inside.]],
+	require = { stat = { str=35 }, },
+	level_range = {32, 45},
+	rarity = 230,
+	cost = 300,
+	material_level = 4,
+	combat = {
+		dam = 60,
+		apr = 19,
+		physcrit = 10,
+		dammod = {str=1.2},
+		special_on_hit = {desc="10% chance to send the wielder into a killing frenzy", on_kill=1, fct=function(combat, who)
+			if not rng.percent(10) then return end
+			who:setEffect(who.EFF_FRENZY, 3, {crit=12, power=0.3, dieat=0.25})
+		end},
+	},
+	wielder = {
+		see_invisible = 25,
+		inc_stats = { [Stats.STAT_CON] = 5, [Stats.STAT_STR] = 5, [Stats.STAT_DEX] = 5, },
+		talents_types_mastery = {
+			["technique/2hweapon-cripple"] = 0.2,
+			["technique/2hweapon-offense"] = 0.2,
+		},
+	},
+	max_power = 60, power_regen = 1,
+	use_talent = { id = Talents.T_UNSTOPPABLE, level = 1, power = 60 },
+}
+
+newEntity{ base = "BASE_WHIP",
+	power_source = {arcane=true},
+	define_as = "WHIP_URH_ROK",
+	unided_name = "fiery whip",
+	name = "Whip of Urh'Rok", color=colors.PURPLE, unique = true, image = "object/artifact/whip_of_urh_rok.png",
+	desc = [[With this unbearably bright whip of flame, the demon master Urh'Rok has become known for never having lost in combat.]],
+	require = { stat = { dex=48 }, },
+	level_range = {40, 50},
+	rarity = 390,
+	cost = 250,
+	material_level = 5,
+	combat = {
+		dam = 55,
+		apr = 0,
+		physcrit = 9,
+		dammod = {dex=1},
+		damtype = DamageType.FIREKNOCKBACK,
+		talent_on_hit = { [Talents.T_BONE_NOVA] = {level=4, chance=20}, [Talents.T_BLOOD_BOIL] = {level=3, chance=15} },
+	},
+	wielder = {
+		esp = {["demon/minor"]=1, ["demon/major"]=1},
+		see_invisible = 2,
+		combat_spellpower = 15,
+		inc_damage={
+			[DamageType.FIRE] = 20,
+			[DamageType.BLIGHT] = 20,
+	},
+	},
+	carrier = {
+		inc_damage={
+			[DamageType.BLIGHT] = 8,
+		},
+	},
+}
+
+--Storm fury, lightning infused bow that automatically attacks nearby enemies with bolts of lightning.
+newEntity{ base = "BASE_LONGBOW",
+	power_source = {arcane=true},
+	define_as = "STORM_FURY",
+	name = "Storm Fury", unique=true,
+	unided_name = "crackling longbow", color=colors.BLUE,
+	desc = [[This dragonbone longbow is enhanced with bands of steel, which arc with intense lightning. Bolts travel up and down the string, ignorant of you.]],
+	require = { stat = { dex=30, mag=30 }, },
+	level_range = {40, 50},
+	rarity = 250,
+	cost = 300,
+	material_level = 5,
+	sentient = true,
+	special_desc = function(self) return "Automatically fires lightning bolts at nearby enemies, with a chance to inflict Daze." end,
+	combat = {
+		range=10,
+		physspeed = 0.7,
+	},
+	wielder = {
+		combat_spellpower=20,
+		inc_stats = { [Stats.STAT_MAG] = 7, [Stats.STAT_DEX] = 5},
+		combat_def_ranged = 15,
+		ranged_project = {[DamageType.LIGHTNING] = 75},
+		talents_types_mastery = {
+			["spell/air"] = 0.2,
+			["spell/storm"] = 0.1,
+		},
+		inc_damage={
+			[DamageType.LIGHTNING] = 20,
+		},
+		resists={
+			[DamageType.LIGHTNING] = 20,
+		},
+		talent_on_hit = { T_CHAIN_LIGHTNING = {level=3, chance=12},},
+		movement_speed=0.1,
+	},
+	act = function(self)
+		self:useEnergy()
+		if not self.worn_by then return end
+		if game.level and not game.level:hasEntity(self.worn_by) then self.worn_by = nil return end
+		if self.worn_by:attr("dead") then return end
+		self.zap = self.zap + 5
+		if not rng.percent(self.zap)  then return end
+		local who = self.worn_by
+		local Map = require "engine.Map"
+		--local project = require "engine.DamageType"
+		local tgts = {}
+		local DamageType = require "engine.DamageType"
+		--local project = "engine.ActorProject"
+		local grids = core.fov.circle_grids(who.x, who.y, 5, true)
+		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
+			local a = game.level.map(x, y, Map.ACTOR)
+			if a and who:reactionToward(a) < 0 then
+				tgts[#tgts+1] = a
+			end
+		end end
+
+		local tg = {type="hit", range=5,}
+		for i = 1, 1 do
+			if #tgts <= 0 then break end
+			local a, id = rng.table(tgts)
+			table.remove(tgts, id)
+
+			self.zap = 0
+			who:project(tg, a.x, a.y, engine.DamageType.LIGHTNING_DAZE, {daze=40, dam = rng.avg(1,3) * (40+ who:getMag() * 1.5)} )
+			game.level.map:particleEmitter(who.x, who.y, math.max(math.abs(a.x-who.x), math.abs(a.y-who.y)), "lightning", {tx=a.x-who.x, ty=a.y-who.y})
+			game:playSoundNear(self, "talents/lightning")
+			who:logCombat(a, "#GOLD#A bolt of lightning fires from #Source#'s bow, striking #Target#!")
+		end
+	end,
+	on_wear = function(self, who)
+		self.worn_by = who
+		self.zap = 0
+	end,
+	on_takeoff = function(self)
+		self.worn_by = nil
+	end,
+}
+--Ice Cloak that can release massive freezing AOE, dropped by Glacial Legion.
+newEntity{ base = "BASE_CLOAK", define_as="GLACIAL_CLOAK",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Frozen Shroud", 
+	unided_name = "chilling cloak", image = "object/artifact/frozen_shroud.png",
+	desc = [[All that remains of the Glacial Legion. This cloak seems to exude an icy cold vapor that freezes all it touches.]],
+	level_range = {40, 50},
+	rarity = 250,
+	cost = 300,
+	material_level = 5,
+	wielder = {
+		resists= {[DamageType.FIRE] = -15,[DamageType.COLD] = 25, all=8},
+		inc_stats = { [Stats.STAT_MAG] = 7,},
+		combat_def = 12,
+		on_melee_hit = {[DamageType.ICE]=60},
+	},
+	max_power = 30, power_regen = 1,
+	use_power = { name = "release a blast of ice", power = 30,
+		use = function(self, who)
+			local duration = 10
+			local radius = 4
+			local dam = (25 + who:getMag())
+			local blast = {type="ball", range=0, radius=radius, selffire=false, display={particle="bolt_ice", trail="icetrail"}}
+			who:project(blast, who.x, who.y, engine.DamageType.COLD, dam*3)
+			who:project(blast, who.x, who.y, engine.DamageType.FREEZE, {dur=6, hp=80+dam})
+			game.level.map:particleEmitter(who.x, who.y, blast.radius, "iceflash", {radius=blast.radius})
+			-- Add a lasting map effect
+			game.level.map:addEffect(who,
+				who.x, who.y, duration,
+				engine.DamageType.ICE, dam,
+				radius,
+				5, nil,
+				engine.Entity.new{alpha=100, display='', color_br=30, color_bg=60, color_bb=200},
+				function(e)
+					e.radius = e.radius
+					return true
+				end,
+				false
+			)
+			game.logSeen(who, "%s releases a burst of freezing cold from within their cloak!", who.name:capitalize(), self:getName())
+			return {id=true, used=true}
+		end
+	},
+}
+--Blight+Phys Greatmaul that inflicts disease, dropped by Rotting Titan.
+newEntity{ base = "BASE_GREATMAUL", define_as="ROTTING_MAUL",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Blighted Maul", color = colors.LIGHT_RED,  image = "object/artifact/blighted_maul.png",
+	unided_name = "rotten stone limb",
+	desc = [[The massive stone limb of the Rotting Titan, a mass of stone and rotting flesh. You think you can lift it, but it is very heavy.]],
+	level_range = {40, 50},
+	rarity = 250,
+	require = { stat = { str=60 }, },
+	cost = 300,
+	metallic = false,
+	encumber = 12,
+	material_level = 5,
+	combat = {
+		dam = 96,
+		apr = 22,
+		physcrit = 10,
+		physspeed=1.2,
+		dammod = {str=1.4},
+		convert_damage = {[DamageType.BLIGHT] = 20},
+		melee_project={[DamageType.CORRUPTED_BLOOD] = 30},
+		special_on_hit = {desc="Damage nearby creatures", on_kill=1, fct=function(combat, who, target)
+			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "ROTTING_MAUL")
+			local dam = rng.avg(1,2) * (70+ who:getStr())
+			game.logSeen(who, "The ground shakes as the %s hits!", o:getName())
+			local tg = {type="ball", range=0, selffire=false, radius=2, no_restrict=true}
+			who:project(tg, target.x, target.y, engine.DamageType.PHYSICAL, dam)
+		end},
+	},
+	wielder = {
+		inc_damage={[DamageType.PHYSICAL] = 12,},
+		knockback_immune=0.3,
+		combat_critical_power = 40,
+	},
+	max_power = 50, power_regen = 1,
+	use_power = { name = "knock away nearby foes", power = 50,
+		use = function(self, who)
+			local dam = rng.avg(1,2) * (125+ who:getStr() * 3)
+			local tg = {type="ball", range=0, selffire=false, radius=4, no_restrict=true}
+			who:project(tg, who.x, who.y, engine.DamageType.PHYSKNOCKBACK, {dam=dam, dist=4})
+			game.logSeen(who, "%s slams their %s into the ground, sending out a shockwave!", who.name:capitalize(), self:getName())
+			return {id=true, used=true}
+		end
+	},
+}
+--Molten Skin, dropped by Heavy Sentinel.
+newEntity{ base = "BASE_LIGHT_ARMOR",
+	power_source = {arcane=true},
+	define_as = "ARMOR_MOLTEN",
+	unided_name = "melting bony armour",
+	name = "Molten Skin", unique=true, image = "object/artifact/molten_skin.png",
+	desc = [[This mass of fused molten bone from the Heavy Sentinel radiates intense power. It still glows red with the heat of the Sentinel's core, and yet seems to do you no harm.]],
+	level_range = {40, 50},
+	rarity = 250,
+	cost = 300,
+	material_level=5,
+	wielder = {
+		combat_spellpower = 15,
+		combat_spellcrit = 10,
+		combat_physcrit = 8,
+		combat_damage = 10,
+		combat_critical_power = 20,
+		combat_def = 15,
+		combat_armor = 12,
+		inc_stats = { [Stats.STAT_MAG] = 6,[Stats.STAT_CUN] = 6,},
+		melee_project={[DamageType.FIRE] = 30,[DamageType.LIGHT] = 15,},
+		ranged_project={[DamageType.FIRE] = 30,[DamageType.LIGHT] = 15,},
+		on_melee_hit = {[DamageType.FIRE]=30},
+ 		inc_damage={
+			[DamageType.FIRE] = 20,
+			[DamageType.LIGHT] = 5,
+			all=10,
+ 		},
+ 		resists={
+			[DamageType.FIRE] = 20,
+			[DamageType.LIGHT] = 12,
+			[DamageType.COLD] = -5,
+ 		},
+ 		resists_pen={
+			[DamageType.FIRE] = 15,
+			[DamageType.LIGHT] = 10,
+ 		},
+ 		talents_types_mastery = {
+ 			["spell/fire"] = 0.1,
+ 			["spell/wildfire"] = 0.1,
+			["celestial/sun"] = 0.1,
+ 		},
+	},
+	max_power = 16, power_regen = 1,
+	use_talent = { id = Talents.T_BLASTWAVE, level = 4, power = 12 },
+}
+
+newEntity{ base = "BASE_RING",
+	power_source = {arcane=true},
+	define_as = "AETHER_RING",
+	name = "Void Orb", unique=true, image = "object/artifact/void_orbs.png",
+	desc = [[This thin grey ring is adorned with a deep black orb. Tiny white dots swirl slowly within it, and a faint purple light glows from its core.]],
+	unided_name = "ethereal ring",
+	level_range = {40, 50},
+	rarity = 250,
+	cost = 300,
+	material_level = 5,
+	wielder = {
+		max_mana = 35,
+		combat_spellresist = 10,
+		combat_spellpower = 10,
+		combat_spellcrit=5,
+		silence_immune = 0.3,
+		talent_cd_reduction={
+			[Talents.T_AETHER_AVATAR]=4,
+		},
+		inc_damage={ [DamageType.ARCANE] = 15, [DamageType.PHYSICAL] = 4, [DamageType.FIRE] = 4, [DamageType.COLD] = 4, [DamageType.LIGHTNING] = 4, all=5},
+		resists={ [DamageType.ARCANE] = 15,},
+		resists_pen={ [DamageType.ARCANE] = 10,},
+		melee_project={ [DamageType.ARCANE] = 15,},
+		talents_types_mastery = {
+ 			["spell/arcane"] = 0.1,
+ 			["spell/aether"] = 0.1,
+ 		},
+	},
+	talent_on_spell = { {chance=10, talent="T_ARCANE_VORTEX", level = 2} },
+	max_power = 6, power_regen = 1,
+	use_talent = { id = Talents.T_MANATHRUST, level = 4, power = 6 },
+}
diff --git a/game/modules/tome/data/general/objects/boss-artifacts-maj-eyal.lua b/game/modules/tome/data/general/objects/boss-artifacts-maj-eyal.lua
new file mode 100644
index 0000000000000000000000000000000000000000..6a9a8310369a8459bc77979368e7489bd9412750
--- /dev/null
+++ b/game/modules/tome/data/general/objects/boss-artifacts-maj-eyal.lua
@@ -0,0 +1,1473 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009 - 2014 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
+
+local Stats = require "engine.interface.ActorStats"
+local Talents = require "engine.interface.ActorTalents"
+
+-- This file describes artifacts associated with a boss of the game, they have a high chance of dropping their respective ones, but they can still be found elsewhere
+
+-- Design:  Revamp Wintertide to make it more unique, interesting, and not terrible.
+-- Balance:  A cold themed weapon doesn't play nice with melee scalers, and Ice Block on hit, while useful overall, has some obvious anti-synergy.  So instead of focusing on stats I added a decent passive on hit and a very powerful active.  The active is a "better" Stone Wall but you have to be actively using the weapon in melee to make use of it.  The delayed expansion of the storm also limits its strength as an "oh shit" button.
+newEntity{ base = "BASE_LONGSWORD",
+	power_source = {arcane=true},
+	define_as = "LONGSWORD_WINTERTIDE", unided_name = "glittering longsword", image="object/artifact/wintertide.png",
+	name = "Wintertide", unique=true,
+	desc = [[The air seems to freeze around the blade of this sword, draining all heat from the area.
+It is said the Conclave created this weapon for their warmaster during the dark times of the first allure war.]],
+	require = { stat = { str=35 }, },
+	level_range = {35, 45},
+	rarity = 280,
+	cost = 1000,
+	material_level = 5,
+	winterStorm = nil,
+	special_desc = function(self)
+		if not self.winterStorm then 
+			return ("Storm Duration:  None") 
+		else
+			return ("Storm Duration: " .. (self.winterStorm.duration or "None"))
+		end
+	end,
+	combat = {
+		dam = 39, -- lower damage, defensive item with extremely powerful effects
+		apr = 10,
+		physcrit = 10,
+		dammod = {str=1},
+		damrange = 1.4,
+		melee_project={[DamageType.ICE] = 25}, -- Iceblock HP is based on damage, since were adding iceblock pierce we want this to be less generous
+		special_on_hit = {desc="Create a Winter Storm that gradually expands, dealing cold damage to your enemies each turn and reducing their turn energy by 20%.  Melee attacks will relocate the storm on top of your target and increase its duration.", on_kill=1, fct=function(combat, who, target)
+			 local self, item, inven_id = who:findInAllInventoriesBy("define_as", "LONGSWORD_WINTERTIDE")
+			 if not self or not who:getInven(inven_id).worn then return end
+			
+			 if self.winterStorm and self.winterStorm.duration <= 0 then
+				 self.winterStorm = nil
+				 --return
+			 end
+			 
+			 if (self.winterStorm and (game.level.id ~= self.winterStorm.checkZone) ) then
+				self.winterStorm = nil
+			 end
+			 
+			 if not self.winterStorm then
+				local stormDam = who:combatStatScale("str", 20, 80, 0.75) -- does this need a require?
+				 self.winterStorm = game.level.map:addEffect(who,
+				 target.x, target.y, 5,
+				 engine.DamageType.WINTER, {dam=stormDam, x=target.x, y=target.y}, -- Winter is cold damage+energy reduction, enemy only
+				 1,
+				 5, nil,
+				 {type="icestorm", only_one=true},
+				 function(e)	
+					 if e.radius < 4 then
+						e.radius = e.radius + 0.2
+						 
+						 -- this is a hack to fix the effect breaking if you reload with it active, whatever is going on is very weird but the table on the item no longer points to this
+						local self2, item, inven_id = e.src:findInAllInventoriesBy("define_as", "LONGSWORD_WINTERTIDE")
+						if not self2 then return end
+						self2.winterStorm = e
+					 end
+					 return true
+				 end,
+			 false)
+				self.winterStorm.checkZone = game.level.id
+			else
+				-- move the storm on top of the target
+				self.winterStorm.x = target.x
+				self.winterStorm.y = target.y
+				if self.winterStorm.duration < 5 then -- duration can be extended forever while meleeing 
+					self.winterStorm.duration = self.winterStorm.duration + 1
+				end
+			end
+			
+			end
+			
+		},	
+		
+	},
+	wielder = {
+		iceblock_pierce=35, -- this can be generous because of how melee specific the item is
+		resists = { [DamageType.COLD] = 25 },
+		on_melee_hit={[DamageType.ICE] = 40},
+		inc_damage = { [DamageType.COLD] = 20 },
+	},
+	max_power = 40, power_regen = 1,
+	use_power = { name ="intensify your winter storm creating unbreakable ice walls in each space", power = 30,
+		use = function(self, who)
+			
+			local Object = require "mod.class.Object"
+			local Map = require "engine.Map"
+			
+			if not self.winterStorm then return end
+			
+			if self.winterStorm and self.winterStorm.duration <= 0 then
+				self.winterStorm = nil
+				return
+			end
+			
+			local grids = core.fov.circle_grids(self.winterStorm.x, self.winterStorm.y, self.winterStorm.radius, true)		
+			local self = who
+
+
+			for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
+				local oe = game.level.map(x, y, engine.Map.TERRAIN)
+
+				if oe then
+					local e = Object.new{
+						old_feat = oe,
+						name = "winter wall", image = "npc/iceblock.png",
+						display = '#', color_r=255, color_g=255, color_b=255, back_color=colors.GREY,
+						desc = "a summoned wall of ice",
+						type = "wall", --subtype = "floor",
+						always_remember = true,
+						can_pass = {pass_wall=1},
+						does_block_move = true,
+						show_tooltip = true,
+						block_move = true,
+						block_sight = true,
+						temporary = 10,
+						x = x, y = y,
+						canAct = false,
+						act = function(self)
+							self:useEnergy()
+							self.temporary = self.temporary - 1
+							if self.temporary <= 0 then
+								game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat)
+								game.level:removeEntity(self)
+	--							game.level.map:redisplay()
+							end
+						end,
+						dig = function(src, x, y, old)
+							game.level:removeEntity(old)
+	--						game.level.map:redisplay()
+							return nil, old.old_feat
+						end,
+						summoner_gain_exp = true,
+						summoner = self,
+					}
+					e.tooltip = mod.class.Grid.tooltip
+					game.level:addEntity(e)
+					game.level.map(x, y, engine.Map.TERRAIN, e)				
+				end
+			end end
+			
+			return {id=true, used=true}
+		end
+	},
+	on_wear = function(self, who)
+		--self.winterStorm = nil
+	end,
+	on_pickup = function(self, who)
+		self.winterStorm = nil
+	end,
+	
+}
+
+newEntity{ base = "BASE_LITE", define_as = "WINTERTIDE_PHIAL",
+	power_source = {arcane=true},
+	unided_name = "phial filled with darkness", unique = true, image="object/artifact/wintertide_phial.png",
+	name = "Wintertide Phial", color=colors.DARK_GREY,
+	desc = [[This phial seems filled with darkness, yet it cleanses your thoughts.]],
+	level_range = {1, 10},
+	rarity = 200,
+	encumber = 2,
+	cost = 50,
+	material_level = 1,
+
+	wielder = {
+		lite = 1,
+		infravision = 6,
+	},
+
+	max_power = 60, power_regen = 1,
+	use_power = { name = "cleanse your mind (remove a few detrimental mental effects)", power = 40,
+		use = function(self, who)
+			local target = who
+			local effs = {}
+			local known = false
+
+			-- Go through all spell effects
+			for eff_id, p in pairs(target.tmp) do
+				local e = target.tempeffect_def[eff_id]
+				if e.type == "mental" and e.status == "detrimental" then
+					effs[#effs+1] = {"effect", eff_id}
+				end
+			end
+
+			for i = 1, 3 + math.floor(who:getMag() / 10) do
+				if #effs == 0 then break end
+				local eff = rng.tableRemove(effs)
+
+				if eff[1] == "effect" then
+					target:removeEffect(eff[2])
+					known = true
+				end
+			end
+			game.logSeen(who, "%s's mind is clear!", who.name:capitalize())
+			return {id=true, used=true}
+		end
+	},
+}
+
+-- Artifact, dropped by Rantha
+newEntity{ base = "BASE_LEATHER_BOOT",
+	power_source = {nature=true},
+	define_as = "FROST_TREADS",
+	unided_name = "ice-covered boots",
+	name = "Frost Treads", unique=true, image="object/artifact/frost_treads.png",
+	desc = [[A pair of leather boots. Cold to the touch, they radiate a cold blue light.]],
+	require = { stat = { dex=16 }, },
+	level_range = {10, 18},
+	material_level = 2,
+	rarity = 220,
+	cost = 40,
+
+	wielder = {
+		lite = 1,
+		combat_armor = 4,
+		combat_def = 1,
+		fatigue = 7,
+		inc_damage = {
+			[DamageType.COLD] = 15,
+		},
+		resists = {
+			[DamageType.COLD] = 20,
+			[DamageType.NATURE] = 10,
+		},
+		inc_stats = { [Stats.STAT_STR] = 4, [Stats.STAT_DEX] = 4, [Stats.STAT_CUN] = 4, },
+	},
+}
+
+newEntity{ base = "BASE_HELM",
+	power_source = {technique=true},
+	define_as = "DRAGON_SKULL",
+	name = "Dragonskull Helm", unique=true, unided_name="skull helm", image = "object/artifact/dragonskull_helmet.png",
+	desc = [[Traces of a dragon's power still remain in this bleached and cracked skull.]],
+	require = { stat = { wil=24 }, },
+	level_range = {45, 50},
+	material_level = 5,
+	rarity = 280,
+	cost = 200,
+
+	wielder = {
+		resists = {
+			[DamageType.FIRE] = 15,
+			[DamageType.COLD] = 15,
+			[DamageType.ACID] = 15,
+			[DamageType.LIGHTNING] = 15,
+		},
+		esp = {dragon=1},
+		combat_armor = 2,
+		fatigue = 12,
+		combat_physresist = 12,
+		combat_mentalresist = 12,
+		combat_spellresist = 12,
+	},
+}
+
+newEntity{ base = "BASE_LIGHT_ARMOR",
+	power_source = {nature=true},
+	define_as = "EEL_SKIN", image = "object/artifact/eel_skin_armor.png",
+	name = "Eel-skin armour", unique=true,
+	unided_name = "slippery armour", color=colors.VIOLET,
+	desc = [[This armour seems to have been patched together from many eels. Yuck.]],
+	level_range = {5, 12},
+	rarity = 200,
+	cost = 500,
+	material_level = 2,
+	wielder = {
+		inc_stats = { [Stats.STAT_DEX] = 2, [Stats.STAT_CUN] = 3,  },
+		poison_immune = 0.3,
+		combat_armor = 1,
+		combat_def = 10,
+		fatigue = 2,
+	},
+
+	max_power = 50, power_regen = 1,
+	use_talent = { id = Talents.T_CALL_LIGHTNING, level=2, power = 18 },
+	talent_on_wild_gift = { {chance=10, talent=Talents.T_CALL_LIGHTNING, level=2} },
+}
+
+newEntity{ base = "BASE_RING",
+	power_source = {psionic=true},
+	define_as = "NIGHT_SONG",
+	name = "Nightsong", unique=true, image = "object/artifact/ring_nightsong.png",
+	desc = [[A pitch black ring, unadorned. It seems as though tendrils of darkness creep upon it.]],
+	unided_name = "obsidian ring",
+	level_range = {15, 23},
+	rarity = 250,
+	cost = 500,
+	material_level = 2,
+	wielder = {
+		max_stamina = 25,
+		combat_def = 6,
+		fatigue = -7,
+		inc_stats = { [Stats.STAT_CUN] = 6 },
+		combat_mentalresist = 13,
+		talent_cd_reduction={
+			[Talents.T_SHADOWSTEP]=1,
+		},
+		inc_damage={ [DamageType.PHYSICAL] = 5, },
+	},
+
+	max_power = 50, power_regen = 1,
+	use_talent = { id = Talents.T_DARK_TENDRILS, level=2, power = 40 },
+}
+
+newEntity{ base = "BASE_HELM",
+	power_source = {nature=true},
+	define_as = "HELM_OF_GARKUL",
+	unided_name = "tribal helm",
+	name = "Steel Helm of Garkul", unique=true, image="object/artifact/helm_of_garkul.png",
+	desc = [[A great helm that belonged to Garkul the Devourer, one of the greatest orcs ever to live.]],
+	require = { stat = { str=16 }, },
+	level_range = {12, 22},
+	rarity = 200,
+	cost = 500,
+	material_level = 2,
+	skullcracker_mult = 5,
+
+	wielder = {
+		combat_armor = 6,
+		fatigue = 8,
+		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_CON] = 5, [Stats.STAT_WIL] = 4 },
+		inc_damage={ [DamageType.PHYSICAL] = 10, },
+		combat_physresist = 12,
+		combat_mentalresist = 12,
+		combat_spellresist = 12,
+		talents_types_mastery = {["technique/thuggery"]=0.2},
+	},
+
+	set_list = { {"define_as","SET_GARKUL_TEETH"} },
+	on_set_complete = function(self, who)
+		self:specialSetAdd("skullcracker_mult", 1)
+		self:specialSetAdd({"wielder","melee_project"}, {[engine.DamageType.GARKUL_INVOKE]=5})
+	end,
+}
+
+newEntity{ base = "BASE_SHIELD",
+	power_source = {arcane=true},
+	define_as = "LUNAR_SHIELD",
+	unique = true,
+	name = "Lunar Shield", image = "object/artifact/shield_lunar_shield.png",
+	unided_name = "chitinous shield",
+	desc = [[A large section of chitin removed from Nimisil. It continues to give off a strange white glow.]],
+	color = colors.YELLOW,
+	metallic = false,
+	require = { stat = { str=35 }, },
+	level_range = {40, 50},
+	rarity = 280,
+	cost = 350,
+	material_level = 5,
+	special_combat = {
+		dam = 45,
+		block = 250,
+		physcrit = 10,
+		dammod = {str=1},
+		damrange = 1.4,
+		damtype = DamageType.ARCANE,
+	},
+	wielder = {
+		resists={[DamageType.DARKNESS] = 25},
+		inc_damage={[DamageType.DARKNESS] = 15},
+
+		combat_armor = 7,
+		combat_def = 12,
+		combat_def_ranged = 5,
+		combat_spellpower = 10,
+		fatigue = 2,
+
+		lite = 1,
+		talents_types_mastery = {["celestial/star-fury"]=0.2,["celestial/twilight"]=0.1,},
+		learn_talent = { [Talents.T_BLOCK] = 5, },
+	},
+	talent_on_spell = { {chance=10, talent=Talents.T_MOONLIGHT_RAY, level=2} },
+}
+
+newEntity{ base = "BASE_SHIELD",
+	power_source = {nature=true},
+	define_as = "WRATHROOT_SHIELD",
+	unided_name = "large chunk of wood",
+	name = "Wrathroot's Barkwood", unique=true, image="object/artifact/shield_wrathroots_barkwood.png",
+	desc = [[The barkwood of Wrathroot, made into roughly the shape of a shield.]],
+	require = { stat = { str=25 }, },
+	level_range = {12, 22},
+	rarity = 200,
+	cost = 20,
+	material_level = 2,
+	metallic = false,
+	special_combat = {
+		dam = resolvers.rngavg(20,30),
+		block = 60,
+		physcrit = 2,
+		dammod = {str=1.5},
+		damrange = 1.4,
+	},
+	wielder = {
+		combat_armor = 10,
+		combat_def = 9,
+		fatigue = 14,
+		resists = {
+			[DamageType.DARKNESS] = 20,
+			[DamageType.COLD] = 20,
+			[DamageType.NATURE] = 20,
+		},
+		learn_talent = { [Talents.T_BLOCK] = 3, },
+	},
+}
+
+newEntity{ base = "BASE_GEM",
+	power_source = {nature=true},
+	unique = true, define_as = "PETRIFIED_WOOD",
+	unided_name = "burned piece of wood",
+	name = "Petrified Wood", subtype = "red", --Visually black, but associate with fire, not acid
+	color = colors.WHITE, image = "object/artifact/petrified_wood.png",
+	level_range = {35, 45},
+	rarity = 280,
+	desc = [[A piece of the scorched wood taken from the remains of Snaproot.]],
+	cost = 100,
+	material_level = 4,
+	identified = false,
+	imbue_powers = {
+		resists = { [DamageType.NATURE] = 25, [DamageType.DARKNESS] = 10, [DamageType.COLD] = 10 },
+		inc_stats = { [Stats.STAT_CON] = 25, },
+		ignore_direct_crits = 23,
+	},
+	wielder = {
+		resists = { [DamageType.NATURE] = 25, [DamageType.DARKNESS] = 10, [DamageType.COLD] = 10 },
+		inc_stats = { [Stats.STAT_CON] = 25, },
+		ignore_direct_crits = 23,
+	},
+}
+
+newEntity{ base = "BASE_STAFF",
+	power_source = {arcane=true},
+	unique = true, define_as = "CRYSTAL_SHARD",
+	name = "Crystal Shard",
+	unided_name = "crystalline tree branch",
+	flavor_name = "magestaff",
+	level_range = {10, 22},
+	color=colors.BLUE, image = "object/artifact/crystal_shard.png",
+	rarity = 300,
+	desc = [[This crystalline tree branch is remarkably rigid, and refracts light in myriad colors. Gazing at it entrances you, and you worry where its power may have come from.]],
+	cost = 200,
+	material_level = 2,
+	require = { stat = { mag=20 }, },
+	combat = {
+		dam = 16,
+		apr = 4,
+		dammod = {mag=1.3},
+		damtype = DamageType.ARCANE,
+		convert_damage = {
+			[DamageType.BLIGHT] = 50,
+		},
+	},
+	wielder = {
+		combat_spellpower = 14,
+		combat_spellcrit = 4,
+		inc_damage={
+			[DamageType.ARCANE] = 18,
+			[DamageType.BLIGHT] = 18,
+		},
+		resists={
+			[DamageType.ARCANE] = 10,
+			[DamageType.BLIGHT] = 10,
+		},
+		damage_affinity={
+			[DamageType.ARCANE] = 20,
+		},
+	},
+	max_power = 45, power_regen = 1,
+	use_power = { name = "create living shards of crystal", power = 45, use = function(self, who)
+		if not who:canBe("summon") then game.logPlayer(who, "You cannot summon; you are suppressed!") return end
+
+		local NPC = require "mod.class.NPC"
+		local list = NPC:loadList("/data/general/npcs/crystal.lua")
+		for i = 1, 2 do
+			-- Find space
+			local x, y = util.findFreeGrid(who.x, who.y, 5, true, {[engine.Map.ACTOR]=true})
+			if not x then break end
+				local e
+			repeat e = rng.tableRemove(list)
+
+			until not e.unique and e.rarity
+			e = e:clone()
+			local crystal = game.zone:finishEntity(game.level, "actor", e)
+			crystal.make_escort = nil
+			crystal.silent_levelup = true
+			crystal.faction = who.faction
+			crystal.ai = "summoned"
+			crystal.ai_real = "dumb_talented_simple"
+			crystal.summoner = who
+			crystal.summon_time = 10
+			crystal.exp_worth = 0
+			crystal:forgetInven(crystal.INVEN_INVEN)
+
+			local setupSummon = getfenv(who:getTalentFromId(who.T_SPIDER).action).setupSummon
+			if who:knowTalent(who.T_BLIGHTED_SUMMONING) then
+				crystal.blighted_summon_talent = who.T_BONE_SHIELD
+				crystal:incIncStat("mag", who:getMag())
+				crystal.summon_time=15
+			end
+			setupSummon(who, crystal, x, y)
+			game:playSoundNear(who, "talents/ice")
+		end
+		return {id=true, used=true}
+	end },
+}
+
+newEntity{ base = "BASE_WARAXE",
+	power_source = {arcane=true},
+	define_as = "MALEDICTION",
+	unided_name = "pestilent waraxe",
+	name = "Malediction", unique=true, image = "object/artifact/axe_malediction.png",
+	desc = [[The land withers and crumbles wherever this cursed axe rests.]],
+	require = { stat = { str=55 }, },
+	level_range = {35, 45},
+	rarity = 290,
+	cost = 375,
+	material_level = 4,
+	combat = {
+		dam = 55,
+		apr = 15,
+		physcrit = 10,
+		dammod = {str=1},
+		damrange = 1.2,
+		burst_on_hit={[DamageType.BLIGHT] = 25},
+		lifesteal=5, --You can counter the life regen by fighting, muhuhahah
+	},
+	wielder = {
+		life_regen = -0.3,
+		inc_damage = { [DamageType.BLIGHT] = 20 },
+	},
+}
+
+newEntity{ base = "BASE_STAFF",
+	power_source = {arcane=true},
+	define_as = "STAFF_KOR", image = "object/artifact/staff_kors_fall.png",
+	unided_name = "dark staff",
+	flavor_name = "vilestaff",
+	name = "Kor's Fall", unique=true,
+	desc = [[Made from the bones of many creatures, this staff glows with power. You can feel its evil presence even from a distance.]],
+	require = { stat = { mag=25 }, },
+	level_range = {1, 10},
+	rarity = 200,
+	cost = 60,
+	material_level = 1,
+	modes = {"darkness", "fire", "blight", "acid"},
+	combat = {
+		is_greater = true,
+		dam = 10,
+		apr = 0,
+		physcrit = 1.5,
+		dammod = {mag=1.1},
+		damtype = DamageType.DARKNESS,
+	},
+	wielder = {
+		see_invisible = 2,
+		combat_spellpower = 7,
+		combat_spellcrit = 8,
+		inc_damage={
+			[DamageType.ACID] = 10,
+			[DamageType.DARKNESS] = 10,
+			[DamageType.FIRE] = 10,
+			[DamageType.BLIGHT] = 10,
+		},
+		talents_types_mastery = { ["corruption/bone"] = 0.1, },
+		learn_talent = {[Talents.T_COMMAND_STAFF] = 1},
+	},
+	max_power = 6, power_regen = 1,
+	use_talent = { id = Talents.T_BONE_SPEAR, level = 3, power = 6 },
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {arcane=true},
+	define_as = "VOX", 
+	name = "Vox", unique=true,
+	unided_name = "ringing amulet", color=colors.BLUE, image="object/artifact/jewelry_amulet_vox.png",
+	desc = [[No force can hope to silence the wearer of this amulet.]],
+	level_range = {40, 50},
+	rarity = 220,
+	cost = 3000,
+	material_level = 5,
+	wielder = {
+		see_invisible = 20,
+		silence_immune = 1,
+		combat_spellpower = 9,
+		combat_spellcrit = 4,
+		max_mana = 50,
+		combat_spellspeed = 0.15,
+		max_vim = 50,
+	},
+}
+
+newEntity{ base = "BASE_STAFF",
+	power_source = {arcane=true},
+	define_as = "TELOS_TOP_HALF", image = "object/artifact/staff_broken_top_telos.png",
+	slot_forbid = false,
+	twohanded = false,
+	unided_name = "broken staff", flavor_name = "magestaff",
+	name = "Telos's Staff (Top Half)", unique=true,
+	desc = [[The top part of Telos' broken staff.]],
+	require = { stat = { mag=35 }, },
+	level_range = {40, 50},
+	rarity = 210,
+	encumber = 2.5,
+	material_level = 5,
+	modes = {"fire", "cold", "lightning", "arcane"},
+	cost = 500,
+	combat = {
+		dam = 35,
+		apr = 0,
+		physcrit = 1.5,
+		dammod = {mag=1.0},
+		damtype = DamageType.ARCANE,
+	},
+	wielder = {
+		combat_spellpower = 30,
+		combat_spellcrit = 15,
+		combat_mentalresist = 8,
+		inc_stats = { [Stats.STAT_WIL] = 5, },
+		inc_damage = {[DamageType.ARCANE] = 35 },
+		learn_talent = {[Talents.T_COMMAND_STAFF] = 1 },
+	},
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {arcane=true},
+	define_as = "AMULET_DREAD",
+	name = "Choker of Dread", unique=true, image = "object/artifact/amulet_choker_of_dread.png",
+	unided_name = "dark amulet", color=colors.LIGHT_DARK,
+	desc = [[The evilness of undeath radiates from this amulet.]],
+	level_range = {20, 28},
+	rarity = 220,
+	cost = 500,
+	material_level = 3,
+	wielder = {
+		see_invisible = 10,
+		blind_immune = 1,
+		combat_spellpower = 5,
+		combat_dam = 5,
+	},
+	max_power = 60, power_regen = 1,
+	use_power = { name = "summon an elder vampire to your side", power = 60, use = function(self, who)
+		if not who:canBe("summon") then game.logPlayer(who, "You cannot summon; you are suppressed!") return end
+
+		-- Find space
+		local x, y = util.findFreeGrid(who.x, who.y, 5, true, {[engine.Map.ACTOR]=true})
+		if not x then
+			game.logPlayer(who, "Not enough space to invoke the vampire!")
+			return
+		end
+		print("Invoking guardian on", x, y)
+
+		local NPC = require "mod.class.NPC"
+		local vampire = NPC.new{
+			type = "undead", subtype = "vampire",
+			display = "V", image = "npc/elder_vampire.png",
+			name = "elder vampire", color=colors.RED,
+			desc=[[A terrible robed undead figure, this creature has existed in its unlife for many centuries by stealing the life of others. It can summon the very shades of its victims from beyond the grave to come enslaved to its aid.]],
+
+			combat = { dam=resolvers.rngavg(9,13), atk=10, apr=9, damtype=engine.DamageType.DRAINLIFE, dammod={str=1.9} },
+
+			body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
+
+			autolevel = "warriormage",
+			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=3, },
+			stats = { str=12, dex=12, mag=12, con=12 },
+			life_regen = 3,
+			size_category = 3,
+			rank = 3,
+			infravision = 10,
+
+			inc_damage = table.clone(who.inc_damage, true),
+
+			resists = { [engine.DamageType.COLD] = 80, [engine.DamageType.NATURE] = 80, [engine.DamageType.LIGHT] = -50,  },
+			blind_immune = 1,
+			confusion_immune = 1,
+			see_invisible = 5,
+			undead = 1,
+
+			level_range = {who.level, who.level}, exp_worth = 0,
+			max_life = resolvers.rngavg(90,100),
+			combat_armor = 12, combat_def = 10,
+			resolvers.talents{ [who.T_STUN]=2, [who.T_BLUR_SIGHT]=3, [who.T_PHANTASMAL_SHIELD]=2, [who.T_ROTTING_DISEASE]=3, },
+
+			faction = who.faction,
+			summoner = who,
+			summon_time = 15,
+		}
+
+		vampire:resolve()
+		game.zone:addEntity(game.level, vampire, "actor", x, y)
+		vampire:forceUseTalent(vampire.T_TAUNT, {})
+		game:playSoundNear(who, "talents/spell_generic")
+		return {id=true, used=true}
+	end },
+}
+
+newEntity{ define_as = "RUNED_SKULL",
+	power_source = {arcane=true},
+	unique = true,
+	type = "gem", subtype="red", image = "object/artifact/bone_runed_skull.png",
+	unided_name = "human skull",
+	name = "Runed Skull",
+	display = "*", color=colors.RED,
+	level_range = {40, 50},
+	rarity = 390,
+	cost = 150,
+	encumber = 3,
+	material_level = 5,
+	desc = [[Dull red runes are etched all over this blackened skull.]],
+
+	carrier = {
+		combat_spellpower = 7,
+		on_melee_hit = {[DamageType.FIRE]=25},
+	},
+}
+
+newEntity{ base = "BASE_GREATMAUL",
+	power_source = {technique=true},
+	define_as = "GREATMAUL_BILL_TRUNK",
+	unided_name = "tree trunk", image = "object/artifact/bill_treestump.png",
+	name = "Bill's Tree Trunk", unique=true,
+	desc = [[This is a big, nasty-looking tree trunk that Bill the Troll used as a weapon. It could still serve this purpose, should you be strong enough to wield it!]],
+	require = { stat = { str=25 }, },
+	level_range = {1, 10},
+	material_level = 1,
+	rarity = 200,
+	metallic = false,
+	cost = 70,
+	combat = {
+		dam = 30,
+		apr = 7,
+		physcrit = 1.5,
+		dammod = {str=1.3},
+		damrange = 1.7,
+	},
+
+	wielder = {
+	},
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_SHATTERING_BLOW, level = 2, power = 20 },
+}
+
+
+newEntity{ base = "BASE_SHIELD",
+	power_source = {technique=true},
+	define_as = "SANGUINE_SHIELD",
+	unided_name = "bloody shield",
+	name = "Sanguine Shield", unique=true, image = "object/artifact/sanguine_shield.png",
+	desc = [[Though tarnished and spattered with blood, the emblem of the Sun still manages to shine through on this shield.]],
+	require = { stat = { str=39 }, },
+	level_range = {35, 45},
+	material_level = 4,
+	rarity = 240,
+	cost = 120,
+
+	special_combat = {
+		dam = 40,
+		block = 220,
+		physcrit = 9,
+		dammod = {str=1.2},
+	},
+	wielder = {
+		combat_armor = 4,
+		combat_def = 14,
+		combat_def_ranged = 14,
+		inc_stats = { [Stats.STAT_CON] = 5, },
+		fatigue = 19,
+		resists = { [DamageType.BLIGHT] = 25, },
+		life_regen = 5,
+		learn_talent = { [Talents.T_BLOCK] = 5, },
+	},
+}
+
+newEntity{ base = "BASE_GLOVES", define_as = "FLAMEWROUGHT",
+	power_source = {nature=true},
+	unique = true,
+	name = "Flamewrought", color = colors.RED, image = "object/artifact/gloves_flamewrought.png",
+	unided_name = "chitinous gloves",
+	desc = [[These gloves seems to be made out of the exoskeletons of ritches. They are hot to the touch.]],
+	level_range = {5, 12},
+	rarity = 180,
+	cost = 50,
+	material_level = 1,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_CUN] = 2,},
+		resists = { [DamageType.FIRE]= 10, },
+		inc_damage = { [DamageType.FIRE]= 5, },
+		combat_mindpower=2,
+		combat_armor = 2,
+		combat = {
+			dam = 5,
+			apr = 7,
+			physcrit = 1,
+			dammod = {dex=0.4, str=-0.6, cun=0.4 },
+			melee_project={[DamageType.FIRE] = 10},
+			talent_on_hit = { T_RITCH_FLAMESPITTER_BOLT = {level=3, chance=30} },
+			convert_damage = { [DamageType.FIRE] = 100,},
+		},
+	},
+	max_power = 24, power_regen = 1,
+	use_talent = { id = Talents.T_RITCH_FLAMESPITTER_BOLT, level = 3, power = 8 },
+}
+
+-- The crystal set
+newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_FOCUS",
+	power_source = {arcane=true},
+	unique = true,
+	unided_name = "scintillating crystal",
+	name = "Crystal Focus", subtype = "multi-hued",
+	color = colors.WHITE, image = "object/artifact/crystal_focus.png",
+	level_range = {5, 12},
+	desc = [[This crystal radiates the power of the Spellblaze itself.]],
+	rarity = 200,
+	identified = false,
+	cost = 50,
+	material_level = 2,
+
+	max_power = 1, power_regen = 1,
+	use_power = { name = "combine with a weapon", power = 1, use = function(self, who, gem_inven, gem_item)
+		who:showInventory("Fuse with which weapon?", who:getInven("INVEN"), function(o) return (o.type == "weapon" or o.subtype == "hands") and o.subtype ~= "mindstar" and not o.egoed and not o.unique and not o.rare and not o.archery end, function(o, item)
+			local oldname = o:getName{do_color=true}
+
+			-- Remove the gem
+			who:removeObject(gem_inven, gem_item)
+			who:sortInven(gem_inven)
+
+			-- Change the weapon
+			o.name = "Crystalline "..o.name:capitalize()
+			o.unique = o.name
+			o.no_unique_lore = true
+			if o.combat and o.combat.dam then
+				o.combat.dam = o.combat.dam * 1.25
+				o.combat.damtype = engine.DamageType.ARCANE
+			elseif o.wielder.combat and o.wielder.combat.dam then
+				o.wielder.combat.dam = o.wielder.combat.dam * 1.25
+				o.wielder.combat.convert_damage = o.wielder.combat.convert_damage or {}
+				o.wielder.combat.convert_damage[engine.DamageType.ARCANE] = 100
+			end
+			o.is_crystalline_weapon = true
+			o.power_source = o.power_source or {}
+			o.power_source.arcane = true
+			o.wielder = o.wielder or {}
+			o.wielder.combat_spellpower = (o.wielder.combat_spellpower or 0) + 12
+			o.wielder.combat_dam = (o.wielder.combat_dam or 0) + 12
+			o.wielder.inc_stats = o.wielder.inc_stats or {}
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_WIL] = 3
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_CON] = 3
+			o.wielder.inc_damage = o.wielder.inc_damage or {}
+			o.wielder.inc_damage[engine.DamageType.ARCANE] = 10
+			if o.wielder.learn_talent then o.wielder.learn_talent[who.T_COMMAND_STAFF] = nil end
+
+			o.set_list = { {"is_crystalline_armor", true} }
+			o.on_set_complete = function(self, who)
+				self.talent_on_spell = { {chance=10, talent="T_MANATHRUST", level=3} }
+				if(self.combat) then self.combat.talent_on_hit = { T_MANATHRUST = {level=3, chance=10} }
+				else self.wielder.combat.talent_on_hit = { T_MANATHRUST = {level=3, chance=10} }
+				end
+				self:specialSetAdd({"wielder","combat_spellcrit"}, 10)
+				self:specialSetAdd({"wielder","combat_physcrit"}, 10)
+				self:specialSetAdd({"wielder","resists_pen"}, {[engine.DamageType.ARCANE]=20, [engine.DamageType.PHYSICAL]=15})
+				game.logPlayer(who, "#GOLD#As the crystalline weapon and armour are brought together, they begin to emit a constant humming.")
+			end
+			o.on_set_broken = function(self, who)
+				self.talent_on_spell = nil
+				if (self.combat) then self.combat.talent_on_hit = nil
+				else self.wielder.combat.talent_on_hit = nil
+				end
+				game.logPlayer(who, "#GOLD#The humming from the crystalline artifacts fades as they are separated.")
+			end
+
+			who:sortInven()
+			who.changed = true
+
+			game.logPlayer(who, "You fix the crystal on the %s and create the %s.", oldname, o:getName{do_color=true})
+		end)
+	end },
+}
+
+newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_HEART",
+	power_source = {arcane=true},
+	unique = true,
+	unided_name = "coruscating crystal",
+	name = "Crystal Heart", subtype = "multi-hued",
+	color = colors.RED, image = "object/artifact/crystal_heart.png",
+	level_range = {35, 42},
+	desc = [[This crystal is huge, easily the size of your head. It sparkles brilliantly almost of its own accord.]],
+	rarity = 250,
+	identified = false,
+	cost = 200,
+	material_level = 5,
+
+	max_power = 1, power_regen = 1,
+	use_power = { name = "combine with a suit of body armor", power = 1, use = function(self, who, gem_inven, gem_item)
+		-- Body armour only, can be cloth, light, heavy, or massive though. No clue if o.slot works for this.
+		who:showInventory("Fuse with which armor?", who:getInven("INVEN"), function(o) return o.type == "armor" and o.slot == "BODY" and not o.egoed and not o.unique and not o.rare end, function(o, item)
+			local oldname = o:getName{do_color=true}
+
+			-- Remove the gem
+			who:removeObject(gem_inven, gem_item)
+			who:sortInven(gem_inven)
+
+			-- Change the weapon... err, armour. No, I'm not copy/pasting here, honest!
+			o.name = "Crystalline "..o.name:capitalize()
+			o.unique = o.name
+			o.no_unique_lore = true
+			o.is_crystalline_armor = true
+			o.power_source = o.power_source or {}
+			o.power_source.arcane = true
+
+			o.wielder = o.wielder or {}
+			-- This is supposed to add 1 def for crap cloth robes if for some reason you choose it instead of better robes, and then multiply by 1.25.
+			o.wielder.combat_def = ((o.wielder.combat_def or 0) + 2) * 1.7
+			-- Same for armour. Yay crap cloth!
+			o.wielder.combat_armor = ((o.wielder.combat_armor or 0) + 3) * 1.7
+			o.wielder.combat_spellresist = 35
+			o.wielder.combat_physresist = 25
+			o.wielder.inc_stats = o.wielder.inc_stats or {}
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_MAG] = 8
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_CON] = 8
+			o.wielder.inc_stats[engine.interface.ActorStats.STAT_LCK] = 12
+			o.wielder.resists = o.wielder.resists or {}
+			o.wielder.resists = { [engine.DamageType.ARCANE] = 35, [engine.DamageType.PHYSICAL] = 15 }
+			o.wielder.poison_immune = 0.6
+			o.wielder.disease_immune = 0.6
+
+			o.set_list = { {"is_crystalline_weapon", true} }
+			o.on_set_complete = function(self, who)
+				self:specialSetAdd({"wielder","stun_immune"}, 0.5)
+				self:specialSetAdd({"wielder","blind_immune"}, 0.5)
+			end
+			who:sortInven()
+			who.changed = true
+
+			game.logPlayer(who, "You fix the crystal on the %s and create the %s.", oldname, o:getName{do_color=true})
+		end)
+	end },
+}
+
+newEntity{ base = "BASE_ROD", define_as = "ROD_OF_ANNULMENT",
+	power_source = {arcane=true},
+	unided_name = "dark rod",
+	name = "Rod of Annulment", color=colors.LIGHT_BLUE, unique=true, image = "object/artifact/rod_of_annulment.png",
+	desc = [[You can feel magic draining out around this rod. Even nature itself seems affected.]],
+	cost = 50,
+	rarity = 380,
+	level_range = {5, 12},
+	elec_proof = true,
+	add_name = false,
+
+	material_level = 2,
+
+	max_power = 30, power_regen = 1,
+	use_power = { name = "force some of your foe's infusions, runes or talents on cooldown", power = 30,
+		use = function(self, who)
+			local tg = {type="bolt", range=5}
+			local x, y = who:getTarget(tg)
+			if not x or not y then return nil end
+			who:project(tg, x, y, function(px, py)
+				local target = game.level.map(px, py, engine.Map.ACTOR)
+				if not target then return end
+
+				local tids = {}
+				for tid, lev in pairs(target.talents) do
+					local t = target:getTalentFromId(tid)
+					if not target.talents_cd[tid] and t.mode == "activated" and not t.innate then tids[#tids+1] = t end
+				end
+				for i = 1, 3 do
+					local t = rng.tableRemove(tids)
+					if not t then break end
+					target.talents_cd[t.id] = rng.range(3, 5)
+					game.logSeen(target, "%s's %s is disrupted!", target.name:capitalize(), t.name)
+				end
+				target.changed = true
+			end, nil, {type="flame"})
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_WARAXE",
+	power_source = {arcane=true},
+	define_as = "SKULLCLEAVER",
+	unided_name = "crimson waraxe",
+	name = "Skullcleaver", unique=true, image = "object/artifact/axe_skullcleaver.png",
+	desc = [[A small but sharp axe, with a handle made of polished bone.  The blade has chopped through the skulls of many, and has been stained a deep crimson.]],
+	require = { stat = { str=18 }, },
+	level_range = {5, 12},
+	material_level = 1,
+	rarity = 220,
+	cost = 50,
+	combat = {
+		dam = 20,
+		apr = 4,
+		physcrit = 12,
+		dammod = {str=1},
+		talent_on_hit = { [Talents.T_GREATER_WEAPON_FOCUS] = {level=2, chance=10} },
+		lifesteal = 10,
+		convert_damage = {[DamageType.BLIGHT] = 25},
+	},
+	wielder = {
+		inc_damage = { [DamageType.BLIGHT] = 8 },
+	},
+}
+
+newEntity{ base = "BASE_DIGGER",
+	power_source = {unknown=true},
+	define_as = "TOOTH_MOUTH",
+	unided_name = "a tooth", unique = true,
+	name = "Tooth of the Mouth", image = "object/artifact/tooth_of_the_mouth.png",
+	desc = [[A huge tooth taken from the Mouth, in the Deep Bellow.]],
+	level_range = {5, 12},
+	cost = 50,
+	material_level = 1,
+	digspeed = 12,
+	wielder = {
+		inc_damage = { [DamageType.BLIGHT] = 4 },
+		on_melee_hit = {[DamageType.BLIGHT] = 15},
+		combat_apr = 5,
+	},
+}
+
+newEntity{ base = "BASE_HEAVY_BOOTS",
+	define_as = "WARPED_BOOTS",
+	power_source = {unknown=true},
+	unique = true,
+	name = "The Warped Boots", image = "object/artifact/the_warped_boots.png",
+	unided_name = "pair of painful-looking boots",
+	desc = [[These blackened boots have lost all vestiges of any former glory they might have had. Now, they are a testament to the corruption of the Deep Bellow, and its power.]],
+	color = colors.DARK_GREEN,
+	level_range = {35, 45},
+	rarity = 250,
+	cost = 200,
+	material_level = 5,
+	wielder = {
+		combat_armor = 4,
+		combat_def = 2,
+		combat_dam = 10,
+		fatigue = 8,
+		combat_spellpower = 10,
+		combat_mindresist = 10,
+		combat_spellresist = 10,
+ 		resists={
+			[DamageType.BLIGHT] = 10,
+ 		},
+		max_life = 80,
+		life_regen = -0.20,
+	},
+	max_power = 50, power_regen = 1,
+	use_talent = { id = Talents.T_SPIT_BLIGHT, level=3, power = 10 },
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {psionic=true},
+	define_as = "WITHERING_ORBS",
+	unique = true,
+	name = "Withering Orbs", color = colors.WHITE, image = "object/artifact/artifact_jewelry_withering_orbs.png",
+	unided_name = "shadow-strung orbs",
+	desc = [[These opalescent orbs stare at you with deathly knowledge, undeceived by your vanities and pretences.  They have lived and died through horrors you could never imagine, and now they lie strung in black chords watching every twitch of the shadows.
+If you close your eyes a moment, you can almost imagine what dread sights they see...]],
+	level_range = {5, 12},
+	rarity = 200,
+	cost = 100,
+	material_level = 1,
+	metallic = false,
+	wielder = {
+		blind_fight = 1,
+		see_invisible = 10,
+		see_stealth = 10,
+		combat_mindpower = 5,
+		melee_project = {
+			[DamageType.MIND] = 5,
+		},
+		ranged_project = {
+			[DamageType.MIND] = 5,
+		},
+	},
+}
+
+newEntity{ base = "BASE_MASSIVE_ARMOR",
+	power_source = {technique=true},
+	define_as = "BORFAST_CAGE",
+	unique = true,
+	name = "Borfast's Cage",
+	unided_name = "a suit of pitted and pocked plate-mail",
+	desc = [[Inch-thick stralite plates lock together with voratun joints. The whole suit looks impenetrable, but has clearly been subjected to terrible treatment - great dents and misshaping warps, and caustic fissures bored across the surface.
+Though clearly a powerful piece, it must once have been much greater.]],
+	color = colors.WHITE, image = "object/artifact/armor_plate_borfasts_cage.png",
+	level_range = {20, 28},
+	rarity = 200,
+	require = { stat = { str=35 }, },
+	cost = 500,
+	material_level = 3,
+	wielder = {
+		combat_def = 10,
+		combat_armor = 15,
+		fatigue = 24,
+
+		inc_stats = { [Stats.STAT_CON] = 5, },
+		resists = {
+			[DamageType.ACID] = - 15,
+			[DamageType.PHYSICAL] = 15,
+		},
+
+		max_life = 50,
+		life_regen = 2,
+
+		knockback_immune = 0.3,
+
+		combat_physresist = 15,
+		combat_crit_reduction = 20,
+	},
+}
+
+newEntity{ base = "BASE_LEATHER_CAP", -- No armor training requirement
+	power_source = {psionic=true},
+	define_as = "ALETTA_DIADEM",
+	name = "Aletta's Diadem", unique=true, unided_name="jeweled diadem", image = "object/artifact/diadem_alettas_diadem.png",
+	desc = [[A filigree of silver set with many small jewels, this diadem seems radiant - ethereal almost. But its touch seems to freeze your skin and brings wild thoughts to your mind. You want to drop it, throw it away, and yet you cannot resist thinking of what powers it might bring you.
+Is this temptation a weak will on your part, or some domination from the artifact itself...?]],
+	require = { stat = { wil=24 }, },
+	level_range = {20, 28},
+	rarity = 200,
+	cost = 1000,
+	material_level = 3,
+	metallic = true,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 4, },
+		combat_mindpower = 12,
+		combat_mindcrit = 5,
+		on_melee_hit={ [DamageType.MIND] = 12, },
+		inc_damage={ [DamageType.MIND] = 10, },
+	},
+	max_power = 10, power_regen = 1,
+	use_talent = { id = Talents.T_PSYCHIC_LOBOTOMY, level=3, power = 8 },
+}
+
+newEntity{ base = "BASE_SLING",
+	power_source = {nature=true},
+	define_as = "HARESKIN_SLING",
+	name = "Hare-Skin Sling", unique=true, unided_name = "hare-skin sling", image = "object/artifact/sling_hareskin_sling.png",
+	desc = [[This well-tended sling is made from the leather and sinews of a large hare. It feels smooth to the touch, yet very durable. Some say that the skin of a hare brings luck and fortune.
+Hard to tell if that really helped its former owner, but it's clear that the skin is at least also strong and reliable.]],
+	level_range = {20, 28},
+	rarity = 200,
+	require = { stat = { dex=35 }, },
+	cost = 50,
+	material_level = 3,
+	use_no_energy = true,
+	combat = {
+		range = 10,
+		physspeed = 0.8,
+	},
+	wielder = {
+		movement_speed = 0.2,
+		inc_stats = { [Stats.STAT_LCK] = 10, },
+		combat_physcrit = 5,
+		combat_def = 10,
+		talents_types_mastery = { ["cunning/survival"] = 0.2, },
+	},
+	max_power = 8, power_regen = 1,
+	use_talent = { id = Talents.T_INERTIAL_SHOT, level=3, power = 8 },
+}
+
+newEntity{ base = "BASE_TOOL_MISC",
+	power_source = {arcane=true},
+	define_as = "LUCKY_FOOT",
+	unique = true,
+	name = "Prox's Lucky Halfling Foot", color = colors.WHITE,
+	unided_name = "a mummified halfling foot", image = "object/artifact/proxs_lucky_halfling_foot.png",
+	desc = [[A large hairy foot, very recognizably a halfling's, is strung on a piece of thick twine. In its decomposed state it's hard to tell how long ago it parted with its owner, but from what look like teeth marks around the ankle you get the impression that it wasn't given willingly.
+It has been kept somewhat intact with layers of salt and clay, but in spite of this it's clear that nature is beginning to take its toll on the dead flesh. Some say the foot of a halfling brings luck to its bearer - right now the only thing you can be sure of is that it stinks.]],
+	level_range = {5, 12},
+	rarity = 200,
+	cost = 10,
+	material_level = 1,
+	metallic = false,
+	sentient = true,
+	cooldown=0,
+	special_desc = function(self) return "Detects traps.\nGives a 25% chance to shrug off up to three stuns, pins, and dazes each turn, with a 10 turn cooldown." end,
+	wielder = {
+		inc_stats = { [Stats.STAT_LCK] = 5, },
+		combat_def = 5,
+		disarm_bonus = 5,
+	},
+	act = function(self)
+		self:useEnergy()
+		if self.worn_by then
+			local actor = self.worn_by
+			local grids = core.fov.circle_grids(actor.x, actor.y, 1, true)
+			local Map = require "engine.Map"
+			local is_trap = false
+
+			for x, yy in pairs(grids) do for y, _ in pairs(yy) do
+				local trap = game.level.map(x, y, Map.TRAP)
+				if trap and not (trap:knownBy(self) or trap:knownBy(actor)) then
+					is_trap = true
+					-- Set the artifact as knowing the trap, not the wearer
+					trap:setKnown(self, true)
+				end
+			end end
+			-- only one twitch per action
+			if is_trap then
+				game.logSeen(actor, "#CRIMSON#%s twitches, alerting %s that a trap is nearby.", self:getName(), actor.name:capitalize())
+				if actor == game.player then
+					game.player:runStop()
+				end
+			end
+		end
+		--Escape stuns/dazes/pins
+		self:regenPower()
+		
+		if not self.worn_by then return end
+		if game.level and not game.level:hasEntity(self.worn_by) and not self.worn_by.player then self.worn_by = nil return end
+		if self.worn_by:attr("dead") then return end
+		if not rng.percent(25) or self.power < self.max_power then return end
+		local who = self.worn_by
+		local target = self.worn_by
+			local effs = {}
+			local known = false
+			local num = 0
+
+			-- Go through all spell effects
+			for eff_id, p in pairs(target.tmp) do
+				local e = target.tempeffect_def[eff_id]
+				if e.subtype.pin or e.subtype.stun then
+					effs[#effs+1] = {"effect", eff_id}
+					num = 1
+				end
+			end
+
+			for i = 1, 3 do
+				if #effs == 0 then break end
+				local eff = rng.tableRemove(effs)
+
+				if eff[1] == "effect" then
+					target:removeEffect(eff[2])
+					known = true
+				end
+			end
+			if num == 1 then
+				game.logSeen(who, "%s shrugs off some effects!", who.name:capitalize())
+				self.power = 0
+			end
+	end,
+	on_wear = function(self, who)
+		self.worn_by = who
+		if who.descriptor and who.descriptor.race == "Halfling" then
+			local Stats = require "engine.interface.ActorStats"
+			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_LCK] = -10}) -- Overcomes the +5 Bonus and adds a -5 penalty
+			self:specialWearAdd({"wielder","combat_physresist"}, -5)
+			self:specialWearAdd({"wielder","combat_mentalresist"}, -5)
+			self:specialWearAdd({"wielder","combat_spellresist"}, -5)
+			game.logPlayer(who, "#LIGHT_RED#You feel uneasy carrying %s.", self:getName())
+		end
+	end,
+	on_takeoff = function(self)
+		self.worn_by = nil
+	end,
+	max_power = 10, power_regen = 1,
+	use_power = { name = "", power = 10, hidden = true, use = function(self, who) return end},
+}
+
+newEntity{ base = "BASE_MINDSTAR", define_as = "PSIONIC_FURY",
+	power_source = {psionic=true},
+	unique = true,
+	name = "Psionic Fury",
+	unided_name = "vibrating mindstar",
+	level_range = {24, 32},
+	color=colors.AQUAMARINE, image = "object/artifact/psionic_fury.png",
+	rarity = 250,
+	desc = [[This mindstar constantly shakes and vibrates, as if a powerful force is desperately trying to escape.]],
+	cost = 85,
+	require = { stat = { wil=24 }, },
+	material_level = 3,
+	combat = {
+		dam = 12,
+		apr = 25,
+		physcrit = 5,
+		dammod = {wil=0.4, cun=0.2},
+		damtype = DamageType.MIND,
+	},
+	wielder = {
+		combat_mindpower = 10,
+		combat_mindcrit = 8,
+		inc_damage={
+			[DamageType.MIND] 		= 15,
+			[DamageType.PHYSICAL]	= 5,
+		},
+		resists={
+			[DamageType.MIND] 		= 10,
+		},
+		inc_stats = { [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 4, },
+	},
+	max_power = 40, power_regen = 1,
+	use_power = { name = "release a wave of psionic power", power = 40,
+	use = function(self, who)
+		local radius = 4
+		local dam = (50 + who:getWil()*1.8)
+		local blast = {type="ball", range=0, radius=5, selffire=false}
+		who:project(blast, who.x, who.y, engine.DamageType.MIND, dam)
+		game.level.map:particleEmitter(who.x, who.y, blast.radius, "force_blast", {radius=blast.radius})
+		game.logSeen(who, "%s sends out a blast of psionic energy!", who.name:capitalize(), self:getName())
+		return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_GAUNTLETS", define_as = "STORM_BRINGER_GAUNTLETS",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Storm Bringer's Gauntlets", color = colors.LIGHT_STEEL_BLUE, image = "object/artifact/storm_bringers_gauntlets.png",
+	unided_name = "fine-mesh gauntlets",
+	desc = [[This pair of fine mesh voratun gauntlets is covered with glyphs of power that spark with azure energy.  The metal is supple and light so as not to interfere with spell-casting.  When and where these gauntlets were forged is a mystery, but odds are the crafter knew a thing or two about magic.]],
+	level_range = {25, 35},
+	rarity = 250,
+	cost = 1000,
+	material_level = 3,
+	require = nil,
+	wielder = {
+		inc_stats = { [Stats.STAT_MAG] = 4, },
+		resists = { [DamageType.LIGHTNING] = 15, },
+		inc_damage = { [DamageType.LIGHTNING] = 10 },
+		resists_cap = { [DamageType.LIGHTNING] = 5 },
+		combat_spellcrit = 5,
+		combat_critical_power = 20,
+		combat_armor = 3,
+		combat = {
+			dam = 22,
+			apr = 10,
+			physcrit = 4,
+			physspeed = 0.2,
+			dammod = {dex=0.4, str=-0.6, cun=0.4 },
+			melee_project={ [DamageType.LIGHTNING] = 20, },
+			talent_on_hit = { [Talents.T_CHAIN_LIGHTNING] = {level=3, chance=20}, [Talents.T_NOVA] = {level=2, chance=15} },
+			damrange = 0.3,
+		},
+	},
+	max_power = 16, power_regen = 1,
+	use_talent = { id = Talents.T_CHAIN_LIGHTNING, level = 3, power = 16 },
+}
+
+newEntity{ base = "BASE_TRIDENT",
+	power_source = {arcane=true},
+	define_as = "TRIDENT_STREAM",
+	unided_name = "ornate trident",
+	name = "The River's Fury", unique=true, image = "object/artifact/the_rivers_fury.png",
+	desc = [[This gorgeous and ornate trident was wielded by Lady Nashva, and when you hold it, you can faintly hear the roar of a rushing river.]],
+	require = { stat = { str=12 }, },
+	level_range = {1, 10},
+	rarity = 230,
+	cost = 300,
+	material_level = 1,
+	combat = {
+		dam = 23,
+		apr = 8,
+		physcrit = 5,
+		dammod = {str=1.2},
+		damrange = 1.4,
+		melee_project={
+			[DamageType.COLD] = 15,
+		},
+	},
+	wielder = {
+		combat_atk = 10,
+		combat_spellpower = 10,
+		resists={[DamageType.COLD] = 10},
+		inc_damage = { [DamageType.COLD] = 10 },
+		movement_speed=0.1,
+	},
+	talent_on_spell = { {chance=20, talent="T_GLACIAL_VAPOUR", level=1} },
+	max_power = 80, power_regen = 1,
+	use_talent = { id = Talents.T_TIDAL_WAVE, level=1, power = 80 },
+}
+
+newEntity{ base = "BASE_KNIFE",
+	power_source = {arcane=true},
+	define_as = "UNERRING_SCALPEL",
+	unique = true,
+	name = "Unerring Scalpel", image = "object/artifact/unerring_scalpel.png",
+	unided_name = "long sharp scalpel",
+	desc = [[This scalpel was used by the dread sorcerer Kor'Pul when he began learning the necromantic arts in the Age of Dusk.  Many were the bodies, living and dead, that became unwilling victims of his terrible experiments.]],
+	level_range = {1, 12},
+	rarity = 200,
+	require = { stat = { cun=16 }, },
+	cost = 80,
+	material_level = 1,
+	combat = {
+		dam = 15,
+		apr = 25,
+		physcrit = 0,
+		dammod = {dex=0.55, str=0.45},
+		phasing = 50,
+	},
+	wielder = {
+		combat_atk=20,
+		blind_fight = 1,
+	},
+}
+
+newEntity{ base = "BASE_GLOVES", define_as = "VARSHA_CLAW",
+	power_source = {nature=true},
+	unique = true,
+	name = "Wyrmbreath", color = colors.RED, image = "object/artifact/wyrmbreath.png",
+	unided_name = "clawed dragon-scale gloves",
+	desc = [[These dragon scale gloves are tipped with the claws and teeth of a vicious Wyrm. The gloves are warm to the touch.]],
+	level_range = {12, 22},
+	rarity = 180,
+	cost = 50,
+	material_level = 2,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 5, },
+		resists = { [DamageType.FIRE]= 18, [DamageType.DARKNESS]= 10, [DamageType.NATURE]= 10,},
+		inc_damage = { [DamageType.FIRE]= 10, },
+		combat_armor = 4,
+		combat = {
+			dam = 17,
+			apr = 7,
+			physcrit = 1,
+			dammod = {dex=0.4, str=-0.6, cun=0.4 },
+			melee_project={[DamageType.FIRE] = 10},
+			convert_damage = { [DamageType.FIRE] = 50,},
+			talent_on_hit = { [Talents.T_BELLOWING_ROAR] = {level=3, chance=10}, [Talents.T_FIRE_BREATH] = {level=2, chance=10} },
+		},
+	},
+	max_power = 24, power_regen = 1,
+	use_talent = { id = Talents.T_FIRE_BREATH, level = 2, power = 24 },
+}
+
+newEntity{ base = "BASE_TOOL_MISC", define_as = "EYE_OF_THE_DREAMING_ONE",
+	power_source = {psionic=true},
+	unique=true, rarity=240,
+	name = "Eye of the Dreaming One",
+	unided_name = "translucent sphere",
+	color = colors.YELLOW,
+	level_range = {1, 10},
+	image = "object/artifact/eye_of_the_dreaming_one_new.png",
+	desc = [[This ethereal eye stares eternally, as if seeing things that do not truly exist.]],
+	cost = 320,
+	material_level = 1,
+	wielder = {
+		combat_mindpower=5,
+		sleep_immune=1,
+		combat_mentalresist = 10,
+		inc_stats = {[Stats.STAT_WIL] = 5,},
+	},
+	max_power = 25, power_regen = 1,
+	use_talent = { id = Talents.T_SLEEP, level = 3, power = 20 },
+}
diff --git a/game/modules/tome/data/general/objects/boss-artifacts.lua b/game/modules/tome/data/general/objects/boss-artifacts.lua
index 535585cdf97c189be5a6f064d039963d933d96a5..35f575f2d4c2010aeb0aa71e0849fbe1aabd4e27 100644
--- a/game/modules/tome/data/general/objects/boss-artifacts.lua
+++ b/game/modules/tome/data/general/objects/boss-artifacts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -20,1650 +20,25 @@
 local Stats = require "engine.interface.ActorStats"
 local Talents = require "engine.interface.ActorTalents"
 
--- This file describes artifacts associated with a boss of the game, they have a high chance of dropping their respective ones, but they can still be found elsewhere
+-- This file describes artifacts associated with unique enemies that can appear anywhere their base enemy can.
 
-newEntity{ base = "BASE_LONGSWORD",
-	power_source = {arcane=true},
-	define_as = "LONGSWORD_WINTERTIDE", rarity=false, unided_name = "glittering longsword", image="object/artifact/wintertide.png",
-	name = "Wintertide", unique=true,
-	desc = [[The air seems to freeze around the blade of this sword, draining all heat from the area.
-It is said the Conclave created this weapon for their warmaster during the dark times of the first allure war.]],
-	require = { stat = { str=35 }, },
-	level_range = {35, 45},
-	rarity = 280,
-	cost = 2000,
-	material_level = 5,
-	combat = {
-		dam = 45,
-		apr = 10,
-		physcrit = 10,
-		dammod = {str=1},
-		damrange = 1.4,
-		melee_project={[DamageType.ICE] = 45},
-	},
-	wielder = {
-		lite = 1,
-		see_invisible = 2,
-		resists={[DamageType.COLD] = 25},
-		inc_damage = { [DamageType.COLD] = 20 },
-	},
-	max_power = 18, power_regen = 1,
-	use_power = { name = "generate a burst of ice", power = 8,
-		use = function(self, who)
-			local tg = {type="ball", range=0, radius=4, selffire=false}
-			who:project(tg, who.x, who.y, engine.DamageType.ICE, 40 + (who:getMag() + who:getWil()), {type="freeze"})
-			game:playSoundNear(who, "talents/ice")
-			game.logSeen(who, "%s invokes the power of %s!", who.name:capitalize(), self.name)
-			return {id=true, used=true}
-		end
-	},
-}
-
-newEntity{ base = "BASE_LITE", define_as = "WINTERTIDE_PHIAL",
-	power_source = {arcane=true},
-	unided_name = "phial filled with darkness", unique = true, image="object/artifact/wintertide_phial.png",
-	name = "Wintertide Phial", color=colors.DARK_GREY,
-	desc = [[This phial seems filled with darkness, yet it cleanses your thoughts.]],
-	level_range = {1, 10},
-	rarity = 200,
-	encumber = 2,
-	cost = 50,
-	material_level = 1,
-
-	wielder = {
-		lite = 1,
-		infravision = 6,
-	},
-
-	max_power = 60, power_regen = 1,
-	use_power = { name = "cleanse your mind (remove a few detrimental mental effects)", power = 40,
-		use = function(self, who)
-			local target = who
-			local effs = {}
-			local known = false
-
-			-- Go through all spell effects
-			for eff_id, p in pairs(target.tmp) do
-				local e = target.tempeffect_def[eff_id]
-				if e.type == "mental" and e.status == "detrimental" then
-					effs[#effs+1] = {"effect", eff_id}
-				end
-			end
-
-			for i = 1, 3 + math.floor(who:getMag() / 10) do
-				if #effs == 0 then break end
-				local eff = rng.tableRemove(effs)
-
-				if eff[1] == "effect" then
-					target:removeEffect(eff[2])
-					known = true
-				end
-			end
-			game.logSeen(who, "%s's mind is clear!", who.name:capitalize())
-			return {id=true, used=true}
-		end
-	},
-}
-
-newEntity{ base = "BASE_AMULET",
-	power_source = {arcane=true},
-	define_as = "FIERY_CHOKER", rarity=false,
-	unided_name = "flame-wrought amulet",
-	name = "Fiery Choker", unique=true, image="object/artifact/fiery_choker.png",
-	desc = [[A choker made of pure flame, forever shifting patterns around the neck of its wearer. Its fire seems to not harm the wearer.]],
-	level_range = {32, 42},
-	rarity = 220,
-	cost = 190,
-	material_level = 3,
-	wielder = {
-		inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 },
-		combat_spellpower = 7,
-		combat_spellcrit = 8,
-		resists = {
-			[DamageType.FIRE] = 20,
-			[DamageType.COLD] = -20,
-		},
-		inc_damage={
-			[DamageType.FIRE] = 10,
-			[DamageType.COLD] = -5,
-		},
-		damage_affinity={
-			[DamageType.FIRE] = 30,
-		},
-		blind_immune = 0.4,
-	},
-	talent_on_spell = { {chance=10, talent=Talents.T_VOLCANO, level=3} },
-}
-
--- Artifact, dropped by Rantha
-newEntity{ base = "BASE_LEATHER_BOOT",
-	power_source = {nature=true},
-	define_as = "FROST_TREADS",
-	unided_name = "ice-covered boots",
-	name = "Frost Treads", unique=true, image="object/artifact/frost_treads.png",
-	desc = [[A pair of leather boots. Cold to the touch, they radiate a cold blue light.]],
-	require = { stat = { dex=16 }, },
-	level_range = {10, 18},
-	material_level = 2,
-	rarity = 220,
-	cost = 40,
-
-	wielder = {
-		lite = 1,
-		combat_armor = 4,
-		combat_def = 1,
-		fatigue = 7,
-		inc_damage = {
-			[DamageType.COLD] = 15,
-		},
-		resists = {
-			[DamageType.COLD] = 20,
-			[DamageType.NATURE] = 10,
-		},
-		inc_stats = { [Stats.STAT_STR] = 4, [Stats.STAT_DEX] = 4, [Stats.STAT_CUN] = 4, },
-	},
-}
-
-newEntity{ base = "BASE_HELM",
-	power_source = {technique=true},
-	define_as = "DRAGON_SKULL",
-	name = "Dragonskull Helm", unique=true, unided_name="skull helm", image = "object/artifact/dragonskull_helmet.png",
-	desc = [[Traces of a dragon's power still remain in this bleached and cracked skull.]],
-	require = { stat = { wil=24 }, },
-	level_range = {45, 50},
-	material_level = 5,
-	rarity = 280,
-	cost = 200,
-
-	wielder = {
-		resists = {
-			[DamageType.FIRE] = 15,
-			[DamageType.COLD] = 15,
-			[DamageType.ACID] = 15,
-			[DamageType.LIGHTNING] = 15,
-		},
-		esp = {dragon=1},
-		combat_armor = 2,
-		fatigue = 12,
-		combat_physresist = 12,
-		combat_mentalresist = 12,
-		combat_spellresist = 12,
-	},
-}
-
-newEntity{ base = "BASE_LIGHT_ARMOR",
-	power_source = {nature=true},
-	define_as = "EEL_SKIN", rarity=false, image = "object/artifact/eel_skin_armor.png",
-	name = "Eel-skin armour", unique=true,
-	unided_name = "slippery armour", color=colors.VIOLET,
-	desc = [[This armour seems to have been patched together from many eels. Yuck.]],
-	level_range = {5, 12},
-	rarity = 200,
-	cost = 500,
-	material_level = 2,
-	wielder = {
-		inc_stats = { [Stats.STAT_DEX] = 2, [Stats.STAT_CUN] = 3,  },
-		poison_immune = 0.3,
-		combat_armor = 1,
-		combat_def = 10,
-		fatigue = 2,
-	},
-
-	max_power = 50, power_regen = 1,
-	use_talent = { id = Talents.T_CALL_LIGHTNING, level=2, power = 18 },
-	talent_on_wild_gift = { {chance=10, talent=Talents.T_CALL_LIGHTNING, level=2} },
-}
-
-newEntity{ base = "BASE_HEAVY_ARMOR",
-	power_source = {nature=true},
-	define_as = "CHROMATIC_HARNESS", rarity=false, image = "object/artifact/armor_chromatic_harness.png",
-	name = "Chromatic Harness", unique=true,
-	unided_name = "multi-hued scale-mail armour", color=colors.VIOLET,
-	desc = [[This dragon scale harness shines with multiple colors, quickly shifting through them in a seemingly chaotic manner.]],
-	level_range = {40, 50},
-	rarity = 280,
-	cost = 500,
-	material_level = 5,
-	wielder = {
-		talent_cd_reduction={[Talents.T_ICE_BREATH]=3, [Talents.T_FIRE_BREATH]=3, [Talents.T_SAND_BREATH]=3, [Talents.T_LIGHTNING_BREATH]=3, [Talents.T_CORROSIVE_BREATH]=3,},
-		inc_stats = { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 4, [Stats.STAT_STR] = 6, [Stats.STAT_LCK] = 10, },
-		blind_immune = 0.5,
-		stun_immune = 0.25,
-		knockback_immune = 0.5,
-		esp = { dragon = 1 },
-		combat_def = 10,
-		combat_armor = 14,
-		fatigue = 16,
-		resists = {
-			[DamageType.COLD] = 20,
-			[DamageType.LIGHTNING] = 20,
-			[DamageType.FIRE] = 20,
-			[DamageType.ACID] = 20,
-			[DamageType.PHYSICAL] = 20,
-		},
-	},
-}
-
-newEntity{ base = "BASE_RING",
-	power_source = {technique=true},
-	define_as = "PRIDE_GLORY", rarity=false,
-	name = "Glory of the Pride", unique=true, image="object/artifact/glory_of_the_pride.png",
-	desc = [[The most prized treasure of the Battlemaster of the Pride, Grushnak. This gold ring is inscribed in the now lost orc tongue.]],
-	unided_name = "deep black ring",
-	level_range = {40, 50},
-	rarity = 280,
-	cost = 500,
-	material_level = 5,
-	wielder = {
-		max_mana = -40,
-		max_stamina = 40,
-		combat_physresist = 45,
-		confusion_immune = 0.5,
-		combat_atk = 10,
-		combat_dam = 10,
-		combat_def = 5,
-		combat_armor = 10,
-		fatigue = -15,
-		talent_cd_reduction={
-			[Talents.T_RUSH]=6,
-		},
-		inc_damage={ [DamageType.PHYSICAL] = 8, },
-	},
-}
-
-newEntity{ base = "BASE_RING",
-	power_source = {psionic=true},
-	define_as = "NIGHT_SONG", rarity=false,
-	name = "Nightsong", unique=true, image = "object/artifact/ring_nightsong.png",
-	desc = [[A pitch black ring, unadorned. It seems as though tendrils of darkness creep upon it.]],
-	unided_name = "obsidian ring",
-	level_range = {15, 23},
-	rarity = 250,
-	cost = 500,
-	material_level = 2,
-	wielder = {
-		max_stamina = 25,
-		combat_def = 6,
-		fatigue = -7,
-		inc_stats = { [Stats.STAT_CUN] = 6 },
-		combat_mentalresist = 13,
-		talent_cd_reduction={
-			[Talents.T_SHADOWSTEP]=1,
-		},
-		inc_damage={ [DamageType.PHYSICAL] = 5, },
-	},
-
-	max_power = 50, power_regen = 1,
-	use_talent = { id = Talents.T_DARK_TENDRILS, level=2, power = 40 },
-}
-
-newEntity{ base = "BASE_HELM",
-	power_source = {nature=true},
-	define_as = "HELM_OF_GARKUL",
-	unided_name = "tribal helm",
-	name = "Steel Helm of Garkul", unique=true, image="object/artifact/helm_of_garkul.png",
-	desc = [[A great helm that belonged to Garkul the Devourer, one of the greatest orcs to live.]],
-	require = { stat = { str=16 }, },
-	level_range = {12, 22},
-	rarity = 200,
-	cost = 500,
-	material_level = 2,
-	skullcracker_mult = 5,
-
-	wielder = {
-		combat_armor = 6,
-		fatigue = 8,
-		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_CON] = 5, [Stats.STAT_WIL] = 4 },
-		inc_damage={ [DamageType.PHYSICAL] = 10, },
-		combat_physresist = 12,
-		combat_mentalresist = 12,
-		combat_spellresist = 12,
-		talents_types_mastery = {["technique/thuggery"]=0.2},
-	},
-
-	set_list = { {"define_as","SET_GARKUL_TEETH"} },
-	on_set_complete = function(self, who)
-		self:specialSetAdd("skullcracker_mult", 1)
-		self:specialSetAdd({"wielder","melee_project"}, {[engine.DamageType.GARKUL_INVOKE]=5})
-	end,
-}
-
-newEntity{ base = "BASE_SHIELD",
-	power_source = {arcane=true},
-	define_as = "LUNAR_SHIELD",
-	unique = true,
-	name = "Lunar Shield", image = "object/artifact/shield_lunar_shield.png",
-	unided_name = "chitinous shield",
-	desc = [[A large section of chitin removed from Nimisil. It continues to give off a strange white glow.]],
-	color = colors.YELLOW,
-	metallic = false,
-	require = { stat = { str=35 }, },
-	level_range = {40, 50},
-	rarity = 280,
-	cost = 350,
-	material_level = 5,
-	special_combat = {
-		dam = 45,
-		block = 250,
-		physcrit = 10,
-		dammod = {str=1},
-		damrange = 1.4,
-		damtype = DamageType.ARCANE,
-	},
-	wielder = {
-		resists={[DamageType.DARKNESS] = 25},
-		inc_damage={[DamageType.DARKNESS] = 15},
-
-		combat_armor = 7,
-		combat_def = 12,
-		combat_def_ranged = 5,
-		combat_spellpower = 10,
-		fatigue = 2,
-
-		lite = 1,
-		talents_types_mastery = {["celestial/star-fury"]=0.2,["celestial/twilight"]=0.1,},
-		learn_talent = { [Talents.T_BLOCK] = 5, },
-	},
-	talent_on_spell = { {chance=10, talent=Talents.T_MOONLIGHT_RAY, level=2} },
-}
-
-newEntity{ base = "BASE_SHIELD",
-	power_source = {nature=true},
-	define_as = "WRATHROOT_SHIELD",
-	unided_name = "large chunk of wood",
-	name = "Wrathroot's Barkwood", unique=true, image="object/artifact/shield_wrathroots_barkwood.png",
-	desc = [[The barkwood of Wrathroot, made into roughly the shape of a shield.]],
-	require = { stat = { str=25 }, },
-	level_range = {12, 22},
-	rarity = 200,
-	cost = 20,
-	material_level = 2,
-	rarity = false,
-	metallic = false,
-
-	special_combat = {
-		dam = resolvers.rngavg(20,30),
-		block = 60,
-		physcrit = 2,
-		dammod = {str=1.5},
-		damrange = 1.4,
-	},
-	wielder = {
-		combat_armor = 10,
-		combat_def = 9,
-		fatigue = 14,
-		resists = {
-			[DamageType.DARKNESS] = 20,
-			[DamageType.COLD] = 20,
-			[DamageType.NATURE] = 20,
-		},
-		learn_talent = { [Talents.T_BLOCK] = 3, },
-	},
-}
-
-newEntity{ base = "BASE_GEM",
-	power_source = {nature=true},
-	unique = true, define_as = "PETRIFIED_WOOD",
-	unided_name = "burned piece of wood",
-	name = "Petrified Wood", subtype = "black",
-	color = colors.WHITE, image = "object/artifact/petrified_wood.png",
-	level_range = {35, 45},
-	rarity = 280,
-	identified = false,
-	desc = [[A piece of the scorched wood taken from the remains of Snaproot.]],
-	rarity = false,
-	cost = 100,
-	material_level = 4,
-	imbue_powers = {
-		resists = { [DamageType.NATURE] = 25, [DamageType.DARKNESS] = 10, [DamageType.COLD] = 10 },
-		inc_stats = { [Stats.STAT_CON] = 25, },
-	},
-	wielder = {
-		resists = { [DamageType.NATURE] = 25, [DamageType.DARKNESS] = 10, [DamageType.COLD] = 10 },
-		inc_stats = { [Stats.STAT_CON] = 25, },
-	},
-}
-
-newEntity{ base = "BASE_STAFF",
-	power_source = {arcane=true},
-	unique = true, define_as = "CRYSTAL_SHARD",
-	name = "Crystal Shard",
-	unided_name = "crystalline tree branch",
-	flavor_name = "magestaff",
-	level_range = {10, 22},
-	color=colors.BLUE, image = "object/artifact/crystal_shard.png",
-	rarity = 300,
-	desc = [[This crystalline tree branch is remarkably rigid, and refracts light in myriad colors. Gazing at it entrances you, and you worry where its power may have come from.]],
-	cost = 200,
-	material_level = 2,
-	require = { stat = { mag=20 }, },
-	combat = {
-		dam = 16,
-		apr = 4,
-		dammod = {mag=1.3},
-		damtype = DamageType.ARCANE,
-		convert_damage = {
-			[DamageType.BLIGHT] = 50,
-		},
-	},
-	wielder = {
-		combat_spellpower = 14,
-		combat_spellcrit = 4,
-		inc_damage={
-			[DamageType.ARCANE] = 18,
-			[DamageType.BLIGHT] = 18,
-		},
-		resists={
-			[DamageType.ARCANE] = 10,
-			[DamageType.BLIGHT] = 10,
-		},
-		damage_affinity={
-			[DamageType.ARCANE] = 20,
-		},
-	},
-	max_power = 45, power_regen = 1,
-	use_power = { name = "create living shards of crystal", power = 45, use = function(self, who)
-		if not who:canBe("summon") then game.logPlayer(who, "You cannot summon; you are suppressed!") return end
-
-		local NPC = require "mod.class.NPC"
-		local list = NPC:loadList("/data/general/npcs/crystal.lua")
-		for i = 1, 2 do
-			-- Find space
-			local x, y = util.findFreeGrid(who.x, who.y, 5, true, {[engine.Map.ACTOR]=true})
-			if not x then break end
-				local e
-			repeat e = rng.tableRemove(list)
-
-			until not e.unique and e.rarity
-			e = e:clone()
-			local crystal = game.zone:finishEntity(game.level, "actor", e)
-			crystal.make_escort = nil
-			crystal.silent_levelup = true
-			crystal.faction = who.faction
-			crystal.ai = "summoned"
-			crystal.ai_real = "dumb_talented_simple"
-			crystal.summoner = who
-			crystal.summon_time = 10
-			crystal.exp_worth = 0
-			crystal:forgetInven(crystal.INVEN_INVEN)
-
-			local setupSummon = getfenv(who:getTalentFromId(who.T_SPIDER).action).setupSummon
-			if who:knowTalent(who.T_BLIGHTED_SUMMONING) then
-				crystal.blighted_summon_talent = who.T_BONE_SHIELD
-				crystal:incIncStat("mag", who:getMag())
-				crystal.summon_time=15
-			end
-			setupSummon(who, crystal, x, y)
-			game:playSoundNear(who, "talents/ice")
-		end
-		return {id=true, used=true}
-	end },
-}
-newEntity{ base = "BASE_CLOTH_ARMOR",
-	power_source = {arcane=true},
-	define_as = "BLACK_ROBE", rarity=false,
-	name = "Black Robe", unique=true,
-	unided_name = "black robe", color=colors.DARK_GREY, image = "object/artifact/robe_black_robe.png",
-	desc = [[A silk robe, darker than the darkest night sky, it radiates power.]],
-	level_range = {40, 50},
-	rarity = 280,
-	cost = 500,
-	material_level = 5,
-	wielder = {
-		inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 },
-		see_invisible = 10,
-		blind_immune = 0.5,
-		combat_spellpower = 30,
-		combat_spellresist = 25,
-		combat_dam = 10,
-		combat_def = 6,
-	},
-	talent_on_spell = {
-		{chance=5, talent=Talents.T_SOUL_ROT, level=3},
-		{chance=5, talent=Talents.T_BLOOD_GRASP, level=3},
-		{chance=5, talent=Talents.T_BONE_SPEAR, level=3},
-	},
-}
-
-newEntity{ base = "BASE_WARAXE",
-	power_source = {arcane=true},
-	define_as = "MALEDICTION", rarity=false,
-	unided_name = "pestilent waraxe",
-	name = "Malediction", unique=true, image = "object/artifact/axe_malediction.png",
-	desc = [[The land withers and crumbles wherever this cursed axe rests.]],
-	require = { stat = { str=55 }, },
-	level_range = {35, 45},
-	rarity = 290,
-	cost = 375,
-	material_level = 4,
-	combat = {
-		dam = 55,
-		apr = 15,
-		physcrit = 10,
-		dammod = {str=1},
-		damrange = 1.2,
-		melee_project={[DamageType.BLIGHT] = 20},
-	},
-	wielder = {
-		life_regen = -0.3,
-		inc_damage = { [DamageType.BLIGHT] = 20 },
-	},
-}
-
-newEntity{ base = "BASE_STAFF",
-	power_source = {arcane=true},
-	define_as = "STAFF_KOR", rarity=false, image = "object/artifact/staff_kors_fall.png",
-	unided_name = "dark staff",
-	flavor_name = "vilestaff",
-	name = "Kor's Fall", unique=true,
-	desc = [[Made from the bones of many creatures, this staff glows with power. You can feel its evilness even from a distance.]],
-	require = { stat = { mag=25 }, },
-	level_range = {1, 10},
-	rarity = 200,
-	cost = 60,
-	material_level = 1,
-	modes = {"darkness", "fire", "blight", "acid"},
-	combat = {
-		is_greater = true,
-		dam = 10,
-		apr = 0,
-		physcrit = 1.5,
-		dammod = {mag=1.1},
-		damtype = DamageType.DARKNESS,
-	},
-	wielder = {
-		see_invisible = 2,
-		combat_spellpower = 7,
-		combat_spellcrit = 8,
-		inc_damage={
-			[DamageType.ACID] = 10,
-			[DamageType.DARKNESS] = 10,
-			[DamageType.FIRE] = 10,
-			[DamageType.BLIGHT] = 10,
-		},
-		talents_types_mastery = { ["corruption/bone"] = 0.1, },
-		learn_talent = {[Talents.T_COMMAND_STAFF] = 1},
-	},
-	max_power = 6, power_regen = 1,
-	use_talent = { id = Talents.T_BONE_SPEAR, level = 3, power = 6 },
-}
-
-newEntity{ base = "BASE_AMULET",
-	power_source = {arcane=true},
-	define_as = "VOX", rarity=false,
-	name = "Vox", unique=true,
-	unided_name = "ringing amulet", color=colors.BLUE, image="object/artifact/jewelry_amulet_vox.png",
-	desc = [[No force can hope to silence the wearer of this amulet.]],
-	level_range = {40, 50},
-	rarity = 220,
-	cost = 3000,
-	material_level = 5,
-	wielder = {
-		see_invisible = 20,
-		silence_immune = 0.8,
-		combat_spellpower = 9,
-		combat_spellcrit = 4,
-		max_mana = 50,
-		max_vim = 50,
-	},
-}
-
-newEntity{ base = "BASE_STAFF",
-	power_source = {arcane=true},
-	define_as = "TELOS_TOP_HALF", rarity=false, image = "object/artifact/staff_broken_top_telos.png",
-	slot_forbid = false,
-	twohanded = false,
-	unided_name = "broken staff", flavor_name = "magestaff",
-	name = "Telos's Staff (Top Half)", unique=true,
-	desc = [[The top part of Telos's broken staff.]],
-	require = { stat = { mag=35 }, },
-	level_range = {40, 50},
-	rarity = 210,
-	encumber = 2.5,
-	material_level = 5,
-	modes = {"fire", "cold", "lightning", "arcane"},
-	cost = 500,
-	combat = {
-		dam = 35,
-		apr = 0,
-		physcrit = 1.5,
-		dammod = {mag=1.0},
-		damtype = DamageType.ARCANE,
-	},
-	wielder = {
-		combat_spellpower = 30,
-		combat_spellcrit = 15,
-		combat_mentalresist = 8,
-		inc_stats = { [Stats.STAT_WIL] = 5, },
-		inc_damage = {[DamageType.ARCANE] = 35 },
-		learn_talent = {[Talents.T_COMMAND_STAFF] = 1 },
-	},
-}
-
-newEntity{ base = "BASE_AMULET",
-	power_source = {arcane=true},
-	define_as = "AMULET_DREAD", rarity=false,
-	name = "Choker of Dread", unique=true, image = "object/artifact/amulet_choker_of_dread.png",
-	unided_name = "dark amulet", color=colors.LIGHT_DARK,
-	desc = [[The evilness of undeath radiates from this amulet.]],
-	level_range = {20, 28},
-	rarity = 220,
-	cost = 5000,
-	material_level = 3,
-	wielder = {
-		see_invisible = 10,
-		blind_immune = 1,
-		combat_spellpower = 5,
-		combat_dam = 5,
-	},
-	max_power = 60, power_regen = 1,
-	use_power = { name = "summon an elder vampire to your side", power = 60, use = function(self, who)
-		if not who:canBe("summon") then game.logPlayer(who, "You cannot summon; you are suppressed!") return end
-
-		-- Find space
-		local x, y = util.findFreeGrid(who.x, who.y, 5, true, {[engine.Map.ACTOR]=true})
-		if not x then
-			game.logPlayer(who, "Not enough space to invoke the vampire!")
-			return
-		end
-		print("Invoking guardian on", x, y)
-
-		local NPC = require "mod.class.NPC"
-		local vampire = NPC.new{
-			type = "undead", subtype = "vampire",
-			display = "V", image = "npc/elder_vampire.png",
-			name = "elder vampire", color=colors.RED,
-			desc=[[A terrible robed undead figure, this creature has existed in its unlife for many centuries by stealing the life of others. It can summon the very shades of its victims from beyond the grave to come enslaved to its aid.]],
-
-			combat = { dam=resolvers.rngavg(9,13), atk=10, apr=9, damtype=engine.DamageType.DRAINLIFE, dammod={str=1.9} },
-
-			body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
-
-			autolevel = "warriormage",
-			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=3, },
-			stats = { str=12, dex=12, mag=12, con=12 },
-			life_regen = 3,
-			size_category = 3,
-			rank = 3,
-			infravision = 10,
-
-			inc_damage = table.clone(who.inc_damage, true),
-
-			resists = { [engine.DamageType.COLD] = 80, [engine.DamageType.NATURE] = 80, [engine.DamageType.LIGHT] = -50,  },
-			blind_immune = 1,
-			confusion_immune = 1,
-			see_invisible = 5,
-			undead = 1,
-
-			level_range = {who.level, who.level}, exp_worth = 0,
-			max_life = resolvers.rngavg(90,100),
-			combat_armor = 12, combat_def = 10,
-			resolvers.talents{ [who.T_STUN]=2, [who.T_BLUR_SIGHT]=3, [who.T_PHANTASMAL_SHIELD]=2, [who.T_ROTTING_DISEASE]=3, },
-
-			faction = who.faction,
-			summoner = who,
-			summon_time = 15,
-		}
-
-		vampire:resolve()
-		game.zone:addEntity(game.level, vampire, "actor", x, y)
-		vampire:forceUseTalent(vampire.T_TAUNT, {})
-		game:playSoundNear(who, "talents/spell_generic")
-		return {id=true, used=true}
-	end },
-}
-
-newEntity{ define_as = "RUNED_SKULL",
-	power_source = {arcane=true},
-	unique = true,
-	type = "gem", subtype="red", image = "object/artifact/bone_runed_skull.png",
-	unided_name = "human skull",
-	name = "Runed Skull",
-	display = "*", color=colors.RED,
-	level_range = {40, 50},
-	rarity = 390,
-	cost = 150,
-	encumber = 3,
-	material_level = 5,
-	desc = [[Dull red runes are etched all over this blackened skull.]],
-
-	carrier = {
-		combat_spellpower = 7,
-		on_melee_hit = {[DamageType.FIRE]=25},
-	},
-}
-
-newEntity{ base = "BASE_GREATMAUL",
-	power_source = {technique=true},
-	define_as = "GREATMAUL_BILL_TRUNK",
-	unided_name = "tree trunk", image = "object/artifact/bill_treestump.png",
-	name = "Bill's Tree Trunk", unique=true,
-	desc = [[This is a big, nasty-looking tree trunk that Bill the Troll used as a weapon. It could still serve this purpose, should you be strong enough to wield it!]],
-	require = { stat = { str=25 }, },
-	level_range = {1, 10},
-	material_level = 1,
-	rarity = 200,
-	metallic = false,
-	cost = 70,
-	combat = {
-		dam = 30,
-		apr = 7,
-		physcrit = 1.5,
-		dammod = {str=1.3},
-		damrange = 1.7,
-	},
-
-	wielder = {
-	},
-}
-
-
-newEntity{ base = "BASE_SHIELD",
-	power_source = {technique=true},
-	define_as = "SANGUINE_SHIELD",
-	unided_name = "bloody shield",
-	name = "Sanguine Shield", unique=true, image = "object/artifact/sanguine_shield.png",
-	desc = [[Though tarnished and spattered with blood, the emblem of the Sun still manages to shine through on this shield.]],
-	require = { stat = { str=39 }, },
-	level_range = {35, 45},
-	material_level = 4,
-	rarity = 240,
-	cost = 120,
-
-	special_combat = {
-		dam = 40,
-		block = 220,
-		physcrit = 9,
-		dammod = {str=1.2},
-	},
-	wielder = {
-		combat_armor = 4,
-		combat_def = 14,
-		combat_def_ranged = 14,
-		inc_stats = { [Stats.STAT_CON] = 5, },
-		fatigue = 19,
-		resists = { [DamageType.BLIGHT] = 25, },
-		life_regen = 5,
-		learn_talent = { [Talents.T_BLOCK] = 5, },
-	},
-}
-
-newEntity{ base = "BASE_WHIP",
-	power_source = {arcane=true},
-	define_as = "WHIP_URH_ROK",
-	unided_name = "fiery whip",
-	name = "Whip of Urh'Rok", color=colors.PURPLE, unique = true, image = "object/artifact/whip_of_urh_rok.png",
-	desc = [[With this unbearably bright whip of flame, the demon master Urh'Rok has become known for never having lost in combat.]],
-	require = { stat = { dex=48 }, },
-	level_range = {40, 50},
-	rarity = 390,
-	cost = 250,
-	material_level = 5,
-	combat = {
-		dam = 55,
-		apr = 0,
-		physcrit = 9,
-		dammod = {dex=1},
-		damtype = DamageType.FIREKNOCKBACK,
-		talent_on_hit = { [Talents.T_BONE_NOVA] = {level=4, chance=20}, [Talents.T_BLOOD_BOIL] = {level=3, chance=15} },
-	},
-	wielder = {
-		esp = {["demon/minor"]=1, ["demon/major"]=1},
-		see_invisible = 2,
-		combat_spellpower = 15,
-		inc_damage={
-			[DamageType.FIRE] = 20,
-			[DamageType.BLIGHT] = 20,
-	},
-	},
-	carrier = {
-		inc_damage={
-			[DamageType.BLIGHT] = 8,
-		},
-	},
-}
-
-newEntity{ base = "BASE_GREATSWORD",
-	power_source = {technique=true},
-	define_as = "MURDERBLADE", rarity=false,
-	name = "Warmaster Gnarg's Murderblade", unique=true, image="object/artifact/warmaster_gnargs_murderblade.png",
-	unided_name = "blood-etched greatsword", color=colors.CRIMSON,
-	desc = [[A blood-etched greatsword, it has seen many foes. From the inside.]],
-	require = { stat = { str=35 }, },
-	level_range = {32, 45},
-	rarity = 230,
-	cost = 300,
-	material_level = 4,
-	combat = {
-		dam = 60,
-		apr = 19,
-		physcrit = 10,
-		dammod = {str=1.2},
-		special_on_hit = {desc="10% chance to send the wielder into a killing frenzy", fct=function(combat, who)
-			if not rng.percent(10) then return end
-			who:setEffect(who.EFF_FRENZY, 3, {crit=12, power=0.3, dieat=0.25})
-		end},
-	},
-	wielder = {
-		see_invisible = 25,
-		inc_stats = { [Stats.STAT_CON] = 5, [Stats.STAT_STR] = 5, [Stats.STAT_DEX] = 5, },
-		talents_types_mastery = {
-			["technique/2hweapon-cripple"] = 0.2,
-			["technique/2hweapon-offense"] = 0.2,
-		},
-	},
-	max_power = 60, power_regen = 1,
-	use_talent = { id = Talents.T_UNSTOPPABLE, level = 1, power = 60 },
-}
-
-newEntity{ base = "BASE_LEATHER_CAP",
-	power_source = {arcane=true},
-	define_as = "CROWN_ELEMENTS", rarity=false,
-	name = "Crown of the Elements", unique=true, image = "object/artifact/crown_of_the_elements.png",
-	unided_name = "jeweled crown", color=colors.DARK_GREY,
-	desc = [[This jeweled crown shimmers with colors.]],
-	level_range = {40, 50},
-	rarity = 280,
-	cost = 500,
-	material_level = 5,
-	wielder = {
-		inc_stats = { [Stats.STAT_CON] = 5, [Stats.STAT_WIL] = 3, },
-		resists={
-			[DamageType.FIRE] = 15,
-			[DamageType.COLD] = 15,
-			[DamageType.ACID] = 15,
-			[DamageType.LIGHTNING] = 15,
-		},
-		melee_project={
-			[DamageType.FIRE] = 10,
-			[DamageType.COLD] = 10,
-			[DamageType.ACID] = 10,
-			[DamageType.LIGHTNING] = 10,
-		},
-		inc_damage = {
-			[DamageType.FIRE] = 8,
-			[DamageType.COLD] = 8,
-			[DamageType.ACID] = 8,
-			[DamageType.LIGHTNING] = 8,
-		},
-		see_invisible = 15,
-		combat_armor = 5,
-		fatigue = 5,
-	},
-}
-
-newEntity{ base = "BASE_GLOVES", define_as = "FLAMEWROUGHT",
-	power_source = {nature=true},
-	unique = true,
-	name = "Flamewrought", color = colors.RED, image = "object/artifact/gloves_flamewrought.png",
-	unided_name = "chitinous gloves",
-	desc = [[These gloves seems to be made out of the exoskeletons of ritches. They are hot to the touch.]],
-	level_range = {5, 12},
-	rarity = 180,
-	cost = 50,
-	material_level = 1,
-	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 3, },
-		resists = { [DamageType.FIRE]= 10, },
-		inc_damage = { [DamageType.FIRE]= 5, },
-		combat_armor = 2,
-		combat = {
-			dam = 5,
-			apr = 7,
-			physcrit = 1,
-			dammod = {dex=0.4, str=-0.6, cun=0.4 },
-			melee_project={[DamageType.FIRE] = 10},
-			talent_on_hit = { T_RITCH_FLAMESPITTER_BOLT = {level=3, chance=30} },
-			convert_damage = { [DamageType.FIRE] = 100,},
-		},
-	},
-	max_power = 24, power_regen = 1,
-	use_talent = { id = Talents.T_RITCH_FLAMESPITTER_BOLT, level = 2, power = 6 },
-}
-
--- The crystal set
-newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_FOCUS",
-	power_source = {arcane=true},
-	unique = true,
-	unided_name = "scintillating crystal",
-	name = "Crystal Focus", subtype = "multi-hued",
-	color = colors.WHITE, image = "object/artifact/crystal_focus.png",
-	level_range = {5, 12},
-	desc = [[This crystal radiates the power of the Spellblaze itself.]],
-	rarity = 200,
-	identified = false,
-	cost = 50,
-	material_level = 2,
-
-	max_power = 1, power_regen = 1,
-	use_power = { name = "combine with a weapon", power = 1, use = function(self, who, gem_inven, gem_item)
-		who:showInventory("Fuse with which weapon?", who:getInven("INVEN"), function(o) return (o.type == "weapon" or o.subtype == "hands") and o.subtype ~= "mindstar" and not o.egoed and not o.unique and not o.rare and not o.archery end, function(o, item)
-			local oldname = o:getName{do_color=true}
-
-			-- Remove the gem
-			who:removeObject(gem_inven, gem_item)
-			who:sortInven(gem_inven)
-
-			-- Change the weapon
-			o.name = "Crystalline "..o.name:capitalize()
-			o.unique = o.name
-			o.no_unique_lore = true
-			if o.combat and o.combat.dam then
-				o.combat.dam = o.combat.dam * 1.25
-				o.combat.damtype = engine.DamageType.ARCANE
-			elseif o.wielder.combat and o.wielder.combat.dam then
-				o.wielder.combat.dam = o.wielder.combat.dam * 1.25
-				o.wielder.combat.convert_damage = o.wielder.combat.convert_damage or {}
-				o.wielder.combat.convert_damage[engine.DamageType.ARCANE] = 100
-			end
-			o.is_crystalline_weapon = true
-			o.power_source = o.power_source or {}
-			o.power_source.arcane = true
-			o.wielder = o.wielder or {}
-			o.wielder.combat_spellpower = (o.wielder.combat_spellpower or 0) + 12
-			o.wielder.combat_dam = (o.wielder.combat_dam or 0) + 12
-			o.wielder.inc_stats = o.wielder.inc_stats or {}
-			o.wielder.inc_stats[engine.interface.ActorStats.STAT_WIL] = 3
-			o.wielder.inc_stats[engine.interface.ActorStats.STAT_CON] = 3
-			o.wielder.inc_damage = o.wielder.inc_damage or {}
-			o.wielder.inc_damage[engine.DamageType.ARCANE] = 10
-			if o.wielder.learn_talent then o.wielder.learn_talent[who.T_COMMAND_STAFF] = nil end
-
-			o.set_list = { {"is_crystalline_armor", true} }
-			o.on_set_complete = function(self, who)
-				self.talent_on_spell = { {chance=10, talent="T_MANATHRUST", level=3} }
-				if(self.combat) then self.combat.talent_on_hit = { T_MANATHRUST = {level=3, chance=10} }
-				else self.wielder.combat.talent_on_hit = { T_MANATHRUST = {level=3, chance=10} }
-				end
-				self:specialSetAdd({"wielder","combat_spellcrit"}, 10)
-				self:specialSetAdd({"wielder","combat_physcrit"}, 10)
-				self:specialSetAdd({"wielder","resists_pen"}, {[engine.DamageType.ARCANE]=20, [engine.DamageType.PHYSICAL]=15})
-				game.logPlayer(who, "#GOLD#As the crystalline weapon and armour are brought together, they begin to emit a constant humming.")
-			end
-			o.on_set_broken = function(self, who)
-				self.talent_on_spell = nil
-				if (self.combat) then self.combat.talent_on_hit = nil
-				else self.wielder.combat.talent_on_hit = nil
-				end
-				game.logPlayer(who, "#GOLD#The humming from the crystalline artifacts fades as they are separated.")
-			end
-
-			who:sortInven()
-			who.changed = true
-
-			game.logPlayer(who, "You fix the crystal on the %s and create the %s.", oldname, o:getName{do_color=true})
-		end)
-	end },
-}
-
-newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_HEART",
-	power_source = {arcane=true},
-	unique = true,
-	unided_name = "coruscating crystal",
-	name = "Crystal Heart", subtype = "multi-hued",
-	color = colors.RED, image = "object/artifact/crystal_heart.png",
-	level_range = {35, 42},
-	desc = [[This crystal is huge, easily the size of your head. It sparkles brilliantly almost of its own accord.]],
-	rarity = 250,
-	identified = false,
-	cost = 200,
-	material_level = 5,
-
-	max_power = 1, power_regen = 1,
-	use_power = { name = "combine with a suit of body armor", power = 1, use = function(self, who, gem_inven, gem_item)
-		-- Body armour only, can be cloth, light, heavy, or massive though. No clue if o.slot works for this.
-		who:showInventory("Fuse with which armor?", who:getInven("INVEN"), function(o) return o.type == "armor" and o.slot == "BODY" and not o.egoed and not o.unique and not o.rare end, function(o, item)
-			local oldname = o:getName{do_color=true}
-
-			-- Remove the gem
-			who:removeObject(gem_inven, gem_item)
-			who:sortInven(gem_inven)
-
-			-- Change the weapon... err, armour. No, I'm not copy/pasting here, honest!
-			o.name = "Crystalline "..o.name:capitalize()
-			o.unique = o.name
-			o.no_unique_lore = true
-			o.is_crystalline_armor = true
-			o.power_source = o.power_source or {}
-			o.power_source.arcane = true
-
-			o.wielder = o.wielder or {}
-			-- This is supposed to add 1 def for crap cloth robes if for some reason you choose it instead of better robes, and then multiply by 1.25.
-			o.wielder.combat_def = ((o.wielder.combat_def or 0) + 2) * 1.7
-			-- Same for armour. Yay crap cloth!
-			o.wielder.combat_armor = ((o.wielder.combat_armor or 0) + 3) * 1.7
-			o.wielder.combat_spellresist = 35
-			o.wielder.combat_physresist = 25
-			o.wielder.inc_stats = o.wielder.inc_stats or {}
-			o.wielder.inc_stats[engine.interface.ActorStats.STAT_MAG] = 8
-			o.wielder.inc_stats[engine.interface.ActorStats.STAT_CON] = 8
-			o.wielder.inc_stats[engine.interface.ActorStats.STAT_LCK] = 12
-			o.wielder.resists = o.wielder.resists or {}
-			o.wielder.resists = { [engine.DamageType.ARCANE] = 35, [engine.DamageType.PHYSICAL] = 15 }
-			o.wielder.poison_immune = 0.6
-			o.wielder.disease_immune = 0.6
-
-			o.set_list = { {"is_crystalline_weapon", true} }
-			o.on_set_complete = function(self, who)
-				self:specialSetAdd({"wielder","stun_immune"}, 0.5)
-				self:specialSetAdd({"wielder","blind_immune"}, 0.5)
-			end
-			who:sortInven()
-			who.changed = true
-
-			game.logPlayer(who, "You fix the crystal on the %s and create the %s.", oldname, o:getName{do_color=true})
-		end)
-	end },
-}
-
-newEntity{ base = "BASE_ROD", define_as = "ROD_OF_ANNULMENT",
-	power_source = {arcane=true},
-	unided_name = "dark rod",
-	name = "Rod of Annulment", color=colors.LIGHT_BLUE, unique=true, image = "object/artifact/rod_of_annulment.png",
-	desc = [[You can feel magic draining out around this rod. Even nature itself seems affected.]],
-	cost = 50,
-	rarity = 380,
-	level_range = {5, 12},
-	elec_proof = true,
-	add_name = false,
-
-	material_level = 2,
-
-	max_power = 30, power_regen = 1,
-	use_power = { name = "force some of your foe's infusions, runes or talents on cooldown", power = 30,
-		use = function(self, who)
-			local tg = {type="bolt", range=5}
-			local x, y = who:getTarget(tg)
-			if not x or not y then return nil end
-			who:project(tg, x, y, function(px, py)
-				local target = game.level.map(px, py, engine.Map.ACTOR)
-				if not target then return end
-
-				local tids = {}
-				for tid, lev in pairs(target.talents) do
-					local t = target:getTalentFromId(tid)
-					if not target.talents_cd[tid] and t.mode == "activated" and not t.innate then tids[#tids+1] = t end
-				end
-				for i = 1, 3 do
-					local t = rng.tableRemove(tids)
-					if not t then break end
-					target.talents_cd[t.id] = rng.range(3, 5)
-					game.logSeen(target, "%s's %s is disrupted!", target.name:capitalize(), t.name)
-				end
-				target.changed = true
-			end, nil, {type="flame"})
-			return {id=true, used=true}
-		end
-	},
-}
-
-newEntity{ base = "BASE_WARAXE",
-	power_source = {arcane=true},
-	define_as = "SKULLCLEAVER",
-	unided_name = "crimson waraxe",
-	name = "Skullcleaver", unique=true, image = "object/artifact/axe_skullcleaver.png",
-	desc = [[A small but sharp axe, with a handle made of polished bone.  The blade has chopped through the skulls of many, and has been stained a deep crimson.]],
-	require = { stat = { str=18 }, },
-	level_range = {5, 12},
-	material_level = 1,
-	rarity = 220,
-	cost = 50,
-	combat = {
-		dam = 16,
-		apr = 3,
-		physcrit = 12,
-		dammod = {str=1},
-		talent_on_hit = { [Talents.T_GREATER_WEAPON_FOCUS] = {level=2, chance=10} },
-		melee_project={[DamageType.DRAINLIFE] = 10},
-	},
-	wielder = {
-		inc_damage = { [DamageType.BLIGHT] = 8 },
-	},
-}
-
-newEntity{ base = "BASE_DIGGER",
-	power_source = {unknown=true},
-	define_as = "TOOTH_MOUTH",
-	unided_name = "a tooth", unique = true,
-	name = "Tooth of the Mouth", image = "object/artifact/tooth_of_the_mouth.png",
-	desc = [[A huge tooth taken from the Mouth, in the Deep Bellow.]],
-	level_range = {5, 12},
-	cost = 50,
-	material_level = 1,
-	digspeed = 12,
-	wielder = {
-		inc_damage = { [DamageType.BLIGHT] = 4 },
-		on_melee_hit = {[DamageType.BLIGHT] = 15},
-		combat_apr = 5,
-	},
-}
-
-newEntity{ base = "BASE_HEAVY_BOOTS",
-	define_as = "WARPED_BOOTS",
-	power_source = {unknown=true},
-	unique = true,
-	name = "The Warped Boots", image = "object/artifact/the_warped_boots.png",
-	unided_name = "pair of painful-looking boots",
-	desc = [[These blackened boots have lost all vestige of any former glory they might have had. Now, they are a testament to the corruption of the Deep Bellow, and its power.]],
-	color = colors.DARK_GREEN,
-	level_range = {35, 45},
-	rarity = 250,
-	cost = 200,
-	material_level = 5,
-	wielder = {
-		combat_armor = 4,
-		combat_def = 2,
-		combat_dam = 10,
-		fatigue = 8,
-		combat_spellpower = 10,
-		combat_mindresist = 10,
-		combat_spellresist = 10,
- 		resists={
-			[DamageType.BLIGHT] = 10,
- 		},
-		max_life = 80,
-		life_regen = -0.20,
-	},
-	max_power = 50, power_regen = 1,
-	use_talent = { id = Talents.T_SPIT_BLIGHT, level=3, power = 10 },
-}
-
-newEntity{ base = "BASE_BATTLEAXE",
-	power_source = {nature=true, antimagic=true},
-	define_as = "GAPING_MAW",
-	name = "The Gaping Maw", color = colors.SLATE, image = "object/artifact/battleaxe_the_gaping_maw.png",
-	unided_name = "huge granite battleaxe", unique = true,
-	desc = [[This huge granite battleaxe is as much mace as it is axe.  The shaft is made of blackened wood tightly bound in drakeskin leather and the sharpened granite head glistens with a viscous green fluid.]],
-	level_range = {38, 50},
-	rarity = 300,
-	require = { stat = { str=60 }, },
-	metallic = false,
-	cost = 650,
-	material_level = 5,
-	combat = {
-		dam = 72,
-		apr = 4,
-		physcrit = 8,
-		dammod = {str=1.2},
-		melee_project={[DamageType.SLIME] = 50, [DamageType.ACID] = 50},
-	},
-	wielder = {
-		talent_cd_reduction= {
-			[Talents.T_SWALLOW] = 2,
-			[Talents.T_MANA_CLASH] = 2,
-			[Talents.T_ICE_CLAW] = 1,
-		},
-	},
-	on_wear = function(self, who)
-		if who:attr("forbid_arcane") then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-
-			self:specialWearAdd({"wielder","inc_damage"}, {[DamageType.NATURE]=15})
-			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_STR] = 6, [Stats.STAT_WIL] = 6, })
-			game.logPlayer(who, "#DARK_GREEN#You feel like Nature's Wrath incarnate!")
-		end
-	end,
-}
-
-newEntity{ base = "BASE_AMULET",
-	power_source = {psionic=true},
-	define_as = "WITHERING_ORBS",
-	unique = true,
-	name = "Withering Orbs", color = colors.WHITE, image = "object/artifact/artifact_jewelry_withering_orbs.png",
-	unided_name = "shadow-strung orbs",
-	desc = [[These opalescent orbs stare at you with deathly knowledge, undeceived by your vanities and pretences.  They have lived and died through horrors you could never imagine, and now they lie strung in black chords watching every twitch of the shadows.
-If you close your eyes a moment, you can almost imagine what dread sights they see...]],
-	level_range = {5, 12},
-	rarity = 200,
-	cost = 100,
-	material_level = 1,
-	metallic = false,
-	wielder = {
-		blind_fight = 1,
-		see_invisible = 10,
-		see_stealth = 10,
-		combat_mindpower = 5,
-		melee_project = {
-			[DamageType.MIND] = 5,
-		},
-		ranged_project = {
-			[DamageType.MIND] = 5,
-		},
-	},
-}
-
-newEntity{ base = "BASE_MASSIVE_ARMOR",
-	power_source = {technique=true},
-	define_as = "BORFAST_CAGE",
-	unique = true,
-	name = "Borfast's Cage",
-	unided_name = "a suit of pitted and pocked plate-mail",
-	desc = [[Inch thick stralite plates lock together with voratun joints. The whole suit looks impenetrable, but has clearly been subjected to terrible treatment - great dents and misshaping warps, and caustic fissures bored across the surface.
-Though clearly a powerful piece, it must once have been much greater.]],
-	color = colors.WHITE, image = "object/artifact/armor_plate_borfasts_cage.png",
-	level_range = {20, 28},
-	rarity = 200,
-	require = { stat = { str=35 }, },
-	cost = 500,
-	material_level = 3,
-	wielder = {
-		combat_def = 10,
-		combat_armor = 15,
-		fatigue = 24,
-
-		inc_stats = { [Stats.STAT_CON] = 5, },
-		resists = {
-			[DamageType.ACID] = - 15,
-			[DamageType.PHYSICAL] = 15,
-		},
-
-		max_life = 50,
-		life_regen = 2,
-
-		knockback_immune = 0.3,
-
-		combat_physresist = 15,
-		combat_crit_reduction = 20,
-	},
-}
-
-newEntity{ base = "BASE_LEATHER_CAP", -- No armor training requirement
-	power_source = {psionic=true},
-	define_as = "ALETTA_DIADEM",
-	name = "Aletta's Diadem", unique=true, unided_name="jeweled diadem", image = "object/artifact/diadem_alettas_diadem.png",
-	desc = [[A filigree of silver set with many small jewels, this diadem seems radiant - ethereal almost. But its touch seems to freeze your skin and brings wild thoughts to your mind. You want to drop it, throw it away, and yet you cannot resist thinking of what powers it might bring you.
-Is this temptation a weak will on your part, or some domination from the artifact itself...?]],
-	require = { stat = { wil=24 }, },
-	level_range = {20, 28},
-	rarity = 200,
-	cost = 1000,
-	material_level = 3,
-	metallic = true,
-	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 4, },
-		combat_mindpower = 12,
-		combat_mindcrit = 5,
-		on_melee_hit={ [DamageType.MIND] = 12, },
-		inc_damage={ [DamageType.MIND] = 10, },
-	},
-	max_power = 10, power_regen = 1,
-	use_talent = { id = Talents.T_PSYCHIC_LOBOTOMY, level=3, power = 8 },
-}
-
-newEntity{ base = "BASE_SLING",
+newEntity{ define_as = "RUNGOF_FANG",
 	power_source = {nature=true},
-	define_as = "HARESKIN_SLING",
-	name = "Hare-Skin Sling", unique=true, unided_name = "hare-skin sling", image = "object/artifact/sling_hareskin_sling.png",
-	desc = [[This well-tended sling is made from the leather and sinews of a large hare. It feels smooth to the touch yet very durable. Some say that the skin of a hare brings luck and fortune.
-Hard to tell if that really helped its former owner, but it's clear that the skin is at least also strong and reliable..]],
-	level_range = {20, 28},
-	rarity = 200,
-	require = { stat = { dex=35 }, },
-	cost = 50,
-	material_level = 3,
-	use_no_energy = true,
-	combat = {
-		range = 10,
-		physspeed = 0.8,
-	},
-	wielder = {
-		movement_speed = 0.2,
-		inc_stats = { [Stats.STAT_LCK] = 10, },
-		combat_physcrit = 5,
-		combat_def = 10,
-		talents_types_mastery = { ["cunning/survival"] = 0.2, },
-	},
-	max_power = 8, power_regen = 1,
-	use_talent = { id = Talents.T_INERTIAL_SHOT, level=3, power = 8 },
-}
-
-newEntity{ base = "BASE_TOOL_MISC",
-	power_source = {arcane=true},
-	define_as = "LUCKY_FOOT",
-	unique = true,
-	name = "Prox's Lucky Halfling Foot", color = colors.WHITE,
-	unided_name = "a mummified halfling foot", image = "object/artifact/proxs_lucky_halfling_foot.png",
-	desc = [[A large hairy foot, very recognizably a halfling's, is strung on a piece of thick twine. In its decomposed state it's hard to tell how long ago it parted with its owner, but from what look like teeth marks around the ankle you get the impression that it wasn't given willingly.
-It has been kept somewhat intact with layers of salt and clay, but in spite of this it's clear that nature is beginning to take its course on the dead flesh. Some say the foot of a halfling brings luck to its bearer - right now the only thing you can be sure of is it stinks.]],
-	level_range = {5, 12},
-	rarity = 200,
-	cost = 10,
-	material_level = 1,
-	metallic = false,
-	sentient = true,
-	cooldown=0,
-	special_desc = function(self) return "Detects traps.\nGives a 25% to shrug off up to three stuns, pins, and dazes each turn, with a 10 turn cooldown." end,
-	wielder = {
-		inc_stats = { [Stats.STAT_LCK] = 5, },
-		combat_def = 5,
-		disarm_bonus = 5,
-	},
-	act = function(self)
-		self:useEnergy()
-		if self.worn_by then
-			local actor = self.worn_by
-			local grids = core.fov.circle_grids(actor.x, actor.y, 1, true)
-			local Map = require "engine.Map"
-			local is_trap = false
-
-			for x, yy in pairs(grids) do for y, _ in pairs(yy) do
-				local trap = game.level.map(x, y, Map.TRAP)
-				if trap and not (trap:knownBy(self) or trap:knownBy(actor)) then
-					is_trap = true
-					-- Set the artifact as knowing the trap, not the wearer
-					trap:setKnown(self, true)
-				end
-			end end
-			-- only one twitch per action
-			if is_trap then
-				game.logSeen(actor, "#CRIMSON#%s twitches, alerting %s that a trap is nearby.", self:getName(), actor.name:capitalize())
-				if actor == game.player then
-					game.player:runStop()
-				end
-			end
-		end
-		--Escape stuns/dazes/pins
-		if self.cooldown > 0 then
-			self.cooldown = self.cooldown - 1
-		end
-		
-		if not self.worn_by then return end
-		if game.level and not game.level:hasEntity(self.worn_by) and not self.worn_by.player then self.worn_by = nil return end
-		if self.worn_by:attr("dead") then return end
-		if not rng.percent(25) or self.cooldown > 0 then return end
-		local who = self.worn_by
-		local target = self.worn_by
-			local effs = {}
-			local known = false
-			local num = 0
-
-			-- Go through all spell effects
-			for eff_id, p in pairs(target.tmp) do
-				local e = target.tempeffect_def[eff_id]
-				if e.subtype.pin or e.subtype.stun then
-					effs[#effs+1] = {"effect", eff_id}
-					num = 1
-				end
-			end
-
-			for i = 1, 3 do
-				if #effs == 0 then break end
-				local eff = rng.tableRemove(effs)
-
-				if eff[1] == "effect" then
-					target:removeEffect(eff[2])
-					known = true
-				end
-			end
-			if num == 1 then
-				game.logSeen(who, "%s shrugs off some effects!", who.name:capitalize())
-				self.cooldown = 10
-			end
-	end,
-	on_wear = function(self, who)
-		self.worn_by = who
-		if who.descriptor and who.descriptor.race == "Halfling" then
-			local Stats = require "engine.interface.ActorStats"
-			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_LCK] = -10}) -- Overcomes the +5 Bonus and adds a -5 penalty
-			self:specialWearAdd({"wielder","combat_physresist"}, -5)
-			self:specialWearAdd({"wielder","combat_mentalresist"}, -5)
-			self:specialWearAdd({"wielder","combat_spellresist"}, -5)
-			game.logPlayer(who, "#LIGHT_RED#You feel uneasy carrying %s.", self:getName())
-		end
-	end,
-	on_takeoff = function(self)
-		self.worn_by = nil
-	end,
-}
-
---Storm fury, lightning infused bow that automatically attacks nearby enemies with bolts of lightning.
-newEntity{ base = "BASE_LONGBOW",
-	power_source = {arcane=true},
-	define_as = "STORM_FURY",
-	name = "Storm Fury", unique=true, --THESE
-	unided_name = "crackling longbow", color=colors.BLUE,
-	desc = [[This dragonbone longbow is enhanced with bands of steel, which arc with intense lightning. Bolts travel up and down the string, ignorant of you.]],
-	require = { stat = { dex=30, mag=30 }, },
-	level_range = {40, 50},
-	rarity = 250,
-	cost = 300,
-	material_level = 5,
-	sentient = true,
-	special_desc = function(self) return "Automatically fires lightning bolts at nearby enemies, with a chance to inflict Daze." end,
-	combat = {
-		range=10,
-		physspeed = 0.7,
-	},
-	wielder = {
-		combat_spellpower=20,
-		inc_stats = { [Stats.STAT_MAG] = 7, [Stats.STAT_DEX] = 5},
-		combat_def_ranged = 15,
-		ranged_project = {[DamageType.LIGHTNING] = 75},
-		talents_types_mastery = {
-			["spell/air"] = 0.2,
-			["spell/storm"] = 0.1,
-		},
-		inc_damage={
-			[DamageType.LIGHTNING] = 20,
-		},
-		resists={
-			[DamageType.LIGHTNING] = 20,
-		},
-	},
-	act = function(self)
-		self:useEnergy()
-		if not self.worn_by then return end
-		if game.level and not game.level:hasEntity(self.worn_by) then self.worn_by = nil return end
-		if self.worn_by:attr("dead") then return end
-		self.zap = self.zap + 5
-		if not rng.percent(self.zap)  then return end
-		local who = self.worn_by
-		local Map = require "engine.Map"
-		--local project = require "engine.DamageType"
-		local tgts = {}
-		local DamageType = require "engine.DamageType"
-		--local project = "engine.ActorProject"
-		local grids = core.fov.circle_grids(who.x, who.y, 5, true)
-		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
-			local a = game.level.map(x, y, Map.ACTOR)
-			if a and who:reactionToward(a) < 0 then
-				tgts[#tgts+1] = a
-			end
-		end end
-
-		local tg = {type="hit", range=5,}
-		for i = 1, 1 do
-			if #tgts <= 0 then break end
-			local a, id = rng.table(tgts)
-			table.remove(tgts, id)
-
-			self.zap = 0
-			who:project(tg, a.x, a.y, engine.DamageType.LIGHTNING_DAZE, {daze=40, dam = rng.avg(1,3) * (40+ who:getMag() * 1.5)} )
-			game.level.map:particleEmitter(who.x, who.y, math.max(math.abs(a.x-who.x), math.abs(a.y-who.y)), "lightning", {tx=a.x-who.x, ty=a.y-who.y})
-			game:playSoundNear(self, "talents/lightning")
-			who:logCombat(a, "#GOLD#A bolt of lightning fires from #Source#'s bow, striking #Target#!")
-		end
-	end,
-	on_wear = function(self, who)
-		self.worn_by = who
-		self.zap = 0
-	end,
-	on_takeoff = function(self)
-		self.worn_by = nil
-	end,
-}
---Ice Cloak that can release massive freezing AOE, dropped by Glacial Legion.
-newEntity{ base = "BASE_CLOAK", define_as="GLACIAL_CLOAK",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Frozen Shroud", 
-	unided_name = "chilling cloak", image = "object/artifact/frozen_shroud.png",
-	desc = [[All that remains of the Glacial Legion. This cloak seems to exude an icy cold vapor that freezes all it touches.]],
-	level_range = {40, 50},
-	rarity = 250,
-	cost = 300,
-	material_level = 5,
-	wielder = {
-		resists= {[DamageType.FIRE] = -15,[DamageType.COLD] = 25, all=8},
-		inc_stats = { [Stats.STAT_MAG] = 7,},
-		combat_def = 12,
-		on_melee_hit = {[DamageType.ICE]=60},
-	},
-	max_power = 30, power_regen = 1,
-	use_power = { name = "release a blast of ice", power = 30,
-		use = function(self, who)
-			local duration = 10
-			local radius = 4
-			local dam = (25 + who:getMag())
-			local blast = {type="ball", range=0, radius=radius, selffire=false, display={particle="bolt_ice", trail="icetrail"}}
-			who:project(blast, who.x, who.y, engine.DamageType.COLD, dam*3)
-			who:project(blast, who.x, who.y, engine.DamageType.FREEZE, {dur=6, hp=80+dam})
-			game.level.map:particleEmitter(who.x, who.y, blast.radius, "iceflash", {radius=blast.radius})
-			-- Add a lasting map effect
-			game.level.map:addEffect(who,
-				who.x, who.y, duration,
-				engine.DamageType.ICE, dam,
-				radius,
-				5, nil,
-				engine.Entity.new{alpha=100, display='', color_br=30, color_bg=60, color_bb=200},
-				function(e)
-					e.radius = e.radius
-					return true
-				end,
-				false
-			)
-			game.logSeen(who, "%s releases a burst of freezing cold from within their cloak!", who.name:capitalize(), self:getName())
-			return {id=true, used=true}
-		end
-	},
-}
---Blight+Phys Greatmaul that inflicts disease, dropped by Rotting Titan.
-newEntity{ base = "BASE_GREATMAUL", define_as="ROTTING_MAUL",
-	power_source = {arcane=true},
 	unique = true,
-	name = "Blighted Maul", color = colors.LIGHT_RED,  image = "object/artifact/blighted_maul.png",
-	unided_name = "rotten stone limb",
-	desc = [[The massive stone limb of the Rotting Titan, a mass of stone and rotting flesh. You think you can lift it, but it is very heavy.]],
-	level_range = {40, 50},
-	rarity = 250,
-	require = { stat = { str=60 }, },
-	cost = 300,
-	metallic = false,
-	encumber = 12,
-	material_level = 5,
-	combat = {
-		dam = 96,
-		apr = 22,
-		physcrit = 10,
-		physspeed=1.2,
-		dammod = {str=1.4},
-		convert_damage = {[DamageType.BLIGHT] = 20},
-		melee_project={[DamageType.CORRUPTED_BLOOD] = 30},
-		special_on_hit = {desc="25% to damage nearby creatures", on_kill=true, fct=function(combat, who, target)
-			if rng.percent(25) then
-			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "ROTTING_MAUL")
-				local dam = rng.avg(1,2) * (70+ who:getStr() * 1.8)
-				game.logSeen(who, "The ground shakes as the %s hits!", o:getName())
-				local tg = {type="ball", range=0, selffire=false, radius=2, no_restrict=true}
-				who:project(tg, target.x, target.y, engine.DamageType.PHYSICAL, dam)
-			end
-		end},
-	},
-	wielder = {
-		inc_damage={[DamageType.PHYSICAL] = 12,},
-		knockback_immune=0.3,
-		combat_critical_power = 40,
-	},
-	max_power = 50, power_regen = 1,
-	use_power = { name = "knock away nearby foes", power = 50,
-		use = function(self, who)
-			local dam = rng.avg(1,2) * (125+ who:getStr() * 3)
-			local tg = {type="ball", range=0, selffire=false, radius=4, no_restrict=true}
-			who:project(tg, who.x, who.y, engine.DamageType.PHYSKNOCKBACK, {dam=dam, dist=4})
-			game.logSeen(who, "%s slams their %s into the ground, sending out a shockwave!", who.name:capitalize(), self:getName())
-			return {id=true, used=true}
-		end
-	},
-}
---Molten Skin, dropped by Heavy Sentinel.
-newEntity{ base = "BASE_LIGHT_ARMOR",
-	power_source = {arcane=true},
-	define_as = "ARMOR_MOLTEN",
-	unided_name = "melting bony armour",
-	name = "Molten Skin", unique=true, image = "object/artifact/molten_skin.png",
-	desc = [[This mass of fused molten bone from the Heavy Sentinel radiates intense power. It still glows red with the heat of the Sentinel's core, and yet seems to do you no harm.]],
---	require = { stat = { mag=60 }, },
-	level_range = {40, 50},
-	rarity = 250,
-	cost = 300,
-	material_level=5,
-	wielder = {
-		combat_spellpower = 15,
-		combat_spellcrit = 10,
-		combat_physcrit = 8,
-		combat_damage = 10,
-		combat_critical_power = 20,
-		combat_def = 15,
-		combat_armor = 12,
-		inc_stats = { [Stats.STAT_MAG] = 6,[Stats.STAT_CUN] = 6,},
-		melee_project={[DamageType.FIRE] = 30,[DamageType.LIGHT] = 15,},
-		ranged_project={[DamageType.FIRE] = 30,[DamageType.LIGHT] = 15,},
-		on_melee_hit = {[DamageType.FIRE]=30},
- 		inc_damage={
-			[DamageType.FIRE] = 20,
-			[DamageType.LIGHT] = 5,
-			all=10,
- 		},
- 		resists={
-			[DamageType.FIRE] = 20,
-			[DamageType.LIGHT] = 12,
-			[DamageType.COLD] = -5,
- 		},
- 		resists_pen={
-			[DamageType.FIRE] = 15,
-			[DamageType.LIGHT] = 10,
- 		},
- 		talents_types_mastery = {
- 			["spell/fire"] = 0.1,
- 			["spell/wildfire"] = 0.1,
-			["celestial/sun"] = 0.1,
- 		},
-	},
-	max_power = 16, power_regen = 1,
-	use_talent = { id = Talents.T_BLASTWAVE, level = 4, power = 12 },
-}
+	type = "misc", subtype="fang",
+	unided_name = "bloodied fang",
+	name = "Rungof's Fang", image = "object/artifact/rungof_fang.png",
+	level_range = {20, 35},
+	rarity = false,
+	display = "*", color=colors.DARK_RED,
+	encumber = 1,
+	not_in_stores = true,
+	desc = [[A fang from the great warg, Rungof, still covered in blood.]],
 
-newEntity{ base = "BASE_RING",
-	power_source = {arcane=true},
-	define_as = "AETHER_RING",
-	name = "Void Orb", unique=true, image = "object/artifact/void_orbs.png",
-	desc = [[This thin grey ring is adorned with a deep black orb. Tiny white dots swirl slowly within it, and a faint purple light glows from its core.]],
-	unided_name = "ethereal ring",
-	level_range = {40, 50},
-	rarity = 250,
-	cost = 300,
-	material_level = 5,
-	wielder = {
-		max_mana = 35,
-		combat_spellresist = 18,
-		combat_spellpower = 5,
-		silence_immune = 0.3,
-		talent_cd_reduction={
-			[Talents.T_AETHER_AVATAR]=4,
-		},
-		inc_damage={ [DamageType.ARCANE] = 15, [DamageType.PHYSICAL] = 7, [DamageType.FIRE] = 7, [DamageType.COLD] = 7, [DamageType.LIGHTNING] = 7},
-		resists={ [DamageType.ARCANE] = 15,},
-		resists_pen={ [DamageType.ARCANE] = 10,},
-		melee_project={ [DamageType.ARCANE] = 15,},
-		talents_types_mastery = {
- 			["spell/arcane"] = 0.1,
- 			["spell/aether"] = 0.1,
- 		},
+	carrier = {
+		combat_apr = 7,
+		esp = {['animal/canine']=1},
 	},
-	talent_on_spell = { {chance=10, talent="T_ARCANE_VORTEX", level = 2} },
-	max_power = 6, power_regen = 1,
-	use_talent = { id = Talents.T_MANATHRUST, level = 4, power = 6 },
 }
 
 newEntity{ base = "BASE_BATTLEAXE",
@@ -1711,12 +86,15 @@ newEntity{ base = "BASE_TOOL_MISC", image="object/temporal_instability.png",
 	level_range = {30, 50},
 	rarity = 500,
 	cost = 500,
-	material_level = 4,
+	material_level = 5,
 	metallic = false,
+	use_no_energy = true,
+	special_desc = function(self) return "This item does not take a turn to use." end,
 	wielder = {
-		combat_spellpower=5,
-		combat_mindpower=5,
+		combat_spellpower=10,
+		combat_mindpower=10,
 		on_melee_hit = {[DamageType.PHYSICALBLEED]=25},
+		melee_project = {[DamageType.PHYSICALBLEED]=25},
 		resists={
 			[DamageType.TEMPORAL] 	= 15,
 		},
@@ -1725,8 +103,8 @@ newEntity{ base = "BASE_TOOL_MISC", image="object/temporal_instability.png",
 			[DamageType.PHYSICAL] 	= 5,
 		},
 	},
-	max_power = 40, power_regen = 1,
-	use_talent = { id = Talents.T_ANIMATE_BLADE, level = 1, power = 40 },
+	max_power = 25, power_regen = 1,
+	use_talent = { id = Talents.T_ANIMATE_BLADE, level = 1, power = 25 },
 }
 
 newEntity{ base = "BASE_LONGSWORD", define_as = "RIFT_SWORD",
@@ -1736,7 +114,7 @@ newEntity{ base = "BASE_LONGSWORD", define_as = "RIFT_SWORD",
 	unided_name = "time-warped sword",
 	desc = [[The remnants of a damaged timeline, this blade shifts and fades at random.]],
 	level_range = {30, 50},
-	rarity = nil, --Not random!
+	rarity = 220,
 	require = { stat = { str=44 }, },
 	cost = 300,
 	material_level = 4,
@@ -1744,10 +122,9 @@ newEntity{ base = "BASE_LONGSWORD", define_as = "RIFT_SWORD",
 		dam = 40,
 		apr = 10,
 		physcrit = 8,
-		dammod = {str=0.8,mag=0.2},
+		dammod = {str=0.9,mag=0.2},
 		convert_damage={[DamageType.TEMPORAL] = 20},
-		special_on_hit = {desc="20% to slow target", fct=function(combat, who, target)
-			if not rng.percent(20) then return end
+		special_on_hit = {desc="inflicts bonus temporal damage and slows target", fct=function(combat, who, target)
 			local dam = (20 + who:getMag()/2)
 			local slow = (10 + who:getMag()/5)/100
 			who:project({type="hit", range=1}, target.x, target.y, engine.DamageType.CHRONOSLOW, {dam=dam, slow=slow})
@@ -1779,209 +156,40 @@ newEntity{ base = "BASE_RUNE", define_as = "RUNE_REFLECT",
 	inscription_talent = "RUNE:_REFLECTION_SHIELD",
 }
 
-newEntity{ base = "BASE_MINDSTAR", define_as = "PSIONIC_FURY",
-	power_source = {psionic=true},
-	unique = true,
-	name = "Psionic Fury",
-	unided_name = "vibrating mindstar",
-	level_range = {24, 32},
-	color=colors.AQUAMARINE, image = "object/artifact/psionic_fury.png",
-	rarity = 250,
-	desc = [[This mindstar constantly shakes and vibrates, as if a powerful force is desperately trying to escape.]],
-	cost = 85,
-	require = { stat = { wil=24 }, },
-	material_level = 3,
-	combat = {
-		dam = 12,
-		apr = 25,
-		physcrit = 5,
-		dammod = {wil=0.4, cun=0.2},
-		damtype = DamageType.MIND,
-	},
-	wielder = {
-		combat_mindpower = 10,
-		combat_mindcrit = 8,
-		inc_damage={
-			[DamageType.MIND] 		= 15,
-			[DamageType.PHYSICAL]	= 5,
-		},
-		resists={
-			[DamageType.MIND] 		= 10,
-		},
-		inc_stats = { [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 4, },
-	},
-	max_power = 40, power_regen = 1,
-	use_power = { name = "release a wave of psionic power", power = 40,
-	use = function(self, who)
-		local radius = 4
-		local dam = (50 + who:getWil()*1.8)
-		local blast = {type="ball", range=0, radius=5, selffire=false}
-		who:project(blast, who.x, who.y, engine.DamageType.MIND, dam)
-		game.level.map:particleEmitter(who.x, who.y, blast.radius, "force_blast", {radius=blast.radius})
-		game.logSeen(who, "%s sends out a blast of psionic energy!", who.name:capitalize(), self:getName())
-		return {id=true, used=true}
-		end
-	},
-}
-
-newEntity{ base = "BASE_GAUNTLETS", define_as = "STORM_BRINGER_GAUNTLETS",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Storm Bringer's Gauntlets", color = colors.LIGHT_STEEL_BLUE, image = "object/artifact/storm_bringers_gauntlets.png",
-	unided_name = "fine-mesh gauntlets",
-	desc = [[This pair of fine mesh voratun gauntlets is covered with glyphs of power that spark with azure energy.  The metal is supple and light so as not to interfere with spell-casting.  When and where these gauntlets were forged is a mystery but odds are the crafter knew a thing or two about magic.]],
-	level_range = {25, 35},
-	rarity = 250,
-	cost = 1000,
-	material_level = 3,
-	require = nil,
-	wielder = {
-		inc_stats = { [Stats.STAT_MAG] = 4, },
-		resists = { [DamageType.LIGHTNING] = 15, },
-		inc_damage = { [DamageType.LIGHTNING] = 10 },
-		resists_cap = { [DamageType.LIGHTNING] = 5 },
-		combat_spellcrit = 5,
-		combat_critical_power = 20,
-		combat_armor = 3,
-		combat = {
-			dam = 22,
-			apr = 10,
-			physcrit = 4,
-			physspeed = 0.2,
-			dammod = {dex=0.4, str=-0.6, cun=0.4 },
-			melee_project={ [DamageType.LIGHTNING] = 20, },
-			talent_on_hit = { [Talents.T_CHAIN_LIGHTNING] = {level=3, chance=20}, [Talents.T_NOVA] = {level=2, chance=15} },
-			damrange = 0.3,
-		},
-	},
-	max_power = 16, power_regen = 1,
-	use_talent = { id = Talents.T_CHAIN_LIGHTNING, level = 3, power = 16 },
-}
-
-newEntity{ define_as = "RUNGOF_FANG",
-	power_source = {nature=true},
-	unique = true,
-	type = "misc", subtype="fang",
-	unided_name = "bloodied fang",
-	name = "Rungof's Fang", image = "object/artifact/rungof_fang.png",
-	level_range = {20, 35},
-	rarity = false,
-	display = "*", color=colors.DARK_RED,
-	encumber = 1,
-	not_in_stores = true,
-	desc = [[A fang from the great warg, Rungof, still covered in blood.]],
-
-	carrier = {
-		combat_apr = 7,
-		esp = {['animal/canine']=1},
-	},
-}
-
-newEntity{ base = "BASE_TRIDENT",
-	power_source = {arcane=true},
-	define_as = "TRIDENT_STREAM",
-	unided_name = "ornate trident",
-	name = "The River's Fury", unique=true, image = "object/artifact/trident_of_the_tides.png",
-	desc = [[This gorgeous and ornate trident was wielded by Lady Nashva, and when you hold it, you can faintly hear the roar of a rushing river.]],
-	require = { stat = { str=12 }, },
-	level_range = {1, 10},
-	rarity = 230,
-	cost = 300,
-	material_level = 1,
+newEntity{ base = "BASE_BATTLEAXE",
+	power_source = {nature=true, antimagic=true},
+	define_as = "GAPING_MAW",
+	name = "The Gaping Maw", color = colors.SLATE, image = "object/artifact/battleaxe_the_gaping_maw.png",
+	unided_name = "huge granite battleaxe", unique = true,
+	desc = [[This huge granite battleaxe is as much mace as it is axe.  The shaft is made of blackened wood tightly bound in drakeskin leather and the sharpened granite head glistens with a viscous green fluid.]],
+	level_range = {38, 50},
+	rarity = 300,
+	require = { stat = { str=60 }, },
+	metallic = false,
+	cost = 650,
+	material_level = 5,
 	combat = {
-		dam = 23,
-		apr = 8,
-		physcrit = 5,
+		dam = 72,
+		apr = 4,
+		physcrit = 8,
 		dammod = {str=1.2},
-		damrange = 1.4,
-		melee_project={
-			[DamageType.COLD] = 15,
-		},
-	},
-	wielder = {
-		combat_atk = 10,
-		combat_spellpower = 10,
-		resists={[DamageType.COLD] = 10},
-		inc_damage = { [DamageType.COLD] = 10 },
-		movement_speed=0.1,
-	},
-	talent_on_spell = { {chance=20, talent="T_GLACIAL_VAPOUR", level=1} },
-	max_power = 80, power_regen = 1,
-	use_talent = { id = Talents.T_TIDAL_WAVE, level=1, power = 80 },
-}
-
-newEntity{ base = "BASE_KNIFE",
-	power_source = {arcane=true},
-	define_as = "UNERRING_SCALPEL",
-	unique = true,
-	name = "Unerring Scalpel", image = "object/artifact/unerring_scalpel.png",
-	unided_name = "long sharp scalpel",
-	desc = [[This scalpel was used by the dread sorcerer Kor'Pul when he began learning the necromantic arts in the Age of Dusk.  Many were the bodies, living and dead, that became unwilling victims of his terrible experiments.]],
-	level_range = {1, 12},
-	rarity = 200,
-	require = { stat = { cun=16 }, },
-	cost = 80,
-	material_level = 1,
-	combat = {
-		dam = 15,
-		apr = 25,
-		physcrit = 0,
-		dammod = {dex=0.55, str=0.45},
-		phasing = 50,
-	},
-	wielder = {
-		combat_atk=20,
-		blind_fight = 1,
+		melee_project={[DamageType.SLIME] = 50, [DamageType.ACID] = 50},
 	},
-}
-
-newEntity{ base = "BASE_GLOVES", define_as = "VARSHA_CLAW",
-	power_source = {nature=true},
-	unique = true,
-	name = "Wyrmbreath", color = colors.RED, image = "object/artifact/gloves_flamewrought.png",
-	unided_name = "clawed dragon-scale gloves",
-	desc = [[These dragon scale gloves are tipped with the claws and teeth of a vicious Wyrm. The gloves are warm to the touch.]],
-	level_range = {12, 22},
-	rarity = 180,
-	cost = 50,
-	material_level = 2,
 	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 5, },
-		resists = { [DamageType.FIRE]= 18, [DamageType.DARKNESS]= 10, [DamageType.NATURE]= 10,},
-		inc_damage = { [DamageType.FIRE]= 10, },
-		combat_armor = 4,
-		combat = {
-			dam = 17,
-			apr = 7,
-			physcrit = 1,
-			dammod = {dex=0.4, str=-0.6, cun=0.4 },
-			melee_project={[DamageType.FIRE] = 10},
-			convert_damage = { [DamageType.FIRE] = 50,},
-			talent_on_hit = { [Talents.T_BELLOWING_ROAR] = {level=3, chance=10}, [Talents.T_FIRE_BREATH] = {level=2, chance=10} },
+		talent_cd_reduction= {
+			[Talents.T_SWALLOW] = 2,
+			[Talents.T_MANA_CLASH] = 2,
+			[Talents.T_ICE_CLAW] = 1,
 		},
 	},
-	max_power = 24, power_regen = 1,
-	use_talent = { id = Talents.T_FIRE_BREATH, level = 2, power = 24 },
-}
+	on_wear = function(self, who)
+		if who:attr("forbid_arcane") then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
 
-newEntity{ base = "BASE_TOOL_MISC", define_as = "EYE_OF_THE_DREAMING_ONE",
-	power_source = {psionic=true},
-	unique=true, rarity=240,
-	name = "Eye of the Dreaming One",
-	unided_name = "translucent sphere",
-	color = colors.YELLOW,
-	level_range = {1, 10},
-	image = "npc/seed_of_dreams.png",
-	desc = [[This ethereal eye stares eternally, as if seeing things that do not truly exist.]],
-	cost = 320,
-	material_level = 1,
-	wielder = {
-		resists={[DamageType.MIND] = 8},
-		inc_damage={[DamageType.MIND] = 10},
-		sleep_immune=1,
-		combat_mentalresist = 10,
-		inc_stats = {[Stats.STAT_WIL] = 4,},
-	},
-	max_power = 25, power_regen = 1,
-	use_talent = { id = Talents.T_SLEEP, level = 3, power = 20 },
-}
+			self:specialWearAdd({"wielder","inc_damage"}, {[DamageType.NATURE]=15})
+			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_STR] = 6, [Stats.STAT_WIL] = 6, })
+			game.logPlayer(who, "#DARK_GREEN#You feel like Nature's Wrath incarnate!")
+		end
+	end,
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/general/objects/bows.lua b/game/modules/tome/data/general/objects/bows.lua
index 8373e90546096d09ef3185d8432fedfdf940b29b..43fbf73ca55e00523cdb9dadd4db52fd562c54f4 100644
--- a/game/modules/tome/data/general/objects/bows.lua
+++ b/game/modules/tome/data/general/objects/bows.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/brotherhood-artifacts.lua b/game/modules/tome/data/general/objects/brotherhood-artifacts.lua
index 659b023d77bb60d6e109d0eb3b0b438c6127fced..ed963bf5efd5110cd3d9b193837a06701c41feef 100644
--- a/game/modules/tome/data/general/objects/brotherhood-artifacts.lua
+++ b/game/modules/tome/data/general/objects/brotherhood-artifacts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -172,7 +172,7 @@ newEntity{
 	type = "potion", subtype="potion", image = "object/elixir_of_serendipity.png",
 	name = "Elixir of Serendipity", unique=true, unided_name="vial of yellow fluid",
 	display = "!", color=colors.YELLOW,
-	desc = [[A vial of lifelike yellow fluid.]],
+	desc = [[A vial of lively yellow fluid.]],
 	no_unique_lore = true,
 	cost = 1000,
 	quest = 1,
@@ -296,7 +296,7 @@ newEntity{ base = "BASE_INFUSION",
 	inscription_kind = "utility",
 	inscription_data = {
 		cooldown = 15,
-		dur = 5,
+		dur = 10, -- to 10 from 5, because this should be really good
 		armor = 50,
 		hard = 30,
 	},
@@ -315,21 +315,27 @@ newEntity{ base = "BASE_GEM",
 	quest = 1,
 	material_level = 5,
 	wielder = {
-		inc_stats = {[Stats.STAT_CON] = 10, },
+		inc_stats = {[Stats.STAT_CON] = 15, },
 		healing_factor = 0.3,
 		life_regen = 2,
 		resists = {
 			[DamageType.BLIGHT] = 10,
 		},
+		damage_affinity = {
+			[DamageType.NATURE] = 15,
+		},
 	},
 	imbue_powers = {
-		inc_stats = {[Stats.STAT_CON] = 10, },
+		inc_stats = {[Stats.STAT_CON] = 15, },
 		healing_factor = 0.3,
 		life_regen = 2,
 		stun_immune = 0.3,
 		resists = {
 			[DamageType.BLIGHT] = 10,
 		},
+		damage_affinity = {
+			[DamageType.NATURE] = 15,
+		},
 	},
 }
 
diff --git a/game/modules/tome/data/general/objects/cloak.lua b/game/modules/tome/data/general/objects/cloak.lua
index 6950b7336c6942b4b26ba8d35064d813de68377c..4fb7ba84617cd73789a744cc441dbb65f3cf0229 100644
--- a/game/modules/tome/data/general/objects/cloak.lua
+++ b/game/modules/tome/data/general/objects/cloak.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/cloth-armors.lua b/game/modules/tome/data/general/objects/cloth-armors.lua
index 9d718c3ed4347f5dee32ab71e5a767fa090fbf08..9ee52eff97ad19d93cdd2ed6de041afcc2a4e829 100644
--- a/game/modules/tome/data/general/objects/cloth-armors.lua
+++ b/game/modules/tome/data/general/objects/cloth-armors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/digger.lua b/game/modules/tome/data/general/objects/digger.lua
index df4735dc2ddd48ea560915244726720646a4d836..6990a2aaf13af8f472fe3e206816496ac2c80aad 100644
--- a/game/modules/tome/data/general/objects/digger.lua
+++ b/game/modules/tome/data/general/objects/digger.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/ammo.lua b/game/modules/tome/data/general/objects/egos/ammo.lua
index 467491238e3524d55a9c293078d6f931a204f661..b0027c59770c8602dfca6cf67242887e9cb59b8e 100644
--- a/game/modules/tome/data/general/objects/egos/ammo.lua
+++ b/game/modules/tome/data/general/objects/egos/ammo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -174,7 +174,7 @@ newEntity{
 		ranged_project={
 			[DamageType.LIGHTNING] = resolvers.mbonus_material(15, 5),
 		},
-		special_on_hit = {desc="25% chance for lightning to arc to a second target", fct=function(combat, who, target)
+		special_on_hit = {desc="25% chance for lightning to arc to a second target", on_kill=1, fct=function(combat, who, target)
 			if not rng.percent(25) then return end
 			local tgts = {}
 			local x, y = target.x, target.y
@@ -501,7 +501,7 @@ newEntity{
 	cost = 6,
 	combat = {
 		travel_speed = 2,
-		special_on_hit = {desc="10% chance to create an air burst", fct=function(combat, who, target)
+		special_on_hit = {desc="10% chance to create an air burst", on_kill=1, fct=function(combat, who, target)
 			if not rng.percent(10) then return end
 			local dam = 20 + who:combatPhysicalpower()/2
 			local distance = 2 + math.floor(who:combatPhysicalpower()/40)
diff --git a/game/modules/tome/data/general/objects/egos/amulets.lua b/game/modules/tome/data/general/objects/egos/amulets.lua
index 8a174cd928424dd6c31e8a4a379c6183f679e8ed..6bd3f66e8a0c132ad1f58acfde84761537f46589 100644
--- a/game/modules/tome/data/general/objects/egos/amulets.lua
+++ b/game/modules/tome/data/general/objects/egos/amulets.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/armor.lua b/game/modules/tome/data/general/objects/egos/armor.lua
index 417b5122cfffd586b4d10a9967ba30846abd809a..f112bde9e6c514e89606f1072bb3dbab2894dcea 100644
--- a/game/modules/tome/data/general/objects/egos/armor.lua
+++ b/game/modules/tome/data/general/objects/egos/armor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/belt.lua b/game/modules/tome/data/general/objects/egos/belt.lua
index bf7e722efc6737ba92b9d952c1ab71fd697882f9..edff20d31cd5134df48c2c6a4d928559094dd9ae 100644
--- a/game/modules/tome/data/general/objects/egos/belt.lua
+++ b/game/modules/tome/data/general/objects/egos/belt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -144,7 +144,7 @@ newEntity{
 
 newEntity{
 	power_source = {psionic=true},
-	name = " of transcendance", suffix=true, instant_resolve=true,
+	name = " of transcendence", suffix=true, instant_resolve=true,
 	keywords = {transcend=true},
 	level_range = {1, 50},
 	rarity = 5,
diff --git a/game/modules/tome/data/general/objects/egos/boots.lua b/game/modules/tome/data/general/objects/egos/boots.lua
index 3d28ee29cc2ebe950b1e434586f7406c3fc892f0..ea6d17c409c77216c328032bd7cda10f462171a8 100644
--- a/game/modules/tome/data/general/objects/egos/boots.lua
+++ b/game/modules/tome/data/general/objects/egos/boots.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/bow.lua b/game/modules/tome/data/general/objects/egos/bow.lua
index d9c24c02324e864066f946bd9eb12195622c60ba..e7c1c89f66e1badca282bacf5d2480d0fb8026e5 100644
--- a/game/modules/tome/data/general/objects/egos/bow.lua
+++ b/game/modules/tome/data/general/objects/egos/bow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/charged-attack.lua b/game/modules/tome/data/general/objects/egos/charged-attack.lua
index 0f94d05f4c86e2def057a14704e3bdb94124d1ed..8d829e4457917f18529617bd865a53472eae6e5c 100644
--- a/game/modules/tome/data/general/objects/egos/charged-attack.lua
+++ b/game/modules/tome/data/general/objects/egos/charged-attack.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/charged-defensive.lua b/game/modules/tome/data/general/objects/egos/charged-defensive.lua
index 20f261f9e996ce1f1474e560cae9127328e48b97..0fb7bace3c3d977639be8abcf203f0d943dd8995 100644
--- a/game/modules/tome/data/general/objects/egos/charged-defensive.lua
+++ b/game/modules/tome/data/general/objects/egos/charged-defensive.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/charged-utility.lua b/game/modules/tome/data/general/objects/egos/charged-utility.lua
index 26ff104eb571eb75b537de4483c0f1569e4faec8..293db8d8e6b86d110789360dc86c7588dc46cda5 100644
--- a/game/modules/tome/data/general/objects/egos/charged-utility.lua
+++ b/game/modules/tome/data/general/objects/egos/charged-utility.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/charms.lua b/game/modules/tome/data/general/objects/egos/charms.lua
index e28150de7435bd2b103b48fde09f00a19b8be63b..ac5f11da65536823e0ba289f2c06dfc347b7f6a6 100644
--- a/game/modules/tome/data/general/objects/egos/charms.lua
+++ b/game/modules/tome/data/general/objects/egos/charms.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/cloak.lua b/game/modules/tome/data/general/objects/egos/cloak.lua
index 522048c40e3b7c6030f319a1f193236a74873115..e952f4dce06639e8a5df843990620f9c0b143b51 100644
--- a/game/modules/tome/data/general/objects/egos/cloak.lua
+++ b/game/modules/tome/data/general/objects/egos/cloak.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/digger.lua b/game/modules/tome/data/general/objects/egos/digger.lua
index 0189be403abda8d00ef6bbecd8aaf207cfba437a..aa8971212c75e2c56e14797715062f531c7022ba 100644
--- a/game/modules/tome/data/general/objects/egos/digger.lua
+++ b/game/modules/tome/data/general/objects/egos/digger.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/heavy-armor.lua b/game/modules/tome/data/general/objects/egos/heavy-armor.lua
index 22b75ae553b26ee8366b65eaf39a44d10305b761..5b2d020ff2fa4debd71fb08c31206fd8219c784b 100644
--- a/game/modules/tome/data/general/objects/egos/heavy-armor.lua
+++ b/game/modules/tome/data/general/objects/egos/heavy-armor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/helm.lua b/game/modules/tome/data/general/objects/egos/helm.lua
index 4e9fd76caee259577e6175a993ea4e5db574dc08..abe4dd10cc70d99253919da550f18e1e6aab4d54 100644
--- a/game/modules/tome/data/general/objects/egos/helm.lua
+++ b/game/modules/tome/data/general/objects/egos/helm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/infusions.lua b/game/modules/tome/data/general/objects/egos/infusions.lua
index d44dfc17551181bccac23435dcc323b3a3290f3c..64b8189c09e53b60afc9710f53c06f2cc44f89ea 100644
--- a/game/modules/tome/data/general/objects/egos/infusions.lua
+++ b/game/modules/tome/data/general/objects/egos/infusions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/light-armor.lua b/game/modules/tome/data/general/objects/egos/light-armor.lua
index 89a3a3cfa4f2ffc4ab928a4f932f501bde282225..529a85d68325b11ece6367a2a5cac96e32fe6f3a 100644
--- a/game/modules/tome/data/general/objects/egos/light-armor.lua
+++ b/game/modules/tome/data/general/objects/egos/light-armor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -32,6 +32,7 @@ newEntity{
 	rarity = 12,
 	cost = 14,
 	wielder = {
+		healing_factor = resolvers.mbonus_material(20, 10, function(e, v) v=v/100 return 0, v end), -- copied from robe.lua
 		life_regen = resolvers.mbonus_material(120, 30, function(e, v) v=v/10 return 0, v end),
 	},
 }
@@ -45,12 +46,13 @@ newEntity{
 	rarity = 22,
 	cost = 35,
 	wielder = {
-		combat_def = resolvers.mbonus_material(8, 2),
-		combat_def_ranged = resolvers.mbonus_material(8, 2),
-		movement_speed = 0.1,
+		combat_def = resolvers.mbonus_material(14, 2),
+		combat_def_ranged = resolvers.mbonus_material(14, 2),
+		movement_speed = 0.2,
 		inc_stats = { [Stats.STAT_DEX] = resolvers.mbonus_material(3, 2), },
 	},
 }
+
 newEntity{
 	power_source = {technique=true},
 	name = "marauder's ", prefix=true, instant_resolve=true,
@@ -109,15 +111,13 @@ newEntity{
 	power_source = {technique=true},
 	name = " of the wind", suffix=true, instant_resolve=true,
 	keywords = {wind=true},
-	level_range = {40, 50},
+	level_range = {30, 50},
 	greater_ego = 1,
 	rarity = 30,
 	cost = 80,
 	resolvers.charmt(Talents.T_SECOND_WIND, {3,4,5}, 35),
 	wielder = {
-		max_life = resolvers.mbonus_material(60, 40, function(e, v) return 0, -v end),
-		combat_armor = resolvers.mbonus_material(7, 3, function(e, v) return 0, -v end),
-
+		cancel_damage_chance = resolvers.mbonus_material(8, 2),
 		combat_physcrit = resolvers.mbonus_material(7, 3),
 		combat_apr = resolvers.mbonus_material(15, 5),
 		combat_def = resolvers.mbonus_material(10, 5),
@@ -168,3 +168,37 @@ newEntity{
 	},
 }
 
+newEntity{
+	power_source = {technique=true},
+	name = " of alacrity", suffix=true, instant_resolve=true,
+	keywords = {alacrity=true},
+	level_range = {40, 50},
+	greater_ego = 1,
+	rarity = 30,
+	cost = 80,
+	wielder = {
+		combat_physspeed = 0.15,
+		combat_mindspeed = 0.15,
+		combat_spellspeed = 0.15,
+	},
+}
+
+-- you are so going to veto this ^^;
+newEntity{
+	power_source = {technique=true, arcane=true, nature=true},
+	name = " of the hero ", suffix=true, instant_resolve=true,
+	keywords = {hero=true},
+	level_range = {25, 50},
+	greater_ego = 1,
+	rarity = 30,
+	cost = 35,
+	wielder = {
+		inc_stats = {
+			[Stats.STAT_STR] = resolvers.mbonus_material(4, 3),
+			[Stats.STAT_DEX] = resolvers.mbonus_material(4, 3),
+			[Stats.STAT_WIL] = resolvers.mbonus_material(4, 3),
+			[Stats.STAT_CUN] = resolvers.mbonus_material(4, 3),
+			[Stats.STAT_MAG] = resolvers.mbonus_material(4, 3),
+		},
+	},
+}
diff --git a/game/modules/tome/data/general/objects/egos/light-boots.lua b/game/modules/tome/data/general/objects/egos/light-boots.lua
index 76138fb6a1955ffe8c42021e1dc054db15ae2315..faf87b25ec0fa2a1546013ae34924a963d646e5b 100644
--- a/game/modules/tome/data/general/objects/egos/light-boots.lua
+++ b/game/modules/tome/data/general/objects/egos/light-boots.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/lite.lua b/game/modules/tome/data/general/objects/egos/lite.lua
index 3549b7ead503f649f9fdbfed83ba3ce12dac1cd2..cf3c0add149d850a820dd029d8f7acd93246d56f 100644
--- a/game/modules/tome/data/general/objects/egos/lite.lua
+++ b/game/modules/tome/data/general/objects/egos/lite.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/massive-armor.lua b/game/modules/tome/data/general/objects/egos/massive-armor.lua
index c6603d5349e6cd230208c889c06e6e300cad9352..ad22983fa6ef49cbb7e0046d2acb22022cf6e4ae 100644
--- a/game/modules/tome/data/general/objects/egos/massive-armor.lua
+++ b/game/modules/tome/data/general/objects/egos/massive-armor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/mindstars.lua b/game/modules/tome/data/general/objects/egos/mindstars.lua
index 279aca72126f24c9997ba45032401a202b3ae495..713f6835209a6f1b20c548fa1363ed1f2bed5134 100644
--- a/game/modules/tome/data/general/objects/egos/mindstars.lua
+++ b/game/modules/tome/data/general/objects/egos/mindstars.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/potions.lua b/game/modules/tome/data/general/objects/egos/potions.lua
index e5bac93e0dda33bc9c46e166245cc0909a98c4b8..42425295e6169fb130bc2557734b625f51969b71 100644
--- a/game/modules/tome/data/general/objects/egos/potions.lua
+++ b/game/modules/tome/data/general/objects/egos/potions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/ranged.lua b/game/modules/tome/data/general/objects/egos/ranged.lua
index 6c2730d75c2f331d98e1a11f27c26d6f493aaf5e..93a84bb60daf7b1492516bb339269e293205ec07 100644
--- a/game/modules/tome/data/general/objects/egos/ranged.lua
+++ b/game/modules/tome/data/general/objects/egos/ranged.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/rings.lua b/game/modules/tome/data/general/objects/egos/rings.lua
index 88f916a23204eb4e8125bf312e1490ddf0f23857..f2198c8c04540e0db19ca4d9285e1ad015572039 100644
--- a/game/modules/tome/data/general/objects/egos/rings.lua
+++ b/game/modules/tome/data/general/objects/egos/rings.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/robe.lua b/game/modules/tome/data/general/objects/egos/robe.lua
index 12f4e8bc820ddde5fd930611d150fed3d56e3a51..2404f4c274df6bca2170f6b4455e5c0425d44b17 100644
--- a/game/modules/tome/data/general/objects/egos/robe.lua
+++ b/game/modules/tome/data/general/objects/egos/robe.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/scrolls.lua b/game/modules/tome/data/general/objects/egos/scrolls.lua
index d486335fc71a9cf6f182cce89fe9172aa349c39e..484d2acd17b25d3bf27d3aa5a9c069bc0b3cf425 100644
--- a/game/modules/tome/data/general/objects/egos/scrolls.lua
+++ b/game/modules/tome/data/general/objects/egos/scrolls.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/shield.lua b/game/modules/tome/data/general/objects/egos/shield.lua
index d17671b0d9c59b70af6dec9a46b4f1250deb479e..e80bd199812b320f906ebb9d4d25442226bfc0a8 100644
--- a/game/modules/tome/data/general/objects/egos/shield.lua
+++ b/game/modules/tome/data/general/objects/egos/shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -589,7 +589,7 @@ newEntity{
 	greater_ego = 1,
 	rarity = 25,
 	cost = 40,
-	resolvers.charmt(Talents.T_STONE_WALL, {2,3,4,5}, 40),
+--	resolvers.charmt(Talents.T_STONE_WALL, {2,3,4,5}, 40),
 	special_combat = {
 		melee_project={
 			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 10)
@@ -598,6 +598,7 @@ newEntity{
 	wielder = {
 		combat_armor = resolvers.mbonus_material(10, 5),
 		combat_armor_hardiness = resolvers.mbonus_material(5, 5),
+		resists={[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 10)},
 	},
 }
 
diff --git a/game/modules/tome/data/general/objects/egos/sling.lua b/game/modules/tome/data/general/objects/egos/sling.lua
index fa3ada4e1938af7ec7d757b40cdd0b8dd55e18f4..930a8e4dbe5abe93682ba5c822c7f219c9ffba44 100644
--- a/game/modules/tome/data/general/objects/egos/sling.lua
+++ b/game/modules/tome/data/general/objects/egos/sling.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/staves.lua b/game/modules/tome/data/general/objects/egos/staves.lua
index b48b15598b84323d427099253f0d083494df71ac..91eaaac9f910d59df3fe76a51b1ee4dfaead1e2c 100644
--- a/game/modules/tome/data/general/objects/egos/staves.lua
+++ b/game/modules/tome/data/general/objects/egos/staves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/torques-powers.lua b/game/modules/tome/data/general/objects/egos/torques-powers.lua
index 715aa1e2a9c8c06db547e0f336919f8795333ec1..e52a0e397b9f174a2c8ef3142105776381a707a6 100644
--- a/game/modules/tome/data/general/objects/egos/torques-powers.lua
+++ b/game/modules/tome/data/general/objects/egos/torques-powers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/torques.lua b/game/modules/tome/data/general/objects/egos/torques.lua
index 65e8a16e6855e2c5ef8e85a0ed21f9ccbc671977..7e67f8caa0627a4d199af6841c23991ef7926375 100644
--- a/game/modules/tome/data/general/objects/egos/torques.lua
+++ b/game/modules/tome/data/general/objects/egos/torques.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/totems-powers.lua b/game/modules/tome/data/general/objects/egos/totems-powers.lua
index cb8bb9c8200447e8e2233d2e1dc8e2b487b5c4b9..4b2c41f8421d28c34eaa7537edc9272e23ee4c9f 100644
--- a/game/modules/tome/data/general/objects/egos/totems-powers.lua
+++ b/game/modules/tome/data/general/objects/egos/totems-powers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/totems.lua b/game/modules/tome/data/general/objects/egos/totems.lua
index 370d319902f502a28858e51f8cf35654723ad7ac..7d5496a72b49fd0209eac8250cc682682107b211 100644
--- a/game/modules/tome/data/general/objects/egos/totems.lua
+++ b/game/modules/tome/data/general/objects/egos/totems.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/wands-powers.lua b/game/modules/tome/data/general/objects/egos/wands-powers.lua
index 49c93ec6662fa6d15df333f48438a4506717049e..b531ac633b05e68639837cf78714fa368c96a7b0 100644
--- a/game/modules/tome/data/general/objects/egos/wands-powers.lua
+++ b/game/modules/tome/data/general/objects/egos/wands-powers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/wands.lua b/game/modules/tome/data/general/objects/egos/wands.lua
index 9bfd8a38df901f07f9effdb140cb4f956fd67385..91c60b1485ea7095915689ee871f807490111b3e 100644
--- a/game/modules/tome/data/general/objects/egos/wands.lua
+++ b/game/modules/tome/data/general/objects/egos/wands.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/egos/weapon.lua b/game/modules/tome/data/general/objects/egos/weapon.lua
index 7bbbcfdc83f45f9af3620124ca4bcf69afb475e7..e863684fcf3583f93d193ee88c5fec2e5b1c01dd 100644
--- a/game/modules/tome/data/general/objects/egos/weapon.lua
+++ b/game/modules/tome/data/general/objects/egos/weapon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -218,7 +218,7 @@ newEntity{
 		melee_project={
 			[DamageType.LIGHTNING] = resolvers.mbonus_material(15, 5),
 		},
-		special_on_hit = {desc="25% chance for lightning to arc to a second target", fct=function(combat, who, target)
+		special_on_hit = {desc="25% chance for lightning to arc to a second target", on_kill=1, fct=function(combat, who, target)
 			if not rng.percent(25) then return end
 			local tgts = {}
 			local x, y = target.x, target.y
diff --git a/game/modules/tome/data/general/objects/egos/wizard-hat.lua b/game/modules/tome/data/general/objects/egos/wizard-hat.lua
index 73e33e8755f891280cb5780c9edb4e74545b3adc..43582cc424ba2028ac08d1d90bba9e346eeeb986 100644
--- a/game/modules/tome/data/general/objects/egos/wizard-hat.lua
+++ b/game/modules/tome/data/general/objects/egos/wizard-hat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -198,7 +198,7 @@ newEntity{
 	keywords = {Brotherhood=true},
 	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 35,
+	rarity = 25,
 	cost = 40,
 	resolvers.charmt(Talents.T_ARCANE_EYE, 5, 10),
 	wielder = {
@@ -220,7 +220,7 @@ newEntity{
 	greater_ego = 1,
 	rarity = 35,
 	cost = 20,
-	resolvers.charmt(Talents.T_STONE_WALL, {1,2,3}, 80),
+	resolvers.charmt(Talents.T_STONE_WALL, 1, 80),
 	wielder = {
 		inc_stats = {
 			[Stats.STAT_CON] = resolvers.mbonus_material(5, 1),
diff --git a/game/modules/tome/data/general/objects/elixir-ingredients.lua b/game/modules/tome/data/general/objects/elixir-ingredients.lua
index 9e4a6de74449882a136eeddba981b8626ae6efea..369dcf7b31f76056873c7601f39bbd253467015a 100644
--- a/game/modules/tome/data/general/objects/elixir-ingredients.lua
+++ b/game/modules/tome/data/general/objects/elixir-ingredients.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/gauntlets.lua b/game/modules/tome/data/general/objects/gauntlets.lua
index 19d2fa5f0dddeec2394c669fe0cd28e1a265e6bc..ece215f575e155c4b9bab41f22174aefdad20ed8 100644
--- a/game/modules/tome/data/general/objects/gauntlets.lua
+++ b/game/modules/tome/data/general/objects/gauntlets.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/gem.lua b/game/modules/tome/data/general/objects/gem.lua
index d9c6b964d43d39b2d8caf3ec14bd224dfbfc1dc8..4e2530553a74a7145031d0ad70a4fc347da7d6c6 100644
--- a/game/modules/tome/data/general/objects/gem.lua
+++ b/game/modules/tome/data/general/objects/gem.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -23,7 +23,7 @@ newEntity{
 	define_as = "BASE_GEM",
 	type = "gem", subtype="white",
 	display = "*", color=colors.YELLOW,
-	encumber = 0, slot = "GEM",
+	encumber = 0, slot = "GEM", use_no_wear = true,
 	identified = true,
 	stacking = true,
 	auto_pickup = true, pickup_sound = "actions/gem",
@@ -69,7 +69,7 @@ newGem("Diamond",	"object/diamond.png",5,		18,	"white",	40,	50, 5, 70,
 )
 newGem("Pearl",	"object/pearl.png",	5,		18,	"white",	40,	50, 5, 70,
 	{ resists = {all=5}, combat_armor = 5 },
-	{ splash={type="LITE", dam=100} }
+	{ splash={type="LITE", dam=100, desc = "Lights terrain (power 100)"} }
 )
 newGem("Moonstone",	"object/moonstone.png",5,	18,	"white",	40,	50, 5, 70,
 	{ combat_def=10, combat_mentalresist=10, combat_spellresist=10, combat_physresist=10, },
@@ -97,7 +97,7 @@ newGem("Turquoise",	"object/turquoise.png",4,	16,	"green",	30,	40, 4, 65,
 )
 newGem("Jade",		"object/jade.png",	4,	16,	"green",	30,	40, 4, 65,
 	{ resists = {all=4}, combat_armor = 4 },
-	{ splash={type="SLOW", dam=-1 + 1 / (1 + 0.20)} }
+	{ splash={type="SLOW", dam= 1 - 1 / (1 + 0.20), desc = "Slows by 17%"} }
 )
 newGem("Sapphire",	"object/sapphire.png",4,	16,	"blue",		30,	40, 4, 65,
 	{ combat_def=8, combat_mentalresist=8, combat_spellresist=8, combat_physresist=8, },
@@ -141,7 +141,7 @@ newGem("Aquamarine",	"object/aquamarine.png",2,	10,	"blue",		10,	20, 2, 35,
 )
 newGem("Ametrine",	"object/ametrine.png",1,	8,	"yellow",	1,	10, 1, 20,
 	{ inc_damage = {all=2}, combat_physcrit=1, combat_mindcrit=1, combat_spellcrit=1, },
-	{ splash={type="LITE", dam=1} }
+	{ splash={type="LITE", dam=10, desc = "Lights terrain (power 10)"} }
 )
 newGem("Zircon",	"object/zircon.png",1,	8,	"yellow",	1,	10, 1, 20,
 	{ resists = {all=1}, combat_armor = 1 },
diff --git a/game/modules/tome/data/general/objects/gloves.lua b/game/modules/tome/data/general/objects/gloves.lua
index 3c9a2fba706133a3cd9dfd702a8b4a65d6affa17..94bf8236d2e1a2af14a9818bc1b9859735c18eab 100644
--- a/game/modules/tome/data/general/objects/gloves.lua
+++ b/game/modules/tome/data/general/objects/gloves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/heavy-armors.lua b/game/modules/tome/data/general/objects/heavy-armors.lua
index 7b4659f376f20f2261c294a12c7f3d52fd96fb46..3151e0cc52bdfbe610b74037ab37d2c9352d70a9 100644
--- a/game/modules/tome/data/general/objects/heavy-armors.lua
+++ b/game/modules/tome/data/general/objects/heavy-armors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/heavy-boots.lua b/game/modules/tome/data/general/objects/heavy-boots.lua
index 163c4c76f4e290ee8dbd2c4682cc8b3d03656372..ca8823d82659f9e11b1621645c80d915e58bfb72 100644
--- a/game/modules/tome/data/general/objects/heavy-boots.lua
+++ b/game/modules/tome/data/general/objects/heavy-boots.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/helms.lua b/game/modules/tome/data/general/objects/helms.lua
index 3dd3932908a74816ffd799d82726d0e2a1215adf..48f982876f33eb5fbd3200a45032a0e44ea2d9d2 100644
--- a/game/modules/tome/data/general/objects/helms.lua
+++ b/game/modules/tome/data/general/objects/helms.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/jewelry.lua b/game/modules/tome/data/general/objects/jewelry.lua
index 13d183d312085239dfb1dfe1ffadd29183c64067..ec914b0e2e54b93b1f53d8244db54115e8ae4f50 100644
--- a/game/modules/tome/data/general/objects/jewelry.lua
+++ b/game/modules/tome/data/general/objects/jewelry.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/knifes.lua b/game/modules/tome/data/general/objects/knifes.lua
index e77426c5a267e597b810d5188b98cacb825331a4..990a709c4d3852844c8e669b45f70f4d3d86bfb6 100644
--- a/game/modules/tome/data/general/objects/knifes.lua
+++ b/game/modules/tome/data/general/objects/knifes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/leather-belt.lua b/game/modules/tome/data/general/objects/leather-belt.lua
index 32931e31c0c1c1b3748090ad1ffee92f11898828..dea12242ff2b89c5d712b64566eb146516b218e0 100644
--- a/game/modules/tome/data/general/objects/leather-belt.lua
+++ b/game/modules/tome/data/general/objects/leather-belt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/leather-boots.lua b/game/modules/tome/data/general/objects/leather-boots.lua
index 99dcf7967aee741d897e71b12221fb2bf69648e1..6d9c4e7858424f6c478b78a269ca6a1d732388cb 100644
--- a/game/modules/tome/data/general/objects/leather-boots.lua
+++ b/game/modules/tome/data/general/objects/leather-boots.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/leather-caps.lua b/game/modules/tome/data/general/objects/leather-caps.lua
index 90b93d1b76e08e7fd19f41d6590606879d33915d..0cfe496ffa437516999b65dfdc57fe159211bb85 100644
--- a/game/modules/tome/data/general/objects/leather-caps.lua
+++ b/game/modules/tome/data/general/objects/leather-caps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/light-armors.lua b/game/modules/tome/data/general/objects/light-armors.lua
index 43864ea4f9f738bc02b6c9e3caf4d6702ff825a5..fef331af166ba5a5686eff25d19a7292ebac65ce 100644
--- a/game/modules/tome/data/general/objects/light-armors.lua
+++ b/game/modules/tome/data/general/objects/light-armors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/lites.lua b/game/modules/tome/data/general/objects/lites.lua
index 72b853acc22acc8b8b1f0cfc19589754a428d73f..db6f256cc6bd0b875d9310bfb2d45c620c923252 100644
--- a/game/modules/tome/data/general/objects/lites.lua
+++ b/game/modules/tome/data/general/objects/lites.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/lore/fun.lua b/game/modules/tome/data/general/objects/lore/fun.lua
index bd3cd8319194f82693a0583d8ecfdfe6bffd9376..21021400f8fd3641cc3621e5410ee31fee70dfb0 100644
--- a/game/modules/tome/data/general/objects/lore/fun.lua
+++ b/game/modules/tome/data/general/objects/lore/fun.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -52,7 +52,7 @@ end
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = [["Dust to Dust", an undead hunter's guide, by Aslabor Borys]], lore="dust-to-dust", unique=true,
-	desc = [[An undead hunter's guide, by Aslabor Borys]],
+	desc = [[An undead hunter's guide, by Aslabor Borys.]],
 	level_range = {15, 50},
 	rarity = 60,
 }
@@ -67,7 +67,7 @@ elseif i == 5 then who = "Weisman" nb = 3
 end
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "letter to "..who.."("..nb..")", lore="adventurer-letter-"..i, unique=true,
-	desc = [[A part of the correspondence between two adventurers]],
+	desc = [[A part of the correspondence between two adventurers.]],
 	level_range = {1, 20},
 	rarity = 20,
 	bloodstains = (i == 5) and 2 or nil,
@@ -76,7 +76,7 @@ end
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "of halfling feet", lore="halfling-feet", unique=true,
-	desc = [[Notes about .. halfling feet ??]],
+	desc = [[Notes about... Halfling feet??]],
 	level_range = {10, 30},
 	rarity = 40,
 	encumber = 0,
diff --git a/game/modules/tome/data/general/objects/lore/maj-eyal.lua b/game/modules/tome/data/general/objects/lore/maj-eyal.lua
index 460e51a1937f1b8aab85359df352e337bcd898e3..6985c489b2915a45faa3266e6e55d9e00476d12d 100644
--- a/game/modules/tome/data/general/objects/lore/maj-eyal.lua
+++ b/game/modules/tome/data/general/objects/lore/maj-eyal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/lore/misc.lua b/game/modules/tome/data/general/objects/lore/misc.lua
index f86ccab2c61ec442ac5e09dd1e2da5ec2a78f179..26d5fe48c7da17a21a7c7d1e685da4c86e742449 100644
--- a/game/modules/tome/data/general/objects/lore/misc.lua
+++ b/game/modules/tome/data/general/objects/lore/misc.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -19,14 +19,14 @@
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "The story of my salvation", lore="zigur-potion", unique=true,
-	desc = [[An old tale about the fear of magic]],
+	desc = [[An old tale about the fear of magic.]],
 	level_range = {1, 20},
 	rarity = 40,
 }
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "memories of Artelia Firstborn", lore="creation-elf", unique=true,
-	desc = [[The memories of the first elf to have awaken]],
+	desc = [[The memories of the first elf ever to awaken.]],
 	level_range = {1, 25},
 	rarity = 40,
 	-- Only elves can find it
@@ -35,7 +35,7 @@ newEntity{ base = "BASE_LORE_RANDOM",
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "human myth of creation", lore="creation-human", unique=true,
-	desc = [[Myth of creation of the humans]],
+	desc = [[Myth of creation of the humans.]],
 	level_range = {1, 25},
 	rarity = 40,
 	-- Only humans can find it
@@ -44,7 +44,7 @@ newEntity{ base = "BASE_LORE_RANDOM",
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "a logical analysis of creation, by philosopher Smythen", lore="creation-halfling", unique=true,
-	desc = [[Myth of creation of the halflings]],
+	desc = [[Myth of creation of the halflings.]],
 	level_range = {1, 25},
 	rarity = 40,
 	-- Only hhalflings can find it
diff --git a/game/modules/tome/data/general/objects/lore/orc-prides.lua b/game/modules/tome/data/general/objects/lore/orc-prides.lua
index 1c0543a66bddbc84f48cdbe2fbed9c71a2424f7b..da5f59e643eb3286572af6c12609349bb9091166 100644
--- a/game/modules/tome/data/general/objects/lore/orc-prides.lua
+++ b/game/modules/tome/data/general/objects/lore/orc-prides.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/lore/spellhunt.lua b/game/modules/tome/data/general/objects/lore/spellhunt.lua
index 2ba9ad064a491c144576c3e0b968d277ec6c2d6a..4804f301391c573e46d81d0ba09859933cf86ca4 100644
--- a/game/modules/tome/data/general/objects/lore/spellhunt.lua
+++ b/game/modules/tome/data/general/objects/lore/spellhunt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -19,7 +19,7 @@
 
 newEntity{ base = "BASE_LORE_RANDOM",
 	name = "memories of archmage Varil", lore="spellhunt-note-1", unique=true,
-	desc = [[A collection of thoughts and memories of the archmage Varil, during the Age of Dusk]],
+	desc = [[A collection of thoughts and memories of the archmage Varil, during the Age of Dusk.]],
 	level_range = {1, 25},
 	rarity = 40,
 	encumber = 0,
diff --git a/game/modules/tome/data/general/objects/lore/sunwall.lua b/game/modules/tome/data/general/objects/lore/sunwall.lua
index 3b0e232cc2dc2eeaf0e32ed379418077a74bd75e..c726ab068724f4dda0476463e4cf9d2108adfbc7 100644
--- a/game/modules/tome/data/general/objects/lore/sunwall.lua
+++ b/game/modules/tome/data/general/objects/lore/sunwall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/maces.lua b/game/modules/tome/data/general/objects/maces.lua
index fe39b97e012db4f6f043533fe1fef80a53e64630..d3c9cc33398b59e9cfe95203a3f6978c37aa9683 100644
--- a/game/modules/tome/data/general/objects/maces.lua
+++ b/game/modules/tome/data/general/objects/maces.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/massive-armors.lua b/game/modules/tome/data/general/objects/massive-armors.lua
index 7bc88d922e3b43fb2a00aa2d20d006413d536cd8..d0a068aeea0db436cbf18658807faa4cb17db806 100644
--- a/game/modules/tome/data/general/objects/massive-armors.lua
+++ b/game/modules/tome/data/general/objects/massive-armors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/mindstars.lua b/game/modules/tome/data/general/objects/mindstars.lua
index 3733f892a29e6a332bb95dabef13f2b222186633..82a0722db84c7ce9319e67b2d253ccd55dc4f1a4 100644
--- a/game/modules/tome/data/general/objects/mindstars.lua
+++ b/game/modules/tome/data/general/objects/mindstars.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/misc-tools.lua b/game/modules/tome/data/general/objects/misc-tools.lua
index 9c098cf82ad0d8a7f9c106e6e41344376daf4b36..e8279bcb83416dcffeccd6b7245ab27021465c50 100644
--- a/game/modules/tome/data/general/objects/misc-tools.lua
+++ b/game/modules/tome/data/general/objects/misc-tools.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/money.lua b/game/modules/tome/data/general/objects/money.lua
index d3a220dda864ebe85526f9b97fdf04e62be5ba5b..711c312c640eeabf509a0af717c032ecf13110a4 100644
--- a/game/modules/tome/data/general/objects/money.lua
+++ b/game/modules/tome/data/general/objects/money.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/mounts.lua b/game/modules/tome/data/general/objects/mounts.lua
index 9226f3a78d78844b00f8a23c6dcce8452c15ce41..90e616fbf8bd4e40825e777b27f0dfa80588e94f 100644
--- a/game/modules/tome/data/general/objects/mounts.lua
+++ b/game/modules/tome/data/general/objects/mounts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -23,7 +23,7 @@ newEntity{
 	type = "mount",
 	display = "&", color=colors.SLATE,
 	encumber = 0,
-	desc = [[A mount]],
+	desc = [[A mount.]],
 }
 
 newEntity{ base = "BASE_MOUNT", define_as = "ALCHEMIST_GOLEM_MOUNT",
diff --git a/game/modules/tome/data/general/objects/mummy-wrappings.lua b/game/modules/tome/data/general/objects/mummy-wrappings.lua
index 81f60420a2edb62ab4dfacd0521a59ff821cd748..d56513f448d6d289766d9fa9fc3a6cf9c0c82cd5 100644
--- a/game/modules/tome/data/general/objects/mummy-wrappings.lua
+++ b/game/modules/tome/data/general/objects/mummy-wrappings.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/objects-far-east.lua b/game/modules/tome/data/general/objects/objects-far-east.lua
index cd0a953ecd1ed6426e5f75269fd018f649e6efaf..c5196047f540ab38e86dfe458b0dce6a869bd139 100644
--- a/game/modules/tome/data/general/objects/objects-far-east.lua
+++ b/game/modules/tome/data/general/objects/objects-far-east.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/objects-maj-eyal.lua b/game/modules/tome/data/general/objects/objects-maj-eyal.lua
index 01650b612bb49489f9d39a5847d6c2ad885764c0..cd6dbbd477251b39fdb845d82b5fc940efd25396 100644
--- a/game/modules/tome/data/general/objects/objects-maj-eyal.lua
+++ b/game/modules/tome/data/general/objects/objects-maj-eyal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -29,3 +29,7 @@ loadIfNot("/data/general/objects/lore/spellhunt.lua")
 loadIfNot("/data/general/objects/lore/fun.lua")
 loadIfNot("/data/general/objects/lore/misc.lua")
 loadIfNot("/data/general/objects/lore/maj-eyal.lua")
+
+--Artifacts
+loadIfNot("/data/general/objects/world-artifacts-maj-eyal.lua")
+loadIfNot("/data/general/objects/boss-artifacts-maj-eyal.lua")
\ No newline at end of file
diff --git a/game/modules/tome/data/general/objects/objects.lua b/game/modules/tome/data/general/objects/objects.lua
index 0a1ffaa491310dc91e0e2676203b2c7ec82f6fb0..a9eeacc38ec8d3ceec3ce1e61fc90a655199ea6b 100644
--- a/game/modules/tome/data/general/objects/objects.lua
+++ b/game/modules/tome/data/general/objects/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -83,6 +83,6 @@ loadIfNot("/data/general/objects/leather-belt.lua")
 
 -- Artifacts
 loadIfNot("/data/general/objects/world-artifacts.lua")
+loadIfNot("/data/general/objects/boss-artifacts.lua")
 loadIfNot("/data/general/objects/quest-artifacts.lua")
 loadIfNot("/data/general/objects/special-artifacts.lua")
-loadIfNot("/data/general/objects/boss-artifacts.lua")
diff --git a/game/modules/tome/data/general/objects/potions.lua b/game/modules/tome/data/general/objects/potions.lua
index 008c0b3ede3654d709569a4b3d970c9d14123895..f5deb433cba9fc1fe6469cc64ad40a4bf0514cd7 100644
--- a/game/modules/tome/data/general/objects/potions.lua
+++ b/game/modules/tome/data/general/objects/potions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -26,6 +26,6 @@ newEntity{
 	encumber = 0.2,
 	stacking = true,
 	acid_destroy = {{10,1}, {20,2}, {40,5}, {60,10}, {120,20}},
-	desc = [[Magical potions can have wildly different effects, from healing to killing you -- beware! Most of them function better with a high Magic score]],
+	desc = [[Magical potions can have wildly different effects, from healing to killing you -- beware! Most of them function better with a high Magic score.]],
 	egos = "/data/general/objects/egos/potions.lua", egos_chance = resolvers.mbonus(10, 5),
 }
diff --git a/game/modules/tome/data/general/objects/quest-artifacts.lua b/game/modules/tome/data/general/objects/quest-artifacts.lua
index 5ede62733e4dcbcf8dc285fbddec04e0d7dff4aa..f1cf60363123c7a97fa6dd6cbb9acc458c0f9a37 100644
--- a/game/modules/tome/data/general/objects/quest-artifacts.lua
+++ b/game/modules/tome/data/general/objects/quest-artifacts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -34,7 +34,7 @@ newEntity{ define_as = "STAFF_ABSORPTION",
 	encumber = 7,
 	auto_pickup = 1,
 	plot = true, quest = true,
-	desc = [[Carved with runes of power, this staff seems to have been made long ago. Yet it bears no signs of tarnishment.
+	desc = [[Carved with runes of power, this staff seems to have been made long ago, yet it bears no signs of tarnish.
 Light around it seems to dim and you can feel its tremendous power simply by touching it.]],
 
 	require = { stat = { mag=60 }, },
@@ -54,7 +54,7 @@ Light around it seems to dim and you can feel its tremendous power simply by tou
 	max_power = 1000, power_regen = 1,
 	use_power = { name = "absorb energies", power = 1000,
 		use = function(self, who)
-			game.logPlayer(who, "This power seems too much to wield, you fear it might absorb YOU.")
+			game.logPlayer(who, "This power seems too much to wield; you fear it might absorb YOU.")
 			return {used=true}
 		end
 	},
@@ -353,7 +353,7 @@ You have heard of such items before. They are very useful to adventurers, allowi
 
 	on_pickup = function(self, who)
 		if who == game.player then
-			require("engine.ui.Dialog"):simplePopup("Rod of Recall", "You found a Rod of Recall, you can use it to quickly get out of your current zone and return to the worldmap.")
+			require("engine.ui.Dialog"):simplePopup("Rod of Recall", "You found a Rod of Recall. You can use it to quickly get out of your current zone and return to the worldmap.")
 		end
 	end,
 }
@@ -365,7 +365,7 @@ newEntity{ base = "BASE_ROD",
 	add_name = false,
 	identified=true, force_lore_artifact=true,
 	name = "Transmogrification Chest", display = '~', color=colors.GOLD, unique=true, image = "object/chest4.png",
-	desc = [[This chest is an extension of old Sher'tul places of power, any items dropped inside is transported to an other place, processed and destroyed to extract energy.
+	desc = [[This chest is an extension of old Sher'tul places of power. Any items dropped inside are transported to an other place, processed and destroyed to extract energy.
 The byproduct of this effect is the creation of gold, which is useless to process, so it is sent back to you.
 
 When you possess the chest all items you walk upon will automatically be put inside and transmogrified when you leave the level.
@@ -378,7 +378,7 @@ Items in the chest will not encumber you.]],
 	},
 
 	max_power = 1000, power_regen = 1,
-	use_power = { name = "transmogrify all the items in your chest at once(also done automatically when you change level)", power = 0,
+	use_power = { name = "transmogrify all the items in your chest at once (also done automatically when you change level)", power = 0,
 		use = function(self, who)
 			local inven = who:getInven("INVEN")
 			local nb = 0
@@ -419,7 +419,7 @@ Items in the chest will not encumber you.]],
 	},
 
 	on_pickup = function(self, who)
-		require("engine.ui.Dialog"):simpleLongPopup("Transmogrification Chest", [[This chest is an extension of old Sher'Tul places of power, any items dropped inside is transported to an other place, processed and destroyed to extract energy.
+		require("engine.ui.Dialog"):simpleLongPopup("Transmogrification Chest", [[This chest is an extension of old Sher'Tul places of power. Any items dropped inside is transported to an other place, processed and destroyed to extract energy.
 The byproduct of this effect is the creation of gold, which is useless to process, so it is sent back to you.
 
 When you possess the chest all items you walk upon will automatically be put inside and transmogrified when you leave the level.
diff --git a/game/modules/tome/data/general/objects/random-artifacts.lua b/game/modules/tome/data/general/objects/random-artifacts.lua
index 219075866c3c746818834b769a4be1b3d3d370df..f60f8da58d474ace0a2e1bb21b59a5a77873668e 100644
--- a/game/modules/tome/data/general/objects/random-artifacts.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/random-artifacts/ammo.lua b/game/modules/tome/data/general/objects/random-artifacts/ammo.lua
index 9fd8cb976662cd2f80fd50872c03e6d0ab5214c0..5afff19be3381aefd1c35a51f7ab1fb667c1e258 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/ammo.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/ammo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/random-artifacts/generic.lua b/game/modules/tome/data/general/objects/random-artifacts/generic.lua
index f1dd940f1261abb8f4c4da7243ac1eb7f072e419..e64d5735a7aed0db2d10af73fe1649362c9f5005 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/generic.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/generic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/random-artifacts/gloves.lua b/game/modules/tome/data/general/objects/random-artifacts/gloves.lua
index 2213a796a64c4cff22eb5cce800fa50943778204..7d45c70f1908029edf144299e06eebba3e26fbf9 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/gloves.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/gloves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/random-artifacts/melee.lua b/game/modules/tome/data/general/objects/random-artifacts/melee.lua
index 7471d858c12e48e1c03a9966a1b1fec98605251d..9dea82639c33bdd0aba5480b82e849436f55b6b5 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/melee.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/melee.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/random-artifacts/ranged.lua b/game/modules/tome/data/general/objects/random-artifacts/ranged.lua
index 2495cbb14e17fdca16cf095453e6a58b03c75360..b3c7b08fb98aad6e8422b41e5e74c6c5aeeeba69 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/ranged.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/ranged.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/random-artifacts/shields.lua b/game/modules/tome/data/general/objects/random-artifacts/shields.lua
index c1ac44f2f10a2cfeca34c95b04cdb78bc55d89d6..d2982ef62bfe40b17b30bf287835e12f7baf961a 100644
--- a/game/modules/tome/data/general/objects/random-artifacts/shields.lua
+++ b/game/modules/tome/data/general/objects/random-artifacts/shields.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/rods.lua b/game/modules/tome/data/general/objects/rods.lua
index ee0bb3e7533aade0e4c6b076cc1c78bd5ec27918..6f9cdfdac48ecca587c4c77d0364a93da79a9e1b 100644
--- a/game/modules/tome/data/general/objects/rods.lua
+++ b/game/modules/tome/data/general/objects/rods.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/scrolls.lua b/game/modules/tome/data/general/objects/scrolls.lua
index 95df342e5730402129c69a2f2189215817256657..768c3b35712bcc1f4e7dd37c22e250b2053477d3 100644
--- a/game/modules/tome/data/general/objects/scrolls.lua
+++ b/game/modules/tome/data/general/objects/scrolls.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,7 +28,7 @@ newEntity{
 	use_no_blind = true,
 	use_no_silence = true,
 	fire_destroy = {{10,1}, {20,2}, {40,5}, {60,10}, {120,20}},
-	desc = [[Magical scrolls can have wildly different effects! Most of them function better with a high Magic score]],
+	desc = [[Magical scrolls can have wildly different effects! Most of them function better with a high Magic score.]],
 	egos = "/data/general/objects/egos/scrolls.lua", egos_chance = resolvers.mbonus(10, 5),
 }
 
diff --git a/game/modules/tome/data/general/objects/shields.lua b/game/modules/tome/data/general/objects/shields.lua
index a65b4fbbbe97e634a598dbb01a098cc335ce080e..7684ad4d8fcc46afab5f1a0033559f291d3b8a3c 100644
--- a/game/modules/tome/data/general/objects/shields.lua
+++ b/game/modules/tome/data/general/objects/shields.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -29,7 +29,7 @@ newEntity{
 	rarity = 5,
 	encumber = 7,
 	metallic = true,
-	desc = [[Handheld deflection devices]],
+	desc = [[Handheld deflection devices.]],
 	require = { talent = { {Talents.T_ARMOUR_TRAINING,2} }, },
 	randart_able = "/data/general/objects/random-artifacts/shields.lua",
 	special_combat = { talented="shield", accuracy_effect="staff", damrange = 1.2 },
diff --git a/game/modules/tome/data/general/objects/slings.lua b/game/modules/tome/data/general/objects/slings.lua
index 53405ff96e2cce29b59d31038f608b2abf4a9969..c059231833b72f7294117e8aa12710157f3a956d 100644
--- a/game/modules/tome/data/general/objects/slings.lua
+++ b/game/modules/tome/data/general/objects/slings.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/special-artifacts.lua b/game/modules/tome/data/general/objects/special-artifacts.lua
index 5b50754120574d2ca0db7988fbb6709eb6fa6406..2505610f3e74d114aaf59cf5c5c600dae1cbf539 100644
--- a/game/modules/tome/data/general/objects/special-artifacts.lua
+++ b/game/modules/tome/data/general/objects/special-artifacts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -33,7 +33,7 @@ newEntity{ base = "BASE_STAFF", define_as = "TELOS_SPIRE",
 	level_range = {37, 50},
 	color=colors.VIOLET,
 	rarity = false,
-	desc = [[Telos was an extremely powerful mage during the Age of Dusk, hated by his peers, feared by the common folk he was hunted for a long while. He finally fell in his place of power, Telmur, but his spirit still lingered on.]],
+	desc = [[Telos was an extremely powerful mage during the Age of Dusk, hated by his peers and feared by the common folk; he was hunted for a long while. He finally fell from his place of power, Telmur, but his spirit still lingers.]],
 	cost = 400,
 	material_level = 5,
 	plot = true,
diff --git a/game/modules/tome/data/general/objects/staves.lua b/game/modules/tome/data/general/objects/staves.lua
index f6b76069a6190ccfeb83288759325151723db74f..51671a686f009ea973363fb35e08cbfabd5a1479 100644
--- a/game/modules/tome/data/general/objects/staves.lua
+++ b/game/modules/tome/data/general/objects/staves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -52,7 +52,7 @@ newEntity{ base = "BASE_STAFF",
 		dam = 10,
 		apr = 2,
 		physcrit = 2.5,
-		dammod = {mag=1},
+		dammod = {mag=0.8},
 	},
 	wielder = resolvers.staff_wielder(),
 }
@@ -67,7 +67,7 @@ newEntity{ base = "BASE_STAFF",
 		dam = 15,
 		apr = 3,
 		physcrit = 3,
-		dammod = {mag=1},
+		dammod = {mag=0.8},
 	},
 	wielder = resolvers.staff_wielder(),
 }
@@ -82,7 +82,7 @@ newEntity{ base = "BASE_STAFF",
 		dam = 20,
 		apr = 4,
 		physcrit = 3.5,
-		dammod = {mag=1},
+		dammod = {mag=0.8},
 	},
 	wielder = resolvers.staff_wielder(),
 }
@@ -97,7 +97,7 @@ newEntity{ base = "BASE_STAFF",
 		dam = 25,
 		apr = 5,
 		physcrit = 4.5,
-		dammod = {mag=1},
+		dammod = {mag=0.8},
 	},
 	wielder = resolvers.staff_wielder(),
 }
@@ -112,7 +112,7 @@ newEntity{ base = "BASE_STAFF",
 		dam = 30,
 		apr = 6,
 		physcrit = 5,
-		dammod = {mag=1},
+		dammod = {mag=0.8},
 	},
 	wielder = resolvers.staff_wielder(),
 }
diff --git a/game/modules/tome/data/general/objects/swords.lua b/game/modules/tome/data/general/objects/swords.lua
index 735f93cac497d8c5194d811155d3d69a9b2159d8..83ff78e73f8638f2c091497e8db928ff3f194612 100644
--- a/game/modules/tome/data/general/objects/swords.lua
+++ b/game/modules/tome/data/general/objects/swords.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/torques.lua b/game/modules/tome/data/general/objects/torques.lua
index 82458dd60a238187c89b66551d0f68feb4d3e86b..634cda40c561c963d0f09f086cf2946b4fc504f9 100644
--- a/game/modules/tome/data/general/objects/torques.lua
+++ b/game/modules/tome/data/general/objects/torques.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/totems.lua b/game/modules/tome/data/general/objects/totems.lua
index 8250b890b05189cba3a440ae8affa0aed69ca26a..88967bfbe5223c6221e6690ab2a09767253cb04f 100644
--- a/game/modules/tome/data/general/objects/totems.lua
+++ b/game/modules/tome/data/general/objects/totems.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/wands.lua b/game/modules/tome/data/general/objects/wands.lua
index ccb705e29849fb93529efb38ff8eb779f4147d55..28ab2fafc44c9724364d22aee59c93bc5a837ebf 100644
--- a/game/modules/tome/data/general/objects/wands.lua
+++ b/game/modules/tome/data/general/objects/wands.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/whips.lua b/game/modules/tome/data/general/objects/whips.lua
index 3004bd4a295a1844ccc3de68b9712e669b8450f4..c50ad2cc305589a75ecb3c4c20bd0f9f75b16511 100644
--- a/game/modules/tome/data/general/objects/whips.lua
+++ b/game/modules/tome/data/general/objects/whips.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/wizard-hat.lua b/game/modules/tome/data/general/objects/wizard-hat.lua
index 576053d335f107c74bbe55a51a2c931050b815ee..407eb9eca9ba6142d0c08f21bcd92c89d6bf8a5d 100644
--- a/game/modules/tome/data/general/objects/wizard-hat.lua
+++ b/game/modules/tome/data/general/objects/wizard-hat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/objects/world-artifacts-far-east.lua b/game/modules/tome/data/general/objects/world-artifacts-far-east.lua
index 70733cf26b46581a76ae1dbc9e6cc73809747eed..5664eb9e2b546a709370dc7d738c5f0a669671e1 100644
--- a/game/modules/tome/data/general/objects/world-artifacts-far-east.lua
+++ b/game/modules/tome/data/general/objects/world-artifacts-far-east.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -159,7 +159,7 @@ newEntity{ base = "BASE_GEM",
 	power_source = {arcane=true},
 	unique = true,
 	unided_name = "unearthly black stone",
-	name = "Goedalath Rock", subtype = "black", image = "object/artifact/goedalath_rock.png",
+	name = "Goedalath Rock", subtype = "demonic", image = "object/artifact/goedalath_rock.png",
 	color = colors.PURPLE,
 	level_range = {42, 50},
 	desc = [[A small rock that seems from beyond this world, vibrating with a fierce energy.  It feels warped and terrible and evil... and yet oh so powerful.]],
@@ -228,9 +228,9 @@ newEntity{ base = "BASE_LONGSWORD", define_as = "BLOODEDGE",
 	unique = true,
 	name = "Blood-Edge", image = "object/artifact/sword_blood_edge.png",
 	unided_name = "red crystalline sword",
-	level_range = {35, 42},
+	level_range = {36, 48},
 	color=colors.RED,
-	rarity = 270,
+	rarity = 260,
 	desc = [[This deep red sword weeps blood continuously. It was born in the labs of the orcish corrupter Hurik, who sought to make a crystal that would house his soul after death. But his plans were disrupted by a band of sun paladins, and though most died purging his keep of dread minions, their leader Raasul fought through to Hurik's lab, sword in hand. There the two did battle, blade against blood magic, till both fell to the floor with weeping wounds. The orc with his last strength crawled towards his fashioned phylactery, hoping to save himself, but Raasul saw his plans and struck the crystal with his light-bathed sword. It shattered, and in the sudden impulse of energies the steel, crystal and blood were fused into one.
 Now the broken fragments of Raasul's soul are trapped in this terrible artifact, his mind warped beyond all sanity by decades of imprisonment. Only the taste of blood calls him forth, his soul stealing the lifeblood of others to take on physical form again, that he may thrash and wail against the living.]],
 	cost = 1000,
@@ -248,15 +248,15 @@ Now the broken fragments of Raasul's soul are trapped in this terrible artifact,
 		max_vim = 25,
 	},
 
-	max_power = 28, power_regen = 1,
-	use_talent = { id = Talents.T_BLEEDING_EDGE, level = 4, power = 28 },
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_BLEEDING_EDGE, level = 4, power = 20 },
 	combat = {
-		dam = 44,
-		apr = 4,
-		physcrit = 5,
-		dammod = {str=0.55, mag=0.5},
+		dam = 46,
+		apr = 7,
+		physcrit = 6,
+		dammod = {str=1, mag=0.1},
 		convert_damage = {[DamageType.BLIGHT] = 50},
-
+		lifesteal=5,
 		special_on_hit = {desc="15% chance to animate a bleeding foe's blood", fct=function(combat, who, target)
 			if not rng.percent(15) then return end
 			local cut = false
@@ -280,7 +280,7 @@ Now the broken fragments of Raasul's soul are trapped in this terrible artifact,
 				type = "undead", subtype = "blood",
 				display = "L",
 				name = "animated blood", color=colors.RED,
-				resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_lich_blood_lich.png", display_h=1, display_y=0}}},
+				resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_horror_animated_blood.png", display_h=1, display_y=0}}},
 				desc = "A haze of blood, vibrant and pulsing through the air, possessed by a warped and cracked soul. Every now and then a scream or wail of agony garbles through it, telling of the mindless suffering undergone by its possessor.",
 				body = { INVEN = 10, MAINHAND=1, OFFHAND=1, },
 				rank = 3,
diff --git a/game/modules/tome/data/general/objects/world-artifacts-maj-eyal.lua b/game/modules/tome/data/general/objects/world-artifacts-maj-eyal.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a4e9b7719499d866bc43f6d174fc43ff393e0d8e
--- /dev/null
+++ b/game/modules/tome/data/general/objects/world-artifacts-maj-eyal.lua
@@ -0,0 +1,1118 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+local Stats = require "engine.interface.ActorStats"
+local Talents = require "engine.interface.ActorTalents"
+
+newEntity{ base = "BASE_STAFF",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Penitence",
+	flavor_name = "starstaff",
+	unided_name = "glowing staff", image = "object/artifact/staff_penitence.png",
+	level_range = {10, 18},
+	color=colors.VIOLET,
+	rarity = 200,
+	desc = [[A powerful staff sent in secret to Angolwen by the Shaloren, to aid their fighting of the plagues following the Spellblaze.]],
+	cost = 200,
+	material_level = 2,
+
+	require = { stat = { mag=24 }, },
+	combat = {
+		--sentient = "penitent", -- commented out for now...  how many sentient staves do we need?
+		dam = 15,
+		apr = 4,
+		dammod = {mag=1.2},
+		damtype = DamageType.NATURE, -- Note this is odd for a staff; it's intentional and it's also why the damage type can't be changed.  Blight on this staff would be sad :(
+	},
+	wielder = {
+		combat_spellpower = 15,
+		combat_spellcrit = 10,
+		resists = {
+			[DamageType.BLIGHT] = 30,
+		},
+		damage_affinity={
+			[DamageType.NATURE] = 20,
+		},
+	},
+	max_power = 60, power_regen = 1,
+	use_power = { name = "cure diseases and poisons", power = 10,
+		use = function(self, who)
+			local target = who
+			local effs = {}
+			local known = false
+
+			-- Go through all spell effects
+			for eff_id, p in pairs(target.tmp) do
+				local e = target.tempeffect_def[eff_id]
+				if e.subtype.disease or e.subtype.poison then
+					effs[#effs+1] = {"effect", eff_id}
+				end
+			end
+
+			for i = 1, 3 + math.floor(who:getMag() / 10) do
+				if #effs == 0 then break end
+				local eff = rng.tableRemove(effs)
+
+				if eff[1] == "effect" then
+					target:removeEffect(eff[2])
+					known = true
+				end
+			end
+			game.logSeen(who, "%s is cured of diseases and poisons!", who.name:capitalize())
+			return {id=true, used=true}
+		end
+	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.subrace == "Shalore" then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+
+			self:specialWearAdd({"wielder","resists"}, { [engine.DamageType.BLIGHT] = 10})
+			self:specialWearAdd({"wielder","disease_immune"}, 0.5)
+			game.logPlayer(who, "#DARK_GREEN#You feel the cleansing power of Penitence attune to you.")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_STAFF",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Lost Staff of Archmage Tarelion", image = "object/artifact/staff_lost_staff_archmage_tarelion.png",
+	unided_name = "shining staff",
+	flavor_name = "magestaff",
+	level_range = {37, 50},
+	color=colors.VIOLET,
+	rarity = 250,
+	desc = [[Archmage Tarelion travelled the world in his youth. But the world is not a nice place and it seems he had to run fast.]],
+	cost = 400,
+	material_level = 5,
+
+	require = { stat = { mag=48 }, },
+	modes = {"fire", "cold", "lightning", "arcane"},
+	combat = {
+		is_greater = true,
+		dam = 30,
+		apr = 4,
+		dammod = {mag=1.5},
+		damtype = DamageType.ARCANE,
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 7, [Stats.STAT_MAG] = 8 },
+		max_mana = 40,
+		combat_spellpower = 40,
+		combat_spellcrit = 25,
+		inc_damage = { [DamageType.ARCANE] = 30, [DamageType.FIRE] = 30, [DamageType.COLD] = 30, [DamageType.LIGHTNING] = 30,  },
+		silence_immune = 0.4,
+		mana_on_crit = 12,
+		talent_cd_reduction={
+			[Talents.T_ICE_STORM] = 2,
+			[Talents.T_FIREFLASH] = 2,
+			[Talents.T_CHAIN_LIGHTNING] = 2,
+			[Talents.T_ARCANE_VORTEX] = 2,
+		},
+		learn_talent = {[Talents.T_COMMAND_STAFF] = 1,},
+	},
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Spellblaze Echoes", color = colors.DARK_GREY, image = "object/artifact/amulet_spellblaze_echoes.png",
+	unided_name = "deep black amulet",
+	desc = [[This ancient charm still retains a distant echo of the destruction wrought by the Spellblaze]],
+	level_range = {30, 39},
+	rarity = 290,
+	cost = 500,
+	material_level = 4,
+
+	wielder = {
+		combat_armor = 6,
+		combat_def = 6,
+		combat_spellpower = 8,
+		combat_spellcrit = 6,
+		spellsurge_on_crit = 15,
+	},
+	max_power = 60, power_regen = 1,
+	use_power = { name = "unleash a destructive wail", power = 60,
+		use = function(self, who)
+			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
+			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
+			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
+			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
+			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.PHYSICAL, 250 + who:getMag() * 3)
+			game.logSeen(who, "%s uses the %s!", who.name:capitalize(), self:getName())
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {technique=true},
+	unique = true,
+	name = "Daneth's Neckguard", color = colors.STEEL_BLUE, image = "object/artifact/daneths_neckguard.png",
+	unided_name = "a thick steel gorget",
+	desc = [[A thick steel gorget designed to protect its wearer from fatal attacks to the neck.  This particular gorget was worn by the Halfling General Daneth Tendermourn during the pyre wars, and judging by the marks along its surface may have saved the General's life on more than one occasion.]],
+	level_range = {20, 30},
+	rarity = 300,
+	cost = 300,
+	encumber = 2,
+	material_level = 2,
+	wielder = {
+		combat_armor = 10,
+		fatigue = 2,
+		inc_stats = {
+			[Stats.STAT_STR] = 6,
+			[Stats.STAT_CON] = 6,
+		},
+	},
+	max_power = 60, power_regen = 1,
+	use_talent = { id = Talents.T_JUGGERNAUT, level = 2, power = 30 },
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.race == "Halfling" then
+			local Talents = require "engine.interface.ActorStats"
+
+			self:specialWearAdd({"wielder", "talents_types_mastery"}, { ["technique/battle-tactics"] = 0.2 })
+			self:specialWearAdd({"wielder","combat_armor"}, 5)
+			self:specialWearAdd({"wielder","combat_crit_reduction"}, 10)
+			game.logPlayer(who, "#LIGHT_BLUE#You feel invincible!")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_LONGBOW",
+	power_source = {nature=true},
+	name = "Thaloren-Tree Longbow", unided_name = "glowing elven-wood longbow", unique=true, image = "object/artifact/thaloren_tree_longbow.png",
+	desc = [[In the aftermath of the Spellblaze, the Thaloren had to defend their forests against foes and fires alike. Many of the trees died despite the efforts of the Elves to save them. Their wood was fashioned into a bow to be wielded against the darkness.]],
+	level_range = {40, 50},
+	rarity = 200,
+	require = { stat = { dex=36 }, },
+	cost = 800,
+	material_level = 5,
+	combat = {
+		range = 10,
+		physspeed = 0.7,
+		apr = 12,
+	},
+	wielder = {
+		inc_damage={ [DamageType.PHYSICAL] = 12, },
+		lite = 1,
+		inc_stats = { [Stats.STAT_DEX] = 5, [Stats.STAT_WIL] = 4,  },
+		ranged_project={[DamageType.LIGHT] = 30},
+	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.subrace == "Thalore" then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+
+			self:specialWearAdd({"wielder","resists"}, { [engine.DamageType.DARKNESS] = 20, [DamageType.NATURE] = 20,} )
+			self:specialWearAdd({"wielder","combat_def"}, 12)
+			game.logPlayer(who, "#DARK_GREEN#You understand this bow-and its connection to nature-in a way few can.")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_LONGBOW",
+	power_source = {arcane=true, nature=true},
+	name = "Corpsebow", unided_name = "rotting longbow", unique=true, image = "object/artifact/bow_corpsebow.png",
+	desc = [[A lost artifact of the Age of Dusk, the Corpsebow is filled with a lingering essence of that era's terrible plagues. Those struck by arrows fired from its rotten string find themselves afflicted by echoes of ancient sickness.]],
+	level_range = {10, 20},
+	rarity = 200,
+	require = { stat = { dex=16 }, },
+	cost = 50,
+	material_level = 2,
+	combat = {
+		range = 7,
+		physspeed = 0.8,
+	},
+	wielder = {
+		disease_immune = 0.5,
+		ranged_project = {[DamageType.CORRUPTED_BLOOD] = 15},
+		inc_damage={ [DamageType.BLIGHT] = 10, },
+		talent_cd_reduction={
+			[Talents.T_CYST_BURST] = 2,
+		},
+	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.race == "Undead" then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+
+			self:specialWearAdd({"combat","ranged_project"}, {[DamageType.DRAINLIFE]=20})
+			game.logPlayer(who, "#DARK_BLUE#You feel a kindred spirit in this bow...")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_LONGSWORD",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Spellblade", image = "object/artifact/weapon_spellblade.png",
+	unided_name = "glowing long sword",
+	level_range = {40, 45},
+	color=colors.AQUAMARINE,
+	rarity = 250,
+	desc = [[Mages sometimes have funny ideas. Archmage Varil once learned how to handle a sword and found he preferred wielding it instead of his staff.]],
+	on_id_lore = "spellblade",
+	cost = 1000,
+
+	require = { stat = { mag=28, str=28, dex=28 }, },
+	material_level = 5,
+	combat = {
+		dam = 50,
+		apr = 2,
+		physcrit = 5,
+		dammod = {str=1},
+	},
+	wielder = {
+		lite = 1,
+		combat_spellpower = 20,
+		combat_spellcrit = 9,
+		inc_damage={
+			[DamageType.PHYSICAL] = 18,
+			[DamageType.FIRE] = 18,
+			[DamageType.LIGHT] = 18,
+		},
+		inc_stats = { [Stats.STAT_MAG] = 4, [Stats.STAT_STR] = 4, },
+	},
+}
+
+newEntity{ base = "BASE_GREATSWORD",
+	power_source = {nature=true, technique=true},
+	unique = true,
+	name = "Genocide",
+	unided_name = "pitch black blade", image = "object/artifact/weapon_sword_genocide.png",
+	level_range = {25, 35},
+	color=colors.GRAY,
+	rarity = 300,
+	desc = [[Farian was King Toknor's captain, and fought by his side in the great Battle of Last Hope.  However, when he returned after the battle to find his hometown burnt in an orcish pyre, a madness overtook him.  The desire for vengeance made him quit the army and strike out on his own, lightly armoured and carrying nought but his sword.  Most thought him dead until the reports came back of a fell figure tearing through the orcish encampments, slaughtering all before him and mercilessly butchering the corpses after.  It is said his blade drank the blood of 100 orcs each day until finally all of Maj'Eyal was cleared of their presence.  When the final orc was slain and no more were to be found, Farian at the last turned the blade on himself and stuck it through his chest.  Those nearby said his body shook with convulsions as he did so, though they could not tell whether he was laughing or crying.]],
+	cost = 400,
+	require = { stat = { str=40, wil=20 }, },
+	material_level = 3,
+	combat = {
+		dam = 42,
+		apr = 4,
+		physcrit = 18,
+		dammod = {str=1.2},
+	},
+	wielder = {
+		stamina_regen = 1,
+		life_regen = 0.5,
+		inc_stats = { [Stats.STAT_STR] = 7, [Stats.STAT_DEX] = 7 },
+		esp = {["humanoid/orc"]=1},
+	},
+}
+
+newEntity{ base = "BASE_STAFF",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Bolbum's Big Knocker", image = "object/artifact/staff_bolbums_big_knocker.png",
+	unided_name = "thick staff",
+	level_range = {20, 35},
+	color=colors.UMBER,
+	rarity = 220,
+	desc = [[A thick staff with a heavy knob on the end.  It was said to be used by the grand alchemist Bolbum in the Age of Allure.  Much renowned is the fear of his students for their master, and the high rate of cranial injuries amongst them.  Bolbum died with seven daggers in his back and his much-cursed staff went missing after.]],
+	cost = 300,
+	material_level = 3,
+
+	require = { stat = { mag=38 }, },
+	combat = {
+		dam = 64,
+		apr = 10,
+		dammod = {mag=1.4},
+		damtype = DamageType.PHYSICAL,
+		melee_project={[DamageType.RANDOM_CONFUSION] = 10},
+	},
+	wielder = {
+		combat_atk = 7,
+		combat_spellpower = 12,
+		combat_spellcrit = 18,
+		inc_damage={
+			[DamageType.PHYSICAL] = 20,
+		},
+		talents_types_mastery = {
+			["spell/staff-combat"] = 0.2,
+		}
+	},
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_CHANNEL_STAFF, level = 2, power = 9 },
+}
+
+newEntity{ base = "BASE_LITE",
+	power_source = {nature=true, antimagic=true},
+	unique = true,
+	name = "Guidance", image = "object/artifact/guidance.png",
+	unided_name = "a softly glowing crystal",
+	level_range = {38, 50},
+	color = colors.YELLOW,
+	encumber = 1,
+	rarity = 300,
+	desc = [[Said to have once belonged to Inquisitor Marcus Dunn during the Spellhunt this fist sized quartz crystal glows constantly with a soft white light and was rumoured to be a great aid in meditation, helping focus the mind, body, and soul of the owner as well as protecting them from the foulest of magics.
+It seems somebody well versed in antimagic could use it to its fullest potential.]],
+	cost = 100,
+	material_level = 5,
+
+	wielder = {
+		lite = 4,
+		inc_stats = { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 6,},
+		combat_physresist = 6,
+		combat_mentalresist = 6,
+		combat_spellresist = 6,
+		talents_types_mastery = { ["wild-gift/call"] = 0.2, ["wild-gift/antimagic"] = 0.1, },
+		resists_cap = { [DamageType.BLIGHT] = 10, },
+		resists = { [DamageType.BLIGHT] = 20, },
+	},
+	on_wear = function(self, who)
+		if who:attr("forbid_arcane") then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+
+			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 6, })
+			self:specialWearAdd({"wielder","combat_physresist"}, 6)
+			self:specialWearAdd({"wielder","combat_spellresist"}, 6)
+			self:specialWearAdd({"wielder","combat_mentalresist"}, 6)
+			game.logPlayer(who, "#LIGHT_BLUE#You feel a great hero guiding you!")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_SLING",
+	power_source = {technique=true},
+	unique = true,
+	name = "Eldoral Last Resort", image = "object/artifact/sling_eldoral_last_resort.png",
+	unided_name = "well-made sling",
+	desc = [[A sling with an inscription on its handle: 'May the wielder be granted cunning in his fight against the darkness'.]],
+	level_range = {15, 25},
+	rarity = 200,
+	require = { stat = { dex=26 }, },
+	cost = 350,
+	material_level = 3,
+	combat = {
+		range = 10,
+		physspeed = 0.7,
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_DEX] = 4, [Stats.STAT_CUN] = 3,  },
+		inc_damage={ [DamageType.PHYSICAL] = 15 },
+		talent_cd_reduction={[Talents.T_STEADY_SHOT]=1, [Talents.T_EYE_SHOT]=2},
+	},
+}
+
+newEntity{ base = "BASE_KNIFE",
+	power_source = {technique=true},
+	unique = true,
+	name = "Orc Feller", image = "object/artifact/dagger_orc_feller.png",
+	unided_name = "shining dagger",
+	desc = [[During the invasion of Eldoral the Halfling Rogue Herah is said to have slain over one hundred orcs while defending a group of refugees.]],
+	level_range = {40, 50},
+	rarity = 300,
+	require = { stat = { dex=44 }, },
+	cost = 550,
+	material_level = 5,
+	combat = {
+		dam = 45,
+		apr = 11,
+		physcrit = 18,
+		dammod = {dex=0.55,str=0.35},
+	},
+	wielder = {
+		lite = 1,
+		inc_damage={
+			[DamageType.PHYSICAL] = 10,
+			[DamageType.LIGHT] = 8,
+		},
+		pin_immune = 0.5,
+		inc_stats = { [Stats.STAT_DEX] = 5, [Stats.STAT_CUN] = 4, },
+		esp = {["humanoid/orc"]=1},
+	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.race == "Halfling" then
+			local Stats = require "engine.interface.ActorStats"
+
+			self:specialWearAdd({"wielder","inc_stats"}, {  [Stats.STAT_CUN] = 6, [Stats.STAT_LCK] = 25, })
+			game.logPlayer(who, "#LIGHT_BLUE#Herah's guile and luck is with you, her successor!")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_MACE",
+	power_source = {nature=true, antimagic=true},
+	unique = true,
+	name = "Nature's Vengeance", color = colors.BROWN, image = "object/artifact/mace_natures_vengeance.png",
+	unided_name = "thick wooden mace",
+	desc = [[This thick-set mace was used by the Spellhunter Vorlan, who crafted it from the wood of an ancient oak that was uprooted during the Spellblaze.  Many were the wizards and witches felled by this weapon, brought to justice for the crimes they committed against nature.]],
+	level_range = {20, 34},
+	rarity = 340,
+	require = { stat = { str=42 } },
+	cost = 350,
+	material_level = 3,
+	combat = {
+		dam = 40,
+		apr = 4,
+		physcrit = 9,
+		dammod = {str=1},
+		melee_project={[DamageType.RANDOM_SILENCE] = 10, [DamageType.NATURE] = 18},
+	},
+	wielder = {combat_atk=6},
+
+	max_power = 25, power_regen = 1,
+	use_talent = { id = Talents.T_RUSH, level = 3, power = 15 },
+	on_wear = function(self, who)
+		if who:attr("forbid_arcane") then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+
+			self:specialWearAdd({"wielder","resists"}, { all = 4 })
+
+			game.logPlayer(who, "#LIGHT_BLUE#You feel nature defending you.")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_GAUNTLETS",
+	power_source = {psionic=true, technique=true},
+	define_as = "GAUNTLETS_SCORPION",
+	unique = true,
+	name = "Fists of the Desert Scorpion", color = colors.STEEL_BLUE, image = "object/artifact/scorpion_gauntlets.png",
+	unided_name = "viciously spiked gauntlets",
+	desc = [[These wickedly spiked gauntlets belonged to an orc captain in the Age of Pyre who conquered the western sands, using them as a base to lay raids on Elvala to the south.  Known as The Scorpion, he seemed unconquerable in battle, able to pull enemies towards him with vicious mental force and lay down lethal blows on them.  Often a flurry of these yellow and black gauntlets would be the last thing great Shaloren mages would see before having the life crushed from them.
+
+Finally The Scorpion was defeated by the alchemist Nessylia, who went to face the fiendish orc alone.  The captain pulled the elf towards him with a brutish cackle, but before he could batter the life from her flesh she tore off her robes, revealing eighty incendiary bombs strapped to her flesh.  With a spark from her fingers she triggered an explosion that could be seen for miles around.  To this day Nessylia is still remembered in song for the sacrifice of her immortal life to protect her people.]],
+	level_range = {20, 40},
+	rarity = 300,
+	cost = 1000,
+	material_level = 3,
+	wielder = {
+		inc_stats = { [Stats.STAT_STR] = 3, [Stats.STAT_WIL] = 3, [Stats.STAT_CUN] = 3, },
+		inc_damage = { [DamageType.PHYSICAL] = 8 },
+		combat_mindpower=3,
+		combat_armor = 4,
+		combat_def = 8,
+		disarm_immune = 0.4,
+		talents_types_mastery = { ["psionic/grip"] = 0.2, ["technique/grappling"] = 0.2},
+		combat = {
+			dam = 24,
+			apr = 10,
+			physcrit = 10,
+			physspeed = 0.15,
+			dammod = {dex=0.4, str=-0.6, cun=0.4,},
+			damrange = 0.3,
+			talent_on_hit = { T_BITE_POISON = {level=3, chance=20}, T_PERFECT_CONTROL = {level=1, chance=5}, T_QUICK_AS_THOUGHT = {level=3, chance=5}, T_IMPLODE = {level=1, chance=5} },
+		},
+	},
+	max_power = 24, power_regen = 1,
+	use_talent = { id = Talents.T_MINDHOOK, level = 4, power = 16 },
+}
+
+newEntity{ base = "BASE_CLOAK",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Wind's Whisper", image="object/artifact/cloak_winds_whisper.png",
+	unided_name = "flowing light cloak",
+	desc = [[When the enchanter Razeen was cornered by Spellhunters near the Daikara mountain pass she wrapped her cloak about her and fled down a narrow ravine.  The hunters fired volley after volley of arrows at her, but by miracle or magic they all missed.  Razeen was able to escape and flee to the hidden city in the west.]],
+	level_range = {15, 25},
+	rarity = 400,
+	cost = 250,
+	material_level = 3,
+	wielder = {
+		inc_stats = { [Stats.STAT_DEX] = 3, },
+		combat_def = 4,
+		combat_ranged_def = 12,
+		silence_immune = 0.3,
+		slow_projectiles = 20,
+		projectile_evasion = 25,
+	},
+	max_power = 50, power_regen = 1,
+	use_talent = { id = Talents.T_EVASION, level = 2, power = 50 },
+}
+
+newEntity{ base = "BASE_ROD",
+	power_source = {arcane=true},
+	unided_name = "glowing rod",
+	name = "Gwai's Burninator", color=colors.LIGHT_RED, unique=true, image = "object/artifact/wand_gwais_burninator.png",
+	desc = [[Gwai, a Pyromanceress that lived during the Spellhunt, was cornered by group of mage hunters. She fought to her last breath and is said to have killed at least ten people with this wand before she fell.]],
+	cost = 600,
+	rarity = 220,
+	level_range = {25, 35},
+	elec_proof = true,
+	add_name = false,
+
+	material_level = 3,
+
+	max_power = 75, power_regen = 1,
+	use_power = { name = "shoot a cone of fire", power = 50,
+		use = function(self, who)
+			local tg = {type="cone", range=0, radius=5}
+			local x, y = who:getTarget(tg)
+			if not x or not y then return nil end
+			who:project(tg, x, y, engine.DamageType.FIRE, 300 + who:getMag() * 2, {type="flame"})
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_BATTLEAXE",
+	power_source = {technique=true},
+	unique = true,
+	unided_name = "viciously sharp battle axe",
+	name = "Drake's Bane", image = "object/artifact/axe_drakes_bane.png",
+	color = colors.RED,
+	desc = [[The killing of Kroltar, mightiest of wyrms, took seven months and the lives of 20,000 dwarven warriors.  Finally the beast was worn down and mastersmith Gruxim, standing atop the bodies of his fallen comrades, was able slit its throat with this axe crafted purely for the purpose of penetrating the wyrm's hide.]],
+	require = { stat = { str=45 }, },
+	rarity = 300,
+	cost = 400,
+	level_range = {20, 35},
+	material_level = 3,
+	combat = {
+		dam = 52,
+		apr = 21,
+		physcrit = 2,
+		dammod = {str=1.2},
+		inc_damage_type = {dragon=25},
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_STR] = 6, },
+		stun_immune = 0.2,
+		knockback_immune = 0.4,
+		combat_physresist = 9,
+	},
+}
+
+newEntity{ base = "BASE_WARAXE",
+	power_source = {technique=true, nature=true},
+	unique = true,
+	name = "Blood-Letter", image = "object/artifact/weapon_axe_blood_letter.png",
+	unided_name = "glacial hatchet",
+	desc = [[A hand axe carved out of the most frozen parts of the northern wasteland.]],
+	level_range = {25, 35},
+	rarity = 235,
+	require = { stat = { str=40, dex=24 }, },
+	cost = 330,
+	metallic = false,
+	material_level = 3,
+	wielder = {
+		combat_armor = 20,
+		resists_pen = {
+			[DamageType.COLD] = 20,
+		},
+		iceblock_pierce=25,
+	},
+	combat = {
+		dam = 33,
+		apr = 4.5,
+		physcrit = 7,
+		dammod = {str=1},
+		convert_damage = {
+			[DamageType.ICE] = 50,
+		},
+		talent_on_hit = { [Talents.T_ICE_BREATH] = {level=2, chance=15} },
+	},
+}
+
+newEntity{ base = "BASE_GEM", define_as = "GEM_TELOS",
+	power_source = {arcane=true},
+	unique = true,
+	unided_name = "scintillating white crystal",
+	name = "Telos's Staff Crystal", subtype = "multi-hued", image = "object/artifact/telos_staff_crystal.png",
+	color = colors.WHITE,
+	level_range = {35, 45},
+	desc = [[A closer look at this pure white crystal reveals that it is really a plethora of colors swirling and scintillating.]],
+	rarity = 240,
+	identified = false,
+	cost = 200,
+	material_level = 5,
+	carrier = {
+		lite = 2,
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_DEX] = 5, [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 5, [Stats.STAT_CON] = 5, },
+		lite = 2,
+		confusion_immune = 0.3,
+		fear_immune = 0.3,
+		resists={[DamageType.MIND] = 30,},
+	},
+	imbue_powers = {
+		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_DEX] = 5, [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 5, [Stats.STAT_CON] = 5, },
+		lite = 2,
+		confusion_immune = 0.3,
+		fear_immune = 0.3,
+		resists={[DamageType.MIND] = 30,},
+	},
+
+	max_power = 1, power_regen = 1,
+	use_power = { name = "combine with a staff", power = 1, use = function(self, who, gem_inven, gem_item)
+		who:showInventory("Fuse with which staff?", who:getInven("INVEN"), function(o) return o.type == "weapon" and o.subtype == "staff" and not o.egoed and not o.unique end, function(o, item)
+			local voice = game.zone:makeEntityByName(game.level, "object", "VOICE_TELOS")
+			if voice then
+				local oldname = o:getName{do_color=true}
+
+				-- Remove the gem
+				who:removeObject(gem_inven, gem_item)
+				who:sortInven(gem_inven)
+
+				-- Change the staff
+				voice.modes = o.modes
+				voice.flavor_name = o.flavor_name
+				voice.combat = o.combat
+				voice.combat.dam = math.floor(voice.combat.dam * 1.4)
+				voice.combat.sentient = "telos"
+				voice.wielder.inc_damage[voice.combat.damtype] = voice.combat.dam
+				voice:identify(true)
+				o:replaceWith(voice)
+				who:sortInven()
+
+				who.changed = true
+				game.logPlayer(who, "You fix the crystal on the %s and create the %s.", oldname, o:getName{do_color=true})
+			else
+				game.logPlayer(who, "The fusing fails!")
+			end
+		end)
+		return {id=true, used=true}
+	end },
+}
+
+-- The staff that goes with the crystal above, it will not be generated randomly it is created by the crystal
+newEntity{ base = "BASE_STAFF", define_as = "VOICE_TELOS",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Voice of Telos",
+	unided_name = "scintillating white staff", image="object/artifact/staff_voice_of_telos.png",
+	color = colors.VIOLET,
+	rarity = false,
+	desc = [[A closer look at this pure white staff reveals that it is really a plethora of colors swirling and scintillating.]],
+	cost = 500,
+	material_level = 5,
+
+	require = { stat = { mag=45 }, },
+	-- This is replaced by the creation process
+	combat = { dam = 1, damtype = DamageType.ARCANE, },
+	wielder = {
+		combat_spellpower = 30,
+		combat_spellcrit = 15,
+		max_mana = 100,
+		inc_stats = { [Stats.STAT_MAG] = 6, [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 4 },
+		lite = 1,
+		inc_damage = {},
+		damage_affinity = { [DamageType.ARCANE] = 5, [DamageType.BLIGHT] = 5, [DamageType.COLD] = 5, [DamageType.DARKNESS] = 5, [DamageType.ACID] = 5, [DamageType.LIGHT] = 5, [DamageType.LIGHTNING] = 5, [DamageType.FIRE] = 5, },
+		learn_talent = {[Talents.T_COMMAND_STAFF] = 1},
+	},
+}
+
+newEntity{ base = "BASE_LEATHER_BELT",
+	power_source = {nature=true},
+	unique = true,
+	name = "Rope Belt of the Thaloren", image = "object/artifact/rope_belt_of_the_thaloren.png",
+	unided_name = "short length of rope",
+	desc = [[The simplest of belts, worn for centuries by Nessilla Tantaelen as she tended to her people and forests. Some of her wisdom and power have settled permanently into its fibers.]],
+	color = colors.LIGHT_RED,
+	level_range = {20, 30},
+	rarity = 200,
+	cost = 450,
+	material_level = 2,
+	wielder = {
+		inc_stats = { [Stats.STAT_CUN] = 7, [Stats.STAT_WIL] = 8, },
+		combat_mindpower = 12,
+		talents_types_mastery = { ["wild-gift/harmony"] = 0.2 },
+	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.subrace == "Thalore" then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+
+			self:specialWearAdd({"wielder","resists"}, { [engine.DamageType.MIND] = 20,} )
+			self:specialWearAdd({"wielder","combat_mentalresist"}, 15)
+			game.logPlayer(who, "#DARK_GREEN#Nessilla's belt seems to come alive as you put it on.")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_LEATHER_BELT",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Neira's Memory", image = "object/artifact/neira_memory.png",
+	unided_name = "crackling belt",
+	desc = [[Ages ago this belt was worn by Linaniil herself in her youth, using its power she shielded herself from the Spellblaze rain of fire, but naught could she do for her sister Neira.]],
+	color = colors.GOLD,
+	level_range = {20, 30},
+	rarity = 200,
+	cost = 450,
+	material_level = 3,
+	wielder = {
+		inc_stats = { [Stats.STAT_CUN] = 2, [Stats.STAT_WIL] = 5, },
+		confusion_immune = 0.3,
+		stun_immune = 0.3,
+		mana_on_crit = 3,
+	},
+	max_power = 20, power_regen = 1,
+	use_power = { name = "generate a personal shield", power = 20,
+		use = function(self, who)
+			who:setEffect(who.EFF_DAMAGE_SHIELD, 10, {power=100 + who:getMag(250)})
+			game:playSoundNear(who, "talents/arcane")
+			game.logSeen(who, "%s invokes the memory of Neira!", who.name:capitalize())
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_LIGHT_ARMOR",
+	power_source = {nature=true, antimagic=true},
+	unique = true,
+	name = "Nature's Blessing", image = "object/artifact/armor_natures_blessing.png",
+	unided_name = "supple leather armour entwined with willow bark",
+	desc = [[Worn by Protector Ardon, who first formed the Ziguranth during the mage wars between the Humans and the Halflings.  This armour is infused with the powers of nature, and protected against the disruptive forces of magic.]],
+	color = colors.BROWN,
+	level_range = {15, 30},
+	rarity = 350,
+	require = { stat = { str=20 }, {wil=20} },
+	cost = 350,
+	material_level = 2,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_CON] = 4 },
+
+		combat_armor = 6,
+		combat_def = 8,
+		combat_def_ranged = 4,
+
+		life_regen = 1,
+		fatigue = 8,
+		stun_immune = 0.25,
+		healing_factor = 0.2,
+		combat_spellresist = 18,
+
+		resists = {
+			[DamageType.NATURE] = 20,
+			[DamageType.ARCANE] = 25,
+		},
+
+		talents_types_mastery = { ["wild-gift/antimagic"] = 0.2},
+	},
+	on_wear = function(self, who)
+		if who:attr("forbid_arcane") then
+			local Stats = require "engine.interface.ActorStats"
+
+			self:specialWearAdd({"wielder","combat_spellresist"}, 20)
+			game.logPlayer(who, "#DARK_GREEN#You feel especially blessed.")
+		end
+	end,
+}
+
+newEntity{ base = "BASE_MASSIVE_ARMOR",
+	power_source = {technique=true},
+	unique = true,
+	name = "Plate Armor of the King", image = "object/artifact/plate_armor_of_the_king.png",
+	unided_name = "suit of gleaming voratun plate",
+	desc = [[Beautifully detailed with images of King Toknor's defence of Last Hope. Despair fills the hearts of even the blackest villains at the sight of it.]],
+	color = colors.WHITE,
+	level_range = {45, 50},
+	rarity = 390,
+	require = { stat = { str=48 }, },
+	cost = 800,
+	material_level = 5,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 9, },
+		resists = {
+			[DamageType.ACID] = 25,
+			[DamageType.ARCANE] = 10,
+			[DamageType.FIRE] = 25,
+			[DamageType.BLIGHT] = 25,
+			[DamageType.DARKNESS] = 25,
+		},
+		max_stamina = 60,
+		combat_def = 15,
+		combat_armor = 20,
+		stun_immune = 0.3,
+		knockback_immune = 0.3,
+		combat_mentalresist = 25,
+		combat_spellresist = 25,
+		combat_physresist = 15,
+		lite = 1,
+		fatigue = 26,
+	},
+}
+
+newEntity{ base = "BASE_LONGSWORD",
+	power_source = {nature=true, antimagic=true},
+	unique = true,
+	name = "Witch-Bane", color = colors.LIGHT_STEEL_BLUE, image = "object/artifact/sword_witch_bane.png",
+	unided_name = "an ivory handled voratun longsword",
+	desc = [[A thin voratun blade with an ivory handle wrapped in purple cloth.  The weapon is nearly as legendary as its former owner, Marcus Dunn, and was thought to have been destroyed after Marcus was slain near the end of the Spellhunt.
+It seems somebody well versed in antimagic could use it to its fullest potential.]],
+	level_range = {38, 50},
+	rarity = 250,
+	require = { stat = { str=48 }, },
+	cost = 650,
+	material_level = 5,
+	combat = {
+		dam = 42,
+		apr = 4,
+		physcrit = 20,
+		dammod = {str=1},
+		melee_project = { [DamageType.MANABURN] = 50 },
+	},
+	wielder = {
+		talent_cd_reduction={
+			[Talents.T_AURA_OF_SILENCE] = 2,
+			[Talents.T_MANA_CLASH] = 2,
+		},
+		resists = {
+			all = 10,
+			[DamageType.PHYSICAL] = - 10,
+		},
+	},
+	on_wear = function(self, who)
+		if who:attr("forbid_arcane") then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+			local Talents = require "engine.interface.ActorTalents"
+
+			self:specialWearAdd({"combat", "talent_on_hit"}, { [Talents.T_MANA_CLASH] = {level=1, chance=25}  })
+			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 6, })
+			game.logPlayer(who, "#LIGHT_BLUE#You feel a great hero watching over you!")
+		end
+	end,
+}
+
+-- Channelers set
+-- Note that this staff can not be channeled.  All of it's flavor is arcane, lets leave it arcane
+newEntity{ base = "BASE_STAFF", define_as = "SET_STAFF_CHANNELERS",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Staff of Arcane Supremacy",
+	unided_name = "silver-runed staff",
+	flavor_name = "magestaff",
+	level_range = {20, 40},
+	color=colors.BLUE, image = "object/artifact/staff_of_arcane_supremacy.png",
+	rarity = 300,
+	desc = [[A long slender staff, made of ancient dragon-bone, with runes emblazoned all over its surface in bright silver.
+It hums faintly, as if great power is locked within, yet alone it seems incomplete.]],
+	cost = 200,
+	material_level = 3,
+	require = { stat = { mag=24 }, },
+	combat = {
+		dam = 20,
+		apr = 4,
+		dammod = {mag=1.5},
+		damtype = DamageType.ARCANE,
+	},
+	wielder = {
+		combat_spellpower = 20,
+		inc_damage={
+			[DamageType.ARCANE] = 20,
+		},
+		talent_cd_reduction = {
+			[Talents.T_MANATHRUST] = 1,
+		},
+		talents_types_mastery = {
+			["spell/arcane"]=0.2,
+		},
+	},
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_ARCANE_SUPREMACY, level = 3, power = 20 },
+	set_list = { {"define_as", "SET_HAT_CHANNELERS"} },
+	on_set_complete = function(self, who)
+		self:specialSetAdd({"wielder","max_mana"}, 100)
+		game.logSeen(who, "#STEEL_BLUE#You feel a swell of arcane energy.")
+	end,
+}
+
+newEntity{ base = "BASE_WIZARD_HAT", define_as = "SET_HAT_CHANNELERS",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Hat of Arcane Understanding",
+	unided_name = "silver-runed hat",
+	desc = [[A traditional pointed wizard's hat, made of fine purple elven-silk and decorated with bright silver runes. You sense it has been passed from ancient times, and has been born on the heads of great mages.
+Touching the cloth you feel a sense of knowledge and power from bygone ages, yet it is partly sealed away, waiting for a trigger to release it.]],
+	color = colors.BLUE, image = "object/artifact/wizard_hat_of_arcane_understanding.png",
+	level_range = {20, 40},
+	rarity = 300,
+	cost = 100,
+	material_level = 3,
+	wielder = {
+		combat_def = 2,
+		mana_regen = 2,
+		resists = {
+			[DamageType.ARCANE] = 20,
+		},
+		talent_cd_reduction = {
+			[Talents.T_DISRUPTION_SHIELD] = 10,
+		},
+		talents_types_mastery = {
+			["spell/meta"]=0.2,
+		},
+	},
+	max_power = 40, power_regen = 1,
+	set_list = { {"define_as", "SET_STAFF_CHANNELERS"} },
+	on_set_complete = function(self, who)
+		local Talents = require "engine.interface.ActorTalents"
+		self.use_talent = { id = Talents.T_METAFLOW, level = 3, power = 40 }
+		game.party:learnLore("channelers-set")
+	end,
+	on_set_broken = function(self, who)
+		self.use_talent = nil
+		game.logPlayer(who, "#STEEL_BLUE#The arcane energies surrounding you dissipate.")
+	end,
+}
+
+newEntity{ base = "BASE_AMULET", --Thanks Grayswandir!
+	power_source = {arcane=true},
+	unique = true,
+	name = "Mirror Shards",
+	unided_name = "mirror lined chain", image = "object/artifact/mirror_shards.png",
+	desc = [[Said to have been created by a powerful mage after his home was destroyed by a mob following the Spellblaze. Though he fled, his possessions were crushed, burned, and smashed. When he returned to the ruins, he made this amulet from the remains of his shattered mirror.]],
+	color = colors.LIGHT_RED,
+	level_range = {18, 30},
+	rarity = 220,
+	cost = 350,
+	material_level = 3,
+	wielder = {
+		inc_damage={
+			[DamageType.LIGHT] = 12,
+		},
+		resists={
+			[DamageType.LIGHT] = 25,
+		},
+		lite=1,
+		on_melee_hit = {[DamageType.RANDOM_BLIND]=10},
+	},
+	max_power = 24, power_regen = 1,
+	use_power = { name = "create a reflective shield (50% reflection rate)", power = 24,
+		use = function(self, who)
+			who:setEffect(who.EFF_DAMAGE_SHIELD, 5, {power=150 + who:getMag(100)*2, reflect=50})
+			game:playSoundNear(who, "talents/arcane")
+			game.logSeen(who, "%s forges a reflective barrier!", who.name:capitalize())
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_CLOAK",
+	power_source = {nature=true},
+	unique = true,
+	name = "Destala's Scales", image = "object/artifact/destalas_scales.png",
+	unided_name = "green dragon-scale cloak",
+	desc = [[This cloak is made from the scales of an infamous Venom Drake that terrorized the country side towards the end of the Age of Dusk. It was slain by a party led by Kestin Highfin, who had this cloak fashioned personally.]],
+	level_range = {20, 30},
+	rarity = 240,
+	cost = 200,
+	material_level = 3,
+	wielder = {
+		combat_def = 10,
+		inc_stats = { [Stats.STAT_CUN] = 6,},
+		inc_damage = { [DamageType.ACID] = 15 },
+		resists_pen = { [DamageType.ACID] = 10 },
+		talents_types_mastery = { ["wild-gift/venom-drake"] = 0.2, },
+		combat_mindpower=6,
+	},
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_DISSOLVE, level = 2, power = 20 },
+	talent_on_wild_gift = { {chance=10, talent=Talents.T_ACIDIC_SPRAY, level=2} },
+}
+
+newEntity{ base = "BASE_KNIFE", -- Thanks Grayswandir!
+	power_source = {arcane=true},
+	unique = true,
+	name = "Spellblaze Shard", image = "object/artifact/spellblaze_shard.png",
+	unided_name = "crystalline dagger",
+	desc = [[This jagged crystal glows with an unnatural light. A strap of cloth is wrapped around one end, as a handle.]],
+	level_range = {12, 25},
+	rarity = 200,
+	require = { stat = { dex=17 }, },
+	cost = 250,
+	metallic = false,
+	material_level = 2,
+	combat = {
+		dam = 20,
+		apr = 10,
+		physcrit = 12,
+		dammod = {dex=0.45,str=0.45,},
+		melee_project={[DamageType.FIREBURN] = 10, [DamageType.BLIGHT] = 10,},
+		lifesteal = 6,
+		burst_on_crit = {
+			[DamageType.CORRUPTED_BLOOD] = 20,
+			[DamageType.FIRE] = 20,
+		},
+	},
+	wielder = {
+		inc_stats = {[Stats.STAT_MAG] = 5,},
+		resists = {[DamageType.BLIGHT] = 10, [DamageType.FIRE] = 10},
+	},
+}
+
+newEntity{ base = "BASE_KNIFE", --Razakai's idea, slightly modified
+	power_source = {psionic=true},
+	unique = true,
+	name = "Mercy", image = "object/artifact/mercy.png",
+	unided_name = "wickedly sharp dagger",
+	desc = [[This dagger was used by a nameless healer during the Age of Dusk. The plagues that ravaged his town were beyond the ability of mortal man to treat, so he took to using his dagger to as an act of mercy when faced with hopeless patients. Despite his good intentions, it is now cursed with dark power, letting it kill in a single stroke against those already weakened.]],
+	level_range = {30, 40},
+	rarity = 250,
+	require = { stat = { dex=42 }, },
+	cost = 500,
+	material_level = 4,
+	combat = {
+		dam = 35,
+		apr = 9,
+		physcrit = 15,
+		dammod = {str=0.45, dex=0.55},
+		special_on_hit = {desc="deals physical damage equal to 3% of the target's missing health", fct=function(combat, who, target)
+			local tg = {type="ball", range=10, radius=0, selffire=false}
+			who:project(tg, target.x, target.y, engine.DamageType.PHYSICAL, (target.max_life - target.life)*0.03)
+		end},
+	},
+	wielder = {
+		inc_stats = {[Stats.STAT_STR] = 6, [Stats.STAT_DEX] = 6,},
+		combat_critical_power = 20,
+	},
+}
+
+newEntity{ base = "BASE_MASSIVE_ARMOR", -- Thanks SageAcrin!
+	power_source = {technique = true, nature = true},
+	unique = true,
+	name = "Thalore-Wood Cuirass", image = "object/artifact/thalore_wood_cuirass.png",
+	unided_name = "thick wooden plate armour",
+	desc = [[Expertly hewn from the bark of trees, this wooden armor provides excellent protection at a low weight.]],
+	color = colors.WHITE,
+	level_range = {8, 22},
+	rarity = 220,
+	require = { stat = { str=24 }, },
+	cost = 300,
+	material_level = 2,
+	encumber = 12,
+	metallic=false,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_DEX] = 3, [Stats.STAT_CON] = 3,},
+		combat_armor = 10,
+		combat_def = 4,
+		fatigue = 14,
+		resists = {
+			[DamageType.DARKNESS] = 18,
+			[DamageType.COLD] = 18,
+			[DamageType.NATURE] = 18,
+		},
+		healing_factor = 0.25,
+	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.subrace == "Thalore" then
+			local Stats = require "engine.interface.ActorStats"
+
+			self:specialWearAdd({"wielder","fatigue"}, -14)
+			game.logPlayer(who, "#DARK_GREEN#The armor molds comfortably to one of its caretakers.")
+		end
+	end,
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua
index 407a034836aeda6bc2dd182c2c45aa52c4ca37bd..7ac5c41d549917b55c621e70018fdbd79978b5cc 100644
--- a/game/modules/tome/data/general/objects/world-artifacts.lua
+++ b/game/modules/tome/data/general/objects/world-artifacts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,6 +27,61 @@ for def, e in pairs(game.state:getWorldArtifacts()) do
 end
 
 -- This file describes artifacts not bound to a special location, they can be found anywhere
+
+newEntity{ base = "BASE_GEM", 
+	power_source = {arcane=true},
+	unique = true,
+	unided_name = "windy gem",
+	name = "Windborne Azurite", subtype = "blue",
+	color = colors.BLUE, image = "object/artifact/windborn_azurite.png",
+	level_range = {18, 40},
+	desc = [[Air currents swirl around this bright blue jewel.]],
+	rarity = 240,
+	cost = 200,
+	identified = false,
+	material_level = 4,
+	wielder = {
+		inc_stats = {[Stats.STAT_DEX] = 8, [Stats.STAT_CUN] = 8 },
+		inc_damage = {[DamageType.LIGHTNING] = 20 },
+		cancel_damage_chance = 8, -- add to tooltip
+		damage_affinity={
+			[DamageType.LIGHTNING] = 20,
+		},
+		movement_speed = 0.2,
+	},
+	imbue_powers = {
+		inc_stats = {[Stats.STAT_DEX] = 8, [Stats.STAT_CUN] = 8 },
+		inc_damage = {[DamageType.LIGHTNING] = 20 },
+		cancel_damage_chance = 8,
+		damage_affinity={
+			[DamageType.LIGHTNING] = 20,
+		},
+		movement_speed = 0.15,
+	},
+}
+
+-- Low base values because you can stack affinity and resist
+-- The 3rd type is pretty meaningless balance-wise.  Magic debuffs hardly matter.  The real advantage is the affinity.
+newEntity{ base = "BASE_INFUSION",
+	name = "Primal Infusion", unique=true, image = "object/artifact/tree_of_life.png",
+	desc = [[This wild infusion has evolved.]],
+	unided_name = "pulsing infusion",
+	level_range = {15, 40},
+	rarity = 300,
+	cost = 300,
+	material_level = 3,
+
+	inscription_kind = "protect",
+	inscription_data = {
+		cooldown = 18,
+		dur = 6,
+		power = 10,
+		use_stat_mod = 0.1, 
+		what = {physical=true, mental=true, magical=true},
+	},
+	inscription_talent = "INFUSION:_PRIMAL",
+}
+
 newEntity{ base = "BASE_STAFF",
 	power_source = {arcane=true},
 	unique = true,
@@ -63,149 +118,6 @@ newEntity{ base = "BASE_STAFF",
 	talent_on_spell = { {chance=10, talent=Talents.T_IMPENDING_DOOM, level=1}},
 }
 
-newEntity{ base = "BASE_STAFF",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Penitence",
-	flavor_name = "starstaff",
-	unided_name = "glowing staff", image = "object/artifact/staff_penitence.png",
-	level_range = {10, 18},
-	color=colors.VIOLET,
-	rarity = 200,
-	desc = [[A powerful staff sent in secret to Angolwen by the Shaloren, to aid their fighting of the plagues following the Spellblaze.]],
-	cost = 200,
-	material_level = 2,
-
-	require = { stat = { mag=24 }, },
-	combat = {
-		--sentient = "penitent", -- commented out for now...  how many sentient staves do we need?
-		dam = 15,
-		apr = 4,
-		dammod = {mag=1.2},
-		damtype = DamageType.NATURE, -- Note this is odd for a staff; it's intentional and it's also why the damage type can't be changed.  Blight on this staff would be sad :(
-	},
-	wielder = {
-		combat_spellpower = 15,
-		combat_spellcrit = 10,
-		resists = {
-			[DamageType.BLIGHT] = 30,
-		},
-		damage_affinity={
-			[DamageType.NATURE] = 20,
-		},
-	},
-	max_power = 60, power_regen = 1,
-	use_power = { name = "cure diseases and poisons", power = 10,
-		use = function(self, who)
-			local target = who
-			local effs = {}
-			local known = false
-
-			-- Go through all spell effects
-			for eff_id, p in pairs(target.tmp) do
-				local e = target.tempeffect_def[eff_id]
-				if e.subtype.disease or e.subtype.poison then
-					effs[#effs+1] = {"effect", eff_id}
-				end
-			end
-
-			for i = 1, 3 + math.floor(who:getMag() / 10) do
-				if #effs == 0 then break end
-				local eff = rng.tableRemove(effs)
-
-				if eff[1] == "effect" then
-					target:removeEffect(eff[2])
-					known = true
-				end
-			end
-			game.logSeen(who, "%s is cured of diseases and poisons!", who.name:capitalize())
-			return {id=true, used=true}
-		end
-	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.subrace == "Shalore" then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-
-			self:specialWearAdd({"wielder","resists"}, { [engine.DamageType.BLIGHT] = 10})
-			self:specialWearAdd({"wielder","disease_immune"}, 0.5)
-			game.logPlayer(who, "#DARK_GREEN#You feel the cleansing power of Penitence attune to you.")
-		end
-	end,
-}
-
-newEntity{ base = "BASE_STAFF",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Lost Staff of Archmage Tarelion", image = "object/artifact/staff_lost_staff_archmage_tarelion.png",
-	unided_name = "shining staff",
-	flavor_name = "magestaff",
-	level_range = {37, 50},
-	color=colors.VIOLET,
-	rarity = 250,
-	desc = [[Archmage Tarelion travelled the world in his youth. But the world is not a nice place and it seems he had to run fast.]],
-	cost = 400,
-	material_level = 5,
-
-	require = { stat = { mag=48 }, },
-	modes = {"fire", "cold", "lightning", "arcane"},
-	combat = {
-		is_greater = true,
-		dam = 30,
-		apr = 4,
-		dammod = {mag=1.5},
-		damtype = DamageType.ARCANE,
-	},
-	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 7, [Stats.STAT_MAG] = 8 },
-		max_mana = 40,
-		combat_spellpower = 40,
-		combat_spellcrit = 25,
-		inc_damage = { [DamageType.ARCANE] = 30, [DamageType.FIRE] = 30, [DamageType.COLD] = 30, [DamageType.LIGHTNING] = 30,  },
-		silence_immune = 0.4,
-		mana_on_crit = 12,
-		talent_cd_reduction={
-			[Talents.T_ICE_STORM] = 2,
-			[Talents.T_FIREFLASH] = 2,
-			[Talents.T_CHAIN_LIGHTNING] = 2,
-			[Talents.T_ARCANE_VORTEX] = 2,
-		},
-		learn_talent = {[Talents.T_COMMAND_STAFF] = 1,},
-	},
-}
-
-newEntity{ base = "BASE_STAFF",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Bolbum's Big Knocker", image = "object/artifact/staff_bolbums_big_knocker.png",
-	unided_name = "thick staff",
-	level_range = {20, 35},
-	color=colors.UMBER,
-	rarity = 220,
-	desc = [[A thick staff with a heavy knob on the end.  It was said to be used by the grand alchemist Bolbum in the Age of Allure.  Much renowned is the fear of his students for their master, and the high rate of cranial injuries amongst them.  Bolbum died with seven daggers in his back and his much-cursed staff went missing after.]],
-	cost = 300,
-	material_level = 3,
-
-	require = { stat = { mag=38 }, },
-	combat = {
-		dam = 64,
-		apr = 10,
-		dammod = {mag=1.4},
-		damtype = DamageType.PHYSICAL,
-	},
-	wielder = {
-		combat_atk = 7,
-		combat_spellpower = 12,
-		combat_spellcrit = 18,
-		inc_damage={
-			[DamageType.PHYSICAL] = 20,
-		},
-		talents_types_mastery = {
-			["spell/staff-combat"] = 0.2,
-		}
-	},
-}
-
 newEntity{ base = "BASE_RING",
 	power_source = {nature=true},
 	unique = true,
@@ -263,9 +175,13 @@ newEntity{ base = "BASE_RING",
 	rarity = 250,
 	cost = 500,
 	material_level = 4,
-
+	special_desc = function(self) return "Will bring you back from death, but only once!" end,
 	wielder = {
 		inc_stats = { [Stats.STAT_LCK] = 10, },
+		die_at = -100,
+		combat_physresist = 10,
+		combat_mentalresist = 10,
+		combat_spellresist = 10,
 	},
 	one_shot_life_saving = true,
 }
@@ -293,38 +209,6 @@ newEntity{ base = "BASE_RING",
 	},
 }
 
-newEntity{ base = "BASE_AMULET",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Spellblaze Echoes", color = colors.DARK_GREY, image = "object/artifact/amulet_spellblaze_echoes.png",
-	unided_name = "deep black amulet",
-	desc = [[This ancient charm still retains a distant echo of the destruction wrought by the Spellblaze]],
-	level_range = {30, 39},
-	rarity = 290,
-	cost = 500,
-	material_level = 4,
-
-	wielder = {
-		combat_armor = 6,
-		combat_def = 6,
-		combat_spellpower = 8,
-		combat_spellcrit = 6,
-		spellsurge_on_crit = 15,
-	},
-	max_power = 60, power_regen = 1,
-	use_power = { name = "unleash a destructive wail", power = 60,
-		use = function(self, who)
-			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
-			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
-			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
-			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.DIG, 1)
-			who:project({type="ball", range=0, selffire=false, radius=3}, who.x, who.y, engine.DamageType.PHYSICAL, 250 + who:getMag() * 3)
-			game.logSeen(who, "%s uses the %s!", who.name:capitalize(), self:getName())
-			return {id=true, used=true}
-		end
-	},
-}
-
 newEntity{ base = "BASE_AMULET",
 	power_source = {technique=true},
 	unique = true,
@@ -343,39 +227,6 @@ newEntity{ base = "BASE_AMULET",
 	},
 }
 
-newEntity{ base = "BASE_AMULET",
-	power_source = {technique=true},
-	unique = true,
-	name = "Daneth's Neckguard", color = colors.STEEL_BLUE, image = "object/artifact/daneths_neckguard.png",
-	unided_name = "a thick steel gorget",
-	desc = [[A thick steel gorget designed to protect its wearer from fatal attacks to the neck.  This particular gorget was worn by the Halfling General Daneth Tendermourn during the pyre wars, and judging by the marks along its surface may have saved the General's life on more than one occasion.]],
-	level_range = {20, 30},
-	rarity = 300,
-	cost = 300,
-	encumber = 2,
-	material_level = 2,
-	wielder = {
-		combat_armor = 10,
-		fatigue = 2,
-		inc_stats = {
-			[Stats.STAT_STR] = 6,
-			[Stats.STAT_CON] = 6,
-		},
-	},
-	max_power = 60, power_regen = 1,
-	use_talent = { id = Talents.T_JUGGERNAUT, level = 2, power = 30 },
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.race == "Halfling" then
-			local Talents = require "engine.interface.ActorStats"
-
-			self:specialWearAdd({"wielder", "talents_types_mastery"}, { ["technique/battle-tactics"] = 0.2 })
-			self:specialWearAdd({"wielder","combat_armor"}, 5)
-			self:specialWearAdd({"wielder","combat_crit_reduction"}, 10)
-			game.logPlayer(who, "#LIGHT_BLUE#You feel invincible!")
-		end
-	end,
-}
-
 newEntity{ base = "BASE_AMULET", define_as = "SET_GARKUL_TEETH",
 	power_source = {technique=true},
 	unique = true,
@@ -496,44 +347,6 @@ newEntity{ base = "BASE_LITE",
 	use_talent = { id = Talents.T_BLOOD_GRASP, level = 3, power = 10 },
 }
 
-newEntity{ base = "BASE_LITE",
-	power_source = {nature=true, antimagic=true},
-	unique = true,
-	name = "Guidance", image = "object/artifact/guidance.png",
-	unided_name = "a softly glowing crystal",
-	level_range = {38, 50},
-	color = colors.YELLOW,
-	encumber = 1,
-	rarity = 300,
-	desc = [[Said to have once belonged to Inquisitor Marcus Dunn during the Spellhunt this fist sized quartz crystal glows constantly with a soft white light and was rumoured to be a great aid in meditation, helping focus the mind, body, and soul of the owner as well as protecting them from the foulest of magics.
-It seems somebody well versed in antimagic could use it to its fullest potential.]],
-	cost = 100,
-	material_level = 5,
-
-	wielder = {
-		lite = 4,
-		inc_stats = { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 6,},
-		combat_physresist = 6,
-		combat_mentalresist = 6,
-		combat_spellresist = 6,
-		talents_types_mastery = { ["wild-gift/call"] = 0.2, ["wild-gift/antimagic"] = 0.1, },
-		resists_cap = { [DamageType.BLIGHT] = 10, },
-		resists = { [DamageType.BLIGHT] = 20, },
-	},
-	on_wear = function(self, who)
-		if who:attr("forbid_arcane") then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-
-			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 6, })
-			self:specialWearAdd({"wielder","combat_physresist"}, 6)
-			self:specialWearAdd({"wielder","combat_spellresist"}, 6)
-			self:specialWearAdd({"wielder","combat_mentalresist"}, 6)
-			game.logPlayer(who, "#LIGHT_BLUE#You feel a great hero guiding you!")
-		end
-	end,
-}
-
 newEntity{
 	power_source = {nature=true},
 	unique = true,
@@ -560,182 +373,37 @@ newEntity{
 	end},
 }
 
-newEntity{ base = "BASE_LONGBOW",
-	power_source = {nature=true},
-	name = "Thaloren-Tree Longbow", unided_name = "glowing elven-wood longbow", unique=true, image = "object/artifact/thaloren_tree_longbow.png",
-	desc = [[In the aftermath of the Spellblaze, the Thaloren had to defend their forests against foes and fires alike. Many of the trees died despite the efforts of the Elves to save them. Their wood was fashioned into a bow to be wielded against the darkness.]],
-	level_range = {40, 50},
-	rarity = 200,
-	require = { stat = { dex=36 }, },
-	cost = 800,
-	material_level = 5,
-	combat = {
-		range = 10,
-		physspeed = 0.7,
-		apr = 12,
-	},
-	wielder = {
-		inc_damage={ [DamageType.PHYSICAL] = 12, },
-		lite = 1,
-		inc_stats = { [Stats.STAT_DEX] = 5, [Stats.STAT_WIL] = 4,  },
-		ranged_project={[DamageType.LIGHT] = 30},
-	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.subrace == "Thalore" then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-
-			self:specialWearAdd({"wielder","resists"}, { [engine.DamageType.DARKNESS] = 20, [DamageType.NATURE] = 20,} )
-			self:specialWearAdd({"wielder","combat_def"}, 12)
-			game.logPlayer(who, "#DARK_GREEN#You understand this bow-and its connection to nature-in a way few can.")
-		end
-	end,
-}
-
-newEntity{ base = "BASE_LONGBOW",
-	power_source = {arcane=true, nature=true},
-	name = "Corpsebow", unided_name = "rotting longbow", unique=true, image = "object/artifact/bow_corpsebow.png",
-	desc = [[A lost artifact of the Age of Dusk, the Corpsebow is filled with a lingering essence of that era's terrible plagues. Those struck by arrows fired from its rotten string find themselves afflicted by echoes of ancient sickness.]],
-	level_range = {10, 20},
-	rarity = 200,
-	require = { stat = { dex=16 }, },
-	cost = 50,
+newEntity{ base = "BASE_LEATHER_BOOT",
+	power_source = {technique=true},
+	unique = true,
+	name = "Eden's Guile", image = "object/artifact/boots_edens_guile.png",
+	unided_name = "pair of yellow boots",
+	desc = [[The boots of a Rogue outcast, who knew that the best way to deal with a problem was to run from it.]],
+	on_id_lore = "eden-guile",
+	color = colors.YELLOW,
+	level_range = {1, 20},
+	rarity = 300,
+	cost = 100,
 	material_level = 2,
-	combat = {
-		range = 7,
-		physspeed = 0.8,
-	},
 	wielder = {
-		disease_immune = 0.5,
-		ranged_project = {[DamageType.CORRUPTED_BLOOD] = 15},
-		inc_damage={ [DamageType.BLIGHT] = 10, },
-		talent_cd_reduction={
-			[Talents.T_CYST_BURST] = 2,
-		},
+		combat_armor = 1,
+		combat_def = 2,
+		fatigue = 2,
+		talents_types_mastery = { ["cunning/survival"] = 0.2 },
+		inc_stats = { [Stats.STAT_CUN] = 3, },
 	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.race == "Undead" then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
 
-			self:specialWearAdd({"combat","ranged_project"}, {[DamageType.DRAINLIFE]=20})
-			game.logPlayer(who, "#DARK_BLUE#You feel a kindred spirit in this bow...")
+	max_power = 50, power_regen = 1,
+	use_power = { name = "boost speed", power = 50,
+		use = function(self, who)
+			who:setEffect(who.EFF_SPEED, 8, {power=math.min(0.20 + who:getCun() / 200, 0.7)})
+			return {id=true, used=true}
 		end
-	end,
+	},
 }
 
-newEntity{ base = "BASE_SLING",
-	power_source = {technique=true},
-	unique = true,
-	name = "Eldoral Last Resort", image = "object/artifact/sling_eldoral_last_resort.png",
-	unided_name = "well-made sling",
-	desc = [[A sling with an inscription on its handle: 'May the wielder be granted cunning in his fight against the darkness'.]],
-	level_range = {15, 25},
-	rarity = 200,
-	require = { stat = { dex=26 }, },
-	cost = 350,
-	material_level = 3,
-	combat = {
-		range = 10,
-		physspeed = 0.7,
-	},
-	wielder = {
-		inc_stats = { [Stats.STAT_DEX] = 4, [Stats.STAT_CUN] = 3,  },
-		inc_damage={ [DamageType.PHYSICAL] = 15 },
-		talent_cd_reduction={[Talents.T_STEADY_SHOT]=1, [Talents.T_EYE_SHOT]=2},
-	},
-}
-
-newEntity{ base = "BASE_LONGSWORD",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Spellblade", image = "object/artifact/weapon_spellblade.png",
-	unided_name = "glowing long sword",
-	level_range = {40, 45},
-	color=colors.AQUAMARINE,
-	rarity = 250,
-	desc = [[Mages sometimes have funny ideas. Archmage Varil once learned how to handle a sword and found he preferred wielding it instead of his staff.]],
-	on_id_lore = "spellblade",
-	cost = 1000,
-
-	require = { stat = { mag=28, str=28, dex=28 }, },
-	material_level = 5,
-	combat = {
-		dam = 50,
-		apr = 2,
-		physcrit = 5,
-		dammod = {str=1},
-	},
-	wielder = {
-		lite = 1,
-		combat_spellpower = 20,
-		combat_spellcrit = 9,
-		inc_damage={
-			[DamageType.PHYSICAL] = 18,
-			[DamageType.FIRE] = 18,
-			[DamageType.LIGHT] = 18,
-		},
-		inc_stats = { [Stats.STAT_MAG] = 4, [Stats.STAT_STR] = 4, },
-	},
-}
-
-newEntity{ base = "BASE_GREATSWORD",
-	power_source = {nature=true, technique=true},
-	unique = true,
-	name = "Genocide",
-	unided_name = "pitch black blade", image = "object/artifact/weapon_sword_genocide.png",
-	level_range = {25, 35},
-	color=colors.GRAY,
-	rarity = 300,
-	desc = [[Farian was King Toknor's captain, and fought by his side in the great Battle of Last Hope.  However, when he returned after the battle to find his hometown burnt in an orcish pyre, a madness overtook him.  The desire for vengeance made him quit the army and strike out on his own, lightly armoured and carrying nought but his sword.  Most thought him dead until the reports came back of a fell figure tearing through the orcish encampments, slaughtering all before him and mercilessly butchering the corpses after.  It is said his blade drank the blood of 100 orcs each day until finally all of Maj'Eyal was cleared of their presence.  When the final orc was slain and no more were to be found, Farian at the last turned the blade on himself and stuck it through his chest.  Those nearby said his body shook with convulsions as he did so, though they could not tell whether he was laughing or crying.]],
-	cost = 400,
-	require = { stat = { str=40, wil=20 }, },
-	material_level = 3,
-	combat = {
-		dam = 42,
-		apr = 4,
-		physcrit = 18,
-		dammod = {str=1.2},
-	},
-	wielder = {
-		stamina_regen = 1,
-		life_regen = 0.5,
-		inc_stats = { [Stats.STAT_STR] = 7, [Stats.STAT_DEX] = 7 },
-		esp = {["humanoid/orc"]=1},
-	},
-}
-
-newEntity{ base = "BASE_LEATHER_BOOT",
-	power_source = {technique=true},
-	unique = true,
-	name = "Eden's Guile", image = "object/artifact/boots_edens_guile.png",
-	unided_name = "pair of yellow boots",
-	desc = [[The boots of a Rogue outcast, who knew that the best way to deal with a problem was to run from it.]],
-	on_id_lore = "eden-guile",
-	color = colors.YELLOW,
-	level_range = {1, 20},
-	rarity = 300,
-	cost = 100,
-	material_level = 2,
-	wielder = {
-		combat_armor = 1,
-		combat_def = 2,
-		fatigue = 2,
-		talents_types_mastery = { ["cunning/survival"] = 0.2 },
-		inc_stats = { [Stats.STAT_CUN] = 3, },
-	},
-
-	max_power = 50, power_regen = 1,
-	use_power = { name = "boost speed", power = 50,
-		use = function(self, who)
-			who:setEffect(who.EFF_SPEED, 8, {power=math.min(0.20 + who:getCun() / 200, 0.7)})
-			return {id=true, used=true}
-		end
-	},
-}
-
-newEntity{ base = "BASE_SHIELD",
-	power_source = {nature=true, technique=true},
+newEntity{ base = "BASE_SHIELD",
+	power_source = {nature=true, technique=true},
 	unique = true,
 	name = "Fire Dragon Shield", image = "object/artifact/fire_dragon_shield.png",
 	unided_name = "dragon shield",
@@ -798,7 +466,7 @@ newEntity{ base = "BASE_SHIELD",
 	unique = true,
 	name = "Black Mesh", image = "object/artifact/shield_mesh.png",
 	unided_name = "pile of tendrils",
-	desc = [[Black, interwoven tendrils form this mesh that can be used as shield. It reacts visibly to your touch, clinging to your arm and engulfing it in a warm, black mass.]],
+	desc = [[Black, interwoven tendrils form this mesh that can be used as a shield. It reacts visibly to your touch, clinging to your arm and engulfing it in a warm, black mass.]],
 	color = colors.BLACK,
 	level_range = {15, 30},
 	rarity = 270,
@@ -868,7 +536,7 @@ newEntity{
 	display = "*", color=colors.DARK_GREY,
 	encumber = 2,
 	not_in_stores = true,
-	desc = [[Dry and dusty to the touch, it still seems to retain some of shadow of life.]],
+	desc = [[Dry and dusty to the touch, it still seems to retain some shadow of life.]],
 
 	carrier = {
 		lite = -2,
@@ -940,43 +608,6 @@ newEntity{ base = "BASE_HELM",
 	end,
 }
 
-newEntity{ base = "BASE_KNIFE",
-	power_source = {technique=true},
-	unique = true,
-	name = "Orc Feller", image = "object/artifact/dagger_orc_feller.png",
-	unided_name = "shining dagger",
-	desc = [[During the invasion of Eldoral the Halfling Rogue Herah is said to have slain over one hundred orcs while defending a group of refugees.]],
-	level_range = {40, 50},
-	rarity = 300,
-	require = { stat = { dex=44 }, },
-	cost = 550,
-	material_level = 5,
-	combat = {
-		dam = 45,
-		apr = 11,
-		physcrit = 18,
-		dammod = {dex=0.55,str=0.35},
-	},
-	wielder = {
-		lite = 1,
-		inc_damage={
-			[DamageType.PHYSICAL] = 10,
-			[DamageType.LIGHT] = 8,
-		},
-		pin_immune = 0.5,
-		inc_stats = { [Stats.STAT_DEX] = 5, [Stats.STAT_CUN] = 4, },
-		esp = {["humanoid/orc"]=1},
-	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.race == "Halfling" then
-			local Stats = require "engine.interface.ActorStats"
-
-			self:specialWearAdd({"wielder","inc_stats"}, {  [Stats.STAT_CUN] = 6, [Stats.STAT_LCK] = 25, })
-			game.logPlayer(who, "#LIGHT_BLUE#Herah's guile and luck is with you, her successor!")
-		end
-	end,
-}
-
 newEntity{ base = "BASE_KNIFE",
 	power_source = {technique=true},
 	unique = true,
@@ -1004,7 +635,7 @@ newEntity{ base = "BASE_KNIFE", define_as = "ART_PAIR_MOON",
 	unique = true,
 	name = "Moon", image = "object/artifact/dagger_moon.png",
 	unided_name = "crescent blade",
-	desc = [[A viciously curved blade that a folk story says is made from a material that originates from the moon.  Devouring the light abound, it fades.]],
+	desc = [[A viciously curved blade that a folk story says is made from a material that originates from the moon.  Devouring the light around it, it fades.]],
 	level_range = {20, 30},
 	rarity = 200,
 	require = { stat = { dex=24, cun=24 }, },
@@ -1078,9 +709,11 @@ newEntity{ base = "BASE_RING",
 	rarity = 200,
 	cost = 500,
 	material_level = 5,
-
 	wielder = {
 		inc_stats = { [Stats.STAT_STR] = 3, [Stats.STAT_DEX] = 3, [Stats.STAT_CON] = 3, },
+		combat_apr = 15,
+		combat_dam = 10,
+		combat_physcrit = 5,
 		talents_types_mastery = {
 			["technique/2hweapon-cripple"] = 0.3,
 			["technique/2hweapon-offense"] = 0.3,
@@ -1088,6 +721,7 @@ newEntity{ base = "BASE_RING",
 			["technique/archery-sling"] = 0.3,
 			["technique/archery-training"] = 0.3,
 			["technique/archery-utility"] = 0.3,
+			["technique/archery-excellence"] = 0.3,
 			["technique/combat-techniques-active"] = 0.3,
 			["technique/combat-techniques-passive"] = 0.3,
 			["technique/combat-training"] = 0.3,
@@ -1098,32 +732,11 @@ newEntity{ base = "BASE_RING",
 			["technique/warcries"] = 0.3,
 			["technique/superiority"] = 0.3,
 			["technique/thuggery"] = 0.3,
-		},
-	},
-}
-
-newEntity{ base = "BASE_GREATMAUL",
-	power_source = {technique=true, arcane=true},
-	unique = true,
-	name = "Voratun Hammer of the Deep Bellow", color = colors.LIGHT_RED, image = "object/artifact/voratun_hammer_of_the_deep_bellow.png",
-	unided_name = "flame scorched voratun hammer",
-	desc = [[The legendary hammer of the Dwarven master smiths. For ages it was used to forge powerful weapons with searing heat until it became highly powerful by itself.]],
-	level_range = {38, 50},
-	rarity = 250,
-	require = { stat = { str=48 }, },
-	cost = 650,
-	material_level = 5,
-	combat = {
-		dam = 82,
-		apr = 7,
-		physcrit = 4,
-		dammod = {str=1.2},
-		talent_on_hit = { [Talents.T_FLAMESHOCK] = {level=3, chance=10} },
-		melee_project={[DamageType.FIRE] = 30},
-	},
-	wielder = {
-		inc_damage={
-			[DamageType.PHYSICAL] = 15,
+			["technique/pugilism"] = 0.3,
+			["technique/unarmed-discipline"] = 0.3,
+			["technique/unarmed-training"] = 0.3,
+			["technique/grappling"] = 0.3,
+			["technique/finishing-moves"] = 0.3,
 		},
 	},
 }
@@ -1158,7 +771,7 @@ newEntity{ base = "BASE_MACE",
 	unique = true,
 	name = "Crooked Club", color = colors.GREEN, image = "object/artifact/weapon_crooked_club.png",
 	unided_name = "weird club",
-	desc = [[An oddly twisted club with a hefty weight on the end.]],
+	desc = [[An oddly twisted club with a hefty weight on the end. There's something very strange about it.]],
 	level_range = {12, 20},
 	rarity = 192,
 	require = { stat = { str=20 }, },
@@ -1169,45 +782,15 @@ newEntity{ base = "BASE_MACE",
 		apr = 4,
 		physcrit = 10,
 		dammod = {str=1},
-		melee_project={[DamageType.RANDOM_CONFUSION] = 14},
+		melee_project={[DamageType.RANDOM_CONFUSION_PHYS] = 14},
+		talent_on_hit = { T_BATTLE_CALL = {level=1, chance=10},},
+		burst_on_crit = {
+			[DamageType.PHYSKNOCKBACK] = 20,
+		},
 	},
 	wielder = {combat_atk=12,},
 }
 
-newEntity{ base = "BASE_MACE",
-	power_source = {nature=true, antimagic=true},
-	unique = true,
-	name = "Nature's Vengeance", color = colors.BROWN, image = "object/artifact/mace_natures_vengeance.png",
-	unided_name = "thick wooden mace",
-	desc = [[This thick-set mace was used by the Spellhunter Vorlan, who crafted it from the wood of an ancient oak that was uprooted during the Spellblaze.  Many were the wizards and witches felled by this weapon, brought to justice for the crimes they committed against nature.]],
-	level_range = {20, 34},
-	rarity = 340,
-	require = { stat = { str=42 } },
-	cost = 350,
-	material_level = 3,
-	combat = {
-		dam = 40,
-		apr = 4,
-		physcrit = 9,
-		dammod = {str=1},
-		melee_project={[DamageType.RANDOM_SILENCE] = 10, [DamageType.NATURE] = 18},
-	},
-	wielder = {combat_atk=6},
-
-	max_power = 25, power_regen = 1,
-	use_talent = { id = Talents.T_RUSH, level = 3, power = 15 },
-	on_wear = function(self, who)
-		if who:attr("forbid_arcane") then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-
-			self:specialWearAdd({"wielder","resists"}, { all = 4 })
-
-			game.logPlayer(who, "#LIGHT_BLUE#You feel nature defending you.")
-		end
-	end,
-}
-
 newEntity{ base = "BASE_CLOTH_ARMOR",
 	power_source = {nature=true},
 	unique = true,
@@ -1221,7 +804,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
 	wielder = {
 		combat_def = 10,
 		combat_armor = 15,
-		combat_armor_hardiness = 40,
+		combat_armor_hardiness = 30,
 		inc_stats = { [Stats.STAT_CON] = 5, [Stats.STAT_WIL] = 4, },
 		combat_mindpower = 10,
 		combat_mindcrit = 5,
@@ -1357,39 +940,30 @@ newEntity{ base = "BASE_GAUNTLETS",
 	},
 }
 
-newEntity{ base = "BASE_GAUNTLETS",
-	power_source = {psionic=true, technique=true},
-	define_as = "GAUNTLETS_SCORPION",
+newEntity{ base = "BASE_GREATMAUL",
+	power_source = {technique=true, arcane=true},
 	unique = true,
-	name = "Fists of the Desert Scorpion", color = colors.STEEL_BLUE, image = "object/artifact/scorpion_gauntlets.png",
-	unided_name = "viciously spiked gauntlets",
-	desc = [[These wickedly spiked gauntlets belonged to an orc captain in the Age of Pyre who conquered the western sands, using them as a base to lay raids on Elvala to the south.  Known as The Scorpion, he seemed unconquerable in battle, able to pull enemies towards him with vicious mental force and lay down lethal blows on them.  Often a flurry of these yellow and black gauntlets would be the last thing great Shaloren mages would see before having the life crushed from them.
-
-Finally The Scorpion was defeated by the alchemist Nessylia, who went to face the fiendish orc alone.  The captain pulled the elf towards him with a brutish cackle, but before he could batter the life from her flesh she tore off her robes, revealing eighty incendiary bombs strapped to her flesh.  With a spark from her fingers she triggered an explosion that could be seen for miles around.  To this day Nessylia is still remembered in song for the sacrifice of her immortal life to protect her people.]],
-	level_range = {20, 40},
-	rarity = 300,
-	cost = 1000,
-	material_level = 3,
+	name = "Voratun Hammer of the Deep Bellow", color = colors.LIGHT_RED, image = "object/artifact/voratun_hammer_of_the_deep_bellow.png",
+	unided_name = "flame scorched voratun hammer",
+	desc = [[The legendary hammer of the Dwarven master smiths. For ages it was used to forge powerful weapons with searing heat until it became highly powerful by itself.]],
+	level_range = {38, 50},
+	rarity = 250,
+	require = { stat = { str=48 }, },
+	cost = 650,
+	material_level = 5,
+	combat = {
+		dam = 82,
+		apr = 7,
+		physcrit = 4,
+		dammod = {str=1.2},
+		talent_on_hit = { [Talents.T_FLAMESHOCK] = {level=3, chance=10} },
+		melee_project={[DamageType.FIRE] = 30},
+	},
 	wielder = {
-		inc_stats = { [Stats.STAT_STR] = 3, [Stats.STAT_WIL] = 3, [Stats.STAT_CUN] = 3, },
-		inc_damage = { [DamageType.PHYSICAL] = 8 },
-		combat_mindpower=3,
-		combat_armor = 4,
-		combat_def = 8,
-		disarm_immune = 0.4,
-		talents_types_mastery = { ["psionic/grip"] = 0.2, ["technique/grappling"] = 0.2},
-		combat = {
-			dam = 24,
-			apr = 10,
-			physcrit = 10,
-			physspeed = 0.15,
-			dammod = {dex=0.4, str=-0.6, cun=0.4,},
-			damrange = 0.3,
-			talent_on_hit = { T_BITE_POISON = {level=3, chance=20}, T_PERFECT_CONTROL = {level=1, chance=5}, T_QUICK_AS_THOUGHT = {level=3, chance=5}, T_IMPLODE = {level=1, chance=5} },
+		inc_damage={
+			[DamageType.PHYSICAL] = 15,
 		},
 	},
-	max_power = 24, power_regen = 1,
-	use_talent = { id = Talents.T_MINDHOOK, level = 4, power = 16 },
 }
 
 newEntity{ base = "BASE_GLOVES",
@@ -1475,27 +1049,6 @@ newEntity{ base = "BASE_CLOAK",
 	use_talent = { id = Talents.T_PHASE_DOOR, level = 2, power = 30 },
 }
 
-newEntity{ base = "BASE_CLOAK",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Wind's Whisper", image="object/artifact/cloak_winds_whisper.png",
-	unided_name = "flowing light cloak",
-	desc = [[When the enchanter Razeen was cornered by Spellhunters near the Daikara mountain pass she wrapped her cloak about her and fled down a narrow ravine.  The hunters fired volley after volley of arrows at her, but by miracle or magic they all missed.  Razeen was able to escape and flee to the hidden city in the west.]],
-	level_range = {15, 25},
-	rarity = 400,
-	cost = 250,
-	material_level = 3,
-	wielder = {
-		inc_stats = { [Stats.STAT_DEX] = 3, },
-		combat_def = 4,
-		combat_ranged_def = 12,
-		silence_immune = 0.3,
-		projectile_evasion = 25,
-	},
-	max_power = 50, power_regen = 1,
-	use_talent = { id = Talents.T_EVASION, level = 2, power = 50 },
-}
-
 newEntity{ base = "BASE_CLOTH_ARMOR",
 	power_source = {arcane=true},
 	unique = true,
@@ -1609,7 +1162,7 @@ newEntity{ base = "BASE_WIZARD_HAT", define_as = "SET_TEMPORAL_FEZ",
 	unique = true,
 	name = "Un'fezan's Cap",
 	unided_name = "red stylish hat",
-	desc = [[This fez once belonged to a traveler, it always seems to be found lying around in odd locations.
+	desc = [[This fez once belonged to a traveler; it always seems to be found lying around in odd locations.
 #{italic}#Fezzes are cool.#{normal}#]],
 	color = colors.BLUE, image = "object/artifact/fez.png",
 	moddable_tile = "special/fez",
@@ -1648,218 +1201,46 @@ newEntity{ base = "BASE_WIZARD_HAT", define_as = "SET_TEMPORAL_FEZ",
 	end,
 }
 
-newEntity{ base = "BASE_GEM", define_as = "GEM_TELOS",
-	power_source = {arcane=true},
+newEntity{ base = "BASE_BATTLEAXE",
+	power_source = {technique=true},
 	unique = true,
-	unided_name = "scintillating white crystal",
-	name = "Telos's Staff Crystal", subtype = "multi-hued", image = "object/artifact/telos_staff_crystal.png",
-	color = colors.WHITE,
-	level_range = {35, 45},
-	desc = [[A closer look at this pure white crystal reveals that it is really a plethora of colors swirling and scintillating.]],
-	rarity = 240,
-	identified = false,
-	cost = 200,
-	material_level = 5,
-	carrier = {
-		lite = 2,
+	unided_name = "crude iron battle axe",
+	name = "Crude Iron Battle Axe of Kroll", color = colors.GREY, image = "object/artifact/crude_iron_battleaxe_of_kroll.png",
+	desc = [[Made in times before the Dwarves learned beautiful craftsmanship, the rough appearance of this axe belies its great power. Only Dwarves may harness its true strength, however.]],
+	require = { stat = { str=50 }, },
+	level_range = {39, 46},
+	rarity = 300,
+	material_level = 4,
+	combat = {
+		dam = 68,
+		apr = 7,
+		physcrit = 10,
+		dammod = {str=1.3},
 	},
 	wielder = {
-		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_DEX] = 5, [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 5, [Stats.STAT_CON] = 5, },
-		lite = 2,
-		confusion_immune = 0.3,
-		fear_immune = 0.3,
-		resists={[DamageType.MIND] = 30,},
-	},
-	imbue_powers = {
-		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_DEX] = 5, [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 5, [Stats.STAT_CON] = 5, },
-		lite = 2,
-		confusion_immune = 0.3,
-		fear_immune = 0.3,
-		resists={[DamageType.MIND] = 30,},
+		inc_stats = { [Stats.STAT_CON] = 2, [Stats.STAT_DEX] = 2, },
+		combat_def = 6, combat_armor = 6,
+		inc_damage = { [DamageType.PHYSICAL]=10 },
+		stun_immune = 0.3,
+		knockback_immune = 0.3,
 	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.race == "Dwarf" then
+			local Stats = require "engine.interface.ActorStats"
 
-	max_power = 1, power_regen = 1,
-	use_power = { name = "combine with a staff", power = 1, use = function(self, who, gem_inven, gem_item)
-		who:showInventory("Fuse with which staff?", who:getInven("INVEN"), function(o) return o.type == "weapon" and o.subtype == "staff" and not o.egoed and not o.unique end, function(o, item)
-			local voice = game.zone:makeEntityByName(game.level, "object", "VOICE_TELOS")
-			if voice then
-				local oldname = o:getName{do_color=true}
-
-				-- Remove the gem
-				who:removeObject(gem_inven, gem_item)
-				who:sortInven(gem_inven)
-
-				-- Change the staff
-				voice.modes = o.modes
-				voice.flavor_name = o.flavor_name
-				voice.combat = o.combat
-				voice.combat.dam = math.floor(voice.combat.dam * 1.4)
-				voice.combat.sentient = "telos"
-				voice.wielder.inc_damage[voice.combat.damtype] = voice.combat.dam
-				voice:identify(true)
-				o:replaceWith(voice)
-				who:sortInven()
-
-				who.changed = true
-				game.logPlayer(who, "You fix the crystal on the %s and create the %s.", oldname, o:getName{do_color=true})
-			else
-				game.logPlayer(who, "The fusing fails!")
-			end
-		end)
-		return {id=true, used=true}
-	end },
+			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_CON] = 7, [Stats.STAT_DEX] = 7, })
+			self:specialWearAdd({"wielder","stun_immune"}, 0.7)
+			self:specialWearAdd({"wielder","knockback_immune"}, 0.7)
+			game.logPlayer(who, "#LIGHT_BLUE#You feel as surge of power as you wield the axe of your ancestors!")
+		end
+	end,
 }
 
--- The staff that goes with the crystal above, it will not be generated randomly it is created by the crystal
-newEntity{ base = "BASE_STAFF", define_as = "VOICE_TELOS",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Voice of Telos",
-	unided_name = "scintillating white staff", image="object/artifact/staff_voice_of_telos.png",
-	color = colors.VIOLET,
-	rarity = false,
-	desc = [[A closer look at this pure white staff reveals that it is really a plethora of colors swirling and scintillating.]],
-	cost = 500,
-	material_level = 5,
-
-	require = { stat = { mag=45 }, },
-	-- This is replaced by the creation process
-	combat = { dam = 1, damtype = DamageType.ARCANE, },
-	wielder = {
-		combat_spellpower = 30,
-		combat_spellcrit = 15,
-		max_mana = 100,
-		inc_stats = { [Stats.STAT_MAG] = 6, [Stats.STAT_WIL] = 5, [Stats.STAT_CUN] = 4 },
-		lite = 1,
-		inc_damage = {},
-		damage_affinity = { [DamageType.ARCANE] = 5, [DamageType.BLIGHT] = 5, [DamageType.COLD] = 5, [DamageType.DARKNESS] = 5, [DamageType.ACID] = 5, [DamageType.LIGHT] = 5, [DamageType.LIGHTNING] = 5, [DamageType.FIRE] = 5, },
-		learn_talent = {[Talents.T_COMMAND_STAFF] = 1},
-	},
-}
-
-newEntity{ base = "BASE_ROD",
-	power_source = {arcane=true},
-	unided_name = "glowing rod",
-	name = "Gwai's Burninator", color=colors.LIGHT_RED, unique=true, image = "object/artifact/wand_gwais_burninator.png",
-	desc = [[Gwai, a Pyromanceress that lived during the Spellhunt, was cornered by group of mage hunters. She fought to her last breath and is said to have killed at least ten people with this wand before she fell.]],
-	cost = 600,
-	rarity = 220,
-	level_range = {25, 35},
-	elec_proof = true,
-	add_name = false,
-
-	material_level = 3,
-
-	max_power = 75, power_regen = 1,
-	use_power = { name = "shoot a cone of fire", power = 50,
-		use = function(self, who)
-			local tg = {type="cone", range=0, radius=5}
-			local x, y = who:getTarget(tg)
-			if not x or not y then return nil end
-			who:project(tg, x, y, engine.DamageType.FIRE, 300 + who:getMag() * 2, {type="flame"})
-			return {id=true, used=true}
-		end
-	},
-}
-
-newEntity{ base = "BASE_BATTLEAXE",
-	power_source = {technique=true},
-	unique = true,
-	unided_name = "crude iron battle axe",
-	name = "Crude Iron Battle Axe of Kroll", color = colors.GREY, image = "object/artifact/crude_iron_battleaxe_of_kroll.png",
-	desc = [[Made in times before the Dwarves learned beautiful craftsmanship, the rough appearance of this axe belies its great power. Only Dwarves may harness its true strength, however.]],
-	require = { stat = { str=50 }, },
-	level_range = {39, 46},
-	rarity = 300,
-	material_level = 4,
-	combat = {
-		dam = 68,
-		apr = 7,
-		physcrit = 10,
-		dammod = {str=1.3},
-	},
-	wielder = {
-		inc_stats = { [Stats.STAT_CON] = 2, [Stats.STAT_DEX] = 2, },
-		combat_def = 6, combat_armor = 6,
-		inc_damage = { [DamageType.PHYSICAL]=10 },
-		stun_immune = 0.3,
-		knockback_immune = 0.3,
-	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.race == "Dwarf" then
-			local Stats = require "engine.interface.ActorStats"
-
-			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_CON] = 7, [Stats.STAT_DEX] = 7, })
-			self:specialWearAdd({"wielder","stun_immune"}, 0.7)
-			self:specialWearAdd({"wielder","knockback_immune"}, 0.7)
-			game.logPlayer(who, "#LIGHT_BLUE#You feel as surge of power as you wield the axe of your ancestors!")
-		end
-	end,
-}
-
-newEntity{ base = "BASE_BATTLEAXE",
-	power_source = {technique=true},
-	unique = true,
-	unided_name = "viciously sharp battle axe",
-	name = "Drake's Bane", image = "object/artifact/axe_drakes_bane.png",
-	color = colors.RED,
-	desc = [[The killing of Kroltar, mightiest of wyrms, took seven months and the lives of 20,000 dwarven warriors.  Finally the beast was worn down and mastersmith Gruxim, standing atop the bodies of his fallen comrades, was able slit its throat with this axe crafted purely for the purpose of penetrating the wyrm's hide.]],
-	require = { stat = { str=45 }, },
-	rarity = 300,
-	cost = 400,
-	level_range = {20, 35},
-	material_level = 3,
-	combat = {
-		dam = 52,
-		apr = 21,
-		physcrit = 2,
-		dammod = {str=1.2},
-		inc_damage_type = {dragon=25},
-	},
-	wielder = {
-		inc_stats = { [Stats.STAT_STR] = 6, },
-		stun_immune = 0.2,
-		knockback_immune = 0.4,
-		combat_physresist = 9,
-	},
-}
-
-newEntity{ base = "BASE_WARAXE",
-	power_source = {technique=true, nature=true},
-	unique = true,
-	name = "Blood-Letter", image = "object/artifact/weapon_axe_blood_letter.png",
-	unided_name = "glacial hatchet",
-	desc = [[A hand axe carved out of the most frozen parts of the northern wasteland.]],
-	level_range = {25, 35},
-	rarity = 235,
-	require = { stat = { str=40, dex=24 }, },
-	cost = 330,
-	metallic = false,
-	material_level = 3,
-	wielder = {
-		combat_armor = 20,
-		resists_pen = {
-			[DamageType.COLD] = 20,
-		},
-		talent_on_hit = { [Talents.T_ICE_BREATH] = {level=2, chance=15} },
-	},
-	combat = {
-		dam = 33,
-		apr = 4.5,
-		physcrit = 7,
-		dammod = {str=1},
-		convert_damage = {
-			[DamageType.ICE] = 50,
-		},
-	},
-}
-
-
 newEntity{ base = "BASE_WHIP",
 	power_source = {nature=true},
 	unided_name = "metal whip",
 	name = "Scorpion's Tail", color=colors.GREEN, unique = true, image = "object/artifact/whip_scorpions_tail.png",
-	desc = [[A long whip of linked metal joints finished with a viciously sharp barb leaking venomous poison.]],
+	desc = [[A long whip of linked metal joints finished with a viciously sharp barb leaking terrible venom.]],
 	require = { stat = { dex=28 }, },
 	cost = 150,
 	rarity = 340,
@@ -1880,62 +1261,6 @@ newEntity{ base = "BASE_WHIP",
 	},
 }
 
-newEntity{ base = "BASE_LEATHER_BELT",
-	power_source = {nature=true},
-	unique = true,
-	name = "Rope Belt of the Thaloren", image = "object/artifact/rope_belt_of_the_thaloren.png",
-	unided_name = "short length of rope",
-	desc = [[The simplest of belts, worn for centuries by Nessilla Tantaelen as she tended to her people and forests. Some of her wisdom and power have settled permanently into its fibers.]],
-	color = colors.LIGHT_RED,
-	level_range = {20, 30},
-	rarity = 200,
-	cost = 450,
-	material_level = 2,
-	wielder = {
-		inc_stats = { [Stats.STAT_CUN] = 7, [Stats.STAT_WIL] = 8, },
-		combat_mindpower = 12,
-		talents_types_mastery = { ["wild-gift/harmony"] = 0.2 },
-	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.subrace == "Thalore" then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-
-			self:specialWearAdd({"wielder","resists"}, { [engine.DamageType.MIND] = 20,} )
-			self:specialWearAdd({"wielder","combat_mentalresist"}, 15)
-			game.logPlayer(who, "#DARK_GREEN#Nessilla's belt seems to come alive as you put it on.")
-		end
-	end,
-}
-
-newEntity{ base = "BASE_LEATHER_BELT",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Neira's Memory", image = "object/artifact/neira_memory.png",
-	unided_name = "crackling belt",
-	desc = [[Ages ago this belt was worn by Linaniil herself in her youth, using its power she shielded herself from the Spellblaze rain of fire, but naught could she do for her sister Neira.]],
-	color = colors.GOLD,
-	level_range = {20, 30},
-	rarity = 200,
-	cost = 450,
-	material_level = 3,
-	wielder = {
-		inc_stats = { [Stats.STAT_CUN] = 2, [Stats.STAT_WIL] = 5, },
-		confusion_immune = 0.3,
-		stun_immune = 0.3,
-		mana_on_crit = 3,
-	},
-	max_power = 20, power_regen = 1,
-	use_power = { name = "generate a personal shield", power = 20,
-		use = function(self, who)
-			who:setEffect(who.EFF_DAMAGE_SHIELD, 10, {power=100 + who:getMag(250)})
-			game:playSoundNear(who, "talents/arcane")
-			game.logSeen(who, "%s invokes the memory of Neira!", who.name:capitalize())
-			return {id=true, used=true}
-		end
-	},
-}
-
 newEntity{ base = "BASE_LEATHER_BELT",
 	power_source = {nature=true},
 	unique = true,
@@ -2026,7 +1351,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 	unique = true,
 	name = "Skin of Many", image = "object/artifact/robe_skin_of_many.png",
 	unided_name = "stitched skin armour",
-	desc = [[The stitched-together skin of many creatures. Some eyes and mouths still decorate the robe, and some still live, screaming in tortured agony.]],
+	desc = [[The stitched-together skins of many creatures. Some eyes and mouths still decorate the robe, and some still live, screaming in tortured agony.]],
 	color = colors.BROWN,
 	level_range = {12, 22},
 	rarity = 200,
@@ -2055,48 +1380,6 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 	end,
 }
 
-newEntity{ base = "BASE_LIGHT_ARMOR",
-	power_source = {nature=true, antimagic=true},
-	unique = true,
-	name = "Nature's Blessing", image = "object/artifact/armor_natures_blessing.png",
-	unided_name = "supple leather armour entwined with willow bark",
-	desc = [[Worn by Protector Ardon, who first formed the Ziguranth during the mage wars between the Humans and the Halflings.  This armour is infused with the powers of nature, and protected against the disruptive forces of magic.]],
-	color = colors.BROWN,
-	level_range = {15, 30},
-	rarity = 350,
-	require = { stat = { str=20 }, {wil=20} },
-	cost = 350,
-	material_level = 2,
-	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_CON] = 4 },
-
-		combat_armor = 6,
-		combat_def = 8,
-		combat_def_ranged = 4,
-
-		life_regen = 1,
-		fatigue = 8,
-		stun_immune = 0.25,
-		healing_factor = 0.2,
-		combat_spellresist = 18,
-
-		resists = {
-			[DamageType.NATURE] = 20,
-			[DamageType.ARCANE] = 25,
-		},
-
-		talents_types_mastery = { ["wild-gift/antimagic"] = 0.2},
-	},
-	on_wear = function(self, who)
-		if who:attr("forbid_arcane") then
-			local Stats = require "engine.interface.ActorStats"
-
-			self:specialWearAdd({"wielder","combat_spellresist"}, 20)
-			game.logPlayer(who, "#DARK_GREEN#You feel especially blessed.")
-		end
-	end,
-}
-
 newEntity{ base = "BASE_HEAVY_ARMOR",
 	power_source = {arcane=true},
 	unique = true,
@@ -2166,40 +1449,6 @@ newEntity{ base = "BASE_HEAVY_ARMOR", define_as = "SCALE_MAIL_KROLTAR",
 	end,
 }
 
-newEntity{ base = "BASE_MASSIVE_ARMOR",
-	power_source = {technique=true},
-	unique = true,
-	name = "Plate Armor of the King", image = "object/artifact/plate_armor_of_the_king.png",
-	unided_name = "suit of gleaming voratun plate",
-	desc = [[Beautifully detailed with images of King Toknor's defence of Last Hope. Despair fills the hearts of even the blackest villains at the sight of it.]],
-	color = colors.WHITE,
-	level_range = {45, 50},
-	rarity = 390,
-	require = { stat = { str=48 }, },
-	cost = 800,
-	material_level = 5,
-	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 9, },
-		resists = {
-			[DamageType.ACID] = 25,
-			[DamageType.ARCANE] = 10,
-			[DamageType.FIRE] = 25,
-			[DamageType.BLIGHT] = 25,
-			[DamageType.DARKNESS] = 25,
-		},
-		max_stamina = 60,
-		combat_def = 15,
-		combat_armor = 20,
-		stun_immune = 0.3,
-		knockback_immune = 0.3,
-		combat_mentalresist = 25,
-		combat_spellresist = 25,
-		combat_physresist = 15,
-		lite = 1,
-		fatigue = 26,
-	},
-}
-
 newEntity{ base = "BASE_MASSIVE_ARMOR",
 	power_source = {technique=true},
 	unique = true,
@@ -2288,7 +1537,7 @@ newEntity{ base = "BASE_MACE",
 		apr = 5,
 		physcrit = 2.5,
 		dammod = {str=1},
-		special_on_hit = {desc="10% chance to shimer to a different hue and gain powers", fct=function(combat, who, target)
+		special_on_hit = {desc="10% chance to shimmer to a different hue and gain powers", on_kill=1, fct=function(combat, who, target)
 			if not rng.percent(10) then return end
 			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "URESLAK_FEMUR")
 			if not o or not who:getInven(inven_id).worn then return end
@@ -2299,7 +1548,7 @@ newEntity{ base = "BASE_MACE",
 			o.combat.damtype = b.damtype
 			o.wielder = b.wielder
 			who:onWear(o, true)
-			game.logSeen(who, "#GOLD#Ureslak's Femur glows and shimers!")
+			game.logSeen(who, "#GOLD#Ureslak's Femur glows and shimmers!")
 		end },
 	},
 	ureslak_bonuses = {
@@ -2342,8 +1591,7 @@ newEntity{ base = "BASE_MACE",
 
 newEntity{ base = "BASE_WARAXE",
 	power_source = {psionic=true},
-	unique = true,
-	rarity = false, unided_name = "razor sharp war axe",
+	unique = true, unided_name = "razor sharp war axe",
 	name = "Razorblade, the Cursed Waraxe", color = colors.LIGHT_BLUE, image = "object/artifact/razorblade_the_cursed_waraxe.png",
 	desc = [[This mighty axe can cleave through armour like the sharpest swords, yet hit with all the impact of a heavy club.
 It is said the wielder will slowly grow mad. This, however, has never been proven - no known possessor of this item has lived to tell the tale.]],
@@ -2371,7 +1619,7 @@ newEntity{ base = "BASE_LONGSWORD", define_as = "ART_PAIR_TWSWORD",
 	unique = true,
 	name = "Sword of Potential Futures", image = "object/artifact/sword_of_potential_futures.png",
 	unided_name = "under-wrought blade",
-	desc = [[Legend has it this blade is one of a pair; twin blades forged in the earliest of days of the Wardens. To an untrained wielder it is less than perfect; to a Warden, it represents the untapped potential of time.]],
+	desc = [[Legend has it this blade is one of a pair: twin blades forged in the earliest of days of the Wardens. To an untrained wielder it is less than perfect; to a Warden, it represents the untapped potential of time.]],
 	level_range = {20, 30},
 	rarity = 250,
 	require = { stat = { str=24, mag=24 }, },
@@ -2418,7 +1666,7 @@ newEntity{ base = "BASE_KNIFE", define_as = "ART_PAIR_TWDAG",
 	unique = true,
 	name = "Dagger of the Past", image = "object/artifact/dagger_of_the_past.png",
 	unided_name = "rusted blade",
-	desc = [[Legend has it this blade is one of a pair; twin blades forged in the earliest of days of the Wardens. To an untrained wielder it is less than perfect; to a Warden, it represents the opportunity to learn from the mistakes of the past.]],
+	desc = [[Legend has it this blade is one of a pair: twin blades forged in the earliest of days of the Wardens. To an untrained wielder it is less than perfect; to a Warden, it represents the opportunity to learn from the mistakes of the past.]],
 	level_range = {20, 30},
 	rarity = 250,
 	require = { stat = { dex=24, mag=24 }, },
@@ -2448,7 +1696,7 @@ newEntity{ base = "BASE_KNIFE", define_as = "ART_PAIR_TWDAG",
 	},
 	set_list = { {"define_as","ART_PAIR_TWSWORD"} },
 	on_set_complete = function(self, who)
-		self.combat.special_on_hit = {desc="10% chance to return the target to a much youger state", fct=function(combat, who, target)
+		self.combat.special_on_hit = {desc="10% chance to return the target to a much younger state", fct=function(combat, who, target)
 			if not rng.percent(10) then return end
 			target:setEffect(target.EFF_TURN_BACK_THE_CLOCK, 3, {power=10})
 		end}
@@ -2460,49 +1708,6 @@ newEntity{ base = "BASE_KNIFE", define_as = "ART_PAIR_TWDAG",
 	end,
 }
 
-newEntity{ base = "BASE_LONGSWORD",
-	power_source = {nature=true, antimagic=true},
-	unique = true,
-	name = "Witch-Bane", color = colors.LIGHT_STEEL_BLUE, image = "object/artifact/sword_witch_bane.png",
-	unided_name = "an ivory handled voratun longsword",
-	desc = [[A thin voratun blade with an ivory handle wrapped in purple cloth.  The weapon is nearly as legendary as its former owner, Marcus Dunn, and was thought to have been destroyed after Marcus was slain near the end of the Spellhunt.
-It seems somebody well versed in antimagic could use it to its fullest potential.]],
-	level_range = {38, 50},
-	rarity = 250,
-	require = { stat = { str=48 }, },
-	cost = 650,
-	material_level = 5,
-	combat = {
-		dam = 42,
-		apr = 4,
-		physcrit = 20,
-		dammod = {str=1},
-		melee_project = { [DamageType.MANABURN] = 50 },
-	},
-	wielder = {
-		talent_cd_reduction={
-			[Talents.T_AURA_OF_SILENCE] = 2,
-			[Talents.T_MANA_CLASH] = 2,
-		},
-		resists = {
-			all = 10,
-			[DamageType.PHYSICAL] = - 10,
-		},
-	},
-	on_wear = function(self, who)
-		if who:attr("forbid_arcane") then
-			local Stats = require "engine.interface.ActorStats"
-			local DamageType = require "engine.DamageType"
-			local Talents = require "engine.interface.ActorTalents"
-
-			self:specialWearAdd({"combat", "talent_on_hit"}, { [Talents.T_MANA_CLASH] = {level=1, chance=25}  })
-			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 6, })
-			game.logPlayer(who, "#LIGHT_BLUE#You feel a great hero watching over you!")
-		end
-	end,
-}
-
-
 newEntity{ base = "BASE_GAUNTLETS",
 	power_source = {arcane=true},
 	unique = true,
@@ -2596,7 +1801,7 @@ newEntity{ base = "BASE_DIGGER",
 	unique = true,
 	name = "Pick of Dwarven Emperors", color = colors.GREY, image = "object/artifact/pick_of_dwarven_emperors.png",
 	unided_name = "crude iron pickaxe",
-	desc = [[This ancient pickaxe was used to pass down dwarven legends from one generation to the next.  Every bit of the head and shaft are covered in runes that recount the stories of the dwarven people.]],
+	desc = [[This ancient pickaxe was used to pass down dwarven legends from one generation to the next. Every bit of the head and shaft is covered in runes that recount the stories of the dwarven people.]],
 	level_range = {40, 50},
 	rarity = 290,
 	cost = 150,
@@ -2624,108 +1829,27 @@ newEntity{ base = "BASE_DIGGER",
 	end,
 }
 
--- Channelers set
--- Note that this staff can not be channeled.  All of it's flavor is arcane, lets leave it arcane
-newEntity{ base = "BASE_STAFF", define_as = "SET_STAFF_CHANNELERS",
+newEntity{ base = "BASE_ARROW",
 	power_source = {arcane=true},
 	unique = true,
-	name = "Staff of Arcane Supremacy",
-	unided_name = "silver-runed staff",
-	flavor_name = "magestaff",
+	name = "Quiver of the Sun",
+	unided_name = "bright quiver",
+	desc = [[This strange orange quiver is made of brass and etched with many bright red runes that glow and glitter in the light.  The arrows themselves appear to be solid shafts of blazing hot light, like rays of sunshine, hammered and forged into a solid state.]],
+	color = colors.BLUE, image = "object/artifact/quiver_of_the_sun.png",
 	level_range = {20, 40},
-	color=colors.BLUE, image = "object/artifact/staff_of_arcane_supremacy.png",
 	rarity = 300,
-	desc = [[A long slender staff, made of ancient dragon-bone, with runes emblazoned all over its surface in bright silver.
-It hums faintly, as if great power is locked within, yet alone it seems incomplete.]],
-	cost = 200,
-	material_level = 3,
-	require = { stat = { mag=24 }, },
+	cost = 100,
+	material_level = 4,
+	require = { stat = { dex=24 }, },
 	combat = {
-		dam = 20,
-		apr = 4,
-		dammod = {mag=1.5},
-		damtype = DamageType.ARCANE,
-	},
-	wielder = {
-		combat_spellpower = 20,
-		inc_damage={
-			[DamageType.ARCANE] = 20,
-		},
-		talent_cd_reduction = {
-			[Talents.T_MANATHRUST] = 1,
-		},
-		talents_types_mastery = {
-			["spell/arcane"]=0.2,
-		},
-	},
-	max_power = 20, power_regen = 1,
-	use_talent = { id = Talents.T_ARCANE_SUPREMACY, level = 3, power = 20 },
-	set_list = { {"define_as", "SET_HAT_CHANNELERS"} },
-	on_set_complete = function(self, who)
-		self:specialSetAdd({"wielder","max_mana"}, 100)
-		game.logSeen(who, "#STEEL_BLUE#You feel a swell of arcane energy.")
-	end,
-}
-
-newEntity{ base = "BASE_WIZARD_HAT", define_as = "SET_HAT_CHANNELERS",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Hat of Arcane Understanding",
-	unided_name = "silver-runed hat",
-	desc = [[A traditional pointed wizard's hat, made of fine purple elven-silk and decorated with bright silver runes. You sense it has been passed from ancient times, and has been born on the heads of great mages.
-Touching the cloth you feel a sense of knowledge and power from bygone ages, yet it is partly sealed away, waiting for a trigger to release it.]],
-	color = colors.BLUE, image = "object/artifact/wizard_hat_of_arcane_understanding.png",
-	level_range = {20, 40},
-	rarity = 300,
-	cost = 100,
-	material_level = 3,
-	wielder = {
-		combat_def = 2,
-		mana_regen = 2,
-		resists = {
-			[DamageType.ARCANE] = 20,
-		},
-		talent_cd_reduction = {
-			[Talents.T_DISRUPTION_SHIELD] = 10,
-		},
-		talents_types_mastery = {
-			["spell/meta"]=0.2,
-		},
-	},
-	max_power = 40, power_regen = 1,
-	set_list = { {"define_as", "SET_STAFF_CHANNELERS"} },
-	on_set_complete = function(self, who)
-		local Talents = require "engine.interface.ActorTalents"
-		self.use_talent = { id = Talents.T_METAFLOW, level = 3, power = 40 }
-		game.party:learnLore("channelers-set")
-	end,
-	on_set_broken = function(self, who)
-		self.use_talent = nil
-		game.logPlayer(who, "#STEEL_BLUE#The arcane energies surrounding you dissipate.")
-	end,
-}
-
-newEntity{ base = "BASE_ARROW",
-	power_source = {arcane=true},
-	unique = true,
-	name = "Quiver of the Sun",
-	unided_name = "bright quiver",
-	desc = [[This strange orange quiver is made of brass and etched with many bright red runes that glow and glitter in the light.  The arrows themselves appear to be solid shafts of blazing hot light, like rays of sunshine, hammered and forged into a solid state.]],
-	color = colors.BLUE, image = "object/artifact/quiver_of_the_sun.png",
-	level_range = {20, 40},
-	rarity = 300,
-	cost = 100,
-	material_level = 4,
-	require = { stat = { dex=24 }, },
-	combat = {
-		capacity = 10,
-		tg_type = "beam",
-		travel_speed = 3,
-		dam = 34,
-		apr = 15, --Piercing is piercing
-		physcrit = 2,
-		dammod = {dex=0.7, str=0.5},
-		damtype = DamageType.LITE_LIGHT,
+		capacity = 10,
+		tg_type = "beam",
+		travel_speed = 3,
+		dam = 34,
+		apr = 15, --Piercing is piercing
+		physcrit = 2,
+		dammod = {dex=0.7, str=0.5},
+		damtype = DamageType.LITE_LIGHT,
 	},
 }
 
@@ -2854,7 +1978,7 @@ newEntity{ base = "BASE_SHOT",
 		physcrit = 10,
 		dammod = {dex=0.7, cun=0.5},
 		damtype = DamageType.FIRE,
-		special_on_hit = {desc="sets off a powerful explosion", fct=function(combat, who, target)
+		special_on_hit = {desc="sets off a powerful explosion", on_kill=1, fct=function(combat, who, target)
 			local tg = {type="ball", range=0, radius=3, selffire=false}
 			local grids = who:project(tg, target.x, target.y, engine.DamageType.FIREKNOCKBACK, {dist=3, dam=40 + who:getMag()*0.6 + who:getCun()*0.6})
 			game.level.map:particleEmitter(target.x, target.y, tg.radius, "ball_fire", {radius=tg.radius})
@@ -2981,8 +2105,8 @@ newEntity{ base = "BASE_MINDSTAR",
 		},
 		inc_stats = { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 3, },
 	},
-	max_power = 75, power_regen = 1,
-	use_talent = { id = Talents.T_WAYIST, level = 1, power = 75 },
+	max_power = 60, power_regen = 1,
+	use_talent = { id = Talents.T_WAYIST, level = 1, power = 60 },
 	on_wear = function(self, who)
 		if who.descriptor and who.descriptor.race == "Yeek" then
 			local Talents = require "engine.interface.ActorStats"
@@ -3020,7 +2144,7 @@ newEntity{ base = "BASE_MINDSTAR",
 		damtype = DamageType.MIND,
 	},
 	wielder = {
-		combat_mindpower = 14,
+		combat_mindpower = 15,
 		combat_mindcrit = 8,
 		combat_mentalresist = 25,
 		max_psi = 20,
@@ -3033,9 +2157,11 @@ newEntity{ base = "BASE_MINDSTAR",
 		},
 		inc_stats = { [Stats.STAT_WIL] = 8,},
 	},
+	max_power = 25, power_regen = 1,
+	use_talent = { id = Talents.T_RESONANCE_FIELD, level = 3, power = 25 },
 }
 
-newEntity{ base = "BASE_STAFF",
+newEntity{ base = "BASE_STAFF", define_as = "SET_SCEPTRE_LICH",
 	power_source = {arcane=true},
 	unique = true,
 	name = "Sceptre of the Archlich",
@@ -3079,6 +2205,11 @@ newEntity{ base = "BASE_STAFF",
 			game.logPlayer(who, "#LIGHT_BLUE#You feel the power of the sceptre flow over your undead form!")
 		end
 	end,
+	set_list = { {"define_as", "SET_LICH_RING"} },
+	on_set_complete = function(self, who)
+	end,
+	on_set_broken = function(self, who)
+	end,
 }
 
 newEntity{ base = "BASE_MINDSTAR",
@@ -3089,7 +2220,7 @@ newEntity{ base = "BASE_MINDSTAR",
 	level_range = {27, 34},
 	color=colors.GREEN, image = "object/artifact/oozing_heart.png",
 	rarity = 250,
-	desc = [[This mindstar oozes a thick, sticky liquid. Magic seems to die around it.]],
+	desc = [[This mindstar oozes a thick, caustic liquid. Magic seems to die around it.]],
 	cost = 85,
 	require = { stat = { wil=36 }, },
 	material_level = 4,
@@ -3106,6 +2237,7 @@ newEntity{ base = "BASE_MINDSTAR",
 		combat_spellresist=15,
 		inc_damage={
 			[DamageType.NATURE] = 18,
+			[DamageType.ACID] = 15,
 		},
 		resists={
 			[DamageType.ARCANE] = 12,
@@ -3254,9 +2386,7 @@ newEntity{ base = "BASE_MINDSTAR",
 	end,
 	act = function(self)
 		self:useEnergy()
-		if self.power < self.max_power then
-			self.power=self.power + 1
-		end
+		self:regenPower()
 		if not self.worn_by then return end
 		if game.level and not game.level:hasEntity(self.worn_by) and not self.worn_by.player then self.worn_by = nil return end
 		if self.worn_by:attr("dead") then return end
@@ -3398,6 +2528,7 @@ newEntity{ base = "BASE_LEATHER_BELT",
 		inc_stats = { [Stats.STAT_LCK] = 8, [Stats.STAT_DEX] = 12, [Stats.STAT_CUN] = 10,},
 		slow_projectiles = 30,
 		combat_def_ranged = 20,
+		projectile_evasion = 15,
 	},
 	max_power = 30, power_regen = 1,
 	use_talent = { id = Talents.T_EVASION, level = 4, power = 30 },
@@ -3533,9 +2664,9 @@ newEntity{ base = "BASE_WHIP",
 		damtype=DamageType.MIND,
 	},
 	wielder = {
-		combat_mindpower = 8,
+		combat_mindpower = 10,
 		combat_mindcrit = 3,
-		talent_on_hit = { [Talents.T_MINDLASH] = {level=1, chance=10} },
+		talent_on_hit = { [Talents.T_MINDLASH] = {level=1, chance=18} },
 	},
 	max_power = 10, power_regen = 1,
 	use_power = { name = "strike all targets in a line", power = 10,
@@ -3564,17 +2695,17 @@ newEntity{ base = "BASE_GREATSWORD",
 	level_range = {32, 40},
 	color=colors.DARKRED,
 	rarity = 300,
-	desc = [[This massive, flame coated greatsword was stolen from a mighty demon countless years ago, by the hero Kestin Highfin. It constantly seeks to drain and incinerate.]],
+	desc = [[This massive, flame-coated greatsword was stolen by the adventurer Kestin Highfin, during the Age of Dusk. It originally belonged to a demon named Frond'Ral the Red.  It roars with vile flames and its very existence seems to be a blight upon the lands.]],
 	cost = 400,
 	require = { stat = { str=40 }, },
 	material_level = 4,
 	combat = {
-		dam = 64,
+		dam = 68,
 		apr = 5,
 		physcrit = 10,
-		dammod = {str=1.2},
-		convert_damage={[DamageType.FIREBURN] = 50,},
-		melee_project={[DamageType.DRAINLIFE] = 25},
+		dammod = {str=1.25},
+		convert_damage={[DamageType.FIREBURN] = 50, [DamageType.BLIGHT] = 10,},
+		lifesteal = 8, --Won't affect the burn damage, so it gets to have a bit more
 	},
 	wielder = {
 		resists = {
@@ -3751,7 +2882,7 @@ newEntity{ base = "BASE_LONGSWORD", define_as="CORPUS",
 			if not rng.percent(o.combat.physcrit*0.8) or o.combat.physcrit < 30 then return end
 			o.summon(o, who)
 		end},
-		special_on_crit = {desc="grows in power", fct=function(combat, who, target)
+		special_on_crit = {desc="grows in power", on_kill=1, fct=function(combat, who, target)
 			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "CORPUS")
 			if not o or not who:getInven(inven_id).worn then return end
 			who:onTakeoff(o, true)
@@ -3833,11 +2964,11 @@ newEntity{ base = "BASE_LONGSWORD",
 		dam = 47,
 		apr = 20,
 		physcrit = 7,
-		dammod = {str=0.8,wil=0.2},
+		dammod = {str=1,wil=0.1},
 		damage_convert = {[DamageType.MIND]=20,},
 		special_on_hit = {desc="torments the target with many mental effects", fct=function(combat, who, target)
 			if not who:checkHit(who:combatMindpower(), target:combatMentalResist()*0.9) then return end
-			target:setEffect(target.EFF_WEAKENED_MIND, 2, {power=18})
+			target:setEffect(target.EFF_WEAKENED_MIND, 2, {power=0, save=20})
 			if not rng.percent(40) then return end
 			local eff = rng.table{"stun", "malign", "agony", "confusion", "silence",}
 			if not target:canBe(eff) then return end
@@ -3849,7 +2980,7 @@ newEntity{ base = "BASE_LONGSWORD",
 			elseif eff == "silence" then target:setEffect(target.EFF_SILENCED, 3, {})
 			end
 		end},
-		special_on_kill = {desc="reduces loss of mental save", fct=function(combat, who, target)
+		special_on_kill = {desc="reduces mental save penalty", fct=function(combat, who, target)
 			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "ANIMA")
 			if not o or not who:getInven(inven_id).worn then return end
 			if o.wielder.combat_mentalresist >= 0 then return end
@@ -3879,8 +3010,7 @@ newEntity{ base = "BASE_LONGSWORD",
 				local target = game.level.map(px, py, engine.Map.ACTOR)
 				if not target then return end
 				if not rng.percent(20) then return end
-				if not who:checkHit(who:combatMindpower(), target:combatMentalResist()) then return end
-				target:setEffect(target.EFF_WEAKENED_MIND, 2, {power=5})
+				target:setEffect(target.EFF_WEAKENED_MIND, 2, {power=0, save=5})
 				who:logCombat(target, "Anmalice focuses its mind-piercing eye on #Target#!")
 			end)
 	end,
@@ -3892,7 +3022,7 @@ newEntity{ base = "BASE_LONGSWORD",
 			game.logPlayer(who, "#CRIMSON#The tentacles release your arm, sated.")
 		else
 			game.logPlayer(who, "#CRIMSON#As you tear the tentacles from your arm, horrible images enter your mind!")
-			who:setEffect(who.EFF_WEAKENED_MIND, 15, {power=25})
+			who:setEffect(who.EFF_WEAKENED_MIND, 15, {power=0, save=25})
 			who:setEffect(who.EFF_AGONY, 5, { src=who, damage=15, mindpower=40, range=10, minPercent=10, duration=5})
 		end
 		self.wielder.combat_mentalresist = -30
@@ -3921,12 +3051,12 @@ newEntity{ base = "BASE_LONGSWORD", define_as="MORRIGOR",
 		apr = 12,
 		physcrit = 7,
 		dammod = {str=0.6, mag=0.6},
-		special_on_hit = {desc="deal magical damage", fct=function(combat, who, target)
+		special_on_hit = {desc="deal bonus arcane and darkness damage", fct=function(combat, who, target)
 			local tg = {type="ball", range=1, radius=0, selffire=false}
 			who:project(tg, target.x, target.y, engine.DamageType.ARCANE, who:getMag()*0.5)
 			who:project(tg, target.x, target.y, engine.DamageType.DARKNESS, who:getMag()*0.5)
 		end},
-		special_on_kill = {desc="swallows the victim's soul, gaining a new power until unequipped", fct=function(combat, who, target)
+		special_on_kill = {desc="swallows the victim's soul, gaining a new power", fct=function(combat, who, target)
 			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "MORRIGOR")
 			if o.use_talent then return end
 			local got_talent = false
@@ -3944,7 +3074,7 @@ newEntity{ base = "BASE_LONGSWORD", define_as="MORRIGOR",
 				o.use_talent = {}
 				o.use_talent.id = t.id
 				o.use_talent.power = (who:getTalentCooldown(t) or 5)
-				o.use_talent.level = 1
+				o.use_talent.level = 3
 				o.power = 1
 				o.max_power = (who:getTalentCooldown(t) or 5)
 				o.power_regen = 1
@@ -3966,7 +3096,7 @@ newEntity{ base = "BASE_WHIP", define_as = "HYDRA_BITE",
 	unique = true,
 	name = "Hydra's Bite", color = colors.LIGHT_RED, image = "object/artifact/hydras_bite.png",
 	unided_name = "triple headed flail",
-	desc = [[This three headed stralite flail strikes with the power of a hydra. With each attack it lashes out, hitting everyone around you.]],
+	desc = [[This three-headed stralite flail strikes with the power of a hydra. With each attack it lashes out, hitting everyone around you.]],
 	level_range = {32, 40},
 	rarity = 250,
 	require = { stat = { str=40 }, },
@@ -4011,7 +3141,7 @@ newEntity{ base = "BASE_WHIP", define_as = "HYDRA_BITE",
 		end},
 	},
 	wielder = {
-		inc_damage={[DamageType.NATURE]=8,[DamageType.ACID]=8,[DamageType.LIGHTNING]=8,},
+		inc_damage={[DamageType.NATURE]=12, [DamageType.ACID]=12, [DamageType.LIGHTNING]=12,},
 
 	},
 }
@@ -4023,7 +3153,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 	name = "Spellhunt Remnants", color = colors.GREY, image = "object/artifact/spellhunt_remnants.png",
 	unided_name = "rusted voratun gauntlets",
 	desc = [[These once brilliant voratun gauntlets have fallen into a deep decay. Originally used in the spellhunt, they were often used to destroy arcane artifacts, curing the world of their influence.]],
-	level_range = {1, 25}, --Relevent at all levels, though of course mat level 1 limits it to early game.
+	level_range = {1, 25}, --Relevant at all levels, though of course mat level 1 limits it to early game.
 	rarity = 450, -- But rare to make it not ALWAYS appear.
 	cost = 1000,
 	material_level = 1,
@@ -4051,7 +3181,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 		who:onTakeoff(self, true)
 		self.wielder=nil
 		if level==2 then -- LEVEL 2
-		self.desc = [[These once brilliant voratun gauntlets appear heavily decayed. Originally used in the spellhunt, it was often used to destroy arcane artifacts, curing the world of their influence.]]
+		self.desc = [[These once brilliant voratun gauntlets appear heavily decayed. Originally used in the spellhunt, they were often used to destroy arcane artifacts, ridding the world of their influence.]]
 		self.wielder={
 			combat_mindpower=6,
 			combat_mindcrit=2,
@@ -4070,7 +3200,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 			},
 		}
 		elseif  level==3 then -- LEVEL 3
-		self.desc = [[These voratun gauntlets appear to have suffered considerable damage. Originally used in the spellhunt, it was often used to destroy arcane artifacts, curing the world of their influence.]]
+		self.desc = [[These voratun gauntlets appear to have suffered considerable damage. Originally used in the spellhunt, they were often used to destroy arcane artifacts, ridding the world of their influence.]]
 		self.wielder={
 			combat_mindpower=8,
 			combat_mindcrit=3,
@@ -4089,7 +3219,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 			},
 		}
 		elseif  level==4 then -- LEVEL 4
-		self.desc = [[These voratun gauntlets shine brightly beneath a thin layer of wear. Originally used in the spellhunt, it was often used to destroy arcane artifacts, curing the world of their influence.]]
+		self.desc = [[These voratun gauntlets shine brightly beneath a thin layer of wear. Originally used in the spellhunt, they were often used to destroy arcane artifacts, ridding the world of their influence.]]
 		self.wielder={
 			combat_mindpower=10,
 			combat_mindcrit=4,
@@ -4108,7 +3238,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 			},
 		}
 		elseif  level==5 then -- LEVEL 5
-		self.desc = [[These brilliant voratun gauntlets shine with an almost otherworldly glow. Originally used in the spellhunt, it was often used to destroy arcane artifacts, curing the world of their influence. You feel proud of having fulfilled this ancient duty.]]
+		self.desc = [[These brilliant voratun gauntlets shine with an almost otherworldly glow. Originally used in the spellhunt, they were often used to destroy arcane artifacts, ridding the world of their influence. You feel proud of having fulfilled this ancient duty.]]
 		self.wielder={
 			combat_mindpower=12,
 			combat_mindcrit=5,
@@ -4196,7 +3326,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 newEntity{ base = "BASE_LONGBOW",
 	power_source = {arcane=true},
 	name = "Merkul's Second Eye", unided_name = "sleek stringed bow", unique=true, image = "object/artifact/merkuls_second_eye.png",
-	desc = [[This bow is said to be the tool of an infamous dwarven spy, rumours said it allowed him to "steal" the eyes of his enemies. Adversaries struck were left alive, only to unknowingly divulge their secrets to his unwavering sight.]],
+	desc = [[This bow is said to have been the tool of an infamous dwarven spy. Rumours say it allowed him to "steal" the eyes of his enemies. Adversaries struck were left alive, only to unknowingly divulge their secrets to his unwavering sight.]],
 	level_range = {20, 38},
 	rarity = 250,
 	require = { stat = { dex=24 }, },
@@ -4214,38 +3344,6 @@ newEntity{ base = "BASE_LONGBOW",
 	},
 }
 
-newEntity{ base = "BASE_AMULET", --Thanks Grayswandir!
-	power_source = {arcane=true},
-	unique = true,
-	name = "Mirror Shards",
-	unided_name = "mirror lined chain", image = "object/artifact/mirror_shards.png",
-	desc = [[Said to have been created by a powerful mage after his home was destroyed by a mob following the Spellblaze. Though he fled, his possessions were crushed, burned, and smashed. When he returned to the ruins, he made this amulet from the remains of his shattered mirror.]],
-	color = colors.LIGHT_RED,
-	level_range = {18, 30},
-	rarity = 220,
-	cost = 350,
-	material_level = 3,
-	wielder = {
-		inc_damage={
-			[DamageType.LIGHT] = 12,
-		},
-		resists={
-			[DamageType.LIGHT] = 25,
-		},
-		lite=1,
-		on_melee_hit = {[DamageType.RANDOM_BLIND]=10},
-	},
-	max_power = 24, power_regen = 1,
-	use_power = { name = "create a reflective shield (50% reflection rate)", power = 24,
-		use = function(self, who)
-			who:setEffect(who.EFF_DAMAGE_SHIELD, 5, {power=150 + who:getMag(100)*2, reflect=50})
-			game:playSoundNear(who, "talents/arcane")
-			game.logSeen(who, "%s forges a reflective barrier!", who.name:capitalize())
-			return {id=true, used=true}
-		end
-	},
-}
-
 newEntity{ base = "BASE_SHIELD",
 	power_source = {nature=true},
 	unique = true,
@@ -4264,7 +3362,7 @@ newEntity{ base = "BASE_SHIELD",
 		physcrit = 4.5,
 		dammod = {str=1},
 		damtype = DamageType.LIGHT,
-		special_on_hit = {desc="releases a burst of light", fct=function(combat, who, target)
+		special_on_hit = {desc="releases a burst of light", on_kill=1, fct=function(combat, who, target)
 			local tg = {type="ball", range=0, radius=1, selffire=false}
 			local grids = who:project(tg, target.x, target.y, engine.DamageType.LITE_LIGHT, 30 + who:getWil()*0.5)
 			game.level.map:particleEmitter(target.x, target.y, tg.radius, "ball_light", {radius=tg.radius})
@@ -4339,8 +3437,8 @@ newEntity{ base = "BASE_LEATHER_BOOT",
 			[DamageType.PHYSICAL] = 5,
 		},
 	},
-	max_power = 18, power_regen = 1,
-	use_talent = { id = Talents.T_TELEKINETIC_LEAP, level = 4, power = 15 },
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_TELEKINETIC_LEAP, level = 3, power = 20 },
 }
 
 newEntity{ base = "BASE_CLOTH_ARMOR", --Thanks Grayswandir!
@@ -4377,23 +3475,30 @@ newEntity{ base = "BASE_WHIP", --Thanks Grayswandir!
 	require = { stat = { dex=14 }, },
 	cost = 150,
 	rarity = 325,
-	level_range = {4, 12},
+	level_range = {40, 50},
 	metallic = false,
-	material_level = 1,
+	material_level = 5,
 	combat = {
-		dam = 19,
+		dam = 55,
 		apr = 8,
-		physcrit = 5,
+		physcrit = 9,
 		dammod = {dex=1},
-		melee_project={[DamageType.BLEED] = 15},
+		melee_project={[DamageType.BLEED] = 30},
 		burst_on_crit = {
-			[DamageType.BLEED] = 20,
+			[DamageType.BLEED] = 50,
 		},
-		talent_on_hit = { [Talents.T_BONE_GRAB] = {level=1, chance=20} },
+		talent_on_hit = { [Talents.T_BONE_GRAB] = {level=3, chance=10}, [Talents.T_BONE_SPEAR] = {level=4, chance=20} },
+		
 	},
-	max_power = 24, power_regen = 1,
-	use_talent = { id = Talents.T_BONE_NOVA, level = 2, power = 24 },
-	talent_on_spell = { {chance=10, talent=Talents.T_BONE_SPEAR, level=2} },
+	wielder = {
+		combat_def = 12,
+		combat_spellpower = 4,
+		combat_physspeed = 0.1,
+		talents_types_mastery = { ["corruption/bone"] = 0.25, },
+	},
+	max_power = 20, power_regen = 1,
+	use_talent = { id = Talents.T_BONE_NOVA, level = 4, power = 20 },
+	talent_on_spell = { {chance=10, talent=Talents.T_BONE_SPEAR, level=4} },
 }
 
 newEntity{ base = "BASE_MINDSTAR",
@@ -4402,7 +3507,7 @@ newEntity{ base = "BASE_MINDSTAR",
 	name = "Core of the Forge", image = "object/artifact/core_of_the_forge.png",
 	unided_name = "fiery mindstar",
 	level_range = {38, 50},
-	color=colors.RED, image = "object/artifact/nexus_of_the_way.png",
+	color=colors.RED,
 	rarity = 350,
 	desc = [[This blazing hot mindstar beats rhythmically, releasing a burst of heat with each strike.]],
 	cost = 280,
@@ -4416,7 +3521,7 @@ newEntity{ base = "BASE_MINDSTAR",
 		damtype = DamageType.DREAMFORGE,
 	},
 	wielder = {
-		combat_mindpower = 14,
+		combat_mindpower = 15,
 		combat_mindcrit = 8,
 		combat_atk=10,
 		combat_dam=10,
@@ -4480,12 +3585,6 @@ newEntity{ base = "BASE_LEATHER_BOOT", --Thanks Grayswandir!
 
 			-- Check LOS
 			local rad = 2
-			if not who:hasLOS(x, y) and rng.percent(35 + (game.level.map.attrs(who.x, who.y, "control_teleport_fizzle") or 0)) then
-				game.logPlayer(who, "The targeted phase door fizzles and works randomly!")
-				x, y = who.x, who.y
-				rad = tg.range
-			end
-
 			game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
 			who:teleportRandom(x, y, rad)
 			game.level.map:particleEmitter(who.x, who.y, 1, "teleport")
@@ -4508,7 +3607,7 @@ newEntity{ base = "BASE_GREATSWORD", -- Thanks Alex!
 	require = { stat = { str=10 }, },
 	sentient=true,
 	material_level = 3,
-	special_desc = function(self) return "Attack speed improves with strength and size category." end,
+	special_desc = function(self) return "Attack speed improves with your strength and size category." end,
 	combat = {
 		dam = 48,
 		apr = 12,
@@ -4552,7 +3651,7 @@ newEntity{ base = "BASE_ARROW", --Thanks Grayswandir!
 	power_source = {arcane=true},
 	unique = true,
 	name = "Void Quiver",
-	unided_name = "etheral quiver",
+	unided_name = "ethereal quiver",
 	desc = [[An endless supply of arrows lay within this deep black quiver. Tiny white lights dot its surface.]],
 	color = colors.BLUE, image = "object/artifact/void_quiver.png",
 	level_range = {35, 50},
@@ -4566,7 +3665,7 @@ newEntity{ base = "BASE_ARROW", --Thanks Grayswandir!
 		dam = 45,
 		apr = 30, --No armor can stop the void
 		physcrit = 6,
-		dammod = {dex=0.7, str=0.5},
+		dammod = {dex=0.7, str=0.5, mag=0.1,},
 		damtype = DamageType.VOID,
 		talent_on_hit = { [Talents.T_QUANTUM_SPIKE] = {level=1, chance=10}, [Talents.T_TEMPORAL_CLONE] = {level=1, chance=5} },
 	},
@@ -4618,9 +3717,7 @@ newEntity{ base = "BASE_LITE", --Thanks Frumple!
 	end,
 	act = function(self)
 		self:useEnergy()
-		if self.power < self.max_power then -- Charge up activate event
-			self.power=self.power + 1
-		end
+		self:regenPower()
 		
 		local who=self.worn_by --Make sure you can actually act!
 		if not self.worn_by then return end
@@ -4645,9 +3742,11 @@ newEntity{ base = "BASE_LITE", --Thanks Frumple!
 		end)
 		who:project({type="ball", range=0, radius=self.wielder.lite}, who.x, who.y, engine.DamageType.LITE, 100) -- Light the space!
 		if (5 + math.floor(self.charge/20)) > self.wielder.lite and self.wielder.lite < 10 then
+			local p = self.power
 			who:onTakeoff(self, true)
 			self.wielder.lite = math.min(10, 5+math.floor(self.charge/20))
 			who:onWear(self, true)
+			self.power = p
 		end
 	end,
 	wielder = {
@@ -4690,35 +3789,6 @@ newEntity{ base = "BASE_LITE", --Thanks Frumple!
 	},
 }
 
-newEntity{ base = "BASE_KNIFE", -- Thanks Grayswandir!
-	power_source = {arcane=true},
-	unique = true,
-	name = "Spellblaze Shard", image = "object/artifact/spellblaze_shard.png",
-	unided_name = "crystalline dagger",
-	desc = [[This jagged crystal glows with an unnatural light. A strap of cloth is wrapped around one end, as a handle.]],
-	level_range = {12, 25},
-	rarity = 200,
-	require = { stat = { dex=17 }, },
-	cost = 250,
-	metallic = false,
-	material_level = 2,
-	combat = {
-		dam = 20,
-		apr = 10,
-		physcrit = 12,
-		dammod = {dex=0.45,str=0.45,},
-		melee_project={[DamageType.FIREBURN] = 10, [DamageType.DRAINLIFE] = 10,},
-		burst_on_crit = {
-			[DamageType.CORRUPTED_BLOOD] = 20,
-			[DamageType.FIRE] = 20,
-		},
-	},
-	wielder = {
-		inc_stats = {[Stats.STAT_MAG] = 5,},
-		resists = {[DamageType.BLIGHT] = 10, [DamageType.FIRE] = 10},
-	},
-}
-
 newEntity{ base = "BASE_LITE", --Thanks Grayswandir!
 	power_source = {arcane=true},
 	unique = true,
@@ -4731,8 +3801,8 @@ newEntity{ base = "BASE_LITE", --Thanks Grayswandir!
 	cost = 320,
 	material_level=3,
 	wielder = {
-		lite = 4,
-		combat_spellpower=8,
+		lite = 5,
+		combat_spellpower=10,
 		
 		inc_damage = {[DamageType.COLD]=15},
 		resists = {[DamageType.COLD]=20},
@@ -4776,7 +3846,7 @@ newEntity{ base = "BASE_LITE", --Thanks Grayswandir!
 				cut_immune = 1,
 				see_invisible = 80,
 				undead = 1,
-				will_o_wisp_dam = 100,
+				will_o_wisp_dam = 110 + who:getMag() * 2.5,
 				resolvers.talents{[Talents.T_WILL_O__THE_WISP_EXPLODE] = 1,},
 				
 				faction = who.faction,
@@ -4818,7 +3888,7 @@ newEntity{ base = "BASE_TOOL_MISC",
 		combat_mindpower=8,
 	},
 		max_power = 35, power_regen = 1,
-	use_power = { name = "call an antimagic pillar", power = 35,
+	use_power = { name = "call an antimagic pillar, but silence yourself", power = 35,
 		use = function(self, who)
 			local x, y = util.findFreeGrid(who.x, who.y, 5, true, {[engine.Map.ACTOR]=true})
 			if not x then
@@ -4831,15 +3901,16 @@ newEntity{ base = "BASE_TOOL_MISC",
 				resolvers.nice_tile{image="invis.png", add_mos = {{image="terrain/darkgreen_moonstone_01.png", display_h=2, display_y=-1}}},
 				name = "Stone Guardian",
 				type = "totem", subtype = "antimagic",
-				desc = "This massive stone pillar drips with a vicious slime. Nature's power flows through it, obliterating magic all around it..",
+				desc = "This massive stone pillar drips with a viscous slime. Nature's power flows through it, obliterating magic all around it...",
 				rank = 3,
 				blood_color = colors.GREEN,
 				display = "T", color=colors.GREEN,
 				life_rating=18,
+				combat_dam = 40,
 				combat = {
 					dam=resolvers.rngavg(50,60),
 					atk=resolvers.rngavg(50,75), apr=25,
-					dammod={wil=1.1}, physcrit = 10,
+					dammod={wil=1.2}, physcrit = 10,
 					damtype=engine.DamageType.SLIME,
 				},
 				level_range = {1, nil}, exp_worth = 0,
@@ -4853,7 +3924,7 @@ newEntity{ base = "BASE_TOOL_MISC",
 				size_category = 5,
 				blind=1,
 				esp_all=1,
-				resists={[engine.DamageType.BLIGHT] = 40, [engine.DamageType.ARCANE] = 40, [engine.DamageType.NATURE] = 70},
+				resists={all = 15, [engine.DamageType.BLIGHT] = 40, [engine.DamageType.ARCANE] = 40, [engine.DamageType.NATURE] = 70},
 				no_breath = 1,
 				cant_be_moved = 1,
 				stone_immune = 1,
@@ -4865,10 +3936,10 @@ newEntity{ base = "BASE_TOOL_MISC",
 				stun_immune = 1,
 				blind_immune = 1,
 				cut_immune = 1,
-				knockback_resist,
+				knockback_resist=1,
 				combat_mentalresist=50,
 				combat_spellresist=100,
-				on_act = function(self) self:project({type="ball", range=0, radius=5, selffire=false}, self.x, self.y, engine.DamageType.SILENCE, {dur=2, power_check=self:combatMindpower()}) end,
+				on_act = function(self) self:project({type="ball", range=0, radius=5, friendlyfire=false}, self.x, self.y, engine.DamageType.SILENCE, {dur=2, power_check=self:combatMindpower()}) end,
 				resolvers.talents{
 					[Talents.T_RESOLVE]={base=3, every=6},
 					[Talents.T_MANA_CLASH]={base=3, every=5},
@@ -4891,6 +3962,7 @@ newEntity{ base = "BASE_TOOL_MISC",
 				title="Summon",
 				orders = {target=true, leash=true, anchor=true, talents=true},
 			})
+			who:setEffect(who.EFF_SILENCED, 5, {})
 			return {id=true, used=true}
 		end
 	},
@@ -4930,16 +4002,15 @@ newEntity{ base = "BASE_TOOL_MISC",
 	unided_name = "strange jagged shape",
 	color = colors.GREY,
 	level_range = {40, 50},
-	desc = [[This jagged shape looks like a hole in space, yet is solid, though light in weight.]],
+	desc = [[This jagged shape looks like a hole in space, yet it is solid, though light in weight.]],
 	cost = 320,
 	material_level = 5,
 	wielder = {
 		resists={[DamageType.DARKNESS] = 10, [DamageType.TEMPORAL] = 10},
 		inc_damage={[DamageType.DARKNESS] = 12, [DamageType.TEMPORAL] = 12},
 		on_melee_hit={[DamageType.VOID] = 16},
-		combat_spellresist = 15,
 		inc_stats = {[Stats.STAT_MAG] = 8,},
-		combat_spellpower=3,
+		combat_spellpower=10,
 	},
 	max_power = 40, power_regen = 1,
 	use_power = { name = "release a burst of void energy", power = 20,
@@ -4954,42 +4025,6 @@ newEntity{ base = "BASE_TOOL_MISC",
 	},
 }
 
-newEntity{ base = "BASE_MASSIVE_ARMOR", -- Thanks SageAcrin!
-	power_source = {technique = true, nature = true},
-	unique = true,
-	name = "Thalore-Wood Cuirass", image = "object/artifact/thalore_wood_cuirass.png",
-	unided_name = "thick wooden plate armour",
-	desc = [[Expertly hewn from the bark of trees, this wooden armor provides excellent protection at a low weight.]],
-	color = colors.WHITE,
-	level_range = {8, 22},
-	rarity = 220,
-	require = { stat = { str=24 }, },
-	cost = 300,
-	material_level = 2,
-	encumber = 12,
-	metallic=false,
-	wielder = {
-		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_DEX] = 3,},
-		combat_armor = 10,
-		combat_def = 4,
-		fatigue = 14,
-		resists = {
-			[DamageType.DARKNESS] = 18,
-			[DamageType.COLD] = 18,
-			[DamageType.NATURE] = 18,
-		},
-		healing_factor = 0.25,
-	},
-	on_wear = function(self, who)
-		if who.descriptor and who.descriptor.subrace == "Thalore" then
-			local Stats = require "engine.interface.ActorStats"
-
-			self:specialWearAdd({"wielder","fatigue"}, -14)
-			game.logPlayer(who, "#DARK_GREEN#The armor molds comfortably to one of its caretakers.")
-		end
-	end,
-}
-
 newEntity{ base = "BASE_SHIELD", --Thanks SageAcrin!
 	power_source = {nature=true},
 	unided_name = "thick coral plate",
@@ -5001,7 +4036,7 @@ newEntity{ base = "BASE_SHIELD", --Thanks SageAcrin!
 	cost = 60,
 	material_level = 1,
 	metallic = false,
-	special_desc = function(self) return "When you block an attack, there is a chance that a spray of icy cold water will spray at the target." end,
+	special_desc = function(self) return "When you block an attack, there is a chance that a blast of icy cold water will spray at the target." end,
 	special_combat = {
 		dam = 18,
 		block = 48,
@@ -5040,7 +4075,7 @@ newEntity{ base = "BASE_AMULET", --Thanks Grayswandir!
 	unique = true,
 	name = "Shard of Insanity", color = colors.DARK_GREY, image = "object/artifact/shard_of_insanity.png",
 	unided_name = "cracked black amulet",
-	desc = [[A deep red light glows from within this damaged amulet of black stone. When you touch it, you can hear voices whispering into your mind.]],
+	desc = [[A deep red light glows from within this damaged amulet of black stone. When you touch it, you can hear voices whispering within your mind.]],
 	level_range = {20, 32},
 	rarity = 290,
 	cost = 500,
@@ -5059,6 +4094,7 @@ newEntity{ base = "BASE_AMULET", --Thanks Grayswandir!
 			[DamageType.MIND] 	= 20,
 		},
 		on_melee_hit={[DamageType.RANDOM_CONFUSION] = 5},
+		melee_project={[DamageType.RANDOM_CONFUSION] = 5},
 	},
 	max_power = 30, power_regen = 1,
 	use_talent = { id = Talents.T_INNER_DEMONS, level = 4, power = 30 },
@@ -5071,7 +4107,7 @@ newEntity{ base = "BASE_SHOT", --Thanks Grayswandir!
 	name = "Pouch of the Subconscious", image = "object/artifact/pouch_of_the_subconscious.png",
 	unided_name = "familiar pouch",
 	desc = [[You find yourself constantly fighting an urge to handle this strange pouch of shot.]],
-	color = colors.RED, image = "object/artifact/star_shot.png",
+	color = colors.RED,
 	level_range = {25, 40},
 	rarity = 300,
 	cost = 110,
@@ -5084,7 +4120,8 @@ newEntity{ base = "BASE_SHOT", --Thanks Grayswandir!
 		physcrit = 10,
 		dammod = {dex=0.7, cun=0.5, wil=0.1},
 		ranged_project={
-			[DamageType.MIND] = 20,
+			[DamageType.MIND] = 25,
+			[DamageType.MINDSLOW] = 30,
 		},
 		talent_on_hit = { [Talents.T_RELOAD] = {level=1, chance=50} },
 	},
@@ -5096,7 +4133,7 @@ newEntity{ base = "BASE_SHOT", --Thanks Grayswandir!
 	name = "Wind Worn Shot", image = "object/artifact/wind_worn_shot.png",
 	unided_name = "perfectly smooth shot",
 	desc = [[These perfectly white spheres appear to have been worn down by years of exposure to strong winds.]],
-	color = colors.RED, image = "object/artifact/star_shot.png",
+	color = colors.RED,
 	level_range = {25, 40},
 	rarity = 300,
 	cost = 110,
@@ -5109,10 +4146,30 @@ newEntity{ base = "BASE_SHOT", --Thanks Grayswandir!
 		physcrit = 10,
 		travel_speed = 1,
 		dammod = {dex=0.7, cun=0.5},
-		ranged_project={
-			[DamageType.LIGHTNING] = 20,
-		},
-		talent_on_hit = { [Talents.T_TORNADO] = {level=2, chance=8} },
+		talent_on_hit = { [Talents.T_TORNADO] = {level=2, chance=10} },
+		special_on_hit = {desc="35% chance for lightning to arc to a second target", on_kill=1, fct=function(combat, who, target)
+			if not rng.percent(35) then return end
+			local tgts = {}
+			local x, y = target.x, target.y
+			local grids = core.fov.circle_grids(x, y, 5, true)
+			for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
+				local a = game.level.map(x, y, engine.Map.ACTOR)
+				if a and a ~= target and who:reactionToward(a) < 0 then
+					tgts[#tgts+1] = a
+				end
+			end end
+
+			-- Randomly take targets
+			local tg = {type="beam", range=5, friendlyfire=false, x=target.x, y=target.y}
+			if #tgts <= 0 then return end
+			local a, id = rng.table(tgts)
+			table.remove(tgts, id)
+			local dam = 30 + (who:combatMindpower())
+
+			who:project(tg, a.x, a.y, engine.DamageType.LIGHTNING, rng.avg(1, dam, 3))
+			game.level.map:particleEmitter(x, y, math.max(math.abs(a.x-x), math.abs(a.y-y)), "lightning", {tx=a.x-x, ty=a.y-y})
+			game:playSoundNear(who, "talents/lightning")
+		end},
 	},
 }
 
@@ -5120,7 +4177,7 @@ newEntity{ base = "BASE_GREATMAUL",
 	power_source = {nature=true, antimagic=true},
 	name = "Spellcrusher", color = colors.GREEN, image = "object/artifact/spellcrusher.png",
 	unided_name = "vine coated hammer", unique = true,
-	desc = [[This large steel greatmaul has thick vines wrapped around the handle. ]],
+	desc = [[This large steel greatmaul has thick vines wrapped around the handle.]],
 	level_range = {10, 20},
 	rarity = 300,
 	require = { stat = { str=20 }, },
@@ -5196,7 +4253,7 @@ newEntity{ base = "BASE_TOOL_MISC",
 		combat_dam=3,
 	},
 	max_power = 35, power_regen = 1,
-	use_talent = { id = Talents.T_PSIONIC_PULL, level = 3, power = 18 }, --Before you ask, DG, this is a blade horror talent.
+	use_talent = { id = Talents.T_PSIONIC_PULL, level = 3, power = 18 },
 }
 
 newEntity{ base = "BASE_GREATSWORD", --Thanks Grayswandir!
@@ -5248,6 +4305,7 @@ newEntity{ base = "BASE_GLOVES", --Thanks SageAcrin /AND/ Edge2054!
 		inc_damage={[DamageType.DARKNESS] = 8, [DamageType.TEMPORAL] = 8},
 		resists_pen={[DamageType.DARKNESS] = 10, [DamageType.TEMPORAL] = 10},
 		negative_regen=0.2,
+		negative_regen_ref_mod=0.2,
 		combat = {
 			dam = 13,
 			apr = 3,
@@ -5267,7 +4325,7 @@ newEntity{ base = "BASE_GEM", --Thanks SageAcrin and Graziel!
 	name = "Prothotipe's Prismatic Eye", subtype = "multi-hued",
 	color = colors.WHITE, image = "object/artifact/prothotipes_prismatic_eye.png",
 	level_range = {18, 30},
-	desc = [[This cracked gemstone appears faded with age. It appears to have once been the eye of a golem.]],
+	desc = [[This cracked gemstone looks faded with age. It appears to have once been the eye of a golem.]],
 	rarity = 240,
 	cost = 200,
 	identified = false,
@@ -5337,18 +4395,19 @@ newEntity{ base = "BASE_TOOL_MISC", --Sorta Thanks Donkatsu!
 	unided_name = "tree shaped totem",
 	color = colors.GREEN,
 	level_range = {40, 50},
-	desc = [[This small tree shaped totem is imbued with powerful healing energies.]],
+	desc = [[This small tree-shaped totem is imbued with powerful healing energies.]],
 	cost = 320,
 	material_level = 4,
+	special_desc = function(self) return "Heals all nearby living creatures by 5 points each turn." end,
 	sentient=true,
+	use_no_energy = true,
 	wielder = {
 		resists={[DamageType.BLIGHT] = 10, [DamageType.NATURE] = 10},
 		inc_damage={[DamageType.NATURE] = 10},
-		on_melee_hit={[DamageType.NATURE] = 10},
 		talents_types_mastery = { ["wild-gift/call"] = 0.1, ["wild-gift/harmony"] = 0.1, },
 		inc_stats = {[Stats.STAT_WIL] = 7, [Stats.STAT_CON] = 6,},
 		combat_mindpower=7,
-		healing_factor=0.2,
+		healing_factor=0.25,
 	},
 	on_takeoff = function(self, who)
 		self.worn_by=nil
@@ -5365,13 +4424,21 @@ newEntity{ base = "BASE_TOOL_MISC", --Sorta Thanks Donkatsu!
 	end,
 	act = function(self)
 		self:useEnergy()
+		self:regenPower()
 		if not self.worn_by then return end
 		if game.level and not game.level:hasEntity(self.worn_by) and not self.worn_by.player then self.worn_by=nil return end
 		if self.worn_by:attr("dead") then return end
 		local who = self.worn_by
 		local blast = {type="ball", range=0, radius=2, selffire=true}
-		who:project(blast, who.x, who.y, engine.DamageType.HEALING_NATURE, 3)
+		who:project(blast, who.x, who.y, engine.DamageType.HEALING_NATURE, 5)
 	end,
+	max_power = 15, power_regen = 1,
+	use_power = { name = "take root increasing health, armor, and armor hardiness but rooting you in place", power = 10,
+		use = function(self, who)
+			who:setEffect(who.EFF_TREE_OF_LIFE, 4, {})
+			return {id=true, used=true}
+		end
+	},
 }
 
 newEntity{ base = "BASE_RING",
@@ -5406,7 +4473,7 @@ newEntity{ base = "BASE_CLOAK",
 	wielder = {
 		combat_spellpower=6,
 		combat_armor=10,
-		combat_armor_hardiness=20,
+		combat_armor_hardiness=15,
 		talents_types_mastery = {
 			["spell/earth"] = 0.2,
 			["spell/stone"] = 0.1,
@@ -5414,8 +4481,8 @@ newEntity{ base = "BASE_CLOAK",
 		inc_damage={ [DamageType.PHYSICAL] = 5,},
 		resists={ [DamageType.PHYSICAL] = 5,},
 	},
-	max_power = 50, power_regen = 1,
-	use_talent = { id = Talents.T_STONE_WALL, level = 1, power = 50 },
+	max_power = 60, power_regen = 1,
+	use_talent = { id = Talents.T_STONE_WALL, level = 1, power = 60 },
 }
 
 newEntity{ base = "BASE_LIGHT_ARMOR", --Thanks SageAcrin!
@@ -5432,10 +4499,14 @@ newEntity{ base = "BASE_LIGHT_ARMOR", --Thanks SageAcrin!
 		combat_critical_power = 20,
 		combat_def = 18,
 		combat_armor = 18,
-		combat_armor_hardiness=10,
-		healing_factor=-0.1,
-		melee_project={[DamageType.DARKNESS]=8, [DamageType.COLD]=8},
-		on_melee_hit = {[DamageType.DARKNESS]=8, [DamageType.COLD]=8},
+		combat_armor_hardiness=15,
+		inc_stats = { 
+			[Stats.STAT_MAG] = 5, 
+			[Stats.STAT_CUN] = 5, 
+			[Stats.STAT_DEX] = 5, 
+		},
+		healing_factor=-0.15,
+		on_melee_hit = {[DamageType.DARKNESS]=15, [DamageType.COLD]=15},
 		inc_stealth=10,
  		inc_damage={
 			[DamageType.DARKNESS] = 20,
@@ -5455,7 +4526,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR", --Thanks SageAcrin!
 	max_power = 50, power_regen = 1,
 	use_power = { name = "turn yourself invisible for 10 turns", power = 50,
 		use = function(self, who)
-			who:setEffect(who.EFF_INVISIBILITY, 10, {power=10+who:getCun()/6, penalty=0.5, regen=true})
+			who:setEffect(who.EFF_INVISIBILITY, 10, {power=10+who:getCun()/6+who:getMag()/6, penalty=0.5, regen=true})
 			return {id=true, used=true}
 		end
 	},
@@ -5465,7 +4536,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR", --Thanks SageAcrin!
 	power_source = {nature=true, antimagic=true},
 	unided_name = "gauzy green armor",
 	name = "Breath of Eyal", unique=true, image = "object/artifact/breath_of_eyal.png",
-	desc = [[This light weight armor appears to have been woven of countless sprouts, still curling and growing. When you put it on, you feel the weight of the world on your shoulders, in spite of how light it felt in your hands.]],
+	desc = [[This lightweight armor appears to have been woven of countless sprouts, still curling and growing. When you put it on, you feel the weight of the world on your shoulders, in spite of how light it feels in your hands.]],
 	level_range = {40, 50},
 	rarity = 250,
 	cost = 300,
@@ -5506,10 +4577,10 @@ newEntity{ base = "BASE_TOOL_MISC", --Thanks Alex!
 	name = "Eternity's Counter", color = colors.WHITE,
 	unided_name = "crystalline hourglass", image="object/artifact/eternities_counter.png",
 	desc = [[This hourglass of otherworldly crystal appears to be filled with countless tiny gemstones in place of sand. As they fall, you feel the flow of time change around you.]],
-	level_range = {35, 40},
+	level_range = {30, 40},
 	rarity = 300,
 	cost = 200,
-	material_level = 5,
+	material_level = 4,
 	direction=1,
 	finished=false,
 	sentient=true,
@@ -5544,9 +4615,7 @@ newEntity{ base = "BASE_TOOL_MISC", --Thanks Alex!
 	end,
 	act = function(self)
 		self:useEnergy()
-		if self.power < self.max_power then
-			self.power=self.power + 1
-		end
+		self:regenPower()
 		if not self.worn_by then return end
 		if game.level and not game.level:hasEntity(self.worn_by) and not self.worn_by.player then self.worn_by=nil return end
 		if self.worn_by:attr("dead") then return end
@@ -5555,11 +4624,11 @@ newEntity{ base = "BASE_TOOL_MISC", --Thanks Alex!
 		if self.finished == true then return end
 		who:onTakeoff(self, true)
 		
-		self.wielder.resists.all = self.wielder.resists.all + direction * 2
+		self.wielder.resists.all = self.wielder.resists.all + direction * 3
 		self.wielder.movement_speed = self.wielder.movement_speed + direction * 0.04
-		self.wielder.combat_physspeed = self.wielder.combat_physspeed - direction * 0.04
-		self.wielder.combat_spellspeed = self.wielder.combat_spellspeed - direction * 0.04
-		self.wielder.combat_mindspeed = self.wielder.combat_mindspeed - direction * 0.04
+		self.wielder.combat_physspeed = self.wielder.combat_physspeed - direction * 0.03
+		self.wielder.combat_spellspeed = self.wielder.combat_spellspeed - direction * 0.03
+		self.wielder.combat_mindspeed = self.wielder.combat_mindspeed - direction * 0.03
 		
 		if self.wielder.resists.all <= -10 then 
 			self.wielder.inc_damage.all = 10
@@ -5601,7 +4670,7 @@ newEntity{ base = "BASE_WIZARD_HAT", --Thanks SageAcrin!
 		talents_types_mastery = {
 			["cursed/punishments"]=0.2,
 		},
-		melee_project={[DamageType.RANDOM_GLOOM] = 10},
+		melee_project={[DamageType.RANDOM_GLOOM] = 30},
 		inc_damage={
 			[DamageType.DARKNESS] 	= 10,
 			[DamageType.PHYSICAL]	= 10,
@@ -5623,12 +4692,10 @@ newEntity{ base = "BASE_TOOL_MISC", --And finally, Thank you, Darkgod, for makin
 His last known words were "Somehow this feels like an ending, yet I know there is so much more to find."]],
 	cost = 350,
 	material_level = 4,
-	wielder = {
-		resists={[DamageType.PHYSICAL] = 4,},
-		inc_damage={[DamageType.PHYSICAL] = 3,},
-		
-		inc_stats = {[Stats.STAT_LCK] = 5, [Stats.STAT_CUN] = 5,},
+	wielder = {		
+		inc_stats = {[Stats.STAT_LCK] = 10, [Stats.STAT_CUN] = 5,},
 		combat_atk=12,
+		combat_apr=12,
 		combat_physresist = 10,
 		combat_spellresist = 10,
 		combat_mentalresist = 10,
@@ -5653,32 +4720,32 @@ newEntity{ base = "BASE_LEATHER_CAP",
 	cost = 200,
 	material_level=3,
 	wielder = {
-		combat_def=4,
-		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_CUN] = 6, },
+		combat_def=8,
+		inc_stats = { [Stats.STAT_WIL] = 8, [Stats.STAT_CUN] = 6, },
 		blind_immune=1,
 		combat_mentalresist = 12,
-		resists = {[DamageType.BLIGHT] = 10,},
-		resists_cap = {[DamageType.BLIGHT] = 10,},
+		see_invisible = 15,
+		see_stealth = 15,
 		inc_damage={
 			[DamageType.NATURE] = 20,
 		},
+		infravision=2,
 		resists_pen={
 			[DamageType.NATURE] = 15,
 		},
 		talents_types_mastery = { ["wild-gift/moss"] = 0.1,},
 	},
-	max_power = 50, power_regen = 1,
-	use_talent = { id = Talents.T_EARTH_S_EYES, level = 2, power = 50 },
+	max_power = 35, power_regen = 1,
+	use_talent = { id = Talents.T_EARTH_S_EYES, level = 2, power = 35 },
 }
 
-
 newEntity{ base = "BASE_MINDSTAR",
 	power_source = {antimagic=true},
 	unique = true,
 	name = "Eyal's Will",
 	unided_name = "pale green mindstar",
 	level_range = {38, 50},
-	color=colors.AQUAMARINE, image = "object/artifact/eyal_will.png",
+	color=colors.AQUAMARINE, image = "object/artifact/eyals_will.png",
 	rarity = 380,
 	desc = [[This smooth green crystal flows with a light green slime in its core. Droplets occasionally form on its surface, tufts of grass growing quickly on the ground where they fall.]],
 	cost = 280,
@@ -5694,27 +4761,27 @@ newEntity{ base = "BASE_MINDSTAR",
 	wielder = {
 		combat_mindpower = 20,
 		combat_mindcrit = 9,
-		disease_immune=0.3,
 		resists={[DamageType.BLIGHT] = 25, [DamageType.NATURE] = 15},
-		on_melee_hit={[DamageType.NATURE] = 20},
 		inc_damage={
-			[DamageType.NATURE] 	= 20,
+			[DamageType.NATURE] = 20,
+			[DamageType.ACID] = 10,
 		},
 		resists_pen={
-			[DamageType.NATURE] 	= 20,
+			[DamageType.NATURE] = 20,
+			[DamageType.ACID] = 10,
 		},
-		inc_stats = { [Stats.STAT_WIL] = 6, [Stats.STAT_CUN] = 3, },
+		inc_stats = { [Stats.STAT_WIL] = 10, [Stats.STAT_CUN] = 5, },
 		learn_talent = {[Talents.T_OOZE_SPIT] = 3},
-		talents_types_mastery = { ["wild-gift/mindstar-mastery"] = 0.1, ["wild-gift/antimagic"] = 0.1,},
+		talents_types_mastery = { ["wild-gift/mindstar-mastery"] = 0.1,},
 	},
-	max_power = 60, power_regen = 1,
-	use_talent = { id = Talents.T_SLIME_WAVE, level = 3, power = 60 },
+	max_power = 30, power_regen = 1,
+	use_talent = { id = Talents.T_SLIME_WAVE, level = 3, power = 30 },
 }
 
 newEntity{ base = "BASE_CLOTH_ARMOR",
 	power_source = {nature=true},
 	unique = true,
-	name = "Evermoss Robe", color = colors.DARK_GREEN, image = "object/artifact/robe_spider_silk_robe_spydre.png",
+	name = "Evermoss Robe", color = colors.DARK_GREEN, image = "object/artifact/evermoss_robe.png",
 	unided_name = "fuzzy green robe",
 	desc = [[This thick robe is woven from a dark green moss, firmly bound and cool to the touch. It is said to have rejuvenating properties.]],
 	level_range = {30, 42},
@@ -5767,7 +4834,7 @@ newEntity{ base = "BASE_SLING",
 newEntity{ base = "BASE_ARROW",
 	power_source = {technique=true},
 	unique = true,
-	name = "The Titan's Quiver", image = "object/artifact/hornet_stingers.png",
+	name = "The Titan's Quiver", image = "object/artifact/the_titans_quiver.png",
 	unided_name = "gigantic ceramic arrows",
 	desc = [[These massive arrows are honed to a vicious sharpness, and appear to be nearly unbreakable. They seem more like spikes than any arrow you've ever seen.]],
 	color = colors.GREY,
@@ -5795,7 +4862,7 @@ newEntity{ base = "BASE_ARROW",
 
 newEntity{ base = "BASE_RING",
 	power_source = {technique=true, psionic=true},
-	name = "Inertial Twine", unique=true,
+	name = "Inertial Twine", unique=true, image = "object/artifact/inertial_twine.png",
 	desc = [[This double-helical ring seems resistant to attempts to move it. Wearing it seems to extend this property to your entire body.]],
 	unided_name = "entwined iron ring",
 	level_range = {17, 28},
@@ -5810,15 +4877,15 @@ newEntity{ base = "BASE_RING",
 		knockback_immune=1,
 		combat_armor = 5,
 	},
-	max_power = 30, power_regen = 1,
-	use_talent = { id = Talents.T_BIND, level = 2, power = 30 },
+	max_power = 28, power_regen = 1,
+	use_talent = { id = Talents.T_BIND, level = 2, power = 25 },
 }
 
 newEntity{ base = "BASE_LONGSWORD",
 	power_source = {nature=true, technique=true},
 	unique = true,
 	name = "Everpyre Blade",
-	unided_name = "flaming wooden blade", image = "object/artifact/latafayn.png",
+	unided_name = "flaming wooden blade", image = "object/artifact/everpyre_blade.png",
 	level_range = {28, 38},
 	color=colors.RED,
 	rarity = 300,
@@ -5828,7 +4895,7 @@ newEntity{ base = "BASE_LONGSWORD",
 	material_level = 4,
 	combat = {
 		dam = 38,
-		apr = 4,
+		apr = 10,
 		physcrit = 18,
 		dammod = {str=1},
 		convert_damage={[DamageType.FIRE] = 50,},
@@ -5846,8 +4913,8 @@ newEntity{ base = "BASE_LONGSWORD",
 		},
 		inc_stats = { [Stats.STAT_STR] = 7, [Stats.STAT_WIL] = 7 },
 	},
-	max_power = 30, power_regen = 1,
-	use_talent = { id = Talents.T_FIRE_BREATH, level = 2, power = 30 },
+	max_power = 25, power_regen = 1,
+	use_talent = { id = Talents.T_FIRE_BREATH, level = 2, power = 25 },
 }
 
 newEntity{ base = "BASE_STAFF",
@@ -5897,14 +4964,14 @@ newEntity{ base = "BASE_BATTLEAXE",
 	power_source = {technique=true},
 	unique = true,
 	unided_name = "gore stained battleaxe",
-	name = "Eksatin's Ultimatum", color = colors.GREY, image = "object/artifact/crude_iron_battleaxe_of_kroll.png",
-	desc = [[This gore stained battleaxe was once used by an infamously sadistic king, who took the time to personally perform each and every execution he ordered. He kept a vault of every head he ever removed, each and every one of them carefully preserved. When he was overthrown, his own head was added as the centrepiece of the vault, which was maintained as a testament to his cruelty.]],
+	name = "Eksatin's Ultimatum", color = colors.GREY, image = "object/artifact/eskatins_ultimatum.png",
+	desc = [[This gore-stained battleaxe was once used by an infamously sadistic king, who took the time to personally perform each and every execution he ordered. He kept a vault of every head he ever removed, each and every one of them carefully preserved. When he was overthrown, his own head was added as the centrepiece of the vault, which was maintained as a testament to his cruelty.]],
 	require = { stat = { str=50 }, },
 	level_range = {39, 46},
 	rarity = 300,
 	material_level = 4,
 	combat = {
-		dam = 60,
+		dam = 63,
 		apr = 25,
 		physcrit = 25,
 		dammod = {str=1.3},
@@ -5919,8 +4986,6 @@ newEntity{ base = "BASE_BATTLEAXE",
 	wielder = {
 		combat_critical_power = 25,
 	},
-	max_power = 30, power_regen = 1,
-	use_talent = { id = Talents.T_PERFECT_STRIKE, level = 2, power = 30 },
 }
 
 newEntity{ base = "BASE_CLOAK",
@@ -5935,14 +5000,14 @@ newEntity{ base = "BASE_CLOAK",
 	cost = 300,
 	material_level = 5,
 	wielder = {
-		combat_def = 13,
+		combat_def = 15,
 		combat_spellpower = 8,
 		inc_stats = { 
 			[Stats.STAT_MAG] = 8, 
-			[Stats.STAT_CUN] = 5, 
+			[Stats.STAT_CUN] = 6, 
 			[Stats.STAT_DEX] = 10, 
 		},
-		inc_damage = { [DamageType.LIGHT]= 10 },
+		inc_damage = { [DamageType.LIGHT]= 15 },
 		resists_cap = { [DamageType.LIGHT] = 10, },
 		resists = { [DamageType.LIGHT] = 20, [DamageType.DARKNESS] = 20, },
 		talents_types_mastery = {
@@ -5959,7 +5024,7 @@ newEntity{ base = "BASE_CLOAK",
 newEntity{ base = "BASE_HEAVY_BOOTS",
 	power_source = {technique=true},
 	unique = true,
-	name = "Unbreakable Greaves", image = "object/artifact/scorched_boots.png",
+	name = "Unbreakable Greaves", image = "object/artifact/unbreakable_greaves.png",
 	unided_name = "huge stony boots",
 	desc = [[These titanic boots appear to have been carved from stone. They appear weathered and cracked, but easily deflect all blows.]],
 	color = colors.DARK_GRAY,
@@ -5968,18 +5033,19 @@ newEntity{ base = "BASE_HEAVY_BOOTS",
 	cost = 200,
 	material_level = 5,
 	wielder = {
-		combat_armor = 15,
+		combat_armor = 20,
 		combat_def = 8,
 		fatigue = 12,
-		combat_physicalpower = 10,
+		combat_dam = 10,
 		inc_stats = { 
-			[Stats.STAT_STR] = 15, 
+			[Stats.STAT_STR] = 20, 
 			[Stats.STAT_CON] = 10, 
-			[Stats.STAT_DEX] = -4, 
+			[Stats.STAT_DEX] = -6, 
 		},
 		knockback_immune=1,
-		inc_damage = { [DamageType.PHYSICAL] = 10 },
-		resists = { [DamageType.PHYSICAL] = 10,  [DamageType.ACID] = 10,},
+		combat_armor_hardiness = 20,
+		inc_damage = { [DamageType.PHYSICAL] = 15 },
+		resists = { [DamageType.PHYSICAL] = 15,  [DamageType.ACID] = 15,},
 	},
 }
 
@@ -5988,8 +5054,8 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 	unique = true, sentient=true,
 	name = "The Untouchable", color = colors.BLUE, image = "object/artifact/the_untouchable.png",
 	unided_name = "tough leather coat",
-	desc = [[This rugged jacket is subject of many a rural legend. 
-Some say it was fashioned by an adventurous mage turned rogue, in times before the spellblaze, but was since lost.
+	desc = [[This rugged jacket is the subject of many a rural legend. 
+Some say it was fashioned by an adventurous mage turned rogue, in times before the Spellblaze, but was since lost.
 All manner of shady gamblers have since claimed to have worn it at one point or another. To fail, but live, is what it means to be untouchable, they said.]],
 	level_range = {20, 30},
 	rarity = 200,
@@ -6019,7 +5085,7 @@ All manner of shady gamblers have since claimed to have worn it at one point or
 		local hp_diff = (self.wearer_hp - self.worn_by.life/self.worn_by.max_life)
 		
 		if hp_diff >= 0.2 and not self.worn_by:hasEffect(self.worn_by.EFF_DAMAGE_SHIELD) then
-			self.worn_by:setEffect(self.worn_by.EFF_DAMAGE_SHIELD, 4, {power = (hp_diff * self.worn_by.life)*2})
+			self.worn_by:setEffect(self.worn_by.EFF_DAMAGE_SHIELD, 4, {power = (hp_diff * self.worn_by.max_life)*2})
 			game.logPlayer(self.worn_by, "#LIGHT_BLUE#A barrier bursts from the leather jacket!")
 		end		
 		
@@ -6049,6 +5115,1332 @@ newEntity{ base = "BASE_TOOL_MISC",
 		learn_talent = {[Talents.T_BATTLE_TRANCE] = 1},
 	},
 }
+
+newEntity{ base = "BASE_CLOTH_ARMOR",
+	power_source = {arcane=true},
+	unique = true,
+	name = "The Calm", color = colors.GREEN, image = "object/artifact/the_calm.png",
+	unided_name = "ornate green robe",
+	desc = [[This green robe is engraved with icons showing clouds and swirling winds. Its original owner, a powerful mage named Proccala, was often revered for both his great benevolence and his intense power when it proved necessary.]],
+	level_range = {30, 40},
+	rarity = 250,
+	cost = 500,
+	material_level = 4,
+	special_desc = function(self) return "Your Lightning and Chain Lightning spells gain a 24% chance to daze, and your Thunderstorm spell gains a 12% chance to daze." end,
+	wielder = {
+		combat_spellpower = 20,
+		inc_damage = {[DamageType.LIGHTNING]=25},
+		combat_def = 15,
+		inc_stats = { [Stats.STAT_MAG] = 10, [Stats.STAT_WIL] = 8, [Stats.STAT_CUN] = 6,},
+		resists={[DamageType.LIGHTNING] = 20},
+		resists_pen = { [DamageType.LIGHTNING] = 15 },
+		slow_projectiles = 15,
+		movement_speed = 0.1,
+		lightning_daze_tempest=24,
+	},
+}
+
+newEntity{ base = "BASE_LEATHER_CAP",
+	power_source = {psionic=true},
+	unique = true,
+	name = "Omniscience", image = "object/artifact/omniscience.png",
+	unided_name = "very plain leather cap",
+	level_range = {40, 50},
+	color=colors.WHITE,
+	encumber = 1,
+	rarity = 300,
+	desc = [[This white cap is plain and dull, but as the light reflects off of its surface, you see images of faraway corners of the world in the sheen."]],
+	cost = 200,
+	material_level=5,
+	wielder = {
+		combat_def=7,
+		combat_mindpower=20,
+		combat_mindcrit=9,
+		combat_mentalresist = 25,
+		infravision=5,
+		confusion_immune=0.4,
+		resists = {[DamageType.MIND] = 15,},
+		resists_cap = {[DamageType.MIND] = 10,},
+		resists_pen = {[DamageType.MIND] = 10,},
+		max_psi=50,
+		psi_on_crit=6,
+	},
+	max_power = 30, power_regen = 1,
+	use_power = { name = "reveal the surrounding area", power = 30,
+		use = function(self, who)
+			who:magicMap(20)
+			game.logSeen(who, "%s has a sudden vision!", who.name:capitalize())
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {nature=true},
+	unique = true,
+	name = "Earthen Beads", color = colors.BROWN, image = "object/artifact/earthen_beads.png",
+	unided_name = "strung clay beads",
+	desc = [[This is a string of ancient, hardened clay beads, cracked and faded with age. It was used by Wilders in ancient times, in an attempt to enhance their connection with Nature.]],
+	level_range = {10, 20},
+	rarity = 200,
+	cost = 100,
+	material_level = 2,
+	metallic = false,
+	special_desc = function(self) return "Enhances the effectiveness of Meditation by 20%" end,
+	wielder = {
+		combat_mindpower = 5,
+		enhance_meditate=0.2,
+		inc_stats = { [Stats.STAT_WIL] = 4,},
+		life_regen=0.2,
+		damage_affinity={
+			[DamageType.NATURE] = 15,
+		},
+	},
+	max_power = 40, power_regen = 1,
+	use_talent = { id = Talents.T_NATURE_TOUCH, level = 2, power = 40 },
+}
+
+newEntity{ base = "BASE_GAUNTLETS",
+	power_source = {arcane=true, nature=true}, --Perhaps it is of Dwarven make :)
+	unique = true,
+	name = "Hand of the World-Shaper", color = colors.BROWN, image = "object/artifact/hand_of_the_worldshaper.png",
+	unided_name = "otherworldly stone gauntlets",
+	desc = [[These heavy stone gauntlets make the very ground beneath you bend and warp as they move.]],
+	level_range = {40, 50},
+	rarity = 300,
+	cost = 800,
+	material_level = 5,
+	wielder = {
+		inc_stats = { [Stats.STAT_STR] = 6, [Stats.STAT_MAG] = 6 },
+		inc_damage = { [DamageType.PHYSICAL] = 12 },
+		resists = { [DamageType.PHYSICAL] = 10 },
+		resists_pen = { [DamageType.PHYSICAL] = 15 },
+		combat_spellpower=10,
+		combat_spellcrit = 10,
+		combat_armor = 12,
+		talents_types_mastery = {
+			["spell/earth"] = 0.1,
+			["spell/stone"] = 0.2,
+			["wild-gift/sand-drake"] = 0.1,
+		},
+		combat = {
+			dam = 38,
+			apr = 10,
+			physcrit = 7,
+			physspeed = 0.2,
+			dammod = {dex=0.4, str=-0.6, cun=0.4, mag=0.1 },
+			talent_on_hit = { T_EARTHEN_MISSILES = {level=5, chance=15},},
+			damrange = 0.3,
+			burst_on_hit = {
+			[DamageType.GRAVITY] = 50,
+			},
+			burst_on_crit = {
+			[DamageType.GRAVITYPIN] = 30,
+			},
+		},
+	},
+	max_power = 30, power_regen = 1,
+	use_talent = { id = Talents.T_EARTHQUAKE, level = 4, power = 30 },
+}
+
+newEntity{ base = "BASE_CLOAK",
+	power_source = {psionic=true},
+	unique = true,
+	name = "Guise of the Hated", image = "object/artifact/guise_of_the_hated.png",
+	unided_name = "gloomy black cloak",
+	desc = [[Forget the moons, the starry sky,
+The warm and greeting sheen of sun,
+The rays of light will never reach inside,
+The heart which wishes that it be unseen.]],
+	level_range = {40, 50},
+	color = colors.BLACK,
+	rarity = 370,
+	cost = 300,
+	material_level = 5,
+	wielder = {
+		combat_def = 14,
+		combat_mindpower = 8,
+		combat_mindcrit = 4,
+		combat_physcrit = 4,
+		inc_stealth=12,
+		combat_mentalresist = 10,
+		hate_per_kill = 5,
+		hate_per_crit = 5,
+		inc_stats = { 
+			[Stats.STAT_WIL] = 8, 
+			[Stats.STAT_CUN] = 6, 
+			[Stats.STAT_DEX] = 4, 
+		},
+		inc_damage = { all = 4 },
+		resists = {[DamageType.DARKNESS] = 10, [DamageType.MIND] = 10,},
+		talents_types_mastery = {
+			["cursed/gloom"] = 0.1,
+			["cursed/darkness"] = 0.1,
+		},
+		on_melee_hit={[DamageType.MIND] = 30},
+	},
+	max_power = 18, power_regen = 1,
+	use_talent = { id = Talents.T_CREEPING_DARKNESS, level = 4, power = 18 },
+}
+
+newEntity{ base = "BASE_KNIFE", --Thanks FearCatalyst/FlarePusher!
+	power_source = {arcane=true},
+	unique = true,
+	name = "Spelldrinker", image = "object/artifact/spelldrinker.png",
+	unided_name = "eerie black dagger",
+	desc = [[Countless mages have fallen victim to the sharp sting of this blade, betrayed by those among them with greed for ever greater power.
+Passed on and on, this blade has developed a thirst of its own.]],
+	level_range = {20, 30},
+	rarity = 250,
+	require = { stat = { dex=30 }, },
+	cost = 300,
+	material_level = 3,
+	combat = {
+		dam = 27,
+		apr = 8,
+		physcrit = 9,
+		dammod = {str=0.45, dex=0.55, mag=0.05},
+		talent_on_hit = { T_DISPERSE_MAGIC = {level=1, chance=15},},
+		special_on_hit = {desc="steals up to 50 mana from the target", fct=function(combat, who, target)
+			local manadrain = util.bound(target:getMana(), 0, 50)
+			target:incMana(-manadrain)
+			who:incMana(manadrain)
+			local tg = {type="ball", range=10, radius=0, selffire=false}
+			who:project(tg, target.x, target.y, engine.DamageType.ARCANE, manadrain)
+		end},
+	},
+	wielder = {
+		inc_stats = {[Stats.STAT_MAG] = 6, [Stats.STAT_CUN] = 6,},
+		combat_spellresist=12,
+		resists={
+			[DamageType.ARCANE] = 12,
+		},
+	},
+}
+
+newEntity{ base = "BASE_AMULET",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Frost Lord's Chain",
+	unided_name = "ice coated chain", image = "object/artifact/frost_lords_chain.png",
+	desc = [[This impossibly cold chain of frost-coated metal radiates a strange and imposing aura.]],
+	color = colors.LIGHT_RED,
+	level_range = {40, 50},
+	rarity = 220,
+	cost = 350,
+	material_level = 5,
+	special_desc = function(self) return "Gives all your cold damage a 20% chance to freeze the target." end,
+	wielder = {
+		combat_spellpower=12,
+		inc_damage={
+			[DamageType.COLD] = 12,
+		},
+		resists={
+			[DamageType.COLD] = 25,
+		},
+		stun_immune = 0.3,
+		on_melee_hit = {[DamageType.COLD]=10},
+		cold_freezes = 20,
+		iceblock_pierce=20,
+		learn_talent = {[Talents.T_SHIV_LORD] = 2},
+	},
+}
+
+newEntity{ base = "BASE_LONGSWORD", --Thanks BadBadger?
+	power_source = {arcane=true},
+	unique = true,
+	name = "Twilight's Edge", image = "object/artifact/twilights_edge.png",
+	unided_name = "shining long sword",
+	level_range = {32, 42},
+	color=colors.GREY,
+	rarity = 250,
+	desc = [[The blade of this sword seems to have been forged of a mixture of voratun and stralite, resulting in a blend of swirling light and darkness.]],
+	cost = 800,
+	require = { stat = { str=35,}, },
+	material_level = 4,
+	combat = {
+		dam = 47,
+		apr = 7,
+		physcrit = 12,
+		dammod = {str=1},
+		special_on_crit = {desc="release a burst of light and dark damage (scales with Magic)", on_kill=1, fct=function(combat, who, target)
+			local tg = {type="ball", range=10, radius=2, selffire=false}
+			who:project(tg, target.x, target.y, engine.DamageType.LIGHT, 40 + who:getMag()*0.6)
+			who:project(tg, target.x, target.y, engine.DamageType.DARKNESS, 40 + who:getMag()*0.6)
+			game.level.map:particleEmitter(target.x, target.y, tg.radius, "shadow_flash", {radius=tg.radius})
+		end},
+	},
+	wielder = {
+		lite = 1,
+		combat_spellpower = 12,
+		combat_spellcrit = 4,
+		inc_damage={
+			[DamageType.DARKNESS] = 18,
+			[DamageType.LIGHT] = 18,
+		},
+		inc_stats = { [Stats.STAT_MAG] = 4, [Stats.STAT_STR] = 4, [Stats.STAT_CUN] = 4, },
+	},
+}
+
+newEntity{ base = "BASE_RING",
+	power_source = {psionic=true},
+	name = "Mnemonic", unique=true, image = "object/artifact/mnemonic.png",
+	desc = [[As long as you wear this ring, you will never forget who you are.]],
+	unided_name = "familiar ring",
+	level_range = {40, 50},
+	rarity = 250,
+	cost = 300,
+	material_level = 5,
+	special_desc = function(self) return "When using a mental talent, gives a 10% chance to lower the current cooldowns of up to three of your wild gift, psionic, or cursed talents by three turns." end,
+	wielder = {
+		combat_mentalresist = 20,
+		combat_mindpower = 12,
+		inc_stats = {[Stats.STAT_WIL] = 8,},
+		resists={[DamageType.MIND] = 25,},
+		confusion_immune=0.4,
+		talents_types_mastery = {
+			["psionic/mentalism"]=0.2,
+		},
+		psi_regen=0.5,	
+	},
+	max_power = 30, power_regen = 1,
+	use_talent = { id = Talents.T_MENTAL_SHIELDING, level = 2, power = 30 },
+	talent_on_mind = { {chance=10, talent=Talents.T_MENTAL_REFRESH, level=1}},
+}
+
+newEntity{ base = "BASE_LONGSWORD",
+	power_source = {arcane=true, technique=true},
+	unique = true,
+	name = "Acera",
+	unided_name = "corroded sword", image = "object/artifact/acera.png",
+	level_range = {25, 35},
+	color=colors.GREEN,
+	rarity = 300,
+	desc = [[This warped, blackened sword drips acid from its countless pores.]],
+	cost = 400,
+	require = { stat = { str=40 }, },
+	material_level = 3,
+	combat = {
+		dam = 33,
+		apr = 4,
+		physcrit = 10,
+		dammod = {str=1},
+		burst_on_crit = {
+			[DamageType.ACID_CORRODE] = 40,
+		},
+		melee_project={[DamageType.ACID] = 12},
+	},
+	wielder = {
+		inc_damage={ [DamageType.ACID] = 15,},
+		resists={[DamageType.ACID] = 15,},
+		resists_pen={[DamageType.PHYSICAL] = 10,}, --Burns right through your pathetic physical resists
+		combat_physcrit = 10,
+		combat_spellcrit = 10,
+	},
+	max_power = 30, power_regen = 1,
+	use_talent = { id = Talents.T_CORROSIVE_WORM, level = 4, power = 30 },
+}
+
+newEntity{ base = "BASE_GREATSWORD",
+	power_source = {technique=true},
+	define_as = "DOUBLESWORD",
+	name = "Borosk's Hate", unique=true, image="object/artifact/borosks_hate.png",
+	unided_name = "double-bladed sword", color=colors.GREY,
+	desc = [[This impressive looking sword features two massive blades aligned in parallel. They seem weighted remarkably well.]],
+	require = { stat = { str=35 }, },
+	level_range = {40, 50},
+	rarity = 240,
+	cost = 280,
+	material_level = 5,
+	running=false,
+	combat = {
+		dam = 60,
+		apr = 22,
+		physcrit = 10,
+		dammod = {str=1.2},
+		special_on_hit = {desc="25% chance to strike the target again", fct=function(combat, who, target)
+			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "DOUBLESWORD")
+			if not o or not who:getInven(inven_id).worn then return end
+			if o.running == true then return end
+			if not rng.percent(25) then return end
+			o.running=true
+			who:attackTarget(target, engine.DamageType.PHYSICAL, 1,  true)
+			o.running=false
+		end},
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_STR] = 10, [Stats.STAT_DEX] = 5, },
+		talents_types_mastery = {
+			["technique/2hweapon-cripple"] = 0.2,
+		},
+	},
+}
+
+newEntity{ base = "BASE_LONGSWORD",
+	power_source = {technique=true, psionic=true}, define_as = "BUTCHER",
+	name = "Butcher", unique=true, image="object/artifact/butcher.png",
+	unided_name = "blood drenched shortsword", color=colors.CRIMSON,
+	desc = [["Be it corruption, madness or eccentric boredom, the halfling butcher by the name of Caleb once took to eating his kin instead of cattle. His spree was never ended and nobody knows where he disappeared to. Only the blade remained, stuck fast in bloodied block. Beneath, a carving said "This was fun, let's do it again some time."]],
+	require = { stat = { str=40 }, },
+	level_range = {36, 48},
+	rarity = 250,
+	cost = 300,
+	material_level = 5,
+	sentient=true,
+	running=false,
+	special_desc = function(self) return ("Enter Rampage if HP falls under 20%% (Shared 30 turn cooldown)") end,
+	combat = {
+		dam = 48,
+		apr = 12,
+		physcrit = 10,
+		dammod = {str=1},
+		special_on_hit = {desc="Attempt to devour a low HP enemy, striking again and possibly killing instantly.", fct=function(combat, who, target)
+			local Talents = require "engine.interface.ActorTalents"
+			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "BUTCHER")
+			if not o or not who:getInven(inven_id).worn then return end
+			if target.life / target.max_life > 0.15 or o.running==true then return end
+			local Talents = require "engine.interface.ActorTalents"
+			o.running=true
+			if target:canBe("instakill") then
+				who:forceUseTalent(Talents.T_SWALLOW, {ignore_cd=true, ignore_energy=true, force_target=target, force_level=4, ignore_ressources=true})
+			end
+			o.running=false
+		end},
+		special_on_kill = {desc="Enter a Rampage (Shared 30 turn cooldown).", fct=function(combat, who, target)
+			local Talents = require "engine.interface.ActorTalents"
+			local o, item, inven_id = who:findInAllInventoriesBy("define_as", "BUTCHER")
+			if not o or not who:getInven(inven_id).worn then return end
+			if o.power < o.max_power then return end
+			who:forceUseTalent(Talents.T_RAMPAGE, {ignore_cd=true, ignore_energy=true, force_level=2, ignore_ressources=true})
+			o.power = 0
+		end},
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_CUN] = 7, [Stats.STAT_STR] = 10, [Stats.STAT_WIL] = 10, },
+		talents_types_mastery = {
+			["cursed/rampage"] = 0.2,
+			["cursed/slaughter"] = 0.2,
+		},
+		combat_atk = 18,
+	},
+	max_power = 30, power_regen = 1,
+	use_power = { name = "", power = 30, hidden = true, use = function(self, who) return end},
+	on_wear = function(self, who)
+		self.worn_by = who
+	end,
+	on_takeoff = function(self)
+		self.worn_by = nil
+	end,
+	act = function(self)
+		self:useEnergy()
+		self:regenPower()
+		if not self.worn_by then return end
+		local who=self.worn_by
+		if game.level and not game.level:hasEntity(who) and not who.player then self.worn_by = nil return end
+		if who.life/who.max_life < 0.2 and self.power == self.max_power then
+			local Talents = require "engine.interface.ActorTalents"
+			who:forceUseTalent(Talents.T_RAMPAGE, {ignore_cd=true, ignore_energy=true, force_level=2, ignore_ressources=true})
+			self.power=0
+		end
+	end,
+}
+
+newEntity{ base = "BASE_CLOAK",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Ethereal Embrace", image = "object/artifact/ethereal_embrace.png",
+	unided_name = "wispy purple cloak",
+	desc = [[This cloak waves and bends with shimmering light, reflecting the depths of space and the heart of the Aether.]],
+	level_range = {30, 40},
+	rarity = 400,
+	cost = 250,
+	material_level = 4,
+	wielder = {
+		combat_spellcrit = 6,
+		combat_def = 10,
+		inc_stats = { 
+			[Stats.STAT_MAG] = 8, 
+		},
+		talents_types_mastery = {
+			["spell/arcane"] = 0.2,
+			["spell/nightfall"] = 0.2,
+			["spell/aether"] = 0.1,
+		},
+		spellsurge_on_crit = 5,
+		inc_damage={ [DamageType.ARCANE] = 15, [DamageType.DARKNESS] = 15, },
+		resists={ [DamageType.ARCANE] = 12, [DamageType.DARKNESS] = 12,},
+		shield_factor=15,
+		shield_dur=1,
+	},
+	max_power = 28, power_regen = 1,
+	use_talent = { id = Talents.T_AETHER_BREACH, level = 2, power = 28 },
+}
+
+newEntity{ base = "BASE_HEAVY_BOOTS",
+	power_source = {psionic=true},
+	unique = true,
+	name = "Boots of the Hunter", image = "object/artifact/boots_of_the_hunter.png",
+	unided_name = "well-worn boots",
+	desc = [[These cracked boots are caked with a thick layer of mud. It isn't clear who they previously belonged to, but they've clearly seen extensive use.]],
+	color = colors.BLACK,
+	level_range = {30, 40},
+	rarity = 240,
+	cost = 280,
+	material_level = 4,
+	use_no_energy = true,
+	wielder = {
+		combat_armor = 12,
+		combat_def = 2,
+		combat_dam = 12,
+		combat_apr = 15,
+		fatigue = 8,
+		combat_mentalresist = 10,
+		combat_spellresist = 10,
+		max_life = 80,
+		stun_immune=0.4,
+		talents_types_mastery = {
+			["cursed/predator"] = 0.2,
+			["cursed/endless-hunt"] = 0.2,
+			["cunning/trapping"] = 0.2,
+		},
+	},
+	max_power = 32, power_regen = 1,
+	use_power = { name = "boost movement speed by 300% for 4 turns (does not use a turn)", power = 32,
+	use = function(self, who)
+		game:onTickEnd(function() who:setEffect(who.EFF_HUNTER_SPEED, 5, {power=300}) end)
+		return {id=true, used=true}
+	end
+	},
+}
+
+newEntity{ base = "BASE_GLOVES",
+	power_source = {nature=true},
+	unique = true,
+	name = "Sludgegrip", color = colors.GREEN, image = "object/artifact/sludgegrip.png",
+	unided_name = "slimy gloves",
+	desc = [[These gloves are coated with a thick, green liquid.]],
+	level_range = {1, 10},
+	rarity = 190,
+	cost = 70,
+	material_level = 1,
+	wielder = {
+		inc_stats = { [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 4,},
+		resists = { [DamageType.NATURE]= 10, },
+		inc_damage = { [DamageType.NATURE]= 5, },
+		combat_mindpower=2,
+		poison_immune=0.2,
+		talents_types_mastery = {
+			["wild-gift/slime"] = 0.2,
+		},		
+		combat = {
+			dam = 6,
+			apr = 7,
+			physcrit = 4,
+			dammod = {dex=0.4, str=-0.6, cun=0.4 },
+			talent_on_hit = { T_SLIME_SPIT = {level=1, chance=35} },
+			convert_damage = { [DamageType.SLIME] = 40,},
+		},
+	},
+}
+
+newEntity{ base = "BASE_RING", define_as = "SET_LICH_RING",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Ring of the Archlich", image = "object/artifact/ring_of_the_archlich.png",
+	unided_name = "dusty, cracked ring",
+	desc = [[This ring is filled with an overwhelming, yet restrained, power. It lashes, grasps from its metal prison, seatching for life to snuff out. You alone are unharmed.
+Perhaps it feels all the death you will bring to others in the near future.]],
+	color = colors.DARK_GREY,
+	level_range = {30, 40},
+	cost = 170,
+	rarity = 280,
+	material_level = 4,
+	wielder = {
+		max_soul = 3,
+		combat_spellpower=8,
+		combat_spellresist=8,
+		inc_damage={[DamageType.DARKNESS] = 10, [DamageType.COLD] = 10, },
+		poison_immune=0.25,
+		cut_immune=0.25,
+		resists={ [DamageType.COLD] = 10, [DamageType.DARKNESS] = 10,},
+	},
+	max_power = 40, power_regen = 1,
+	set_list = { {"define_as", "SET_SCEPTRE_LICH"} },
+	on_set_complete = function(self, who)
+		game.logPlayer(who, "#DARK_GREY#Your ring releases a burst of necromantic energy!")
+		self:specialSetAdd({"wielder","combat_spellpower"}, 10)
+		self.use_talent = { id = "T_IMPENDING_DOOM", level = 2, power = 40 }
+		self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.DARKNESS] = 14 })
+		self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.DARKNESS] = 5 })
+	end,
+	on_set_broken = function(self, who)
+		game.logPlayer(who, "#DARK_GREY#Your ring's power fades away.")
+		self.use_talent = nil
+	end,
+}
+
+newEntity{ base = "BASE_TOOL_MISC",
+	power_source = {arcane = true},
+	unique=true, rarity=240,
+	type = "charm", subtype="wand",
+	name = "Lightbringer's Rod", image = "object/artifact/lightbringers_rod.png",
+	unided_name = "bright wand",
+	color = colors.GOLD,
+	level_range = {20, 30},
+	desc = [[This gold-tipped wand shines with an unnatural sheen.]],
+	cost = 320,
+	material_level = 3,
+	wielder = {
+		resists={[DamageType.DARKNESS] = 12, [DamageType.LIGHT] = 12},
+		inc_damage={[DamageType.LIGHT] = 10},
+		on_melee_hit={[DamageType.LIGHT] = 18},
+		combat_spellresist = 15,
+		lite=2,
+	},
+		max_power = 35, power_regen = 1,
+	use_power = { name = "summon a shining orb", power = 35,
+		use = function(self, who)
+			local tg = {type="bolt", nowarning=true, range=5, nolock=true}
+			local tx, ty, target = who:getTarget(tg)
+			if not tx or not ty then return nil end
+			local _ _, _, _, tx, ty = who:canProject(tg, tx, ty)
+			target = game.level.map(tx, ty, engine.Map.ACTOR)
+			if target == who then target = nil end
+			local x, y = util.findFreeGrid(tx, ty, 5, true, {[engine.Map.ACTOR]=true})
+			if not x then
+				game.logPlayer(self, "Not enough space to invoke!")
+				return
+			end
+			local Talents = require "engine.interface.ActorTalents"
+			local NPC = require "mod.class.NPC"
+			local m = NPC.new{
+				resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_ghost_will_o__the_wisp.png", display_h=1, display_y=0}}},
+				name = "Lightbringer",
+				type = "orb", subtype = "light",
+				desc = "A shining orb.",
+				rank = 1,
+				blood_color = colors.YELLOW,
+				display = "T", color=colors.YELLOW,
+				life_rating=10,
+				combat = {
+					dam=resolvers.rngavg(50,60),
+					atk=resolvers.rngavg(50,75), apr=25,
+					dammod={mag=1}, physcrit = 10,
+					damtype=engine.DamageType.LIGHT,
+				},
+				level_range = {1, nil}, exp_worth = 0,
+				silent_levelup = true,
+				combat_armor=30,
+				combat_armor_hardiness=30,
+				autolevel = "caster",
+				ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=1, },
+				never_move=1,
+				stats = { str=14, dex=18, mag=20, con=12, wil=20, cun=20, },
+				size_category = 2,
+				lite=10,
+				blind=1,
+				esp_all=1,
+				resists={[engine.DamageType.LIGHT] = 100, [engine.DamageType.DARKNESS] = 100},
+				no_breath = 1,
+				cant_be_moved = 1,
+				stone_immune = 1,
+				confusion_immune = 1,
+				fear_immune = 1,
+				teleport_immune = 1,
+				disease_immune = 1,
+				poison_immune = 1,
+				stun_immune = 1,
+				blind_immune = 1,
+				cut_immune = 1,
+				knockback_resist=1,
+				combat_physresist=50,
+				combat_spellresist=100,
+				on_act = function(self) self:project({type="ball", range=0, radius=5, friendlyfire=false}, self.x, self.y, engine.DamageType.LITE_LIGHT, self:getMag()) end,
+				
+				faction = who.faction,
+				summoner = who, summoner_gain_exp=true,
+				summon_time=15,
+			}
+
+			m:resolve()
+			game.zone:addEntity(game.level, m, "actor", x, y)
+			m.remove_from_party_on_death = true,
+			game.party:addMember(m, {
+				control=false,
+				type="summon",
+				title="Summon",
+				orders = {target=true, leash=true, anchor=true, talents=true},
+			})
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_SHIELD",
+	power_source = {arcane=true},
+	unique = true,
+	unided_name = "handled hole in space",
+	name = "Temporal Rift", image = "object/artifact/temporal_rift.png",
+	desc = [[Some mad Chronomancer appears to have affixed a handle to this hole in spacetime. It looks highly effective, in its own strange way.]],
+	color = colors.LIGHT_GREY,
+	rarity = 300,
+	level_range = {35, 45},
+	require = { stat = { str=40 }, },
+	cost = 400,
+	material_level = 5,
+	special_combat = {
+		dam = 50,
+		block = 325,
+		physcrit = 4.5,
+		dammod = {str=1, mag=0.2},
+		damtype = DamageType.TEMPORAL,
+		talent_on_hit = { [Talents.T_TURN_BACK_THE_CLOCK] = {level=3, chance=25} },
+	},
+	wielder = {
+		combat_armor = 4,
+		combat_def = 8,
+		combat_def_ranged = 10,
+		fatigue = 0,
+		combat_spellpower=12,
+		combat_spellresist = 20,
+		resists = {[DamageType.TEMPORAL] = 30},
+		learn_talent = { [Talents.T_BLOCK] = 5, },
+		flat_damage_armor = {all=20},
+		slow_projectiles = 50,
+	},
+}
+
+newEntity{ base = "BASE_ARROW",
+	power_source = {technique=true},
+	unique = true,
+	name = "Arkul's Seige Arrows", image = "object/artifact/arkuls_seige_arrows.png",
+	unided_name = "gigantic spiral arrows",
+	desc = [[These titanic double-helical arrows seem to have been designed more for knocking down towers than for use in regular combat. They'll no doubt make short work of most foes.]],
+	color = colors.GREY,
+	level_range = {42, 50},
+	rarity = 400,
+	cost = 400,
+	material_level = 5,
+	require = { stat = { dex=20, str=30 }, },
+	special_desc = function(self) return "25% of all damage splashes in a radius of 1 around the target." end,
+	combat = {
+		capacity = 14,
+		dam = 68,
+		apr = 100,
+		physcrit = 10,
+		dammod = {dex=0.5, str=0.7},
+		siege_impact=0.25,		
+	},
+}
+
+newEntity{ base = "BASE_LONGSWORD", --For whatever artists draws this: it's a rapier.
+	power_source = {technique=true},
+	unique = true,
+	name = "Punae's Blade",
+	unided_name = "thin blade", image = "object/artifact/punaes_blade.png",
+	level_range = {28, 38},
+	color=colors.GREY,
+	rarity = 300,
+	desc = [[This very thin sword cuts through the air with ease, allowing remarkably quick movement.]],
+	cost = 400,
+	require = { stat = { str=30 }, },
+	material_level = 4,
+	combat = {
+		dam = 46,
+		apr = 4,
+		physcrit = 10,
+		dammod = {str=1},
+	},
+	wielder = {
+		evasion=10,
+		combat_physcrit = 10,
+		combat_physspeed = 0.1,
+	},
+}
+
+newEntity{ base = "BASE_CLOTH_ARMOR", --Thanks SageAcrin!
+	power_source = {psionic=true},
+	unique = true,
+	name = "Crimson Robe", color = colors.RED, image = "object/artifact/crimson_robe.png",
+	unided_name = "blood-stained robe",
+	desc = [[This robe was formerly owned by Callister the Psion, a powerful Psionic that pioneered many Psionic abilities. After his wife was murdered, Callister became obsessed with finding her killer, using his own hatred as a fuel for new and disturbing arts. After forcing the killer to torture himself to death, Callister walked the land, forcing any he found to kill themselves - his way of releasing them from the world's horrors. One day, he simply disappeared. This robe, soaked in blood, was the only thing he left behind.]],
+	level_range = {40, 50},
+	rarity = 230,
+	cost = 350,
+	material_level = 5,
+	special_desc = function(self) return "Increases your solipsism threshold by 20% (if you have one). If you do, also grants 15% global speed when worn." end,
+	wielder = {
+		combat_def=12,
+		inc_stats = { [Stats.STAT_WIL] = 10, [Stats.STAT_CUN] = 10, },
+		combat_mindpower = 20,
+		combat_mindcrit = 9,
+		psi_regen=0.2,
+		psi_on_crit = 4,
+		hate_on_crit = 4, 
+		hate_per_kill = 2,
+		resists_pen={all = 20},
+		on_melee_hit={[DamageType.MIND] = 35, [DamageType.RANDOM_GLOOM] = 10},
+		melee_project={[DamageType.MIND] = 35, [DamageType.RANDOM_GLOOM] = 10},
+		talents_types_mastery = { ["psionic/solipsism"] = 0.1, ["psionic/focus"] = 0.2, ["cursed/slaughter"] = 0.2, ["cursed/punishments"] = 0.2,},
+	},
+	on_wear = function(self, who)
+		if who:attr("solipsism_threshold") then
+			self:specialWearAdd({"wielder","solipsism_threshold"}, 0.2)
+			self:specialWearAdd({"wielder","global_speed_add"}, 0.15)
+			game.logPlayer(who, "#RED#You feel yourself lost in the aura of the robe.")
+		end
+	end,
+	talent_on_mind  = { {chance=8, talent=Talents.T_HATEFUL_WHISPER, level=2}, {chance=8, talent=Talents.T_AGONY, level=2}  },
+}
+
+newEntity{ base = "BASE_RING", --Thanks Alex!
+	power_source = {arcane=true},
+	name = "Exiler", unique=true, image = "object/artifact/exiler.png",
+	desc = [[The chronomancer known as Solith was renowned across all of Eyal. He always seemed to catch his enemies alone.
+In the case of opponents who weren't alone, he had to improvise.]],
+	unided_name = "insignia ring",
+	level_range = {40, 50},
+	rarity = 250,
+	cost = 300,
+	material_level = 5,
+	wielder = {
+		combat_spellpower = 10,
+		paradox_reduce_fails = 20,
+		talent_cd_reduction={
+			[Talents.T_TIME_SKIP]=1,
+		},
+		inc_damage={ [DamageType.TEMPORAL] = 15, [DamageType.PHYSICAL] = 10, },
+		resists={ [DamageType.TEMPORAL] = 15,},
+		melee_project={ [DamageType.TEMPORAL] = 15,},
+		talents_types_mastery = {
+ 			["chronomancy/timetravel"] = 0.2,
+ 		},
+	},
+	talent_on_spell = { {chance=10, talent="T_RETHREAD", level = 2} },
+	max_power = 32, power_regen = 1,
+	use_power = { name = "deal temporal damage to summons, and if they survive, remove them from time", power = 32,
+		use = function(self, who)
+			local Talents = require "engine.interface.ActorTalents"
+			local tg = {type="ball", range=5, radius=2}
+			local x, y = who:getTarget(tg)
+			if not x or not y then return nil end
+			who:project(tg, x, y, function(px, py) 
+			local target = game.level.map(px, py, engine.Map.ACTOR)
+			if not target then return end
+			if target.summoner then
+			who:forceUseTalent(Talents.T_TIME_SKIP, {ignore_cd=true, ignore_energy=true, force_target=target, force_level=2, ignore_ressources=true})
+			end
+			end)
+			return {id=true, used=true}
+		end
+	},
+}
+
+newEntity{ base = "BASE_SHIELD",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Piercing Gaze", image = "object/artifact/piercing_gaze.png",
+	unided_name = "stone-eyed shield",
+	desc = [[This gigantic shield has a stone eye embedded in it.]],
+	color = colors.BROWN,
+	level_range = {30, 40},
+	rarity = 270,
+	--require = { stat = { str=28 }, },
+	cost = 400,
+	material_level = 4,
+	metallic = false,
+	special_desc = function(self) return "When you block an attack, there is a 30% chance of petrifying the attacker." end,
+	special_combat = {
+		dam = 40,
+		block = 180,
+		physcrit = 5,
+		dammod = {str=1},
+	},
+	wielder = {
+		combat_armor = 25,
+		combat_def = 5,
+		combat_def_ranged = 10,
+		fatigue = 12,
+		learn_talent = { [Talents.T_BLOCK] = 4, },
+		resists = { [DamageType.PHYSICAL] = 10, [DamageType.ACID] = 10, [DamageType.LIGHTNING] = 10, [DamageType.FIRE] = 10,},
+	},
+	on_block = function(self, who, src, type, dam, eff)
+		if rng.percent(30) then
+			if not src then return end
+			game.logSeen(src, "The eye locks onto %s, freezing it in place!", src.name:capitalize())
+			if src:canBe("stun") and src:canBe("stone") and src:canBe("instakill") then
+				src:setEffect(who.EFF_STONED, 5, {})
+			end
+		end
+	end,
+}
+
+-- No longer hits your own projectiles
+-- Hopefully fixed LUA errors with DamageType require
+-- Significant rescaling.  Base damage cut by 50%, crit by 5%.  The reason these hilariously bad numbers happened was derping and not accounting for the awesomeness of the 100% dex scaling.  APR is still extremely high.
+-- Proc chance is now 100% up from 25%.  No matter how I test this--even at 100% and 500% global action speed--it is often a pain in the ass to get procs just to test.  This is supposed to be one of the main features of the item. 
+newEntity{ base = "BASE_KNIFE", --Shibari's #1
+	power_source = {nature=true},
+	unique = true,
+	name = "Shantiz the Stormblade",
+	unided_name = "thin stormy blade", image = "object/artifact/shantiz_the_stromblade.png",
+	level_range = {18, 33},
+	material_level = 3,
+	rarity = 300,
+	desc = [[This surreal dagger crackles with the intensity of a vicious storm.]],
+	cost = 400,
+	color=colors.BLUE,
+	require = { stat = { dex=30}},
+	combat = {
+		dam = 15,
+		apr = 20,
+		physcrit = 10,
+		dammod = {dex=1},
+		special_on_hit = {desc="Causes lightning to strike and destroy any projectiles in a radius of 10, dealing damage and dazing enemies in a radius of 5 around them.", on_kill=1, fct=function(combat, who, target)
+			local grids = core.fov.circle_grids(who.x, who.y, 10, true)
+			for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
+				local i = 0
+				local p = game.level.map(x, y, engine.Map.PROJECTILE+i)
+				while p do
+					local DamageType = require "engine.DamageType" -- I don't entirely follow why this is necessary
+					if p.src and (p.src == who) then return end -- Keep Arcane Blade procs from hitting them since the projectile is still on top of them.
+					if p.name then 
+						game.logPlayer(who, "#GREEN#Lightning strikes the " .. p.name .. "!")
+					else
+						game.logPlayer(who, "#GREEN#Shantiz strikes down a projectile!")
+					end
+					
+					p:terminate(x, y)
+					game.level:removeEntity(p, true)
+					p.dead = true
+					game.level.map:particleEmitter(x, y, 5, "ball_lightning_beam", {radius=5, tx=x, ty=y})
+				   
+					local tg = {type="ball", radius=5, selffire=false}
+					local dam = 4*who:getDex() -- no more crit or base damage.  no real reason, just like it better.
+
+					who:project(tg, x, y, DamageType.LIGHTNING, dam)
+				   
+					who:project(tg, x, y, function(tx, ty)
+							local target = game.level.map(tx, ty, engine.Map.ACTOR)
+							if not target or target == who then return end
+							target:setEffect(target.EFF_DAZED, 3, {apply_power=who:combatAttack()})
+					end)
+   
+					i = i + 1
+					p = game.level.map(x, y, engine.Map.PROJECTILE+i)
+				end end end    
+			return          
+			end
+		},
+	},
+	wielder = {
+		inc_stats = { [Stats.STAT_DEX] = 20 },
+		slow_projectiles = 40, 
+		quick_weapon_swap = 1, 
+	},
+}
+
+newEntity{ base = "BASE_KNIFE",
+	power_source = {technique=true},
+	unique = true,
+	name = "Swordbreaker", image = "object/artifact/swordbreaker.png",
+	unided_name = "hooked blade",
+	desc = [[This ordinary blade is made of fine, sturdy voratun and outfitted with jagged hooks along the edge. This simple appearance belies a great power - the hooked maw of this dagger broke many a blade and the stride of many would-be warriors.]],
+	level_range = {20, 30},
+	rarity = 250,
+	require = { stat = { dex=10, cun=10 }, },
+	cost = 300,
+	material_level = 3,
+	special_desc = function(self) return "Can block like a shield, potentially disarming the enemy." end,
+	combat = {
+		dam = 25,
+		apr = 20,
+		physcrit = 15,
+		physspeed = 0.9,
+		dammod = {dex=0.5,cun=0.5},
+		special_on_crit = {desc="Breaks enemy weapon.", fct=function(combat, who, target)
+			target:setEffect(target.EFF_SUNDER_ARMS, 5, {power=5+(who:combatPhysicalpower()*0.33), apply_power=who:combatPhysicalpower()})
+		end},
+	},
+	wielder = {
+		combat_def = 15,
+		disarm_immune=0.5,
+		combat_physresist = 15,
+		inc_stats = { 
+			[Stats.STAT_DEX] = 8, 
+			[Stats.STAT_CUN] = 8, 
+		},
+		combat_armor_hardiness = 20,
+		learn_talent = { [Talents.T_DAGGER_BLOCK] = 1, },
+	},
+}
+
+newEntity{ base = "BASE_SHIELD",
+	power_source = {arcane=true},
+	unique = true,
+	name = "Shieldsmaiden", image = "object/artifact/shieldmaiden.png",
+	unided_name = "icy shield",
+	desc = [["Myths tell of shieldsmaidens, a tribe of warrior women from the northern wastes of Maj'Eyal. Their martial prowess and beauty drew the fascination of swaths of admirers, yet all unrequited. So began the saying, that a shieldsmaiden's heart is as cold and unbreakable as her shield."]],
+	color = colors.BROWN,
+	level_range = {36, 48},
+	rarity = 270,
+	require = { stat = { str=28 }, },
+	cost = 400,
+	material_level = 5,
+	metallic = false,
+	special_desc = function(self) return "Granted talent can block up to 1 instance of damage each 10 turns." end,
+	special_combat = {
+		dam = 48,
+		block = 150,
+		physcrit = 8,
+		dammod = {str=1},
+		damtype = DamageType.ICE,
+		talent_on_hit = { [Talents.T_ICE_SHARDS] = {level=3, chance=15} },
+	},
+	wielder = {
+		combat_armor = 20,
+		combat_def = 5,
+		combat_def_ranged = 12,
+		fatigue = 10,
+		learn_talent = { [Talents.T_BLOCK] = 4, [Talents.T_SHIELDSMAIDEN_AURA] = 1,  },
+		resists = { [DamageType.COLD] = 25, [DamageType.FIRE] = 25,},
+	},
+}
+
+-- Thanks to Naghyal's Beholder code for the basic socket skeleton
+newEntity{ base = "BASE_GREATMAUL",
+	power_source = {arcane=true}, -- Should really make this only arcane for some gems
+	unique = true,
+	color = colors.BLUE,
+	name = "Tirakai's Maul",
+	desc = [[This massive hammer is formed from a thick mass of strange crystalline growths. In the side of the hammer itself you see an empty slot; it looks like a gem of your own could easily fit inside it.]],
+	gemDesc = "None", -- Defined by the elemental properties and used by special_desc
+	special_desc = function(self)
+	-- You'll want to color this and such
+		if not self.Gem then return ("No gem") end
+		return ("%s: %s"):format(self.Gem.name:capitalize(), self.gemDesc or ("Write a description for this gem's properties!"))
+	end,	
+	cost = 1000,
+	material_level = 1, -- Changes to gem material level on socket
+	evel_range = {1, 15},
+	rarity = 280,
+	combat = {
+		dam = 10,
+		apr = 7,
+		physcrit = 4,
+		damrange=1.3,
+		dammod = {str=1.2},
+	},
+	max_power = 1, power_regen = 1,
+	use_power = { name = "imbue the hammer with a gem of your choice", power = 0,
+		use = function(self, who)
+			local DamageType = require "engine.DamageType"
+			local Stats = require "engine.interface.ActorStats"
+			local d
+			d = who:showInventory("Use which gem?", who:getInven("INVEN"), function(gem) return gem.type == "gem" and gem.imbue_powers and gem.material_level end, 
+				function(gem, gem_item)
+				who:onTakeoff(self)
+				local name_old=self.name
+				local old_hotkey
+				for i, v in pairs(who.hotkey) do
+					if v[2]==name_old then
+						old_hotkey=i
+					end
+				end
+				
+				-- Recycle the old gem
+				local old_gem=self.Gem
+				if old_gem then
+					who:addObject(who:getInven("INVEN"), old_gem)
+					game.logPlayer(who, "You remove your %s.", old_gem:getName{do_colour=true, no_count=true})
+				end
+				
+				if gem then
+	
+					-- The Blank Slate.  This is a horrible method of changing modes, but it is the easiest to avoid fucking up.  This doesn't do much better than just making a static table for every element but its much easier to work with.
+					self.Gem = nil
+					self.Gem = gem
+					self.gemDesc = "Describe all the goddamn colors.  NOW."
+					
+					self.sentient = false
+					self.act = mod.class.Object.act
+					
+					self.talent_on_spell = nil
+					
+					self.material_level=gem.material_level
+					local scalingFactor = self.material_level 
+					
+					self.combat = {
+						dam = (14 * scalingFactor),
+						apr = (3 * scalingFactor),
+						physcrit = (2.5 * scalingFactor),
+						dammod = {str=1.2},
+						damrange = 1.3,
+					}
+							
+					self.wielder = {
+						inc_stats = {[Stats.STAT_MAG] = (2 * scalingFactor), [Stats.STAT_CUN] = (2 * scalingFactor), [Stats.STAT_DEX] = (2 * scalingFactor),},
+					}
+					
+					who:removeObject(who:getInven("INVEN"), gem_item)
+
+					-- Each element merges its effect into the combat/wielder tables (or anything else) after the base stats are scaled
+					-- You can modify damage and such here too but you should probably make static tables instead of merging
+					if gem.subtype =="black" then -- Acid
+						self.combat.damtype = DamageType.ACID
+						table.mergeAdd(self.wielder, {inc_damage = { [DamageType.ACID] = 4 * scalingFactor} }, true)
+						
+						self.combat.burst_on_crit = {[DamageType.ACID_DISARM] = 12 * scalingFactor,}
+						self.gemDesc = "Acid"
+					end
+					if gem.subtype =="blue" then  -- Lightning
+						self.combat.damtype = DamageType.LIGHTNING
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.LIGHTNING] = 4 * scalingFactor} 
+						
+							}, true)
+						self.combat.burst_on_crit = {[DamageType.LIGHTNING_DAZE] = 12 * scalingFactor,}
+						self.gemDesc = "Lightning"
+					end
+					if gem.subtype =="green" then  -- Nature
+						self.combat.damtype = DamageType.NATURE
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.NATURE] = 4 * scalingFactor} 
+							
+							}, true)
+						self.combat.burst_on_crit = {[DamageType.SPYDRIC_POISON] = 12 * scalingFactor,}
+						self.gemDesc = "Nature"
+					end
+					if gem.subtype =="red" then  -- Fire					
+						self.combat.damtype = DamageType.FIRE
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.FIRE] = 4 * scalingFactor}, 
+						}, true)
+						self.combat.burst_on_crit = {[DamageType.FLAMESHOCK] = 12 * scalingFactor,}
+						self.gemDesc = "Fire"
+					end
+					if gem.subtype =="violet" then -- Arcane
+						self.combat.damtype = DamageType.ARCANE
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.ARCANE] = 4 * scalingFactor} 
+							
+						}, true)
+						self.combat.burst_on_crit = {[DamageType.ARCANE_SILENCE] = 12 * scalingFactor,}
+						self.gemDesc = "Arcane"
+					end
+					if gem.subtype =="white" then  -- Cold
+						self.combat.damtype = DamageType.COLD
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.COLD] = 4 * scalingFactor} 
+							
+						}, true)
+						self.combat.burst_on_crit = {[DamageType.ICE] = 12 * scalingFactor,}
+						self.gemDesc = "Cold"
+					end
+					if gem.subtype =="yellow" then -- Light
+						self.combat.damtype = DamageType.LIGHT
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.LIGHT] = 4 * scalingFactor} 
+							
+						}, true)	
+						self.combat.burst_on_crit = {[DamageType.LIGHT_BLIND] = 12 * scalingFactor,}
+						self.gemDesc = "Light"
+					end
+					if gem.subtype == "multi-hued"  then -- Some but not all artifacts, if you want to do artifact specific effects make conditionals by name, don't use this
+						table.mergeAdd(self.combat, {convert_damage = {[DamageType.COLD] = 25, [DamageType.FIRE] = 25, [DamageType.LIGHTNING] = 25, [DamageType.ARCANE] = 25,} }, true)
+						table.mergeAdd(self.wielder, {
+							inc_damage = { all = 2 * scalingFactor},
+							resists_pen = { all = 2 * scalingFactor},
+							}, true)	
+							self.gemDesc = "Unique"							
+					end
+					if gem.subtype == "demonic"  then -- Goedalath Rock
+						self.combat.damtype = DamageType.SHADOWFLAME
+						table.mergeAdd(self.wielder, {
+							inc_damage = { [DamageType.FIRE] = 3 * scalingFactor, [DamageType.DARKNESS] = 3 * scalingFactor,},
+							resists_pen = { all = 2 * scalingFactor},
+							}, true)	
+							self.gemDesc = "Demonic"							
+					end
+					game.logPlayer(who, "You imbue your %s with %s.", self:getName{do_colour=true, no_count=true}, gem:getName{do_colour=true, no_count=true})
+
+					--self.name = (gem.name .. " of Divinity")
+					
+					table.mergeAdd(self.wielder, gem.imbue_powers, true)
+					
+				end
+				if gem.talent_on_spell then
+					self.talent_on_spell = self.talent_on_spell or {}
+					table.append(self.talent_on_spell, gem.talent_on_spell)
+				end
+				who:onWear(self)
+				for i, v in pairs(who.hotkey) do
+					if v[2]==name_old then
+						v[2]=self.name
+					end
+					if v[2]==self.name and old_hotkey and i~=old_hotkey then
+						who.hotkey[i] = nil
+					end
+				end
+				d.used_talent=true
+				game:unregisterDialog(d)
+				return true
+			end)
+			return {id=true, used=true}
+		end
+	},
+	on_wear = function(self, who)
+
+		return true
+	end,
+	wielder = {
+	-- Stats only from gems
+	},
+}
+
+newEntity{ base = "BASE_GLOVES", define_as = "SET_GLOVE_DESTROYER",
+	power_source = {arcane=true, technique=true},
+	unique = true,
+	name = "Fist of the Destroyer", color = colors.RED, image = "object/artifact/fist_of_the_destroyer.png",
+	unided_name = "vile gauntlets",
+	desc = [[These terrible looking gloves glow with untold power.]],
+	level_range = {40, 50},
+	rarity = 300,
+	cost = 800,
+	material_level = 5,
+	special_desc = function(self)
+		local num=4
+		if self.set_complete then
+			num=6
+		end
+		return ("Increases all damage by %d%% of current vim \nCurrent Bonus: %d%%"):format(num, num*0.01*(game.player:getVim() or 0)) 
+	end,
+	wielder = {
+		inc_stats = { [Stats.STAT_STR] = 9, [Stats.STAT_MAG] = 9, [Stats.STAT_CUN] = 3, },
+		demonblood_dam=0.04,
+		max_vim = 25,
+		combat_def = 8,
+		stun_immune = 0.2,
+		talents_types_mastery = { ["corruption/shadowflame"] = 0.2, ["corruption/vim"] = 0.2,},
+		combat = {
+			dam = 35,
+			apr = 15,
+			physcrit = 10,
+			physspeed = 0,
+			dammod = {dex=0.4, str=-0.6, cun=0.4, mag=0.2,},
+			damrange = 0.3,
+			talent_on_hit = { T_DRAIN = {level=2, chance=8}, T_SOUL_ROT = {level=3, chance=12}, T_BLOOD_GRASP = {level=3, chance=10}},
+		},
+	},
+	max_power = 12, power_regen = 1,
+	use_talent = { id = Talents.T_DARKFIRE, level = 5, power = 12 },
+	set_list = { {"define_as", "SET_ARMOR_MASOCHISM"} },
+	on_set_complete = function(self, who)
+		game.logPlayer(who, "#STEEL_BLUE#The fist and the mangled clothing glow ominously!")
+		self:specialSetAdd({"wielder","demonblood_dam"}, 0.02)
+		self:specialSetAdd({"wielder","inc_damage"}, { [engine.DamageType.FIRE] = 15, [engine.DamageType.DARKNESS] = 15, all = 5 })
+	end,
+	on_set_broken = function(self, who)
+		game.logPlayer(who, "#STEEL_BLUE#The ominous glow dies down.")
+	end,
+}
+
+newEntity{ base = "BASE_LIGHT_ARMOR", define_as = "SET_ARMOR_MASOCHISM",
+	power_source = {arcane=true, technique=true},
+	unique = true,
+	name = "Masochism", color = colors.RED, image = "object/artifact/masochism.png",
+	unided_name = "mangled clothing",
+	desc = [[Stolen flesh,
+	Stolen pain,
+	To give it up,
+	Is to live again.]],
+	level_range = {40, 50},
+	rarity = 300,
+	cost = 800,
+	material_level = 5,
+	special_desc = function(self)
+		local num=7
+		if self.set_complete then
+			num=10
+		end
+		return ("Reduces all damage by %d%% of current vim or 50%% of the damage, whichever is lower; but at the cost of vim equal to 5%% of the damage blocked. \nCurrent Bonus: %d"):format(num, num*0.01*(game.player:getVim() or 0)) 
+	end,
+	wielder = {
+		inc_stats = {[Stats.STAT_MAG] = 9, [Stats.STAT_CUN] = 3, },
+		combat_spellpower = 10,
+		demonblood_def=0.07,
+		max_vim = 25,
+		disease_immune = 1,
+		combat_physresist = 10,
+		combat_mentalresist = 10,
+		combat_spellresist = 10,
+		on_melee_hit={[DamageType.DRAIN_VIM] = 25},
+		melee_project={[DamageType.DRAIN_VIM] = 25},
+		talents_types_mastery = { ["corruption/sanguisuge"] = 0.2, ["corruption/blood"] = 0.2,},
+	},
+	max_power = 12, power_regen = 1,
+	use_talent = { id = Talents.T_BLOOD_GRASP, level = 5, power = 12 },
+	set_list = { {"define_as", "SET_GLOVE_DESTROYER"} },
+	on_set_complete = function(self, who)
+		self:specialSetAdd({"wielder","demonblood_def"}, 0.03)
+		self:specialSetAdd({"wielder","resists"}, { [engine.DamageType.FIRE] = 15, [engine.DamageType.DARKNESS] = 15, all = 5 })
+	end,
+	on_set_broken = function(self, who)
+	end,
+}
+
+newEntity{ base = "BASE_GREATMAUL",
+	power_source = {technique=true},
+	unique = true,
+	name = "Obliterator", color = colors.UMBER, image = "object/artifact/obliterator.png",
+	unided_name = "titanic maul",
+	desc = [[This massive hammer strikes with an impact that could shatter bones.]],
+	level_range = {23, 30},
+	rarity = 270,
+	require = { stat = { str=40 }, },
+	cost = 250,
+	material_level = 3,
+	combat = {
+		dam = 48,
+		apr = 10,
+		physcrit = 0,
+		dammod = {str=1.2},
+		crushing_blow=1,
+	},
+	wielder = {
+		combat_critical_power = 10,
+	},
+}
+
+newEntity{ base = "BASE_HELM",
+	power_source = {technique=true},
+	unique = true,
+	name = "Yaldan Baoth", image = "object/artifact/yaldan_baoth.png",
+	unided_name = "obscuring helm",
+	desc = [[The golden bascinet crown, affiliated with Veluca of Yaldan. King of the mythical city of Yaldan, that was struck from the face of Eyal by the arrogance of its people. Lone survivor of his kin, he spent his last years wandering the early world, teaching man to stand against the darkness. With his dying words, "Fear no evil", the crown was passed onto his successor.]],
+	level_range = {28, 39,},
+	rarity = 240,
+	cost = 700,
+	material_level = 4,
+	wielder = {
+		combat_armor = 6,
+		fatigue = 4,
+		resist_unseen = 25,
+		sight = -2,
+		inc_stats = { [Stats.STAT_WIL] = 10, [Stats.STAT_CON] = 7, },
+		inc_damage={
+			[DamageType.LIGHT] = 10,
+		},
+		resists={
+			[DamageType.LIGHT] = 10,
+			[DamageType.DARKNESS] = 15,
+		},
+		resists_cap={
+			[DamageType.DARKNESS] = 10,
+		},
+		blind_fight = 1,
+	},
+}
 --[=[
 newEntity{
 	unique = true,
diff --git a/game/modules/tome/data/general/stores/basic.lua b/game/modules/tome/data/general/stores/basic.lua
index 7ffb591b257dbc0167a083926900cf8a80323244..ec9b0bf046ec91026583d7b139625b5570d8c850 100644
--- a/game/modules/tome/data/general/stores/basic.lua
+++ b/game/modules/tome/data/general/stores/basic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/alarm.lua b/game/modules/tome/data/general/traps/alarm.lua
index c5176801bc538db519c507b865b265718fd2b5cf..6a0f8ca567d82f466a6fbbb922a9386289f30ecf 100644
--- a/game/modules/tome/data/general/traps/alarm.lua
+++ b/game/modules/tome/data/general/traps/alarm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/annoy.lua b/game/modules/tome/data/general/traps/annoy.lua
index 190a89305ec10488f0ac5a49512b4fdb446e755b..4ea4c3b9aa4d95fc3e2519662fbd53aae056cb7b 100644
--- a/game/modules/tome/data/general/traps/annoy.lua
+++ b/game/modules/tome/data/general/traps/annoy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/complex.lua b/game/modules/tome/data/general/traps/complex.lua
index d62d54f86bbc0af2e64ff0abe5ab22660e5b4fdf..89895dabfa90b8ab413ba0158528f638fa4dcc76 100644
--- a/game/modules/tome/data/general/traps/complex.lua
+++ b/game/modules/tome/data/general/traps/complex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/elemental.lua b/game/modules/tome/data/general/traps/elemental.lua
index 9b84ae916f8480dbdfbe25daddfff64ecbcde931..2ff53c0934934fb22ec8b5cef3cd1bd58f1e5428 100644
--- a/game/modules/tome/data/general/traps/elemental.lua
+++ b/game/modules/tome/data/general/traps/elemental.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/natural_forest.lua b/game/modules/tome/data/general/traps/natural_forest.lua
index 1629351d151214163c4123a332cceb342eb08b1d..8d71d2dc254359cf977eb650804e5fd0658b605d 100644
--- a/game/modules/tome/data/general/traps/natural_forest.lua
+++ b/game/modules/tome/data/general/traps/natural_forest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/store.lua b/game/modules/tome/data/general/traps/store.lua
index 3e8260c5711f59b3ca72af5aa9d4ca036e7644f1..707841e2581b7a9c50be7c649535c06dfa1f6cbf 100644
--- a/game/modules/tome/data/general/traps/store.lua
+++ b/game/modules/tome/data/general/traps/store.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/teleport.lua b/game/modules/tome/data/general/traps/teleport.lua
index 713aa8fb381ba60396099c0e442ae209b8d697fb..a62f639e4ef0ba6610d3ec77ac4fce0f946fc681 100644
--- a/game/modules/tome/data/general/traps/teleport.lua
+++ b/game/modules/tome/data/general/traps/teleport.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/general/traps/water.lua b/game/modules/tome/data/general/traps/water.lua
index a568fc4c039d91a79a70d5bb85aaf42e3b7d7695..b89e935344f1a1f6ece96bfb4212df3140849163 100644
--- a/game/modules/tome/data/general/traps/water.lua
+++ b/game/modules/tome/data/general/traps/water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/achievements/avoid_death.png b/game/modules/tome/data/gfx/achievements/avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7d3bd13bcb3abae7e90888b087d80fd8015aa1b
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/bearscape.png b/game/modules/tome/data/gfx/achievements/bearscape.png
index 2e170aa4b35a83277264e6d138f346ef34fb887c..771969ef271e2585ddb44b3ab468c999811be8dc 100644
Binary files a/game/modules/tome/data/gfx/achievements/bearscape.png and b/game/modules/tome/data/gfx/achievements/bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/bronze_donator.png b/game/modules/tome/data/gfx/achievements/bronze_donator.png
new file mode 100644
index 0000000000000000000000000000000000000000..85c1a1f7ad18bdc063b97cccdc167140e2ac7b63
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/bronze_donator.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_avoid_death.png b/game/modules/tome/data/gfx/achievements/exploration_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..865ac024cfeae31d76f5ab1871d2e84bc4717efa
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/exploration_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_bearscape.png b/game/modules/tome/data/gfx/achievements/exploration_bearscape.png
index 03d2b3dfc33534f2b92d3d86ab62087f2c6d373a..3c899e3cd670855330a6828e1939b4482f457011 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_bearscape.png and b/game/modules/tome/data/gfx/achievements/exploration_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_fylish_island.png b/game/modules/tome/data/gfx/achievements/exploration_fylish_island.png
index 60efe48c78e107bd4ddae8b42e98b8e972539225..79515a2618e33f2c3a688db37b78097098ce7c7e 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_fylish_island.png and b/game/modules/tome/data/gfx/achievements/exploration_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_land_poosh.png b/game/modules/tome/data/gfx/achievements/exploration_land_poosh.png
index e577179f349f1a84c5a75301e30fe8c19737e323..61475af04f2786c46693383ed997b3fe44011330 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_land_poosh.png and b/game/modules/tome/data/gfx/achievements/exploration_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_pikataclysm.png b/game/modules/tome/data/gfx/achievements/exploration_pikataclysm.png
index da371edb6c4ca94b72b0f58196b94c5e9a4e50e0..9bc177a73e76dffef3ed370cd33469aca5ca240e 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/exploration_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_pirate_day.png b/game/modules/tome/data/gfx/achievements/exploration_pirate_day.png
index b0a6f64c5138de227254ad9b7338bf2e347d1090..d197f326bd9a20806a37b06f30cf2d5825961bf8 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_pirate_day.png and b/game/modules/tome/data/gfx/achievements/exploration_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_plumpkin.png b/game/modules/tome/data/gfx/achievements/exploration_plumpkin.png
index c8dd9ef865fd0a51e27d17dbcfebbe15a50ef241..06bd1007c15bbcd7a75702619df0e0dab635b067 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_plumpkin.png and b/game/modules/tome/data/gfx/achievements/exploration_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/exploration_win_aeryn_survive.png
index 02db6c2632135740d9f02d38fbf6c193a5d3e116..d6204c051181be008462eb4d3c59484683dcb065 100644
Binary files a/game/modules/tome/data/gfx/achievements/exploration_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/exploration_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/exploration_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/exploration_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..d59f6b9e9cddac9dbaaad6b1540fb1d14a2e8056
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/exploration_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/fylish_island.png b/game/modules/tome/data/gfx/achievements/fylish_island.png
index 7f1b558117526f723d6a8f2ddef29ee538370d41..16d8b7a4996b213902d516f95fc01ee5e269522c 100644
Binary files a/game/modules/tome/data/gfx/achievements/fylish_island.png and b/game/modules/tome/data/gfx/achievements/fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/gold_donator.png b/game/modules/tome/data/gfx/achievements/gold_donator.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7bf3c4a88c0add2af8f0c0f9b1a7c08e784a046
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/gold_donator.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_avoid_death.png b/game/modules/tome/data/gfx/achievements/insane_adventure_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3923c94d72542efc4329a788801b5b0c582e222
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/insane_adventure_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_bearscape.png b/game/modules/tome/data/gfx/achievements/insane_adventure_bearscape.png
index 362cff260f6ac2c03bc10fe816031dbbb7490593..1baabdf6a039f6eeabe34cb5efadf25ba09a0a5c 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_bearscape.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_fylish_island.png b/game/modules/tome/data/gfx/achievements/insane_adventure_fylish_island.png
index c2ccf8e117f946a44af6b588db467d824cda92e0..5c85a5f11a824c137a58ccc5a6c7f319ebda576d 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_fylish_island.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_land_poosh.png b/game/modules/tome/data/gfx/achievements/insane_adventure_land_poosh.png
index c65aa78024a773e18ecef0722e763f23c7ab70e8..9d6cfb364a7a8c762cf9e52b83aff6f56a42ee6b 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_land_poosh.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_pikataclysm.png b/game/modules/tome/data/gfx/achievements/insane_adventure_pikataclysm.png
index c42376967d78f733320a53544c4da2b494e64bd4..e0b92731ca9a8ff6c1f39a6cb927964b80d1aa03 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_pirate_day.png b/game/modules/tome/data/gfx/achievements/insane_adventure_pirate_day.png
index 89b0ce46d407ad9ca871876a3a4f10ed28ca06f4..1a73dd1febb82b99bc7fb14a2a3541e833a3d6ad 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_pirate_day.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_plumpkin.png b/game/modules/tome/data/gfx/achievements/insane_adventure_plumpkin.png
index d9e49e1bebf60c10baacaded070f30b2de8dc434..1273e01a056d1f9379055081a20fd679614a0591 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_plumpkin.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/insane_adventure_win_aeryn_survive.png
index feabcf432a5b7161d0945a3ab5ec1bfac482e2cd..fe4873468aaab9743cde5e648fd8d209fba577ed 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_adventure_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/insane_adventure_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_adventure_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/insane_adventure_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef3e5db7686e2d29ac8983e2bba1821c95b42b28
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/insane_adventure_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_avoid_death.png b/game/modules/tome/data/gfx/achievements/insane_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c77f625811c0e9b0c624d65e1581cbd14f4f0f3
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/insane_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_bearscape.png b/game/modules/tome/data/gfx/achievements/insane_bearscape.png
index 4e39a57f30ef65cc4f9575a486c19d6129ca66da..578c1336a7267896994dd68733c6c817a4d9d2c2 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_bearscape.png and b/game/modules/tome/data/gfx/achievements/insane_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_fylish_island.png b/game/modules/tome/data/gfx/achievements/insane_fylish_island.png
index 28f5da67fb6a1234c3aa1f06573597fab623f0fc..8aff0a6b1e6d8cbf47d1d6dd023ea09c3c98d5ff 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_fylish_island.png and b/game/modules/tome/data/gfx/achievements/insane_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_land_poosh.png b/game/modules/tome/data/gfx/achievements/insane_land_poosh.png
index 3107f07b081b4a9124867b37bed388371b12b522..b1b55b96eda9d0393d649f385cbfda3c302a448e 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_land_poosh.png and b/game/modules/tome/data/gfx/achievements/insane_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_pikataclysm.png b/game/modules/tome/data/gfx/achievements/insane_pikataclysm.png
index b973ffa98b58ab042d208764064c22b03dd0e328..413ffc5eba64aac12a9cce6b532c366aa16f5a3d 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/insane_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_pirate_day.png b/game/modules/tome/data/gfx/achievements/insane_pirate_day.png
index 50937a16b3ed5e277ae7cf858fef1da9ecc88500..f8f29cbc98e6e3af01e4f3019839f66cb243489d 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_pirate_day.png and b/game/modules/tome/data/gfx/achievements/insane_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_plumpkin.png b/game/modules/tome/data/gfx/achievements/insane_plumpkin.png
index ce19215fff7f7a9e1982e243200dc77b37438338..f51fee2c6f1bd6e8d1d4a38d5e72408cd4453b4b 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_plumpkin.png and b/game/modules/tome/data/gfx/achievements/insane_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/insane_win_aeryn_survive.png
index 0dc304a2053f59dc066b98248c7ba7a7cc92d7e7..91dd1ecffb56589c26e53cf8cc804a83f8c1889b 100644
Binary files a/game/modules/tome/data/gfx/achievements/insane_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/insane_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/insane_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/insane_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..628fa28c594658b62966ac44b4cc1554dc3dc5e3
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/insane_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/land_poosh.png b/game/modules/tome/data/gfx/achievements/land_poosh.png
index b7b2692986ad8d24b500c9568dfef44abf0164f6..4d4858a1e30acd3359c5226bc85387c84c45bf46 100644
Binary files a/game/modules/tome/data/gfx/achievements/land_poosh.png and b/game/modules/tome/data/gfx/achievements/land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_avoid_death.png b/game/modules/tome/data/gfx/achievements/madness_adventure_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..339ae2c08050616f332499df03cbc20a014e56b7
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/madness_adventure_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_bearscape.png b/game/modules/tome/data/gfx/achievements/madness_adventure_bearscape.png
index 1acc12a67df90a4190825c99263ef28548d5c868..1b0dd831beef27ebb1510ccaeae7e87f67211d8b 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_bearscape.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_fylish_island.png b/game/modules/tome/data/gfx/achievements/madness_adventure_fylish_island.png
index 80d64f8dbd2eb8c232979d8aa297a9e520a1315b..ec881b4b251dc635444c7147318c8d589a427e51 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_fylish_island.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_land_poosh.png b/game/modules/tome/data/gfx/achievements/madness_adventure_land_poosh.png
index e4fb9b3c37e3104858aef9c226d193512811e7b6..11fd96548f6c1806c8fdd0cc70c5a64f1bf5b8f8 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_land_poosh.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_pikataclysm.png b/game/modules/tome/data/gfx/achievements/madness_adventure_pikataclysm.png
index e9d14dc0e8aedcd9315dabaec9f3012fe9fb9d27..e07bf90c4585e3f6c0e7771885b002be3ec3e3ab 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_pirate_day.png b/game/modules/tome/data/gfx/achievements/madness_adventure_pirate_day.png
index a00e7a299d5b96ec7b11df4e4d71d12131c6b98e..9328057aeb508361b5dc0698114fae6c4078b6a1 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_pirate_day.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_plumpkin.png b/game/modules/tome/data/gfx/achievements/madness_adventure_plumpkin.png
index 044d5535046f49f105f2550dd386d15217693e1e..f8462f7e194c23b5e419f42929f7439fc1326a0f 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_plumpkin.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/madness_adventure_win_aeryn_survive.png
index c78d1b2367e6618285479b569114dec319a8e6e6..9b792589ccf2eb1620f8653176a7603b013c1465 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_adventure_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/madness_adventure_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_adventure_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/madness_adventure_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..55ab46bd529f1a98c56a85a89e10678054bc0224
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/madness_adventure_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_avoid_death.png b/game/modules/tome/data/gfx/achievements/madness_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ffcf11ff716c5cea434b73851d3782597f7646a
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/madness_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_bearscape.png b/game/modules/tome/data/gfx/achievements/madness_bearscape.png
index efbad2fa3510928a77263c72258f784134fad044..71fb079f734306894f11fe83ab214ee250e3c763 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_bearscape.png and b/game/modules/tome/data/gfx/achievements/madness_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_fylish_island.png b/game/modules/tome/data/gfx/achievements/madness_fylish_island.png
index 316ab977aeab37e7cb15a1477fa495f52215168b..0e0209626540c24a6aa78e9a37ff8584f8a9b5a7 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_fylish_island.png and b/game/modules/tome/data/gfx/achievements/madness_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_land_poosh.png b/game/modules/tome/data/gfx/achievements/madness_land_poosh.png
index b7acad7591ffef552c61aa672cccb8f13654741a..e381780b509cd4ec0fa664242d8444d26441909c 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_land_poosh.png and b/game/modules/tome/data/gfx/achievements/madness_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_pikataclysm.png b/game/modules/tome/data/gfx/achievements/madness_pikataclysm.png
index a311e335fc117b6a28988e8905a5f979c45854ad..7a78294f04726a0dcff14127e3d27d381955c424 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/madness_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_pirate_day.png b/game/modules/tome/data/gfx/achievements/madness_pirate_day.png
index 2aa5e91467d3d1dd41d58144992fe999de27235b..35e7bf81c27afc9b8d954eecccab5090c7bfb8d4 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_pirate_day.png and b/game/modules/tome/data/gfx/achievements/madness_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_plumpkin.png b/game/modules/tome/data/gfx/achievements/madness_plumpkin.png
index 18d7e053a1e98d0dc8639b60e88350f62acd4db7..8fc6d148f579b577628bac902b22960fca159846 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_plumpkin.png and b/game/modules/tome/data/gfx/achievements/madness_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/madness_win_aeryn_survive.png
index 1679df1814a0c6749f887e96a8875c641a039b48..0e81935919f0265d44a34dc0ff667a079e5ca222 100644
Binary files a/game/modules/tome/data/gfx/achievements/madness_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/madness_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/madness_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/madness_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8cb3020cbe89c1226fc008ced35298cd84d83b3
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/madness_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_avoid_death.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..df8341a0b114b6bc7d83d8a669a3339ef376f351
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_bearscape.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_bearscape.png
index 0f50ca83f56ba92a367b7999b7f5f09eaabacbee..74b7c426645c26b49f06e3fcc4b525ac47e9ac6d 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_bearscape.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_fylish_island.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_fylish_island.png
index cd155816e74366817469662ec48661d5b13218b9..1f5e67dc5c60c9177529ae89d699f36f49e126f2 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_fylish_island.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_land_poosh.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_land_poosh.png
index d90ac0d5a52c3b1a73308e010253e0db6990a649..88743116e6464d23067ccf55198049076c94bcc6 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_land_poosh.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_pikataclysm.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_pikataclysm.png
index 24c13174cb4923d6eaa316adc734b68398e0025b..8fd6f277a473ce71efce48079c3accffe39ea837 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_pirate_day.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_pirate_day.png
index 287a4850e5c6bbdf35db386394524cb5c5f0d98f..7012897d5974286628cddeea27b265b7117dd617 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_pirate_day.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_plumpkin.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_plumpkin.png
index 6d16c209c860b9d637ab7853c9c1d65746b6c3ce..861a1e84acbdeb8c040d2db7b0c12314b068df40 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_plumpkin.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_win_aeryn_survive.png
index 3060f146aa51636ec8aa6a0926bbabe545919a91..4dd4c56104060a50acd02156193d83f4654794f7 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_adventure_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_adventure_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/nightmare_adventure_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..75156bf3c9fa0c771fada02206d12ccddc5a650c
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/nightmare_adventure_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_avoid_death.png b/game/modules/tome/data/gfx/achievements/nightmare_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..147f98a8521a8d674265db55ad476f2bf0ac7237
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/nightmare_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_bearscape.png b/game/modules/tome/data/gfx/achievements/nightmare_bearscape.png
index e6821e6fd7e82a6cf176f8feef34a0f9d9bec976..b93b6162e1dfef0ca499fc318f3e47d782b085a1 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_bearscape.png and b/game/modules/tome/data/gfx/achievements/nightmare_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_fylish_island.png b/game/modules/tome/data/gfx/achievements/nightmare_fylish_island.png
index 800f0951d99e2b98c056c2b84b4e457f1b8f292e..7b77c1152a2d4c2821891c4a29c130a6ea85492d 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_fylish_island.png and b/game/modules/tome/data/gfx/achievements/nightmare_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_land_poosh.png b/game/modules/tome/data/gfx/achievements/nightmare_land_poosh.png
index bf37b982e6f3d3f683e7898444e1dcf6831a8559..625ae6558cdfc6ffde89f7ddf679471fae417096 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_land_poosh.png and b/game/modules/tome/data/gfx/achievements/nightmare_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_pikataclysm.png b/game/modules/tome/data/gfx/achievements/nightmare_pikataclysm.png
index 0b425b4364fda31c5f56c556cfbdcaee612c2e27..955f5e23181f1a576782d24a512fb98b1da2a61e 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/nightmare_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_pirate_day.png b/game/modules/tome/data/gfx/achievements/nightmare_pirate_day.png
index d0aea0ee309ead218d1bef2ff65b023660f07b27..2883025fef20eb2d637180d36a096357334c462b 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_pirate_day.png and b/game/modules/tome/data/gfx/achievements/nightmare_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_plumpkin.png b/game/modules/tome/data/gfx/achievements/nightmare_plumpkin.png
index a1c64916d638b5db49eb73f4e474521491f5f69b..35b870f0739adad9ee1a5305b20d9595ea051ca8 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_plumpkin.png and b/game/modules/tome/data/gfx/achievements/nightmare_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/nightmare_win_aeryn_survive.png
index 8d2cca9ab96a19d2e57cf0e8828feab3c60e20bc..45026a0b3814097bf35d72d2c2e2ea95922dac9b 100644
Binary files a/game/modules/tome/data/gfx/achievements/nightmare_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/nightmare_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/nightmare_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/nightmare_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..273aeb516dc5f86c5b4aba8ae6ebe03baaa8df4d
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/nightmare_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_avoid_death.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_avoid_death.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d8eefdb732a9b35e2487400e02643829877fb79
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/normal_roguelike_avoid_death.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_bearscape.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_bearscape.png
index 00e91414219f18952da57844fff76e709305f23f..64c156d40a33c2802984b244c6ab3384c088f710 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_bearscape.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_bearscape.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_fylish_island.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_fylish_island.png
index 96e8ff5ec1b6b4ce3c821df5e090199c93642a33..8f164b094f8ffdb42635d197ea78067a918e2052 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_fylish_island.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_fylish_island.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_land_poosh.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_land_poosh.png
index 8e4f54747fe65514f7e7f76d08197bf19058a94a..77ae3ec27ad9e9eae14a866368255426de7b2f2f 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_land_poosh.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_land_poosh.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_pikataclysm.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_pikataclysm.png
index 21245137b078a542c01788b5cefaadab777e51d8..e3dc222a375ebd906d6b50749b1e821a2dc597d5 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_pikataclysm.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_pirate_day.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_pirate_day.png
index 4b360738ef2fc0d2a9e23fce7eb9f8d66ad96eb2..f72c8b74c2ba017ff06f92dbc38d816e099dada5 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_pirate_day.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_plumpkin.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_plumpkin.png
index 2bd4bee5bbc9fa6a26ffcdeafd7d8731b0cbf80c..5235f42eb25c44b23b24a89eda84427ee94fb46c 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_plumpkin.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_win_aeryn_survive.png
index 184e8725762942aa0e4d63451b99b9aee322f1d1..9063dc27cf8cd9441e86f69d8fa4f23b81a06f1b 100644
Binary files a/game/modules/tome/data/gfx/achievements/normal_roguelike_win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/normal_roguelike_win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/normal_roguelike_yeek_selfless.png b/game/modules/tome/data/gfx/achievements/normal_roguelike_yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..35880f588a2376c3d0950f2122f6d529c6334207
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/normal_roguelike_yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/achievements/pikataclysm.png b/game/modules/tome/data/gfx/achievements/pikataclysm.png
index 2d7c5b957b98aa281ab2446b53ea758b8dd1a6b2..4310e971536726e1495f38aedc74893135e64302 100644
Binary files a/game/modules/tome/data/gfx/achievements/pikataclysm.png and b/game/modules/tome/data/gfx/achievements/pikataclysm.png differ
diff --git a/game/modules/tome/data/gfx/achievements/pirate_day.png b/game/modules/tome/data/gfx/achievements/pirate_day.png
index 11ff91dedd15c4a3e4d3c5edfe2581659a32c0a3..a2aa5860a7de0b35ae6e45b5e320c620864eba01 100644
Binary files a/game/modules/tome/data/gfx/achievements/pirate_day.png and b/game/modules/tome/data/gfx/achievements/pirate_day.png differ
diff --git a/game/modules/tome/data/gfx/achievements/plumpkin.png b/game/modules/tome/data/gfx/achievements/plumpkin.png
index 57bd0eb49197984b462b922cfece985e9aecee29..5e32641e31998a8f8e0106e3bddd635483926593 100644
Binary files a/game/modules/tome/data/gfx/achievements/plumpkin.png and b/game/modules/tome/data/gfx/achievements/plumpkin.png differ
diff --git a/game/modules/tome/data/gfx/achievements/silver_donator.png b/game/modules/tome/data/gfx/achievements/silver_donator.png
new file mode 100644
index 0000000000000000000000000000000000000000..bcd4dcd0717c30274390bdf837d815a183e7b7df
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/silver_donator.png differ
diff --git a/game/modules/tome/data/gfx/achievements/stralite_donator.png b/game/modules/tome/data/gfx/achievements/stralite_donator.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a732f0d60b46642e2a8d6e3cef6a41c98bec467
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/stralite_donator.png differ
diff --git a/game/modules/tome/data/gfx/achievements/voratun_donator.png b/game/modules/tome/data/gfx/achievements/voratun_donator.png
new file mode 100644
index 0000000000000000000000000000000000000000..10f3e7a323b48606a4531d545cddc7883685a50b
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/voratun_donator.png differ
diff --git a/game/modules/tome/data/gfx/achievements/win_aeryn_survive.png b/game/modules/tome/data/gfx/achievements/win_aeryn_survive.png
index 2df6e25ac3883806035f09cedf3cefcbcc270d35..faff4e00cc0aa38c2069184595541da9869076eb 100644
Binary files a/game/modules/tome/data/gfx/achievements/win_aeryn_survive.png and b/game/modules/tome/data/gfx/achievements/win_aeryn_survive.png differ
diff --git a/game/modules/tome/data/gfx/achievements/yeek_selfless.png b/game/modules/tome/data/gfx/achievements/yeek_selfless.png
new file mode 100644
index 0000000000000000000000000000000000000000..b07f63263cb71fe9dba68c1eef93e046a5044f5e
Binary files /dev/null and b/game/modules/tome/data/gfx/achievements/yeek_selfless.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/active_blood_life.png b/game/modules/tome/data/gfx/deathbox-ui/active_blood_life.png
new file mode 100644
index 0000000000000000000000000000000000000000..287dd6b484ffdc7f93d302016f0b5a54684ba427
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/active_blood_life.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/active_consume.png b/game/modules/tome/data/gfx/deathbox-ui/active_consume.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d7038101b1bfa9a28cdfaf7ed7d50f324aade40
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/active_consume.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/active_skeleton.png b/game/modules/tome/data/gfx/deathbox-ui/active_skeleton.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f124a1f6aa674144af7a413ad53a92977b649a9
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/active_skeleton.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/border_hor_left.png b/game/modules/tome/data/gfx/deathbox-ui/border_hor_left.png
new file mode 100644
index 0000000000000000000000000000000000000000..4aa534b9c169d629ad09d95116f057346b2f6931
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/border_hor_left.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/border_hor_middle.png b/game/modules/tome/data/gfx/deathbox-ui/border_hor_middle.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc8b829c1eb56aabb4b53f06a977294ccc3a94f6
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/border_hor_middle.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/border_hor_right.png b/game/modules/tome/data/gfx/deathbox-ui/border_hor_right.png
new file mode 100644
index 0000000000000000000000000000000000000000..540235f0dbc029583ff7803fc9b7d81bd4c5eef4
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/border_hor_right.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_1.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d479b10879812ae4cfe7891725b88add9ee9ac5
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_1.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_2.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea4ab957f16248da0acc5a917719beca7d0bec6e
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_2.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_3.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..74305fa1522cc00e20fdee6f52d3e5bd8a340d6f
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_3.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_4.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..b37f54fba2d25f9f2a299c87be51d65dfad1020f
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_4.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_5.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..98e3769444e7e03b078a1a4d189df0786241cc0c
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_5.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_6.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..32dacc886f64c629abee06548332fe0bc21d695a
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_6.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_7.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..25e4dcac8e6319bb1ea3a63dc34d0866f3cd4ba4
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_7.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_8.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6937bf3fb78d36e2801c2482f178d30af531c67
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_8.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/dialogframe_9.png b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd5ab939862138076e44ea8fe31902673e89fe54
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/dialogframe_9.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/inactive_blood_life.png b/game/modules/tome/data/gfx/deathbox-ui/inactive_blood_life.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5d90889676347714c8ac941c02c9c55323e8986
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/inactive_blood_life.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/inactive_consume.png b/game/modules/tome/data/gfx/deathbox-ui/inactive_consume.png
new file mode 100644
index 0000000000000000000000000000000000000000..d65203e7919ce7e27007ca7083acd71a474d9c08
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/inactive_consume.png differ
diff --git a/game/modules/tome/data/gfx/deathbox-ui/inactive_skeleton.png b/game/modules/tome/data/gfx/deathbox-ui/inactive_skeleton.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3bef79d5730175031e2286a402a66bf3a87e2a2
Binary files /dev/null and b/game/modules/tome/data/gfx/deathbox-ui/inactive_skeleton.png differ
diff --git a/game/modules/tome/data/gfx/effects/light_burst_speed.png b/game/modules/tome/data/gfx/effects/light_burst_speed.png
new file mode 100644
index 0000000000000000000000000000000000000000..691ab7f0de6f207874ad056beaff8c04ff31633d
Binary files /dev/null and b/game/modules/tome/data/gfx/effects/light_burst_speed.png differ
diff --git a/game/modules/tome/data/gfx/particles/acid.lua b/game/modules/tome/data/gfx/particles/acid.lua
index b5b99ce97a71b772de03a48a869c2204ea5dc35e..c5ef5282597b383961b1bb42c37464bd1d690b12 100644
--- a/game/modules/tome/data/gfx/particles/acid.lua
+++ b/game/modules/tome/data/gfx/particles/acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/acidbeam.lua b/game/modules/tome/data/gfx/particles/acidbeam.lua
index 0107976d7dc2d82b6094ae523181ef5110e6fb6d..c17da28aa32c1faf4a1cba9194558bdbd8601161 100644
--- a/game/modules/tome/data/gfx/particles/acidbeam.lua
+++ b/game/modules/tome/data/gfx/particles/acidbeam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/acidflash.lua b/game/modules/tome/data/gfx/particles/acidflash.lua
index cf9f9861c61efabbbe3a221d6b4099b0b3544a83..c87e255aaf4390d03745dd40221b479a6c6ec67c 100644
--- a/game/modules/tome/data/gfx/particles/acidflash.lua
+++ b/game/modules/tome/data/gfx/particles/acidflash.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/acidstorm.lua b/game/modules/tome/data/gfx/particles/acidstorm.lua
index 61d23eaf43913867c1ecac83c55abbf21515abe5..04b5036d1c836df4ac6adae638a8aa415a94da34 100644
--- a/game/modules/tome/data/gfx/particles/acidstorm.lua
+++ b/game/modules/tome/data/gfx/particles/acidstorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/acidtrail.lua b/game/modules/tome/data/gfx/particles/acidtrail.lua
index 2100a1f259d4fa2bb38e39625ecdd9d9ca64a283..d7679dd5a63aa6cc9556c28a9a70b92e4da432b7 100644
--- a/game/modules/tome/data/gfx/particles/acidtrail.lua
+++ b/game/modules/tome/data/gfx/particles/acidtrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/agony.lua b/game/modules/tome/data/gfx/particles/agony.lua
index 4432fbf0d8eb5f0cfaa4d4d777e4c4098b4cca9f..8f7f7fbd179bb2fad13cc2f32529d03e06b566a3 100644
--- a/game/modules/tome/data/gfx/particles/agony.lua
+++ b/game/modules/tome/data/gfx/particles/agony.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/arcane_power.lua b/game/modules/tome/data/gfx/particles/arcane_power.lua
index bb52bcb7dd16c90cd89501f74fe6c846a9448f09..0d2d00636602a268407fdeeb1f30d8e9bf5de8cd 100644
--- a/game/modules/tome/data/gfx/particles/arcane_power.lua
+++ b/game/modules/tome/data/gfx/particles/arcane_power.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/arcane_vortex.lua b/game/modules/tome/data/gfx/particles/arcane_vortex.lua
index 9e828a0b66c08cf278087577a1087b710b54f8c7..75d5d9a603c5057c15ab282ec32006ffa2eae0bd 100644
--- a/game/modules/tome/data/gfx/particles/arcane_vortex.lua
+++ b/game/modules/tome/data/gfx/particles/arcane_vortex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/arcanestorm.lua b/game/modules/tome/data/gfx/particles/arcanestorm.lua
index 00e880e78d1ff63043c4772200bc71768a91cc15..575b14d90a28822855a114bc766db2f389d54705 100644
--- a/game/modules/tome/data/gfx/particles/arcanestorm.lua
+++ b/game/modules/tome/data/gfx/particles/arcanestorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/arcanetrail.lua b/game/modules/tome/data/gfx/particles/arcanetrail.lua
index c002e16b8283447ab33c1d3b7eac07dd7b67bb0f..03bca9958d41cb17baeded816a9c20d6d6fd96d8 100644
--- a/game/modules/tome/data/gfx/particles/arcanetrail.lua
+++ b/game/modules/tome/data/gfx/particles/arcanetrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/archery.lua b/game/modules/tome/data/gfx/particles/archery.lua
index 66f23553993eb2ce09d4899f1b794b655dab4ed2..1d0469f133f6d37b9792c910a1547bf180d4ad99 100644
--- a/game/modules/tome/data/gfx/particles/archery.lua
+++ b/game/modules/tome/data/gfx/particles/archery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/arrow.lua b/game/modules/tome/data/gfx/particles/arrow.lua
index 5b2025a730949dfa7b386294198021f940cc517d..66be8e75c72e852b5779097db2957f9982d5bb5d 100644
--- a/game/modules/tome/data/gfx/particles/arrow.lua
+++ b/game/modules/tome/data/gfx/particles/arrow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_acid.lua b/game/modules/tome/data/gfx/particles/ball_acid.lua
index 259df564697059ca782afbb320b471f22b673356..f2654641e8123b4d9f1c0ba124ee9e76ca9acd7c 100644
--- a/game/modules/tome/data/gfx/particles/ball_acid.lua
+++ b/game/modules/tome/data/gfx/particles/ball_acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_arcane.lua b/game/modules/tome/data/gfx/particles/ball_arcane.lua
index e586c95ff53de0365b6ad1fa19c25d701e17313c..f240b57f6d67da311e98d54c4546889f680909a4 100644
--- a/game/modules/tome/data/gfx/particles/ball_arcane.lua
+++ b/game/modules/tome/data/gfx/particles/ball_arcane.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_blight.lua b/game/modules/tome/data/gfx/particles/ball_blight.lua
index f26e03a4b68216975d0c99f5424f39870137b110..dac0dcebd7e5136e3cdc36181fa73d6d5868ceaf 100644
--- a/game/modules/tome/data/gfx/particles/ball_blight.lua
+++ b/game/modules/tome/data/gfx/particles/ball_blight.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_blood.lua b/game/modules/tome/data/gfx/particles/ball_blood.lua
index d768c7acd89903719a27eab980cdaecb89b456ce..3523ed70e302860a02bece93754e8c4a05be5692 100644
--- a/game/modules/tome/data/gfx/particles/ball_blood.lua
+++ b/game/modules/tome/data/gfx/particles/ball_blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_earth.lua b/game/modules/tome/data/gfx/particles/ball_earth.lua
index 1f4ab5428fe181ad27456509fbcd2eb132a5dd67..16442f5d63022aece5d35919a9f52104bbf26f81 100644
--- a/game/modules/tome/data/gfx/particles/ball_earth.lua
+++ b/game/modules/tome/data/gfx/particles/ball_earth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_fire.lua b/game/modules/tome/data/gfx/particles/ball_fire.lua
index 34ef1f174e379a33442d75775906b15f2f5bfc34..0e524fd177362ce4554cb7416e57d6a0ae378f75 100644
--- a/game/modules/tome/data/gfx/particles/ball_fire.lua
+++ b/game/modules/tome/data/gfx/particles/ball_fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_ice.lua b/game/modules/tome/data/gfx/particles/ball_ice.lua
index b135499e12ca225a23adceef396f92f7631c778a..574299fe9c926e37d0ec0bbc3a773fa206c5f5c7 100644
--- a/game/modules/tome/data/gfx/particles/ball_ice.lua
+++ b/game/modules/tome/data/gfx/particles/ball_ice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_light.lua b/game/modules/tome/data/gfx/particles/ball_light.lua
index 121558744c13a19a869d17f045ce1e3325ee1dad..91ef18e55459c397a756904fcb089742ca4e7cd3 100644
--- a/game/modules/tome/data/gfx/particles/ball_light.lua
+++ b/game/modules/tome/data/gfx/particles/ball_light.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_lightning.lua b/game/modules/tome/data/gfx/particles/ball_lightning.lua
index 29b87b4b6bad09965a87a6b38bdec0d1a6b26094..ff6b324a974e79b560e1d9961ebba532a3e14099 100644
--- a/game/modules/tome/data/gfx/particles/ball_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/ball_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_lightning_beam.lua b/game/modules/tome/data/gfx/particles/ball_lightning_beam.lua
index d957c500fcaaf89ea656b4c1a4998bf53ceec246..fe459b1062e5993d1f27102e351a4eeaafa0b7c8 100644
--- a/game/modules/tome/data/gfx/particles/ball_lightning_beam.lua
+++ b/game/modules/tome/data/gfx/particles/ball_lightning_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_matter.lua b/game/modules/tome/data/gfx/particles/ball_matter.lua
index b3194c0d6499dcb25b66be215443cd7cd24fad78..c92ebfd92ada044a9979d3e36c79f50652e0affb 100644
--- a/game/modules/tome/data/gfx/particles/ball_matter.lua
+++ b/game/modules/tome/data/gfx/particles/ball_matter.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_physical.lua b/game/modules/tome/data/gfx/particles/ball_physical.lua
new file mode 100644
index 0000000000000000000000000000000000000000..db5268063a5ecc5561237035b6f6aaf448b20c5c
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/ball_physical.lua
@@ -0,0 +1,103 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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
+
+--------------------------------------------------------------------------------------
+-- Advanced shaders
+--------------------------------------------------------------------------------------
+if core.shader.active(4) then
+local life = 20
+use_shader = {type="shockwave2", shockwaveSpeed=7*16/life}
+base_size = 64
+
+local nb = 0
+local radius = radius or 6
+
+return {
+	generator = function()
+	return {
+		life = life,
+		size = 2.1*64*radius, sizev = 0, sizea = 0,
+
+		x = 0, xv = 0, xa = 0,
+		y = 0, yv = 0, ya = 0,
+		dir = 0, dirv = dirv, dira = 0,
+		vel = 0, velv = 0, vela = 0,
+
+		r = 1, rv = 0, ra = 0,
+		g = 1, gv = 0, ga = 0,
+		b = 1, bv = 0, ba = 0,
+		a = 0.8, av = -0.01, aa = 0,
+	}
+end, },
+function(self)
+	if nb < 1 then
+		self.ps:emit(1)
+	end
+	nb = nb + 1
+end,
+1, "particles_images/shockwave"
+
+
+--------------------------------------------------------------------------------------
+-- Default
+--------------------------------------------------------------------------------------
+else
+local nb = 12
+local dir
+local radius = radius or 6
+
+return { generator = function()
+	local sradius = (radius + 0.5) * (engine.Map.tile_w + engine.Map.tile_h) / 2
+	local ad = rng.float(0, 360)
+	local a = math.rad(ad)
+	local r = 0
+	local x = r * math.cos(a)
+	local y = r * math.sin(a)
+	local static = rng.percent(40)
+	local vel = sradius * ((24 - nb * 1.4) / 24) / 12
+	local color = rng.float(0.4, 0.6)
+
+	return {
+		trail = 1,
+		life = 12,
+		size = 12 - (12 - nb) * 0.7, sizev = 0, sizea = 0,
+
+		x = x, xv = 0, xa = 0,
+		y = y, yv = 0, ya = 0,
+		dir = a, dirv = 0, dira = 0,
+		vel = rng.float(vel * 0.6, vel * 1.2), velv = 0, vela = 0,
+
+		r = color,   			rv = 0, ra = 0,
+		g = color,   			gv = 0, ga = 0,
+		b = color,   			bv = 0, ba = 0,
+		a = rng.range(25, 220)/255,    av = static and -0.034 or 0, aa = 0.005,
+	}
+end, },
+function(self)
+	if nb > 0 then
+		local i = math.min(nb, 6)
+		i = (i * i) * radius
+		self.ps:emit(i)
+		nb = nb - 1
+	end
+end,
+30*radius*7*12,
+"particle_cloud"
+
+end
\ No newline at end of file
diff --git a/game/modules/tome/data/gfx/particles/ball_teleport.lua b/game/modules/tome/data/gfx/particles/ball_teleport.lua
index 58ab4d3e5861630985e5cff54cec400c7b96edb6..4e9c4ce4e1e79fc3ba6392e5338ed0cf1f3fcd21 100644
--- a/game/modules/tome/data/gfx/particles/ball_teleport.lua
+++ b/game/modules/tome/data/gfx/particles/ball_teleport.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ball_temporal.lua b/game/modules/tome/data/gfx/particles/ball_temporal.lua
index 498eef956f89278e7e2eab4ee5566b94b8b8efc0..1b28e3ce0349ddc71e5db2ea7c69d33ed9b73e2b 100644
--- a/game/modules/tome/data/gfx/particles/ball_temporal.lua
+++ b/game/modules/tome/data/gfx/particles/ball_temporal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/beckoned.lua b/game/modules/tome/data/gfx/particles/beckoned.lua
index 2a827f546b4a89ba88c4e061926de71058363949..5ee97409812c7bd03aae27c9eb4ff3f29c02cd67 100644
--- a/game/modules/tome/data/gfx/particles/beckoned.lua
+++ b/game/modules/tome/data/gfx/particles/beckoned.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/beckoned_move.lua b/game/modules/tome/data/gfx/particles/beckoned_move.lua
index 02c9ae18a8e78f747b55dd260c744cb51587933b..fa51cd026d374b96be9f1ef9c8ae90358ba65835 100644
--- a/game/modules/tome/data/gfx/particles/beckoned_move.lua
+++ b/game/modules/tome/data/gfx/particles/beckoned_move.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/blight_power.lua b/game/modules/tome/data/gfx/particles/blight_power.lua
index 4bf4bf108571c95a4e0beca0f9ca614389dffbdd..7b2e0d1a3bfaf27b3d4d4d75a2cda6e5ba1d7cf8 100644
--- a/game/modules/tome/data/gfx/particles/blight_power.lua
+++ b/game/modules/tome/data/gfx/particles/blight_power.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/blightzone.lua b/game/modules/tome/data/gfx/particles/blightzone.lua
index 63b4346e6c6b81f9f7918be7b8da93b892aa020c..1db2667fd83e92d507c1442571d80be74d3dc307 100644
--- a/game/modules/tome/data/gfx/particles/blightzone.lua
+++ b/game/modules/tome/data/gfx/particles/blightzone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/blood.lua b/game/modules/tome/data/gfx/particles/blood.lua
index 87d3af262c6bd965152cadefb55ea0103f63600b..dd2c94fd21fb2d7e68f8cbb0917bcad2d8f5a9b1 100644
--- a/game/modules/tome/data/gfx/particles/blood.lua
+++ b/game/modules/tome/data/gfx/particles/blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bloodtrail.lua b/game/modules/tome/data/gfx/particles/bloodtrail.lua
index 7fbd7aef16cad4eaea6e189ceae817b06bdfeb30..ca8fa9656fd7c319c06e52a63848955884f3fef9 100644
--- a/game/modules/tome/data/gfx/particles/bloodtrail.lua
+++ b/game/modules/tome/data/gfx/particles/bloodtrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_acid.lua b/game/modules/tome/data/gfx/particles/bolt_acid.lua
index 9f6cfe905c1b6a683a0db8d20ae1058f23783da5..9dd7c70bbfd7b7062ea734f56a48386bda1047d6 100644
--- a/game/modules/tome/data/gfx/particles/bolt_acid.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_arcane.lua b/game/modules/tome/data/gfx/particles/bolt_arcane.lua
index d13ec59ddbcd8992d7382971d3638de54c38e858..8c36f035e0204cbc374c9cf8809ddaac0c510a0e 100644
--- a/game/modules/tome/data/gfx/particles/bolt_arcane.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_arcane.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_blood.lua b/game/modules/tome/data/gfx/particles/bolt_blood.lua
index 42fae946bcfad41dcf5d1ae7f5f96a3403f9ec8e..d858ea269b078a27c01559e640833ec03d084aa0 100644
--- a/game/modules/tome/data/gfx/particles/bolt_blood.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_dark.lua b/game/modules/tome/data/gfx/particles/bolt_dark.lua
index c512bc48e69c893ace549a81e6d4d90de6789a0e..2fcff4e50e0aee42c16b3528f4b997b66225a1d0 100644
--- a/game/modules/tome/data/gfx/particles/bolt_dark.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_dark.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_earth.lua b/game/modules/tome/data/gfx/particles/bolt_earth.lua
index 1b1b1c5a607a5447b1731a0c13a029d2b133f13c..4078d5c9838b8c12fb2fdcc9b8ab277a52f0c37d 100644
--- a/game/modules/tome/data/gfx/particles/bolt_earth.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_earth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_elemental.lua b/game/modules/tome/data/gfx/particles/bolt_elemental.lua
index 8d67e73fa0a16769bb34d108378319401932ab36..05341a835df6c715c5de4ab6f3e0c8ee27bca411 100644
--- a/game/modules/tome/data/gfx/particles/bolt_elemental.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_elemental.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_fire.lua b/game/modules/tome/data/gfx/particles/bolt_fire.lua
index ae8b4e2e31737c9e2396ca45801e88f1b0beb8d7..0a5cfeb0cd4da95c99c87a0b7bf97fd1f87285c3 100644
--- a/game/modules/tome/data/gfx/particles/bolt_fire.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_ice.lua b/game/modules/tome/data/gfx/particles/bolt_ice.lua
index 3a784fa426325d2bf341e22cbe047948a8a8af85..307c9998e042cccea5cddb876c79a4c13cc67264 100644
--- a/game/modules/tome/data/gfx/particles/bolt_ice.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_ice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_light.lua b/game/modules/tome/data/gfx/particles/bolt_light.lua
index b99baaf5457cee164d90c465b58383f0670a8397..b21fde5fca7042e1dc1cd7d46da832eaf6066c61 100644
--- a/game/modules/tome/data/gfx/particles/bolt_light.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_light.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_lightning.lua b/game/modules/tome/data/gfx/particles/bolt_lightning.lua
index 6ff7400427490ccd4c8c2a9a5319d048df0716f2..e09e98b6085e4b25bfea97fca9246b2ae673b3bc 100644
--- a/game/modules/tome/data/gfx/particles/bolt_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_slime.lua b/game/modules/tome/data/gfx/particles/bolt_slime.lua
index e6508aff128627363aeda485cd9bc807665464b8..ec21982d644b79893443784e307acbe9893fe758 100644
--- a/game/modules/tome/data/gfx/particles/bolt_slime.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_slime.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bolt_void.lua b/game/modules/tome/data/gfx/particles/bolt_void.lua
index b7bcfdc2121a6c3bbf840209c5f7fb7ee1901e14..1e4fde77e577726e135c3670674f25f7b404b7ce 100644
--- a/game/modules/tome/data/gfx/particles/bolt_void.lua
+++ b/game/modules/tome/data/gfx/particles/bolt_void.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bone_shield.lua b/game/modules/tome/data/gfx/particles/bone_shield.lua
index f93f62d695f4a4ccc504bb48940e93fae97ef49e..1b63e72216d07df8ef1ebc89e9b67e83c6d2e525 100644
--- a/game/modules/tome/data/gfx/particles/bone_shield.lua
+++ b/game/modules/tome/data/gfx/particles/bone_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/bones.lua b/game/modules/tome/data/gfx/particles/bones.lua
index 8279913fb28b032a4218cc27709ddf357578341b..39717c2b64ed096ce58e339407ce16e3798867f5 100644
--- a/game/modules/tome/data/gfx/particles/bones.lua
+++ b/game/modules/tome/data/gfx/particles/bones.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_acid.lua b/game/modules/tome/data/gfx/particles/breath_acid.lua
index a8366023398259d814854d4f9c7050743b71656b..a6f5ebd6a426afd629516d45ab26996d6916069e 100644
--- a/game/modules/tome/data/gfx/particles/breath_acid.lua
+++ b/game/modules/tome/data/gfx/particles/breath_acid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_blood.lua b/game/modules/tome/data/gfx/particles/breath_blood.lua
index 3b7dcc295f89149d77ca0b1105f3a133dd6a56ab..e42058ee876a9af431335f21c889ed4707f6dc99 100644
--- a/game/modules/tome/data/gfx/particles/breath_blood.lua
+++ b/game/modules/tome/data/gfx/particles/breath_blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_cold.lua b/game/modules/tome/data/gfx/particles/breath_cold.lua
index c19381713399e54d0d349abda7a84a2f235c72f4..22f7d63cf705a20fdad5d333e303e0b91fae8d6c 100644
--- a/game/modules/tome/data/gfx/particles/breath_cold.lua
+++ b/game/modules/tome/data/gfx/particles/breath_cold.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_dark.lua b/game/modules/tome/data/gfx/particles/breath_dark.lua
index 03d600f7f4aa2127fbd3e7e1947b0e56ddf65e10..431aa00acdb3eb6b12a922f0e458b14954a24b52 100644
--- a/game/modules/tome/data/gfx/particles/breath_dark.lua
+++ b/game/modules/tome/data/gfx/particles/breath_dark.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_earth.lua b/game/modules/tome/data/gfx/particles/breath_earth.lua
index 4700134ec7fde70e8351ab7b04eccb176830fc3e..20dcc457f52eadb09a1a85bc6c78624ecc76badd 100644
--- a/game/modules/tome/data/gfx/particles/breath_earth.lua
+++ b/game/modules/tome/data/gfx/particles/breath_earth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_fire.lua b/game/modules/tome/data/gfx/particles/breath_fire.lua
index 197b22d2149d5ef63fac6a9754a7453d410a0425..61e36314369b0aa8a2c507182dc623339d525109 100644
--- a/game/modules/tome/data/gfx/particles/breath_fire.lua
+++ b/game/modules/tome/data/gfx/particles/breath_fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_fire_navier.lua b/game/modules/tome/data/gfx/particles/breath_fire_navier.lua
index 8d1eb586900ffbb2f2a4d44a621974df15d3c22f..561bff8c410c2c3a9d7639bc3a7aa278e65f2d11 100644
--- a/game/modules/tome/data/gfx/particles/breath_fire_navier.lua
+++ b/game/modules/tome/data/gfx/particles/breath_fire_navier.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_lightning.lua b/game/modules/tome/data/gfx/particles/breath_lightning.lua
index ad41a3dd13b175c0005c5d1b20ce7ec72a814aa3..151d190c9795c0bef05701b6c346a6765e16493a 100644
--- a/game/modules/tome/data/gfx/particles/breath_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/breath_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_shadow.lua b/game/modules/tome/data/gfx/particles/breath_shadow.lua
index 6c48628b56fe32fb08c8a65e399679c3366fd025..538f7b817375a87ea1d8db10dba2e03275345f71 100644
--- a/game/modules/tome/data/gfx/particles/breath_shadow.lua
+++ b/game/modules/tome/data/gfx/particles/breath_shadow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/breath_slime.lua b/game/modules/tome/data/gfx/particles/breath_slime.lua
index 0485e50b5057ae1e24cc9f76ba7430ff253b019a..d1ddd7c90c335f31634c9c8aa123ec6b6436972b 100644
--- a/game/modules/tome/data/gfx/particles/breath_slime.lua
+++ b/game/modules/tome/data/gfx/particles/breath_slime.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/charge.lua b/game/modules/tome/data/gfx/particles/charge.lua
index a10ba167a7d3d90197af6136983995f7d067e24b..384395a835a6c3b93883db4519494e2d0ca69989 100644
--- a/game/modules/tome/data/gfx/particles/charge.lua
+++ b/game/modules/tome/data/gfx/particles/charge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/charge_matter.lua b/game/modules/tome/data/gfx/particles/charge_matter.lua
index b7d5e7ea9aecb77f31dc548bb7ced0f6a039cb2e..bc60e663b4f761b6975e1689f4071ce457389f83 100644
--- a/game/modules/tome/data/gfx/particles/charge_matter.lua
+++ b/game/modules/tome/data/gfx/particles/charge_matter.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/circle_of_death.lua b/game/modules/tome/data/gfx/particles/circle_of_death.lua
index b62de6462139baca03dcb6276f1ae4c8f89a8d53..ec064f53a2854cbc55115534304488faefc253be 100644
--- a/game/modules/tome/data/gfx/particles/circle_of_death.lua
+++ b/game/modules/tome/data/gfx/particles/circle_of_death.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/coldflames.lua b/game/modules/tome/data/gfx/particles/coldflames.lua
index 8f20859a877393a4ab8652fbf95c2de93cfa4417..d5e75cd3b708957ef14ae4f1ebfc4b0039a84daa 100644
--- a/game/modules/tome/data/gfx/particles/coldflames.lua
+++ b/game/modules/tome/data/gfx/particles/coldflames.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/creeping_dark.lua b/game/modules/tome/data/gfx/particles/creeping_dark.lua
index 923c7d697b6bde3a982295dedbc6ef01e103ee17..fccc63e8e1b752d6beef2662a1642f3cadf43a3f 100644
--- a/game/modules/tome/data/gfx/particles/creeping_dark.lua
+++ b/game/modules/tome/data/gfx/particles/creeping_dark.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/crystalline_focus.lua b/game/modules/tome/data/gfx/particles/crystalline_focus.lua
index c3ce778c22c2ffba9f8c7345e7972a9722f52d9c..b200cc64a173c7af14f2cfb4f00eb40a1af75c3c 100644
--- a/game/modules/tome/data/gfx/particles/crystalline_focus.lua
+++ b/game/modules/tome/data/gfx/particles/crystalline_focus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/cursed_form.lua b/game/modules/tome/data/gfx/particles/cursed_form.lua
index 8b1cf8f6441ddc0a5a017bf2728b50424c22e4bd..98da64aa5f2a69faaa6ff64fba49d3b3079ba820 100644
--- a/game/modules/tome/data/gfx/particles/cursed_form.lua
+++ b/game/modules/tome/data/gfx/particles/cursed_form.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/cursed_ground.lua b/game/modules/tome/data/gfx/particles/cursed_ground.lua
index d0d079795b0922808203f7d6b5937d40bb11c794..414376134caac005f60da25d0b24e8be526ab579 100644
--- a/game/modules/tome/data/gfx/particles/cursed_ground.lua
+++ b/game/modules/tome/data/gfx/particles/cursed_ground.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/damage_shield.lua b/game/modules/tome/data/gfx/particles/damage_shield.lua
index 07716691f5317504f176ad9d98d3e1c541e96970..65955b6303472fe8b490aaed26dfdf72012345b7 100644
--- a/game/modules/tome/data/gfx/particles/damage_shield.lua
+++ b/game/modules/tome/data/gfx/particles/damage_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dark.lua b/game/modules/tome/data/gfx/particles/dark.lua
index f496c3f96268af51c9eae3402a561afaf61a3561..6f63e64b1b06fa0fef052c57c20a5d24e11b1d18 100644
--- a/game/modules/tome/data/gfx/particles/dark.lua
+++ b/game/modules/tome/data/gfx/particles/dark.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dark_inferno.lua b/game/modules/tome/data/gfx/particles/dark_inferno.lua
index c1d10c030e58e26dd2f5a85f4e48f50c3db6de3b..b29401778d30353fdf24876673c89954f46388b3 100644
--- a/game/modules/tome/data/gfx/particles/dark_inferno.lua
+++ b/game/modules/tome/data/gfx/particles/dark_inferno.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dark_lightning.lua b/game/modules/tome/data/gfx/particles/dark_lightning.lua
index 20f3489241e3130a194f8533ab66907be0a2bc60..3661818893c441708cb23ecd9d1546c4c5122eaf 100644
--- a/game/modules/tome/data/gfx/particles/dark_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/dark_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dark_tendrils.lua b/game/modules/tome/data/gfx/particles/dark_tendrils.lua
index 3d1865c910c797f6cf3f3eb6d9cafc04105ccbf4..26aebaed65f4b7736612d3da5b31b07b6fbc96fe 100644
--- a/game/modules/tome/data/gfx/particles/dark_tendrils.lua
+++ b/game/modules/tome/data/gfx/particles/dark_tendrils.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dark_torrent.lua b/game/modules/tome/data/gfx/particles/dark_torrent.lua
index 1230723c1ce4ada7eac1c9610e4b7006cc5cda01..47277ef9489ad85b5a22cf0e3d46a17d4c5e9b65 100644
--- a/game/modules/tome/data/gfx/particles/dark_torrent.lua
+++ b/game/modules/tome/data/gfx/particles/dark_torrent.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/darkness_power.lua b/game/modules/tome/data/gfx/particles/darkness_power.lua
index a16c384e3cd8dc7830cf850ef3841200837f552c..0b948d3616a50d8f0d34b58bd9ac3beaecc7ca83 100644
--- a/game/modules/tome/data/gfx/particles/darkness_power.lua
+++ b/game/modules/tome/data/gfx/particles/darkness_power.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/darkness_shield.lua b/game/modules/tome/data/gfx/particles/darkness_shield.lua
index 43004aee29a18b32e8f84c15ab4c4cf4385e1789..1383ee9bf65f3aaf8f13f5ea3a6c4d9bb9fd2bdc 100644
--- a/game/modules/tome/data/gfx/particles/darkness_shield.lua
+++ b/game/modules/tome/data/gfx/particles/darkness_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/darktrail.lua b/game/modules/tome/data/gfx/particles/darktrail.lua
index 041ba0ab98eb7b6a5e28d4fed37116fd09603bf0..e5b02a287eaebe22574e40082839d1dabcb01d3f 100644
--- a/game/modules/tome/data/gfx/particles/darktrail.lua
+++ b/game/modules/tome/data/gfx/particles/darktrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/demon_teleport.lua b/game/modules/tome/data/gfx/particles/demon_teleport.lua
index 7b98890105f14966f039a336f993f73b1999945f..a1798e743244f5d83c98321590758fd7f089abfb 100644
--- a/game/modules/tome/data/gfx/particles/demon_teleport.lua
+++ b/game/modules/tome/data/gfx/particles/demon_teleport.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/destabilized.lua b/game/modules/tome/data/gfx/particles/destabilized.lua
index c553598876c0175d83fe3dcd29d7ed4346887404..b40297e9f47045a5b4aa3fbfd3d919deb4c3f475 100644
--- a/game/modules/tome/data/gfx/particles/destabilized.lua
+++ b/game/modules/tome/data/gfx/particles/destabilized.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/directional_shout.lua b/game/modules/tome/data/gfx/particles/directional_shout.lua
index 44f3041fe132e50ee1cd180ff3d31f2f3db0b6af..1bb7f1fd141796b2e43ff9a607b1c3633389a9fa 100644
--- a/game/modules/tome/data/gfx/particles/directional_shout.lua
+++ b/game/modules/tome/data/gfx/particles/directional_shout.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/discharge_bolt.lua b/game/modules/tome/data/gfx/particles/discharge_bolt.lua
index a10ba167a7d3d90197af6136983995f7d067e24b..384395a835a6c3b93883db4519494e2d0ca69989 100644
--- a/game/modules/tome/data/gfx/particles/discharge_bolt.lua
+++ b/game/modules/tome/data/gfx/particles/discharge_bolt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dismayed.lua b/game/modules/tome/data/gfx/particles/dismayed.lua
index 7f85c4678f5cb594ec46184f4cd0c3156b08bc3d..bf55f2dc4f8cf4a0f393807686bb55bc5735935d 100644
--- a/game/modules/tome/data/gfx/particles/dismayed.lua
+++ b/game/modules/tome/data/gfx/particles/dismayed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/displacement_shield.lua b/game/modules/tome/data/gfx/particles/displacement_shield.lua
index 949ac58b5227367a30147f14542b27e1c4d36ea6..e70e4eff75416749aa2d5121094031e87ff4e76d 100644
--- a/game/modules/tome/data/gfx/particles/displacement_shield.lua
+++ b/game/modules/tome/data/gfx/particles/displacement_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/disruption_shield.lua b/game/modules/tome/data/gfx/particles/disruption_shield.lua
index b0278c33e9a80d1d6ade8e93fddd98adb7b4d9f3..395dfa17a7f9a4eb56799130e67b7f5cd7fbc92f 100644
--- a/game/modules/tome/data/gfx/particles/disruption_shield.lua
+++ b/game/modules/tome/data/gfx/particles/disruption_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/distortion.lua b/game/modules/tome/data/gfx/particles/distortion.lua
index e53f14baa0f9456338c39f48301ab5543a372462..f90ede001f38dcc048a34561ba17cf54156cf2f3 100644
--- a/game/modules/tome/data/gfx/particles/distortion.lua
+++ b/game/modules/tome/data/gfx/particles/distortion.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/distortion_bolt.lua b/game/modules/tome/data/gfx/particles/distortion_bolt.lua
index 13c153c96f7ab7305c45b308e08d2d12905d88cf..733f6ee3059aa0e694f871eb1afd82c573fc7177 100644
--- a/game/modules/tome/data/gfx/particles/distortion_bolt.lua
+++ b/game/modules/tome/data/gfx/particles/distortion_bolt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/distortion_trail.lua b/game/modules/tome/data/gfx/particles/distortion_trail.lua
index b1226ff77ece1e5089fdd31fd2a17d8e9f70b3f6..9b18d3dc8bdbd9e79544b532de98ea4ec4d89e90 100644
--- a/game/modules/tome/data/gfx/particles/distortion_trail.lua
+++ b/game/modules/tome/data/gfx/particles/distortion_trail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dominated.lua b/game/modules/tome/data/gfx/particles/dominated.lua
index bb26534968e23cb32a564496d8a88c913adeb825..d0653b977e75c1373f97725de5803b2fe736cc1a 100644
--- a/game/modules/tome/data/gfx/particles/dominated.lua
+++ b/game/modules/tome/data/gfx/particles/dominated.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dreamhammer.lua b/game/modules/tome/data/gfx/particles/dreamhammer.lua
index fbc9f524f8716fae867da5a7d3e9473833945ef8..0b82c0757c0b9cf36c6bf966469b7523e0ea3597 100644
--- a/game/modules/tome/data/gfx/particles/dreamhammer.lua
+++ b/game/modules/tome/data/gfx/particles/dreamhammer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/dust_trail.lua b/game/modules/tome/data/gfx/particles/dust_trail.lua
index 984a45bd6c0d36f7705f9b753835e9b65417b7ba..adb081f5498fd30a49f126358e13a87eb578281c 100644
--- a/game/modules/tome/data/gfx/particles/dust_trail.lua
+++ b/game/modules/tome/data/gfx/particles/dust_trail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/eagle.lua b/game/modules/tome/data/gfx/particles/eagle.lua
index eae16d1f81821fa02e2ef060c783f9e225789a32..1a513a505450fe66a56491b64b762140e70d2485 100644
--- a/game/modules/tome/data/gfx/particles/eagle.lua
+++ b/game/modules/tome/data/gfx/particles/eagle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/earth_beam.lua b/game/modules/tome/data/gfx/particles/earth_beam.lua
index 7fcdf25ba21882856e05146928b89a7d2aa21d26..d4a8abb9905b9dc3e94dc6ea35a792e6ce28d22a 100644
--- a/game/modules/tome/data/gfx/particles/earth_beam.lua
+++ b/game/modules/tome/data/gfx/particles/earth_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/earthtrail.lua b/game/modules/tome/data/gfx/particles/earthtrail.lua
index b4e1f211366e71dea3cec50000b22afe47c8e869..d951c88b0641224d2e372cba28eeb2980d51e3a5 100644
--- a/game/modules/tome/data/gfx/particles/earthtrail.lua
+++ b/game/modules/tome/data/gfx/particles/earthtrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/entropythrust.lua b/game/modules/tome/data/gfx/particles/entropythrust.lua
index 6f5e53b496898c739ab11483bd25b7532604db82..7fc1a5a1a725add6e355b4f75402548491f62b91 100644
--- a/game/modules/tome/data/gfx/particles/entropythrust.lua
+++ b/game/modules/tome/data/gfx/particles/entropythrust.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/farportal_lightning.lua b/game/modules/tome/data/gfx/particles/farportal_lightning.lua
index 32ba7c69905b9ef84e76206263886739b88cacb3..dd5e558eaa5aa69f6bad05e36d7baaf080cee35e 100644
--- a/game/modules/tome/data/gfx/particles/farportal_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/farportal_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/farportal_vortex.lua b/game/modules/tome/data/gfx/particles/farportal_vortex.lua
index 7375061d7077c5aeaed78651d7424d28aca778d0..c7c637e32b47e6c95a8cee2a6a0fa2ed265dcb82 100644
--- a/game/modules/tome/data/gfx/particles/farportal_vortex.lua
+++ b/game/modules/tome/data/gfx/particles/farportal_vortex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/fear.lua b/game/modules/tome/data/gfx/particles/fear.lua
index 1f6b7bac72db660aad4a6d86e69bd6e289a01ad2..774c30846c97c6e400b906831051a402f3f0daf4 100644
--- a/game/modules/tome/data/gfx/particles/fear.lua
+++ b/game/modules/tome/data/gfx/particles/fear.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/fear_blue.lua b/game/modules/tome/data/gfx/particles/fear_blue.lua
index 0f57cd9334e7db39cf40d228b97c1f071cb534a6..8a73b80415c55800b828f48ded110a172c8cfe32 100644
--- a/game/modules/tome/data/gfx/particles/fear_blue.lua
+++ b/game/modules/tome/data/gfx/particles/fear_blue.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/fear_violet.lua b/game/modules/tome/data/gfx/particles/fear_violet.lua
index 5d54b559c2a739e301992a704301a9c0a68a7cbe..d55567802f0cf9682ee106f024576e120ba4cee6 100644
--- a/game/modules/tome/data/gfx/particles/fear_violet.lua
+++ b/game/modules/tome/data/gfx/particles/fear_violet.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/feed_hate.lua b/game/modules/tome/data/gfx/particles/feed_hate.lua
index 18e62d588c79c02a61cc994c4dd4e88d3dd28495..b7d56d0804e5e08975484a26e773f6e3932e14ba 100644
--- a/game/modules/tome/data/gfx/particles/feed_hate.lua
+++ b/game/modules/tome/data/gfx/particles/feed_hate.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/feed_health.lua b/game/modules/tome/data/gfx/particles/feed_health.lua
index 58e4e63c64f6fbd9066fd051079a60e77ef63eff..781886b7e048caef22c0058a5158aa5cfe7aa9a4 100644
--- a/game/modules/tome/data/gfx/particles/feed_health.lua
+++ b/game/modules/tome/data/gfx/particles/feed_health.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/feed_power.lua b/game/modules/tome/data/gfx/particles/feed_power.lua
index b325ea40f33adac7980d6e328726f7b8330d4d63..5c515d04ded96384da6251d3071aa247f70c1878 100644
--- a/game/modules/tome/data/gfx/particles/feed_power.lua
+++ b/game/modules/tome/data/gfx/particles/feed_power.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/feed_strengths.lua b/game/modules/tome/data/gfx/particles/feed_strengths.lua
index f74b5d3dcec27f294273627cce35dc369926f65c..bc0a2bc12111906077755e8acfc6723d7d2f2856 100644
--- a/game/modules/tome/data/gfx/particles/feed_strengths.lua
+++ b/game/modules/tome/data/gfx/particles/feed_strengths.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/fireflash.lua b/game/modules/tome/data/gfx/particles/fireflash.lua
index 59119fb950d9c6b2d40ed02084c0e67a75b2b3e1..46387d9362bde5be54ed05bad6565d2785c7b731 100644
--- a/game/modules/tome/data/gfx/particles/fireflash.lua
+++ b/game/modules/tome/data/gfx/particles/fireflash.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/firestorm.lua b/game/modules/tome/data/gfx/particles/firestorm.lua
index 49292c6affde4c17273b9eeb002ecea0dfab825e..2f15a0871a451e423dd194027116a03bb4ef76e1 100644
--- a/game/modules/tome/data/gfx/particles/firestorm.lua
+++ b/game/modules/tome/data/gfx/particles/firestorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/firetrail.lua b/game/modules/tome/data/gfx/particles/firetrail.lua
index c9cd7578952108b0e0bc8b22396f9ab8e9296ec5..9815884e7d96f81616154c27612b357d3e520d24 100644
--- a/game/modules/tome/data/gfx/particles/firetrail.lua
+++ b/game/modules/tome/data/gfx/particles/firetrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,7 +18,7 @@
 -- darkgod@te4.org
 
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/flame.lua b/game/modules/tome/data/gfx/particles/flame.lua
index f8acc6f9d9afb242fa31bbd466f6e093bfb122b4..8d8709779f1cec31864b39fc8e754fb689d64430 100644
--- a/game/modules/tome/data/gfx/particles/flame.lua
+++ b/game/modules/tome/data/gfx/particles/flame.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/flamebeam.lua b/game/modules/tome/data/gfx/particles/flamebeam.lua
index 4131c877fc553c5fd9948cd17af978f4a0dd546c..c25c582c1692e5f11ccaf7a1df4441d9e7b4e6a4 100644
--- a/game/modules/tome/data/gfx/particles/flamebeam.lua
+++ b/game/modules/tome/data/gfx/particles/flamebeam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/force_area.lua b/game/modules/tome/data/gfx/particles/force_area.lua
index 4af920d08dfc2e7acac383d245125dbdb0947956..1b9e46cecec3cb95e7e473c5a0c0144b0c682348 100644
--- a/game/modules/tome/data/gfx/particles/force_area.lua
+++ b/game/modules/tome/data/gfx/particles/force_area.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/force_blast.lua b/game/modules/tome/data/gfx/particles/force_blast.lua
index 4b610ecb42d365a91e9449165c3033be641a2c86..5431f69d6b31ce1fb28a9b89678615678210e0c0 100644
--- a/game/modules/tome/data/gfx/particles/force_blast.lua
+++ b/game/modules/tome/data/gfx/particles/force_blast.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/force_deflection.lua b/game/modules/tome/data/gfx/particles/force_deflection.lua
index cb70e3a0abe568736ea1e1a7501f006f006717dc..142caf3fdc27b28c546b62d3e03036b8bd25645e 100644
--- a/game/modules/tome/data/gfx/particles/force_deflection.lua
+++ b/game/modules/tome/data/gfx/particles/force_deflection.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/force_hit.lua b/game/modules/tome/data/gfx/particles/force_hit.lua
index a0376b3c9eecb62a9d3bf45c274c9f5aa70d48be..3e074c725727580b6113156e8686085cd87a25cf 100644
--- a/game/modules/tome/data/gfx/particles/force_hit.lua
+++ b/game/modules/tome/data/gfx/particles/force_hit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/freeze.lua b/game/modules/tome/data/gfx/particles/freeze.lua
index a99cfb7436b7f35ca2419aedea6162ba7f7fab94..09d4151f076f8bd85806cdc03c272bb8c00760c6 100644
--- a/game/modules/tome/data/gfx/particles/freeze.lua
+++ b/game/modules/tome/data/gfx/particles/freeze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/fulldream.lua b/game/modules/tome/data/gfx/particles/fulldream.lua
index 58a3572193b36a1807b15e816c7e70f6003507ca..d38bc589c62d9e57075e87ce76187cbb679b1b00 100644
--- a/game/modules/tome/data/gfx/particles/fulldream.lua
+++ b/game/modules/tome/data/gfx/particles/fulldream.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/fullgloom.lua b/game/modules/tome/data/gfx/particles/fullgloom.lua
index e6fdc8b052326e04982f372a6919962edd833db7..3b02ff6e495cc2efcd7e39e765ef0ffc869f6d18 100644
--- a/game/modules/tome/data/gfx/particles/fullgloom.lua
+++ b/game/modules/tome/data/gfx/particles/fullgloom.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_ball.lua b/game/modules/tome/data/gfx/particles/generic_ball.lua
index db69737f52e7ef0540d8dee060f8836c6aa6ce87..f0928535479ea5b09eac93bdc16edf878eb98d2a 100644
--- a/game/modules/tome/data/gfx/particles/generic_ball.lua
+++ b/game/modules/tome/data/gfx/particles/generic_ball.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_blast.lua b/game/modules/tome/data/gfx/particles/generic_blast.lua
index 5aa8a78c8b74c1ff531ec50b73fe170051e6391e..b2207a5b08a1b07d951e8be98aae8ecd8f166621 100644
--- a/game/modules/tome/data/gfx/particles/generic_blast.lua
+++ b/game/modules/tome/data/gfx/particles/generic_blast.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_charge.lua b/game/modules/tome/data/gfx/particles/generic_charge.lua
index 6b9f71d06bd5eb2e6b4d440b4b26d188b08af7b9..0ae39cbf146d35d8fcfb43a4df44a9fcb5d2d5ed 100644
--- a/game/modules/tome/data/gfx/particles/generic_charge.lua
+++ b/game/modules/tome/data/gfx/particles/generic_charge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_discharge.lua b/game/modules/tome/data/gfx/particles/generic_discharge.lua
index 0d97c8800b76f810d63c6c7cd81338ecacc7aee1..e1988a90a2d65ae79b9f67f8d9d50ecee0dfc5ee 100644
--- a/game/modules/tome/data/gfx/particles/generic_discharge.lua
+++ b/game/modules/tome/data/gfx/particles/generic_discharge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_power.lua b/game/modules/tome/data/gfx/particles/generic_power.lua
index b4d551cc4b6e41bd0db4fb7958729b6fc3099442..135385a806a2a42a8fe151c31d4fe24e23c150bd 100644
--- a/game/modules/tome/data/gfx/particles/generic_power.lua
+++ b/game/modules/tome/data/gfx/particles/generic_power.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_shield.lua b/game/modules/tome/data/gfx/particles/generic_shield.lua
index 8217f3a6d7618b47c725ed8008eadbba6749dfaf..04f076a526c22fff2dee708ccbb634df67ec579f 100644
--- a/game/modules/tome/data/gfx/particles/generic_shield.lua
+++ b/game/modules/tome/data/gfx/particles/generic_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_sploom.lua b/game/modules/tome/data/gfx/particles/generic_sploom.lua
index 492e470161a7c8e9d689b6bdc105cdb4c40e4bbf..79f8763d4edb8eb755f9062d9e3ab75916c45ac4 100644
--- a/game/modules/tome/data/gfx/particles/generic_sploom.lua
+++ b/game/modules/tome/data/gfx/particles/generic_sploom.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_teleport.lua b/game/modules/tome/data/gfx/particles/generic_teleport.lua
index 9e8cc66e44083e4a9e28b39b1bf54790cff4cf39..264f2ef7be4042b142d49a7f5ee4871400139e1f 100644
--- a/game/modules/tome/data/gfx/particles/generic_teleport.lua
+++ b/game/modules/tome/data/gfx/particles/generic_teleport.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_vortex.lua b/game/modules/tome/data/gfx/particles/generic_vortex.lua
index 23ce09fedea04bd00100804f42d530a53af3cab4..54a19ac440b498007b991b9b4297e51639958f37 100644
--- a/game/modules/tome/data/gfx/particles/generic_vortex.lua
+++ b/game/modules/tome/data/gfx/particles/generic_vortex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generic_wave.lua b/game/modules/tome/data/gfx/particles/generic_wave.lua
index e7094df9e4c0b66fb9bd3189e37af964ce34d94c..7c5f380bc7d205d9d0c0840c2eaa146f350660f1 100644
--- a/game/modules/tome/data/gfx/particles/generic_wave.lua
+++ b/game/modules/tome/data/gfx/particles/generic_wave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/generictrail.lua b/game/modules/tome/data/gfx/particles/generictrail.lua
index 8d7b56d816eeaade94ca4c7d14cbb002ab615e7e..79817e3124619adbbb0fc2e20b70c7476a3730a8 100644
--- a/game/modules/tome/data/gfx/particles/generictrail.lua
+++ b/game/modules/tome/data/gfx/particles/generictrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gloom.lua b/game/modules/tome/data/gfx/particles/gloom.lua
index 0379bc7e766d5d6089a039abc7c6aec770bd060e..2e1f0b19e5fbeedfd266aa1361097ee092ccd1a1 100644
--- a/game/modules/tome/data/gfx/particles/gloom.lua
+++ b/game/modules/tome/data/gfx/particles/gloom.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gloom_confused.lua b/game/modules/tome/data/gfx/particles/gloom_confused.lua
index 15a319e1f2de03047578a49678787f124834e5b8..42630acf1be26dbc8cfb0b9e2bb53e8c4b644f2b 100644
--- a/game/modules/tome/data/gfx/particles/gloom_confused.lua
+++ b/game/modules/tome/data/gfx/particles/gloom_confused.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gloom_slow.lua b/game/modules/tome/data/gfx/particles/gloom_slow.lua
index 91c1c36cd14851a3fb96914fd0b7561bfe3d611f..ccae1e73f1e4b421225b386f66aa9732569cf612 100644
--- a/game/modules/tome/data/gfx/particles/gloom_slow.lua
+++ b/game/modules/tome/data/gfx/particles/gloom_slow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gloom_stunned.lua b/game/modules/tome/data/gfx/particles/gloom_stunned.lua
index ec6a4a8667dd84181f59f8c8e16a27b173df178a..578d87180057821ddad3e2715b4f168aba779f06 100644
--- a/game/modules/tome/data/gfx/particles/gloom_stunned.lua
+++ b/game/modules/tome/data/gfx/particles/gloom_stunned.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gloom_weakness.lua b/game/modules/tome/data/gfx/particles/gloom_weakness.lua
index 3de260aee817d8f71a1d183b1e3106cac7140220..60c5034f5189cde60d3492f29f419de26d072485 100644
--- a/game/modules/tome/data/gfx/particles/gloom_weakness.lua
+++ b/game/modules/tome/data/gfx/particles/gloom_weakness.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/godslayer_swirl.lua b/game/modules/tome/data/gfx/particles/godslayer_swirl.lua
index 5d59c04eb60909cf98b4e3063fc59a41c1eee659..5990e862f9697c1d29b0708d8757a350f7719eb9 100644
--- a/game/modules/tome/data/gfx/particles/godslayer_swirl.lua
+++ b/game/modules/tome/data/gfx/particles/godslayer_swirl.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/golden_shield.lua b/game/modules/tome/data/gfx/particles/golden_shield.lua
index 29fc28b0cb9404b70969709c23ff6dcdd7bebaa1..1ccd5153b5887daca6f14083854966a7bc7eb157 100644
--- a/game/modules/tome/data/gfx/particles/golden_shield.lua
+++ b/game/modules/tome/data/gfx/particles/golden_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gravity_breath.lua b/game/modules/tome/data/gfx/particles/gravity_breath.lua
index 23380f273df341005319eb77bbb7e59df91a7e54..a35c5efaf9654187dcc43d186966b89000683259 100644
--- a/game/modules/tome/data/gfx/particles/gravity_breath.lua
+++ b/game/modules/tome/data/gfx/particles/gravity_breath.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -31,7 +31,6 @@ if core.shader.allow("distort") and allow then
 use_shader = {type="distort", power=0.06, power_time=1000000, blacken=30} alterscreen = true
 base_size = 64
 local nb = 0
-
 local life=16
 local sizev=2*64*radius / life
 
diff --git a/game/modules/tome/data/gfx/particles/gravity_focus.lua b/game/modules/tome/data/gfx/particles/gravity_focus.lua
index ce72d9168e939556654267ab0494a329de1bf728..107934a26f3faa3b5fde96a604ba114ce42410b4 100644
--- a/game/modules/tome/data/gfx/particles/gravity_focus.lua
+++ b/game/modules/tome/data/gfx/particles/gravity_focus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gravity_spike.lua b/game/modules/tome/data/gfx/particles/gravity_spike.lua
index 612aac2a60f08b8833a5d689f0c98612b926ad6f..e07eccf66af892b1b119b76bf09c2063157729a2 100644
--- a/game/modules/tome/data/gfx/particles/gravity_spike.lua
+++ b/game/modules/tome/data/gfx/particles/gravity_spike.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gravity_well.lua b/game/modules/tome/data/gfx/particles/gravity_well.lua
index fc4c14d80d8ebec8e21c69ff2e77e1cb13a233b3..2e899b9e329e64f5bbad4b816b260107c4eb0aec 100644
--- a/game/modules/tome/data/gfx/particles/gravity_well.lua
+++ b/game/modules/tome/data/gfx/particles/gravity_well.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/gravity_well2.lua b/game/modules/tome/data/gfx/particles/gravity_well2.lua
index 5c4a619d69b1ce052c82e6a9be4f3af1b6c759a3..5269b709db98c1458dfd4a4426c73cab264057a5 100644
--- a/game/modules/tome/data/gfx/particles/gravity_well2.lua
+++ b/game/modules/tome/data/gfx/particles/gravity_well2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/harassed.lua b/game/modules/tome/data/gfx/particles/harassed.lua
index 798452b0f3257c1d45804a5b5daf59426081e2ff..5ec577df3c7a8ba3f3ab65bb92be638a47ced207 100644
--- a/game/modules/tome/data/gfx/particles/harassed.lua
+++ b/game/modules/tome/data/gfx/particles/harassed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/hateful_whisper.lua b/game/modules/tome/data/gfx/particles/hateful_whisper.lua
index 0158d923553a3e656b6ae542cf4ad5ee443bcc2e..2a0314c61599fe998d2a8e44cd15619e4b39a1ca 100644
--- a/game/modules/tome/data/gfx/particles/hateful_whisper.lua
+++ b/game/modules/tome/data/gfx/particles/hateful_whisper.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/healing_vapour.lua b/game/modules/tome/data/gfx/particles/healing_vapour.lua
index 9f1257026d16e716023c56d0b8e5ec79b2f67d71..22b9187f363b2b42532b5baa4987b14ee0f5dd9d 100644
--- a/game/modules/tome/data/gfx/particles/healing_vapour.lua
+++ b/game/modules/tome/data/gfx/particles/healing_vapour.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/hit_warning.lua b/game/modules/tome/data/gfx/particles/hit_warning.lua
index c6febf854896f657a126839d15932ec0951e2faf..0bb68aad2f969d0f58e0b2711fc21dcc338ad372 100644
--- a/game/modules/tome/data/gfx/particles/hit_warning.lua
+++ b/game/modules/tome/data/gfx/particles/hit_warning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/house_flamebeam.lua b/game/modules/tome/data/gfx/particles/house_flamebeam.lua
index 8f5366db9c423866b424ac69093bdbfeda348a22..3cad2cc5d6ecf49ffc3a70db9e9fe3b8bddadd11 100644
--- a/game/modules/tome/data/gfx/particles/house_flamebeam.lua
+++ b/game/modules/tome/data/gfx/particles/house_flamebeam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/house_orbcontrol.lua b/game/modules/tome/data/gfx/particles/house_orbcontrol.lua
index 8c6ecf0f346739ca4238df2a67ad9c68c5ae28fd..24b54d6d6c47789d57750c8954f43875f415d937 100644
--- a/game/modules/tome/data/gfx/particles/house_orbcontrol.lua
+++ b/game/modules/tome/data/gfx/particles/house_orbcontrol.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ice_beam.lua b/game/modules/tome/data/gfx/particles/ice_beam.lua
index d92110f969653c143b03e538eafaf5dadf8bac3b..474f908b6e9d4e4230eab1bfe73b1e942cf5623c 100644
--- a/game/modules/tome/data/gfx/particles/ice_beam.lua
+++ b/game/modules/tome/data/gfx/particles/ice_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ice_shards.lua b/game/modules/tome/data/gfx/particles/ice_shards.lua
index 7cf54310b9cb1565bafafddd384000e4c54007f0..94c170abf1dd1a7aaa968f677abb82a172256e49 100644
--- a/game/modules/tome/data/gfx/particles/ice_shards.lua
+++ b/game/modules/tome/data/gfx/particles/ice_shards.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ice_vapour.lua b/game/modules/tome/data/gfx/particles/ice_vapour.lua
index 2457bb450886f20588aa3fc48e60b141844bba98..d2f028556223034b373e180ca76f168e6de15e7b 100644
--- a/game/modules/tome/data/gfx/particles/ice_vapour.lua
+++ b/game/modules/tome/data/gfx/particles/ice_vapour.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/icebeam.lua b/game/modules/tome/data/gfx/particles/icebeam.lua
index c7f073b4f71024f0912989691365ffa58bf172dd..8a65ac12854083a9f3c05bc7c6c0afc152863144 100644
--- a/game/modules/tome/data/gfx/particles/icebeam.lua
+++ b/game/modules/tome/data/gfx/particles/icebeam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/iceflash.lua b/game/modules/tome/data/gfx/particles/iceflash.lua
index c2b9cd4268c910144ee53471474f79a5d19ca1c9..aa69ba6f3ecd4edd14f1163f57781e70db75d938 100644
--- a/game/modules/tome/data/gfx/particles/iceflash.lua
+++ b/game/modules/tome/data/gfx/particles/iceflash.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/icestorm.lua b/game/modules/tome/data/gfx/particles/icestorm.lua
index 00596955f1909d6c92356a4ba3d95bf1b05e6f11..de05d80e260d0d8d38008a8b32b437f2c69eefc2 100644
--- a/game/modules/tome/data/gfx/particles/icestorm.lua
+++ b/game/modules/tome/data/gfx/particles/icestorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/icetrail.lua b/game/modules/tome/data/gfx/particles/icetrail.lua
index ef86b15b681a8cac5154b229e7b051d6e18dacda..1e3520661f44b12fa04c51d5aa15c63bb62641ff 100644
--- a/game/modules/tome/data/gfx/particles/icetrail.lua
+++ b/game/modules/tome/data/gfx/particles/icetrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/image.lua b/game/modules/tome/data/gfx/particles/image.lua
index f2ada3c0ab4751362f3faf868f26ac3a6c83045c..fe9784b0f4533968b2a3c4c6d2ea1662c6f4efb8 100644
--- a/game/modules/tome/data/gfx/particles/image.lua
+++ b/game/modules/tome/data/gfx/particles/image.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/inferno.lua b/game/modules/tome/data/gfx/particles/inferno.lua
index 5661774a8799ec0ad8a6d3a503123a1a77e1865d..ab76d4f1249106015c1b071bd2ba7af76f10d240 100644
--- a/game/modules/tome/data/gfx/particles/inferno.lua
+++ b/game/modules/tome/data/gfx/particles/inferno.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/istari_shield_map.lua b/game/modules/tome/data/gfx/particles/istari_shield_map.lua
index 81d5eaad3969135756678043a1a92fd6c3f26035..85d1addc2c54ba0d07da487bf08ccd9d09d2082c 100644
--- a/game/modules/tome/data/gfx/particles/istari_shield_map.lua
+++ b/game/modules/tome/data/gfx/particles/istari_shield_map.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/knifestorm.lua b/game/modules/tome/data/gfx/particles/knifestorm.lua
index f21670057612e206893ce24c91ff5fdcf69993f4..ebab0942a6aee9aff97556fd511f0f4e19e532e5 100644
--- a/game/modules/tome/data/gfx/particles/knifestorm.lua
+++ b/game/modules/tome/data/gfx/particles/knifestorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/leafstorm.lua b/game/modules/tome/data/gfx/particles/leafstorm.lua
index f40474b7c5b899ea4f8bea06a84aa93a5d58b7aa..737149a9a6a6b199da89d097f8a6951fbbe9eeba 100644
--- a/game/modules/tome/data/gfx/particles/leafstorm.lua
+++ b/game/modules/tome/data/gfx/particles/leafstorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/leavestide.lua b/game/modules/tome/data/gfx/particles/leavestide.lua
index 87b4b21014c00181cfce571a116d0a37a520cce7..ab1995149ecf50d2078170c7303fe7628b8cbcba 100644
--- a/game/modules/tome/data/gfx/particles/leavestide.lua
+++ b/game/modules/tome/data/gfx/particles/leavestide.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/light.lua b/game/modules/tome/data/gfx/particles/light.lua
index 7cae49d7abd33fea8385051b237ecf53f406bc4c..3f797706e586d2d853977a5c1eeddfef44fbf88e 100644
--- a/game/modules/tome/data/gfx/particles/light.lua
+++ b/game/modules/tome/data/gfx/particles/light.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/light_beam.lua b/game/modules/tome/data/gfx/particles/light_beam.lua
index 7c68e99d1160296ca0269230794ad0d6695b71b3..2023655a0d348061bb94d21262f6c775bab8d585 100644
--- a/game/modules/tome/data/gfx/particles/light_beam.lua
+++ b/game/modules/tome/data/gfx/particles/light_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/light_zone.lua b/game/modules/tome/data/gfx/particles/light_zone.lua
index 5e6057d39cdaa9a72f76b1a6cafd5759c2a1d96d..f37a68aee95f74311b148737516af78851b16bf8 100644
--- a/game/modules/tome/data/gfx/particles/light_zone.lua
+++ b/game/modules/tome/data/gfx/particles/light_zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/lightning.lua b/game/modules/tome/data/gfx/particles/lightning.lua
index 83d93d476a2c56f3822e1cd5d02168544a1f5073..f1bd8403c5cfcbd0fae9a763b93dd508e9a66413 100644
--- a/game/modules/tome/data/gfx/particles/lightning.lua
+++ b/game/modules/tome/data/gfx/particles/lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/lightning_beam.lua b/game/modules/tome/data/gfx/particles/lightning_beam.lua
index 7d6df31d4e10176f0055823a1dba5e7490df847f..8db1e93fd977d818b9e885259d6980f9c8a3413f 100644
--- a/game/modules/tome/data/gfx/particles/lightning_beam.lua
+++ b/game/modules/tome/data/gfx/particles/lightning_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/lightning_explosion.lua b/game/modules/tome/data/gfx/particles/lightning_explosion.lua
index 0edbfed618a655dfef9b1a4edf4c31fc80305aad..d4ea4c3be98150983e1e5499df0f1db5e161716a 100644
--- a/game/modules/tome/data/gfx/particles/lightning_explosion.lua
+++ b/game/modules/tome/data/gfx/particles/lightning_explosion.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/lightningtrail.lua b/game/modules/tome/data/gfx/particles/lightningtrail.lua
index 8a47c004a542c991236f608af05cc06a668d77e9..9090f2e0e1d233211ae3307da8bae7b3f2b142d5 100644
--- a/game/modules/tome/data/gfx/particles/lightningtrail.lua
+++ b/game/modules/tome/data/gfx/particles/lightningtrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/lighttrail.lua b/game/modules/tome/data/gfx/particles/lighttrail.lua
index 81be25442481d736a6656ca8ec48352281685092..903e46ae3c08436313b48b34e0e4c22366f4725b 100644
--- a/game/modules/tome/data/gfx/particles/lighttrail.lua
+++ b/game/modules/tome/data/gfx/particles/lighttrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/maligned.lua b/game/modules/tome/data/gfx/particles/maligned.lua
index f9abd711189dc21583242d7bf79e530cb7d6d3ef..4f7a4da4ff6226c7c7f041ed511c3ccab42e5e3b 100644
--- a/game/modules/tome/data/gfx/particles/maligned.lua
+++ b/game/modules/tome/data/gfx/particles/maligned.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/mana_beam.lua b/game/modules/tome/data/gfx/particles/mana_beam.lua
index 371f318733eb630edb38816c30e615133d0ccb68..255fe8389918a403d14e1afcce507eb2456b8aad 100644
--- a/game/modules/tome/data/gfx/particles/mana_beam.lua
+++ b/game/modules/tome/data/gfx/particles/mana_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/manathrust.lua b/game/modules/tome/data/gfx/particles/manathrust.lua
index 3124339d2078fbd3fb5978cf1b27cc9862552411..87a9bb888ff75e17147923cb4389bc68c92a67bd 100644
--- a/game/modules/tome/data/gfx/particles/manathrust.lua
+++ b/game/modules/tome/data/gfx/particles/manathrust.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/master_summoner.lua b/game/modules/tome/data/gfx/particles/master_summoner.lua
index ec12b1c5645b8daf3499aeb2d68308cb923b50aa..fd2f16fc28f829afba3e6f062b826bebe3f7346f 100644
--- a/game/modules/tome/data/gfx/particles/master_summoner.lua
+++ b/game/modules/tome/data/gfx/particles/master_summoner.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/matter_beam.lua b/game/modules/tome/data/gfx/particles/matter_beam.lua
index ec140f30b49fcbfe2ae345ea3dc942a1aad23d61..e2f1100c12b5f88b1672186ec6b0b53ed2aa4cb5 100644
--- a/game/modules/tome/data/gfx/particles/matter_beam.lua
+++ b/game/modules/tome/data/gfx/particles/matter_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/megaspeed.lua b/game/modules/tome/data/gfx/particles/megaspeed.lua
index 01174963e8b422dbeee0e943b034234963848d8e..f679a78bd21bafb0e4619543a233ff8f51df2c5f 100644
--- a/game/modules/tome/data/gfx/particles/megaspeed.lua
+++ b/game/modules/tome/data/gfx/particles/megaspeed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/melee_attack.lua b/game/modules/tome/data/gfx/particles/melee_attack.lua
index d2e5ab84ecf560388347d00c4a7d4d297b56e949..182cd12daa84329235d11046264130e6f436394c 100644
--- a/game/modules/tome/data/gfx/particles/melee_attack.lua
+++ b/game/modules/tome/data/gfx/particles/melee_attack.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/meleestorm.lua b/game/modules/tome/data/gfx/particles/meleestorm.lua
index e15db43aa2682b7146c51b463299ebe20376dd87..e36b7fef44f37eb67bab9d39f1b5f5b520a0772d 100644
--- a/game/modules/tome/data/gfx/particles/meleestorm.lua
+++ b/game/modules/tome/data/gfx/particles/meleestorm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/meleestorm2.lua b/game/modules/tome/data/gfx/particles/meleestorm2.lua
index 1040827bb1b511233eb064674f6ed3ecc4a4c710..e1360293ca4f0cfff0d1125dfe821913897185c2 100644
--- a/game/modules/tome/data/gfx/particles/meleestorm2.lua
+++ b/game/modules/tome/data/gfx/particles/meleestorm2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/meteor.lua b/game/modules/tome/data/gfx/particles/meteor.lua
index 5a84543ff46f51a15489dd1bfff4a5d448fba000..ee4d87acbaf88fd815f037d3e9a6a1f34b1453da 100644
--- a/game/modules/tome/data/gfx/particles/meteor.lua
+++ b/game/modules/tome/data/gfx/particles/meteor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/mind.lua b/game/modules/tome/data/gfx/particles/mind.lua
index a93c4928e8c89328156180f446c42528f747ad41..3a947f580199fe87aa492d3375ae2aaeb0b71d8b 100644
--- a/game/modules/tome/data/gfx/particles/mind.lua
+++ b/game/modules/tome/data/gfx/particles/mind.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/mindsear.lua b/game/modules/tome/data/gfx/particles/mindsear.lua
index 7f5478f9916b025dea0cc3526b0873703d25c31b..f2b67ac89c2bb144126b9d30093f58a112356a72 100644
--- a/game/modules/tome/data/gfx/particles/mindsear.lua
+++ b/game/modules/tome/data/gfx/particles/mindsear.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/moss.lua b/game/modules/tome/data/gfx/particles/moss.lua
index eaaf32a56bfef2f3e5288cc26babb29175bc3645..ad991e16f5ba8c5627bcaced05e463e9cecd8ed3 100644
--- a/game/modules/tome/data/gfx/particles/moss.lua
+++ b/game/modules/tome/data/gfx/particles/moss.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/mucus.lua b/game/modules/tome/data/gfx/particles/mucus.lua
index 37220f6429618439de5b0166eab65629571cb316..5fcf802236d8b9b2fb5be9278bdea7ee6b70324f 100644
--- a/game/modules/tome/data/gfx/particles/mucus.lua
+++ b/game/modules/tome/data/gfx/particles/mucus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/mudflow.lua b/game/modules/tome/data/gfx/particles/mudflow.lua
index ad351c23d5f2adda1c1c7d59c8076c3542ad22cf..ef8f87a6683b6c20233ce16c5c3323df703e051b 100644
--- a/game/modules/tome/data/gfx/particles/mudflow.lua
+++ b/game/modules/tome/data/gfx/particles/mudflow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/naga_portal_smoke.lua b/game/modules/tome/data/gfx/particles/naga_portal_smoke.lua
index 0c73b2929bdf158d7ba42848f077910816c8f110..7ed9ee5eb9014d0abbbd9c733f6f098ca8027181 100644
--- a/game/modules/tome/data/gfx/particles/naga_portal_smoke.lua
+++ b/game/modules/tome/data/gfx/particles/naga_portal_smoke.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/necrotic-aura.lua b/game/modules/tome/data/gfx/particles/necrotic-aura.lua
index 3076c82e1c220773988010aaac724f64d159b96d..1648ef35825104f755448aefb0be9feb66fd376e 100644
--- a/game/modules/tome/data/gfx/particles/necrotic-aura.lua
+++ b/game/modules/tome/data/gfx/particles/necrotic-aura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/notice_enemy.lua b/game/modules/tome/data/gfx/particles/notice_enemy.lua
index f03022346e6a81a727331e11534f7c20a95656c7..d5ab93656a249e8379cd4f2998c936ff61e8811c 100644
--- a/game/modules/tome/data/gfx/particles/notice_enemy.lua
+++ b/game/modules/tome/data/gfx/particles/notice_enemy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/nova.lua b/game/modules/tome/data/gfx/particles/nova.lua
index e92b5b1ec4e9ef548ffd20ef3b8ac247aca62b9c..b1022281023ff170fe8ae367b99f39ebd357522c 100644
--- a/game/modules/tome/data/gfx/particles/nova.lua
+++ b/game/modules/tome/data/gfx/particles/nova.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ooze_beam.lua b/game/modules/tome/data/gfx/particles/ooze_beam.lua
index 87ec4b21d03473cc79e2dcd230adc8e142f30f64..382d6290468e2527e645237a3af6dde43c8d7c70 100644
--- a/game/modules/tome/data/gfx/particles/ooze_beam.lua
+++ b/game/modules/tome/data/gfx/particles/ooze_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/overwhelmed.lua b/game/modules/tome/data/gfx/particles/overwhelmed.lua
index 4abebe06ff076c0bc50294a8c780446a2bc32b55..4b01c14fd5489ba835330242c07bc1a1b1ef5389 100644
--- a/game/modules/tome/data/gfx/particles/overwhelmed.lua
+++ b/game/modules/tome/data/gfx/particles/overwhelmed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/panic.lua b/game/modules/tome/data/gfx/particles/panic.lua
index ba63ea17d037ff140ef0419333627e7076516853..d68e320fa7d218084d19d41ea8065126d265f734 100644
--- a/game/modules/tome/data/gfx/particles/panic.lua
+++ b/game/modules/tome/data/gfx/particles/panic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/phantasm_shield.lua b/game/modules/tome/data/gfx/particles/phantasm_shield.lua
index e9fc57717a61d0476299435c78857c2af57c103a..45f8d9363030efc5e1fa3a79d56c2d96c7838f1f 100644
--- a/game/modules/tome/data/gfx/particles/phantasm_shield.lua
+++ b/game/modules/tome/data/gfx/particles/phantasm_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/quake.lua b/game/modules/tome/data/gfx/particles/quake.lua
index e8da1569504b1cf35b8293e8631158141db7298f..5754a46a5c66e64fb06187b23b110e5800dd2c0e 100644
--- a/game/modules/tome/data/gfx/particles/quake.lua
+++ b/game/modules/tome/data/gfx/particles/quake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/radiant_fear.lua b/game/modules/tome/data/gfx/particles/radiant_fear.lua
index 55886b0fd00d44dbcd5d7d485e0dfba3407659bf..776dcad1c61a120b4c8aad5423d4aaea6628e2a1 100644
--- a/game/modules/tome/data/gfx/particles/radiant_fear.lua
+++ b/game/modules/tome/data/gfx/particles/radiant_fear.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/raindrops.lua b/game/modules/tome/data/gfx/particles/raindrops.lua
index 23cb695f563b988999c6cb2a361c2195256e7667..3782d33682dfd50d519181cafbebd349360d0665 100644
--- a/game/modules/tome/data/gfx/particles/raindrops.lua
+++ b/game/modules/tome/data/gfx/particles/raindrops.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/rampage.lua b/game/modules/tome/data/gfx/particles/rampage.lua
index 9fc146c8d1f1b03c90bae00884724ce361fa96a1..2ad5eaf21f6d10e0a682d49e04b3d28ccdc31c55 100644
--- a/game/modules/tome/data/gfx/particles/rampage.lua
+++ b/game/modules/tome/data/gfx/particles/rampage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/reproach.lua b/game/modules/tome/data/gfx/particles/reproach.lua
index 21b9a5ef1f6600393b5bb7e145374dd64b9dd872..3578465a88a69d9caf754a094bffbd0ae26d1dd3 100644
--- a/game/modules/tome/data/gfx/particles/reproach.lua
+++ b/game/modules/tome/data/gfx/particles/reproach.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/rewrite_universe.lua b/game/modules/tome/data/gfx/particles/rewrite_universe.lua
index f47ee7fd09e0581ed6156cf30d5064186f676d86..f114e3e5ca40853679c11b3b9e273b9f32d7aa66 100644
--- a/game/modules/tome/data/gfx/particles/rewrite_universe.lua
+++ b/game/modules/tome/data/gfx/particles/rewrite_universe.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -19,6 +19,11 @@
 
 base_size = 32
 
+rm, rM = rm or 180, rM or 220
+gm, gM = gm or 0, gM or 0
+bm, bM = bm or 200, bM or 255
+am, aM = am or 80, aM or 255
+
 return {
 	base = 1000,
 
@@ -27,10 +32,10 @@ return {
 	life = { 20, 30 },
 	size = { 15, 35 }, sizev = {0, 0}, sizea = {0, 0},
 
-	r = {180, 220}, rv = {0, 10}, ra = {0, 0},
-	g = {0, 0}, gv = {0, 0}, ga = {0, 0},
-	b = {200, 255}, bv = {0, 10}, ba = {0, 0},
-	a = {80, 255}, av = {0, 0}, aa = {0, 0},
+	r = {rm, rM}, rv = {0, 10}, ra = {0, 0},
+	g = {gm, gM}, gv = {0, 0}, ga = {0, 0},
+	b = {bm, bM}, bv = {0, 10}, ba = {0, 0},
+	a = {am, aM}, av = {0, 0}, aa = {0, 0},
 
 }, function(self)
 	self.nb = (self.nb or 0) + 1
diff --git a/game/modules/tome/data/gfx/particles/seethe.lua b/game/modules/tome/data/gfx/particles/seethe.lua
index 90eb6604c3c2f48f29cc445006351c5cea09700b..bb205a141cdd3bacd3f204dfb03b5e60df069d6e 100644
--- a/game/modules/tome/data/gfx/particles/seethe.lua
+++ b/game/modules/tome/data/gfx/particles/seethe.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shader_ring.lua b/game/modules/tome/data/gfx/particles/shader_ring.lua
index d243a641dcb0adda9b577f25b376bf8d7b4ffd39..e2c096cb345178eacb5f25a54def691d389323ca 100644
--- a/game/modules/tome/data/gfx/particles/shader_ring.lua
+++ b/game/modules/tome/data/gfx/particles/shader_ring.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shader_ring_rotating.lua b/game/modules/tome/data/gfx/particles/shader_ring_rotating.lua
index ecf3da4dce7ce8817eefdea4d0242c1b5dde0a9a..399ffe61bd00900b0f1c9eb0e842a28a9adcb029 100644
--- a/game/modules/tome/data/gfx/particles/shader_ring_rotating.lua
+++ b/game/modules/tome/data/gfx/particles/shader_ring_rotating.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shader_shield.lua b/game/modules/tome/data/gfx/particles/shader_shield.lua
index 3573a900d415b4642106174b050b7800518e0f7d..3c660b8591c0e469d0e6dc236eaa43689490a922 100644
--- a/game/modules/tome/data/gfx/particles/shader_shield.lua
+++ b/game/modules/tome/data/gfx/particles/shader_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shader_shield_temp.lua b/game/modules/tome/data/gfx/particles/shader_shield_temp.lua
index b194295b2bd270631b918fade91221eb14bc4409..d64581f80b52d98432ef160acf6611c00baea43a 100644
--- a/game/modules/tome/data/gfx/particles/shader_shield_temp.lua
+++ b/game/modules/tome/data/gfx/particles/shader_shield_temp.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shader_square.lua b/game/modules/tome/data/gfx/particles/shader_square.lua
index f4fe62797ffac909175f2f080ba9441a63c54aa4..d764a7262db5eff4db956f5ce6fae3fade544aac 100644
--- a/game/modules/tome/data/gfx/particles/shader_square.lua
+++ b/game/modules/tome/data/gfx/particles/shader_square.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shader_wings.lua b/game/modules/tome/data/gfx/particles/shader_wings.lua
index d75a6035ac0d02dc1f669ab9a6fc281f6caffb28..b312fee5b0bc11609cce8baa6a35a479ffc3b699 100644
--- a/game/modules/tome/data/gfx/particles/shader_wings.lua
+++ b/game/modules/tome/data/gfx/particles/shader_wings.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shadow.lua b/game/modules/tome/data/gfx/particles/shadow.lua
index edb80d6f64d0815db7c55868d47352738ef64440..5e8501983ed91915df910c5fba0b05f5e3f81a9e 100644
--- a/game/modules/tome/data/gfx/particles/shadow.lua
+++ b/game/modules/tome/data/gfx/particles/shadow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shadow_beam.lua b/game/modules/tome/data/gfx/particles/shadow_beam.lua
index 75ac92858dc33934e8d3af1e6f6e81e3bdb756bf..0044b9796e491b0278ad5f7e15742827562bd9d1 100644
--- a/game/modules/tome/data/gfx/particles/shadow_beam.lua
+++ b/game/modules/tome/data/gfx/particles/shadow_beam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shadow_flash.lua b/game/modules/tome/data/gfx/particles/shadow_flash.lua
index a1dd56dd6d645cf3470e8204af69bdae9ad444b5..00220f8641b93915fd8ec6dd46aeea91f46b8adc 100644
--- a/game/modules/tome/data/gfx/particles/shadow_flash.lua
+++ b/game/modules/tome/data/gfx/particles/shadow_flash.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shadow_zone.lua b/game/modules/tome/data/gfx/particles/shadow_zone.lua
index 1ea150deffa6e9ad38656ced51c0f5ea0345e955..218aa62ee5622c1f0ba136f60ef60699265c558c 100644
--- a/game/modules/tome/data/gfx/particles/shadow_zone.lua
+++ b/game/modules/tome/data/gfx/particles/shadow_zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shadowfire.lua b/game/modules/tome/data/gfx/particles/shadowfire.lua
index 7a4ef169e7287df878d7914a01576d2d5ed3e176..ba79eef23f66ea555af5d103b14aa5fb9aeb656a 100644
--- a/game/modules/tome/data/gfx/particles/shadowfire.lua
+++ b/game/modules/tome/data/gfx/particles/shadowfire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shertul_fortress_engine.lua b/game/modules/tome/data/gfx/particles/shertul_fortress_engine.lua
index 1a7553909572a7c3340c2dcab0d1f26a027bb3c1..c0cfb733ebd60f13e250ceaff8786dd438c0d45c 100644
--- a/game/modules/tome/data/gfx/particles/shertul_fortress_engine.lua
+++ b/game/modules/tome/data/gfx/particles/shertul_fortress_engine.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shertul_fortress_orbiters.lua b/game/modules/tome/data/gfx/particles/shertul_fortress_orbiters.lua
index 96d8ad9f036302063f1ebe1c05fce111ffc04969..78053bcd4cb0b4e7eb89c0f494b01c331223c70c 100644
--- a/game/modules/tome/data/gfx/particles/shertul_fortress_orbiters.lua
+++ b/game/modules/tome/data/gfx/particles/shertul_fortress_orbiters.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shield.lua b/game/modules/tome/data/gfx/particles/shield.lua
index d6c770cb2b17f7bbc101b58d94b7c0ccc37f3ccc..9bd34a195a38b3f7b0048ef76c5da2d351088036 100644
--- a/game/modules/tome/data/gfx/particles/shield.lua
+++ b/game/modules/tome/data/gfx/particles/shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shockwave.lua b/game/modules/tome/data/gfx/particles/shockwave.lua
index a34e28480ec0f9d0180b519943df938803530718..d943b0d7926e510bd43c9694b72c35e1fe41455d 100644
--- a/game/modules/tome/data/gfx/particles/shockwave.lua
+++ b/game/modules/tome/data/gfx/particles/shockwave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/shout.lua b/game/modules/tome/data/gfx/particles/shout.lua
index 534a84d98e931570ae0fe0d725a44f29983fd942..91c41acabd9b5c6f593936f543431a7c9da3eda0 100644
--- a/game/modules/tome/data/gfx/particles/shout.lua
+++ b/game/modules/tome/data/gfx/particles/shout.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/slime.lua b/game/modules/tome/data/gfx/particles/slime.lua
index c64ce35498dfd6479016cb1e20d51e296578c9df..71f2c3659f4f6127b0c1fb6731c398d5b65e04fa 100644
--- a/game/modules/tome/data/gfx/particles/slime.lua
+++ b/game/modules/tome/data/gfx/particles/slime.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/slimetrail.lua b/game/modules/tome/data/gfx/particles/slimetrail.lua
index 07a4b27ede140254727039bc2f4678b50a65bb47..93f4a46ff94fb00de012099177eb9d463e8885e4 100644
--- a/game/modules/tome/data/gfx/particles/slimetrail.lua
+++ b/game/modules/tome/data/gfx/particles/slimetrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/snowfall.lua b/game/modules/tome/data/gfx/particles/snowfall.lua
new file mode 100644
index 0000000000000000000000000000000000000000..98f69c6245c5b73b980240e9d5aa08e1d009a2b4
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/snowfall.lua
@@ -0,0 +1,52 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+base_size = 32
+toback = true
+
+return { generator = function()
+	local ad = rng.range(0, 360)
+	local a = math.rad(ad)
+	local dir = math.rad(90)
+	local r = rng.range(18, 22)
+	local dirchance = rng.chance(2)
+	local x = rng.range(-16, 16)
+	local y = -20 + math.abs(math.sin(x / 16) * 8)
+
+	return {
+		trail = 1,
+		life = rng.range(20, 28),
+		size = rng.range(3, 4), sizev = 0, sizea = -0.005,
+
+		x = x, xv = 0, xa = 0,
+		y = y, yv = 0.5, ya = 0.06,
+		dir = 0, dirv = 0, dira = 0,
+		vel = 0, velv = 0, vela = 0,
+
+		r = 0.624, rv = 0, ra = 0,
+		g = 0.820, gv = 0, ga = 0,
+		b = 0.933, bv = 0, ba = 0,
+		a = 0.2, av = 0.1, aa = 0,
+	}
+end, },
+function(self)
+	self.ps:emit(1)
+end,
+10,
+"weather/snowflake"
diff --git a/game/modules/tome/data/gfx/particles/snowing.lua b/game/modules/tome/data/gfx/particles/snowing.lua
index 1297084e46bee1180db3056c82a06dbde0e46edd..1b3aac25969a62bb9356013b500a6bab00880602 100644
--- a/game/modules/tome/data/gfx/particles/snowing.lua
+++ b/game/modules/tome/data/gfx/particles/snowing.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/stalked.lua b/game/modules/tome/data/gfx/particles/stalked.lua
index 442dbccc91c4e9ca195ac8e601c0d045e1bb2b3c..5a35d4a3ed43a4c8c9ab8f526b06b2d7ebcd1d32 100644
--- a/game/modules/tome/data/gfx/particles/stalked.lua
+++ b/game/modules/tome/data/gfx/particles/stalked.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/stalked_start.lua b/game/modules/tome/data/gfx/particles/stalked_start.lua
index b361d2203df00ad6d3a27b4c4afd2bb38639166a..6017452d041f98ab82f3c5b756add006d9423dfa 100644
--- a/game/modules/tome/data/gfx/particles/stalked_start.lua
+++ b/game/modules/tome/data/gfx/particles/stalked_start.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/starfield.lua b/game/modules/tome/data/gfx/particles/starfield.lua
index eea9b6eee20702b28efc2554b068e612a4a6cf14..03e3ae786771e1aac86bc8cab811bdb487ffd5ff 100644
--- a/game/modules/tome/data/gfx/particles/starfield.lua
+++ b/game/modules/tome/data/gfx/particles/starfield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/starfield_static.lua b/game/modules/tome/data/gfx/particles/starfield_static.lua
index 2c98df9dffa790f8bf3121643c2938fdd6023691..3fab7c9b84b42255955955fc8d1c3855065f8b62 100644
--- a/game/modules/tome/data/gfx/particles/starfield_static.lua
+++ b/game/modules/tome/data/gfx/particles/starfield_static.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/starglow.lua b/game/modules/tome/data/gfx/particles/starglow.lua
index a85b5546cfd29f5dd4e451fc51225c6b94917891..825d26a388eb8234a506bf6b55fca0cc19a71522 100644
--- a/game/modules/tome/data/gfx/particles/starglow.lua
+++ b/game/modules/tome/data/gfx/particles/starglow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/static_fire.lua b/game/modules/tome/data/gfx/particles/static_fire.lua
index 2e06c526a883f197d1345e2e38583f4ea507f9eb..c127d15c54a6e1cc7b5512d53de79fb9477d2fbf 100644
--- a/game/modules/tome/data/gfx/particles/static_fire.lua
+++ b/game/modules/tome/data/gfx/particles/static_fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/stone_shards.lua b/game/modules/tome/data/gfx/particles/stone_shards.lua
index ba768752011304b3d3b55e3bbae43aa37a11909a..f462d84cddbf961f3e5e2c2b9f3abb26b260a86a 100644
--- a/game/modules/tome/data/gfx/particles/stone_shards.lua
+++ b/game/modules/tome/data/gfx/particles/stone_shards.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/stone_skin.lua b/game/modules/tome/data/gfx/particles/stone_skin.lua
index af72c0e57da0ab39ce15b9399df4c9aecde0efa5..fa57ecbabeec17eac247974a5a232e63709dc2c6 100644
--- a/game/modules/tome/data/gfx/particles/stone_skin.lua
+++ b/game/modules/tome/data/gfx/particles/stone_skin.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/storm_lightning.lua b/game/modules/tome/data/gfx/particles/storm_lightning.lua
index 763ba85b259be37b0560bdcf3ca7cc3fbc5279d5..3bd976c0080d4020b0cf690273925efada8c99bb 100644
--- a/game/modules/tome/data/gfx/particles/storm_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/storm_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/stormclouds.lua b/game/modules/tome/data/gfx/particles/stormclouds.lua
index f685547693541d6a4ae2e078b939ee7854243221..4ba4a885fa379cdd4cf5e6da8cee7595a8d4cae0 100644
--- a/game/modules/tome/data/gfx/particles/stormclouds.lua
+++ b/game/modules/tome/data/gfx/particles/stormclouds.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/summon.lua b/game/modules/tome/data/gfx/particles/summon.lua
index c465c4a95893689d82c7577877e6283e2f003daf..ccc338234a5821ee588900efb6f0704c711aecbf 100644
--- a/game/modules/tome/data/gfx/particles/summon.lua
+++ b/game/modules/tome/data/gfx/particles/summon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/sun_path.lua b/game/modules/tome/data/gfx/particles/sun_path.lua
new file mode 100644
index 0000000000000000000000000000000000000000..593bfe1ffdeff1167754b6c9ad5f477757961001
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/sun_path.lua
@@ -0,0 +1,62 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+-- Make the ray
+local ray = {}
+local tiles = math.ceil(math.sqrt(tx*tx+ty*ty))
+local tx = tx * engine.Map.tile_w
+local ty = ty * engine.Map.tile_h
+ray.dir = math.atan2(ty, tx)
+ray.size = math.sqrt(tx*tx+ty*ty)
+
+local nb = rng.range(0, 360)
+
+-- Populate the beam based on the forks
+return { generator = function()
+	local a = ray.dir
+	local r = rng.range(1, ray.size - 32)
+
+	local ra = a + (rng.chance(2) and math.rad(-90) or math.rad(90))
+	local rr = rng.float(2, engine.Map.tile_w * 0.50)
+
+	local vel = rng.float(1.2, 6)
+
+	return {
+		life = 32 / vel,
+		size = rng.float(2, 5), sizev = -0.1, sizea = 0,
+
+		x = r * math.cos(a) + rr * math.cos(ra), xv = 0, xa = 0,
+		y = r * math.sin(a) + rr * math.sin(ra), yv = 0, ya = 0,
+		dir = ray.dir, dirv = 0, dira = 0,
+		vel = vel, velv = -0.1, vela = 0.01,
+
+		r = rng.range(220, 255)/255,  rv = 0, ra = 0,
+		g = rng.range(200, 230)/255,  gv = 0, ga = 0,
+		b = 0,                        bv = 0, ba = 0,
+		a = rng.range(25, 255)/255,    av = static and -0.034 or 0, aa = 0.005,
+	}
+end, },
+function(self)
+	nb = nb + 2
+	self.ps:emit(2*tiles*(math.cos(math.rad(nb)) + 1.7))
+	if nb >= 360 then nb = nb - 360 end
+end,
+32*9*tiles,
+"particle_cloud",
+true -- stay forever
diff --git a/game/modules/tome/data/gfx/particles/sunburst.lua b/game/modules/tome/data/gfx/particles/sunburst.lua
index 20091744af163664c2de41af1e2165b94e29321d..cd345a68a6cb40998d9f64b6470a8611e90679f8 100644
--- a/game/modules/tome/data/gfx/particles/sunburst.lua
+++ b/game/modules/tome/data/gfx/particles/sunburst.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/suncloak.lua b/game/modules/tome/data/gfx/particles/suncloak.lua
new file mode 100644
index 0000000000000000000000000000000000000000..8b069f78a62d16b439f501ddf891c08d688c44a6
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/suncloak.lua
@@ -0,0 +1,105 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+--------------------------------------------------------------------------------------
+-- Advanced shaders
+--------------------------------------------------------------------------------------
+if core.shader.active() then
+use_shader = {type="shadowfire"}
+base_size = 64
+
+local r = 1
+local g = 1
+local b = 1
+local a = 1
+
+return { generator = function()
+	return {
+		trail = 0,
+		life = 10,
+		size = 2*42 * (size_factor or 1), sizev = 0, sizea = 0,
+
+		x = (x or 0) * engine.Map.tile_w, xv = 0, xa = 0,
+		y = (y or 0) * engine.Map.tile_h, yv = 0, ya = 0,
+		dir = 0, dirv = dirv, dira = 0,
+		vel = 0, velv = 0, vela = 0,
+
+		r = r, rv = 0, ra = 0,
+		g = g, gv = 0, ga = 0,
+		b = b, bv = 0, ba = 0,
+		a = a, av = 0, aa = 0,
+	}
+end, },
+function(self)
+	self.ps:emit(1)
+end,
+1,
+"particles_images/sunwings"
+
+--------------------------------------------------------------------------------------
+-- Default
+--------------------------------------------------------------------------------------
+else
+base_size = 32
+
+return { generator = function()
+	local ad = rng.range(0, 360)
+	local a = math.rad(ad)
+	local dir = math.rad(ad)
+	local r = rng.range(18, 22)
+	local dirchance = rng.chance(2)
+
+	if rng.chance(2) then
+	return {
+		life = 20,
+		size = 4, sizev = -0.05, sizea = 0,
+
+		x = r * math.cos(a), xv = 0, xa = 0,
+		y = r * math.sin(a), yv = 0, ya = 0,
+		dir = dir, dirv = 0.1, dira = 0,
+		vel = dirchance and 0.2 or -0.2, velv = 0, vela = dirchance and -0.02 or 0.02,
+
+		r = rng.range(180, 250)/255, rv = rng.range(0, 10)/100, ra = 0,
+		g = rng.range(80, 110)/255,  gv = 0.005, ga = 0.0005,
+		b = 0,   bv = 0, ba = 0,
+		a = rng.range(70, 255)/255,   av = 0, aa = 0,
+	}
+	else
+	return {
+		life = 20,
+		size = 4, sizev = -0.05, sizea = 0,
+
+		x = r * math.cos(a), xv = 0, xa = 0,
+		y = r * math.sin(a), yv = 0, ya = 0,
+		dir = dir, dirv = 0.1, dira = 0,
+		vel = dirchance and 0.2 or -0.2, velv = 0, vela = dirchance and -0.02 or 0.02,
+
+		r = rng.range(220, 255)/255,  rv = 0, ra = 0,
+		g = rng.range(200, 230)/255,  gv = 0, ga = 0,
+		b = 0,                        bv = 0, ba = 0,
+		a = rng.range(25, 255)/255,    av = static and -0.034 or 0, aa = 0.005,
+	}
+	end
+end, },
+function(self)
+	self.ps:emit(4)
+end,
+80
+
+end
\ No newline at end of file
diff --git a/game/modules/tome/data/gfx/particles/teleport.lua b/game/modules/tome/data/gfx/particles/teleport.lua
index 1e2f657c19b1c60b2c233ebff7967e5627985c66..9f6466be6230b01679def56b54438662b8c2c9dd 100644
--- a/game/modules/tome/data/gfx/particles/teleport.lua
+++ b/game/modules/tome/data/gfx/particles/teleport.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/teleport_in.lua b/game/modules/tome/data/gfx/particles/teleport_in.lua
index ed9d93cf41dc5e241448dd58c7ead640d916f0ce..ade57e6e27ee93844832731a0b97bd46e8855fcd 100644
--- a/game/modules/tome/data/gfx/particles/teleport_in.lua
+++ b/game/modules/tome/data/gfx/particles/teleport_in.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/teleport_line.lua b/game/modules/tome/data/gfx/particles/teleport_line.lua
index c801f72defa33f6bdf4344299849a91faec67d86..0e6977c6fa7e8d53f5bf61e84e74ea4507643450 100644
--- a/game/modules/tome/data/gfx/particles/teleport_line.lua
+++ b/game/modules/tome/data/gfx/particles/teleport_line.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/teleport_out.lua b/game/modules/tome/data/gfx/particles/teleport_out.lua
index 1aa0dc097c295433d04c4eee68595f3cc5aaba9d..4df109e3940d1eca20772a845c0b8d22943d9b3e 100644
--- a/game/modules/tome/data/gfx/particles/teleport_out.lua
+++ b/game/modules/tome/data/gfx/particles/teleport_out.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/teleport_water.lua b/game/modules/tome/data/gfx/particles/teleport_water.lua
index 731d377fb59eab13a8d050d8d4d837922bde32e5..ffc6a8d8afc29c44d21fc0332db9c8b638c7e1b4 100644
--- a/game/modules/tome/data/gfx/particles/teleport_water.lua
+++ b/game/modules/tome/data/gfx/particles/teleport_water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/tempest.lua b/game/modules/tome/data/gfx/particles/tempest.lua
index 55ac509ffb8feccf944db720ce2aab63430b05c2..b562506668ea3bc8deb21a42631c6a6c6372cfb6 100644
--- a/game/modules/tome/data/gfx/particles/tempest.lua
+++ b/game/modules/tome/data/gfx/particles/tempest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_aura.lua b/game/modules/tome/data/gfx/particles/temporal_aura.lua
index 0b5a8e5d38c5780f2331da2a8e4b59ecd6080021..fd5c53b14d7d7295daae4fa90aa7d1bfb6ad275e 100644
--- a/game/modules/tome/data/gfx/particles/temporal_aura.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_aura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_bolt.lua b/game/modules/tome/data/gfx/particles/temporal_bolt.lua
index ed8e37777a2ff9f89b06b7d65d9a0bc6d5282870..d4631505dfcea9c3a6a95b62a2fe8f4e7bc1f1ce 100644
--- a/game/modules/tome/data/gfx/particles/temporal_bolt.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_bolt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_breath.lua b/game/modules/tome/data/gfx/particles/temporal_breath.lua
index 74928bf1c1c095cd1ece394dd9f96a7910f0bc91..6e083bf8be12c375ab18e23ff8e6c84cd9e228c5 100644
--- a/game/modules/tome/data/gfx/particles/temporal_breath.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_breath.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_cloud.lua b/game/modules/tome/data/gfx/particles/temporal_cloud.lua
index 96eaef34fb7f6c9f691c57c118e4e91b8f88cf34..f99b7475c664b211450c7b8e60eeffba8b479462 100644
--- a/game/modules/tome/data/gfx/particles/temporal_cloud.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_cloud.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_flash.lua b/game/modules/tome/data/gfx/particles/temporal_flash.lua
index f394427f193c84b739fd5ed5d9032a6a4cc179be..4039554f3b5514198194f7d10afec713e45793fa 100644
--- a/game/modules/tome/data/gfx/particles/temporal_flash.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_flash.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_focus.lua b/game/modules/tome/data/gfx/particles/temporal_focus.lua
index 2a7912e10ff41651ea915ad814122473e291e40a..c5d0abdb74cdd0cfdef5d05415f40eda0b814073 100644
--- a/game/modules/tome/data/gfx/particles/temporal_focus.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_focus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_lightning.lua b/game/modules/tome/data/gfx/particles/temporal_lightning.lua
index 9f1b471c2afe7e6be5d129560400a816b5118b82..7125d38354ebc6a2f6cda3c456fcac962c652ea1 100644
--- a/game/modules/tome/data/gfx/particles/temporal_lightning.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_teleport.lua b/game/modules/tome/data/gfx/particles/temporal_teleport.lua
index c3f988cf9913e859758b007d8792ed57378a68bd..a4881b5afeff5dd70fe4bd60386b0b6ec8bc99fd 100644
--- a/game/modules/tome/data/gfx/particles/temporal_teleport.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_teleport.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_thrust.lua b/game/modules/tome/data/gfx/particles/temporal_thrust.lua
index 4cb1ee72333e98381af6542e623f7b6917050c08..269ee5065cf83c5ab3c1c002a0d908b1790f3829 100644
--- a/game/modules/tome/data/gfx/particles/temporal_thrust.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_thrust.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporal_vortex.lua b/game/modules/tome/data/gfx/particles/temporal_vortex.lua
index 0f827ba64c2acea24f8fdc76465ec59d2fa706d2..44f6d750ad783ccf99e77c572d80974ddf08e527 100644
--- a/game/modules/tome/data/gfx/particles/temporal_vortex.lua
+++ b/game/modules/tome/data/gfx/particles/temporal_vortex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporalbeam.lua b/game/modules/tome/data/gfx/particles/temporalbeam.lua
index 7a717cfcc2c80f480d221b5f2145a66ee54e9347..68b218b01a0dc7cea896845a5d326d7bc646d7f9 100644
--- a/game/modules/tome/data/gfx/particles/temporalbeam.lua
+++ b/game/modules/tome/data/gfx/particles/temporalbeam.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/temporalsnow.lua b/game/modules/tome/data/gfx/particles/temporalsnow.lua
index f3007f7445457ebed446436f7b13ac0d55b3f276..49a2a718d34c9f5ecd5fe1ae810120f9fd6dcbeb 100644
--- a/game/modules/tome/data/gfx/particles/temporalsnow.lua
+++ b/game/modules/tome/data/gfx/particles/temporalsnow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/time_prison.lua b/game/modules/tome/data/gfx/particles/time_prison.lua
index b73a89c3cab270b0e293cb53c6b1029a3c9dbad2..0fd30f561a3876d98a39b916a10117009240a837 100644
--- a/game/modules/tome/data/gfx/particles/time_prison.lua
+++ b/game/modules/tome/data/gfx/particles/time_prison.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/time_shield.lua b/game/modules/tome/data/gfx/particles/time_shield.lua
index c25dd12f71b44f95470f46f45246dae372023ed1..6ca0e5d227ce0c7889772acf6dd99c8e550559dc 100644
--- a/game/modules/tome/data/gfx/particles/time_shield.lua
+++ b/game/modules/tome/data/gfx/particles/time_shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/time_shield_bubble.lua b/game/modules/tome/data/gfx/particles/time_shield_bubble.lua
index 749e55c0ee3006e9fdd9d6f84e93997e681eaea3..180234036f43c78c0a57443c174e685da90f2df0 100644
--- a/game/modules/tome/data/gfx/particles/time_shield_bubble.lua
+++ b/game/modules/tome/data/gfx/particles/time_shield_bubble.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ultrashield.lua b/game/modules/tome/data/gfx/particles/ultrashield.lua
index da2d4775686ce42eb41face34dfa9382e33cf5f1..21af36458f83ad5d16408821856e2ec357b26c80 100644
--- a/game/modules/tome/data/gfx/particles/ultrashield.lua
+++ b/game/modules/tome/data/gfx/particles/ultrashield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/uttercold.lua b/game/modules/tome/data/gfx/particles/uttercold.lua
index e2efb43bac6bbf95ca2718fcf000feed02a58520..b22846471f8ece8dbb94873048b784ed38304951 100644
--- a/game/modules/tome/data/gfx/particles/uttercold.lua
+++ b/game/modules/tome/data/gfx/particles/uttercold.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/vaporize.lua b/game/modules/tome/data/gfx/particles/vaporize.lua
index fb0120c685332c22f989c42815ab26cc572fa2e1..9838077385e13ac29051db5c91c0652772962d65 100644
--- a/game/modules/tome/data/gfx/particles/vaporize.lua
+++ b/game/modules/tome/data/gfx/particles/vaporize.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/vapour.lua b/game/modules/tome/data/gfx/particles/vapour.lua
index c962504504dc181b7a3a9f3e0248bd71a8ab7bde..ad1570bdf5632a57f82a3445a0f646a2be77c2f4 100644
--- a/game/modules/tome/data/gfx/particles/vapour.lua
+++ b/game/modules/tome/data/gfx/particles/vapour.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/voidblast.lua b/game/modules/tome/data/gfx/particles/voidblast.lua
index 35ad065c0648dfd131da4412f4fd5e1826cd631f..8d9106c01256a4b56288c2d5fae0155ff93298aa 100644
--- a/game/modules/tome/data/gfx/particles/voidblast.lua
+++ b/game/modules/tome/data/gfx/particles/voidblast.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/voidtrail.lua b/game/modules/tome/data/gfx/particles/voidtrail.lua
index b22a37d7a73408616c50115bcf8041f362a3f6b1..464f85f54c1320d677500ea52aca4e65dc32f899 100644
--- a/game/modules/tome/data/gfx/particles/voidtrail.lua
+++ b/game/modules/tome/data/gfx/particles/voidtrail.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/vortex_distort.lua b/game/modules/tome/data/gfx/particles/vortex_distort.lua
index d01b2ecffa0587a1dae929b123383461f2096a99..9ead7a6d3773a7fe4d744a8e14a7379af2212ad9 100644
--- a/game/modules/tome/data/gfx/particles/vortex_distort.lua
+++ b/game/modules/tome/data/gfx/particles/vortex_distort.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/ward.lua b/game/modules/tome/data/gfx/particles/ward.lua
index d204a76ab1da6d88f1b97dc1c4e318110938552d..4acb94af02b43ef3fb436fa06f0bb8097f6020b4 100644
--- a/game/modules/tome/data/gfx/particles/ward.lua
+++ b/game/modules/tome/data/gfx/particles/ward.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/weather_storm.lua b/game/modules/tome/data/gfx/particles/weather_storm.lua
index 7779bbed0e2cd1971690ac98ed7b13a009607e18..75acbca24925f0aff004288ee323ef3e839c9750 100644
--- a/game/modules/tome/data/gfx/particles/weather_storm.lua
+++ b/game/modules/tome/data/gfx/particles/weather_storm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/wildfire.lua b/game/modules/tome/data/gfx/particles/wildfire.lua
index c7b3c5b5966c5e17a63a66fa466d8a81bd1b0581..b310c5119a47de6d2bcb39e084a6d7922589ce9a 100644
--- a/game/modules/tome/data/gfx/particles/wildfire.lua
+++ b/game/modules/tome/data/gfx/particles/wildfire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles/wormhole.lua b/game/modules/tome/data/gfx/particles/wormhole.lua
index e19e8011e69bf75c80f2ce5c2f832765a7cfa663..1f7a998ab1605fc8d21ab35bb4ce17e4fbb538f7 100644
--- a/game/modules/tome/data/gfx/particles/wormhole.lua
+++ b/game/modules/tome/data/gfx/particles/wormhole.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/particles_images/shockwave.png b/game/modules/tome/data/gfx/particles_images/shockwave.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b1b8489c7bda92534726f2c33364606771d0b35
Binary files /dev/null and b/game/modules/tome/data/gfx/particles_images/shockwave.png differ
diff --git a/game/modules/tome/data/gfx/particles_images/spikes.png b/game/modules/tome/data/gfx/particles_images/spikes.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e0977f9d027aae936fa4cbb7d3ebfd04e076c07
Binary files /dev/null and b/game/modules/tome/data/gfx/particles_images/spikes.png differ
diff --git a/game/modules/tome/data/gfx/particles_images/spinningwinds_yellow.png b/game/modules/tome/data/gfx/particles_images/spinningwinds_yellow.png
new file mode 100644
index 0000000000000000000000000000000000000000..11d3ed21eb7ea17df734f74f4a92efd474142c4b
Binary files /dev/null and b/game/modules/tome/data/gfx/particles_images/spinningwinds_yellow.png differ
diff --git a/game/modules/tome/data/gfx/particles_images/sunwings.png b/game/modules/tome/data/gfx/particles_images/sunwings.png
new file mode 100644
index 0000000000000000000000000000000000000000..048e6c2574dc8df6b0699feebc6ebcdc165a65c8
Binary files /dev/null and b/game/modules/tome/data/gfx/particles_images/sunwings.png differ
diff --git a/game/modules/tome/data/gfx/shaders/awesomeaura.frag b/game/modules/tome/data/gfx/shaders/awesomeaura.frag
index 46c284a22594a18641c875819865267b564ebc4f..82a42679b2d02a0e775ff08bd292389d81c7ce2d 100644
--- a/game/modules/tome/data/gfx/shaders/awesomeaura.frag
+++ b/game/modules/tome/data/gfx/shaders/awesomeaura.frag
@@ -125,7 +125,7 @@ float GetFireDelta(float currTime, vec2 pos, float freqMult, float stretchMult,
 vec4 GetFireAuraColor(float currTime, vec2 planarPos, float freqMult, float stretchMult, float ampMult, float power, float scrollSpeed, float paletteCoord)
 {		
 	float delta =  
-		GetFireDelta(currTime, planarPos + vec2(currTime * scrollSpeed * 0, 0.0), freqMult, stretchMult, 2.5, 0.5) * (1.0 - planarPos.x)	+ 
+		GetFireDelta(currTime, planarPos + vec2(currTime * scrollSpeed * 0.0, 0.0), freqMult, stretchMult, 2.5, 0.5) * (1.0 - planarPos.x)	+ 
 		GetFireDelta(currTime, vec2(planarPos.x + currTime * scrollSpeed * 0.0 - 1.0, planarPos.y), freqMult, stretchMult, 2.5, 0.5) * planarPos.x;
 		
 	delta *= min(1.0, max(0.0, 1.0 * (1.0 - planarPos.y)));
diff --git a/game/modules/tome/data/gfx/shaders/awesomeaura.lua b/game/modules/tome/data/gfx/shaders/awesomeaura.lua
index 75e5d7d02ebce48dd180a03566d9d799920e33e2..ccb3495e48eaed8249688364c6f425b2dc47447c 100644
--- a/game/modules/tome/data/gfx/shaders/awesomeaura.lua
+++ b/game/modules/tome/data/gfx/shaders/awesomeaura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/circular_flames.lua b/game/modules/tome/data/gfx/shaders/circular_flames.lua
index c06052928452260a67bf7b46ea4929fbc2013577..e64ab522c6f1a940ef07f71b5f153c1f6ac77763 100644
--- a/game/modules/tome/data/gfx/shaders/circular_flames.lua
+++ b/game/modules/tome/data/gfx/shaders/circular_flames.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/cloud_anim.lua b/game/modules/tome/data/gfx/shaders/cloud_anim.lua
index d957ced50f796e376076120fb910c71cfbf086f2..7d6aa985ae2b82e90f1080f6b8a8920875141c11 100644
--- a/game/modules/tome/data/gfx/shaders/cloud_anim.lua
+++ b/game/modules/tome/data/gfx/shaders/cloud_anim.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/crystalineaura.frag b/game/modules/tome/data/gfx/shaders/crystalineaura.frag
new file mode 100644
index 0000000000000000000000000000000000000000..5b347e5aa5f39ea5a50250b83d4f1777fddd398c
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/crystalineaura.frag
@@ -0,0 +1,62 @@
+uniform sampler2D displMapTex;
+uniform sampler2D normalMapTex;
+
+uniform float spikeLength;
+uniform float spikeWidth;
+uniform float spikeOffset;
+
+uniform float growthSpeed;
+
+uniform float tick;
+uniform float tick_start;
+uniform float time_factor;
+
+uniform vec3 color;
+
+void main(void)
+{
+	vec2 radius = gl_TexCoord[0].xy - vec2(0.5, 0.5);
+	float innerRadius = 0.25;
+	float outerRadius = 0.5;
+	
+	vec2 planarPos;
+	vec4 displacement = texture2D(displMapTex, gl_TexCoord[0].xy);
+
+	vec2 point = gl_TexCoord[0].xy;
+	float eps = 0.05;
+	vec2 basisY = vec2(
+		 texture2D(displMapTex, point + vec2(eps, 0.0)).a - texture2D(displMapTex, point + vec2(-eps, 0.0)).a,
+		-texture2D(displMapTex, point + vec2(0.0, eps)).a + texture2D(displMapTex, point + vec2(0.0, -eps)).a);
+	basisY /= length(basisY) + 0.001;
+	vec2 basisX = vec2(basisY.y, -basisY.x);
+
+	planarPos.x = displacement.b * 6.0 / spikeWidth + spikeOffset;
+	planarPos.y = displacement.a * 20.0 / (spikeLength * clamp((tick - tick_start) / time_factor * growthSpeed, 0.0, 1.0) + 0.001);
+
+	vec4 normalMap = texture2D(normalMapTex, vec2(planarPos.x, clamp(1.0 - planarPos.y, 0.01, 0.99)));
+	vec3 localNormal = normalMap.rgb;
+	localNormal -= vec3(0.5, 0.5, 0.5);
+	localNormal.x = -localNormal.x;
+	localNormal.z = -localNormal.z;
+	localNormal /= length(localNormal);
+
+	vec3 globalNormal;
+	globalNormal.xy  = basisX * localNormal.x + basisY * localNormal.y;
+	globalNormal.z = localNormal.z;
+
+	vec2 lightDir2 = vec2(cos(tick / time_factor), sin(tick / time_factor));
+	float ang = 3.1415 * 0.2;
+	vec3 lightDir3 = vec3(lightDir2 * sin(ang), cos(ang));
+
+	float diffuse = clamp(-dot(lightDir3, globalNormal), 0.0, 1.0);
+	float specular = 0.0;
+	if(dot(lightDir3, globalNormal) < 0.0)
+	{
+		vec3 reflectedLight = lightDir3 - globalNormal * dot(lightDir3, globalNormal) * 2.0;
+		specular += pow(clamp(-dot(reflectedLight, vec3(0.0, 0.0, 1.0)), 0.0, 1.0), 30.0);
+	}
+	//vec3(0.624, 0.820, 0.933);
+	vec4 resultColor = vec4(color * diffuse + vec3(1.0, 1.0, 1.0) * specular, normalMap.a * gl_Color.a);
+	
+	gl_FragColor = resultColor;///
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/gfx/shaders/crystalineaura.lua b/game/modules/tome/data/gfx/shaders/crystalineaura.lua
new file mode 100644
index 0000000000000000000000000000000000000000..38dad9c7c1d3581f9bd1bc97cb6fb8b60cb9fcfb
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/crystalineaura.lua
@@ -0,0 +1,41 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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 {
+	frag = "crystalineaura",
+	vert = nil,
+	args = {
+		displMapTex = { texture = 0 },
+		normalMapTex = { texture = 1 },
+
+		spikeLength = spikeLength or 1.0, -- 1.0 means normal length, 0.5 is half-sized spikes, 2.0 is double-sized, etc
+		spikeWidth = spikeWidth or 1.0, -- use different values for different effects. 1.0 is normal width
+		spikeOffset = spikeOffset or 0.0, -- use different values for different effects. such as offset = 0.0 for ice spikes and 0.123123 for rock spikes
+
+		growthSpeed = growthSpeed or 1.0, -- 1.0 is normal growth speed
+
+		time_factor = time_factor or 500,
+
+		color = color or {0.624, 0.820, 0.933},
+	},
+	resetargs = {
+		tick_start = function() return core.game.getTime() end,
+	},		
+	clone = false,
+}
diff --git a/game/modules/tome/data/gfx/shaders/distort.lua b/game/modules/tome/data/gfx/shaders/distort.lua
index 894d34a436ed56e8b363dfa2b4c624736906f5bd..a3ca970094fd961be8f06069cfd7c3c1ee805a88 100644
--- a/game/modules/tome/data/gfx/shaders/distort.lua
+++ b/game/modules/tome/data/gfx/shaders/distort.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/dual_hue.lua b/game/modules/tome/data/gfx/shaders/dual_hue.lua
index 78deeb0e42d970bd63ccd2977571ca49ad165453..4277f3af1c57648afe49c2d7f39f80598d8ff4c1 100644
--- a/game/modules/tome/data/gfx/shaders/dual_hue.lua
+++ b/game/modules/tome/data/gfx/shaders/dual_hue.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/fireball.lua b/game/modules/tome/data/gfx/shaders/fireball.lua
index 33452d6812d4209536a33d40776fb183d4fdf212..febfbc1d3566ddf57f668f92d08df0d13b5c9d98 100644
--- a/game/modules/tome/data/gfx/shaders/fireball.lua
+++ b/game/modules/tome/data/gfx/shaders/fireball.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/fireboom.lua b/game/modules/tome/data/gfx/shaders/fireboom.lua
index 61921860e9e7e73d2b9f64f4b3ae8a4f09997786..5781eb27d6fac43293334acd66ee77ed3c9b52ea 100644
--- a/game/modules/tome/data/gfx/shaders/fireboom.lua
+++ b/game/modules/tome/data/gfx/shaders/fireboom.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/flamehands.lua b/game/modules/tome/data/gfx/shaders/flamehands.lua
index ece3f346c22efaa3f807ea27cab27552331aeb52..1c052909de44e2a1ca5e8a6011a99f7d21248d1d 100644
--- a/game/modules/tome/data/gfx/shaders/flamehands.lua
+++ b/game/modules/tome/data/gfx/shaders/flamehands.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/flames.lua b/game/modules/tome/data/gfx/shaders/flames.lua
index e0844f918a6aa145c91ab6248ebddbd9145c4957..d88402750c96af99d939c0f17383fc3c1e08acf7 100644
--- a/game/modules/tome/data/gfx/shaders/flames.lua
+++ b/game/modules/tome/data/gfx/shaders/flames.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/flamewings.lua b/game/modules/tome/data/gfx/shaders/flamewings.lua
index 4595a6254c22581ccdcf36a1441a53fbd8af8d51..24aba4d50234cd11069e2b5ac1bc971f5e9f8666 100644
--- a/game/modules/tome/data/gfx/shaders/flamewings.lua
+++ b/game/modules/tome/data/gfx/shaders/flamewings.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/full_fbo.lua b/game/modules/tome/data/gfx/shaders/full_fbo.lua
index 76db2c441f5fe06e7246c97ad0d9cd597ddefd6c..649780fa79e01392ddd5f9d6787f7d23a9933cf6 100644
--- a/game/modules/tome/data/gfx/shaders/full_fbo.lua
+++ b/game/modules/tome/data/gfx/shaders/full_fbo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/funky_bubbles.lua b/game/modules/tome/data/gfx/shaders/funky_bubbles.lua
index db10806a2765f90f7e06a590625c917881d9cafb..aedfaedc2dd00c0e9219b6436c9fa3c9cf181938 100644
--- a/game/modules/tome/data/gfx/shaders/funky_bubbles.lua
+++ b/game/modules/tome/data/gfx/shaders/funky_bubbles.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/healing.lua b/game/modules/tome/data/gfx/shaders/healing.lua
index 6288b8b3779da6260c7d398c47389096022a8580..3d5475cf2c1ec4ddbe918b3d9e6eea0750d04095 100644
--- a/game/modules/tome/data/gfx/shaders/healing.lua
+++ b/game/modules/tome/data/gfx/shaders/healing.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/invis_edge.lua b/game/modules/tome/data/gfx/shaders/invis_edge.lua
index ee52892f1cd4ddebecd2538c5f8a12a291ecda31..2d1ad2f634b2e59fcce867b9fc2a8fee01c644ab 100644
--- a/game/modules/tome/data/gfx/shaders/invis_edge.lua
+++ b/game/modules/tome/data/gfx/shaders/invis_edge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/lava.lua b/game/modules/tome/data/gfx/shaders/lava.lua
index 824ce5a1b068f6256be578b0dbdd16e8c5530d41..29e6667263a7d8d04b4b08d3ad5e43636f8a4a28 100644
--- a/game/modules/tome/data/gfx/shaders/lava.lua
+++ b/game/modules/tome/data/gfx/shaders/lava.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/lightning.lua b/game/modules/tome/data/gfx/shaders/lightning.lua
index 5f8a649b7c4ff08b530d4c5f0c1833db6972329c..35b30a32a5358a863864a8318e594178d4ed77c1 100644
--- a/game/modules/tome/data/gfx/shaders/lightning.lua
+++ b/game/modules/tome/data/gfx/shaders/lightning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/lightningshield.lua b/game/modules/tome/data/gfx/shaders/lightningshield.lua
index fe230daa81172e84c4666e1c90a7030c8d9e402e..7e5c868fdb9ad03f20af7d463449ac92b37f7737 100644
--- a/game/modules/tome/data/gfx/shaders/lightningshield.lua
+++ b/game/modules/tome/data/gfx/shaders/lightningshield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo.frag b/game/modules/tome/data/gfx/shaders/main_fbo.frag
index 0cf85342ab1b51e422cc96b393fe576ae40dfe1a..2857ae6484aaabc75d4aa6da59a2a77f3392f9b6 100644
--- a/game/modules/tome/data/gfx/shaders/main_fbo.frag
+++ b/game/modules/tome/data/gfx/shaders/main_fbo.frag
@@ -2,9 +2,6 @@ uniform float hp_warning;
 uniform float air_warning;
 uniform float death_warning;
 uniform float solipsism_warning;
-uniform float motionblur;
-uniform float underwater;
-uniform float blur;
 uniform float tick;
 uniform sampler2D noisevol;
 uniform vec2 texSize;
@@ -12,171 +9,10 @@ uniform sampler2D tex;
 uniform vec4 colorize;
 uniform vec4 intensify;
 
-// Simple Water shader. (c) Victor Korsun, bitekas@gmail.com; 2012.
-//
-// Attribution-ShareAlike CC License.
-
-#ifdef GL_ES
-precision highp float;
-#endif
-
-uniform vec2 mapCoord;
-
-const float PI = 3.1415926535897932;
-
-// play with these parameters to custimize the effect
-// ===================================================
-
-//speed
-const float speed = 0.05;
-const float speed_x = 0.3;
-const float speed_y = 0.3;
-
-// refraction
-const float emboss = 0.05;
-const float intensity = 0.4;
-const int steps = 6;
-const float frequency = 100.0;
-const int angle = 7; // better when a prime
-
-// reflection
-const float delta = 60.;
-const float intence = 700.;
-
-const float reflectionCutOff = 0.012;
-const float reflectionIntence = 200000.;
-
-// ===================================================
-
-float time = tick / 30000.0;
-
-float col(vec2 coord)
-{
-	float delta_theta = 2.0 * PI / float(angle);
-	float col = 0.0;
-	float theta = 0.0;
-	for (int i = 0; i < steps; i++)
-	{
-		vec2 adjc = coord;
-		theta = delta_theta*float(i);
-		adjc.x += cos(theta)*time*speed + time * speed_x;
-		adjc.y -= sin(theta)*time*speed - time * speed_y;
-		col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*frequency)*intensity;
-	}
-
-	return cos(col);
-}
-
 void main(void)
 {
 	gl_FragColor = texture2D(tex, gl_TexCoord[0].xy);
 
-	if (motionblur > 0.0)
-	{
-		int blursize = int(motionblur);
-		vec2 offset = 0.8/texSize;
-
-		float fTime0_X = tick / 20000.0;
-		float coord = gl_TexCoord[0].x + gl_TexCoord[0].y * texSize[0];
-		float noisy1 = texture2D(noisevol,vec2(coord,fTime0_X)).r;
-		float noisy2 = texture2D(noisevol,vec2(coord/5.0,fTime0_X/1.5)).r;
-		float noisy3 = texture2D(noisevol,vec2(coord/7.0,fTime0_X/2.0)).r;
-		float noisy = (noisy1+noisy2+noisy3)/3.0;
-
-		// Center Pixel
-		vec4 sample = vec4(0.0,0.0,0.0,0.0);
-		float factor = ((float(blursize)*2.0)+1.0);
-		factor = factor*factor;
-
-		if (noisy < 0.25)
-		{
-			for(int i = -blursize; i <= 0; i++)
-			{
-				for(int j = -blursize; j <= 0; j++)
-				{
-					sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-				}
-			}
-		}
-		else if (noisy < 0.50)
-		{
-			for(int i = 0; i <= blursize; i++)
-			{
-				for(int j = 0; j <= blursize; j++)
-				{
-					sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-				}
-			}
-		}
-		else if (noisy < 0.75)
-		{
-			for(int i = 0; i <= blursize; i++)
-			{
-				for(int j = -blursize; j <= 0; j++)
-				{
-					sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-				}
-			}
-		}
-		else
-		{
-			for(int i = -blursize; i <= 0; i++)
-			{
-				for(int j = 0; j <= blursize; j++)
-				{
-					sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-				}
-			}
-		}
-		sample /= float((motionblur*1.5) * (motionblur*0.5));
-//		gl_FragColor = sample * (0.3 + noise * 0.7);
-		gl_FragColor = sample;
-	}
-	else if (blur > 0.0)
-	{
-		int blursize = int(blur);
-		vec2 offset = 1.0/texSize;
-
-		// Center Pixel
-		vec4 sample = vec4(0.0,0.0,0.0,0.0);
-		float factor = ((float(blursize)*2.0)+1.0);
-		factor = factor*factor;
-
-		for(int i = -blursize; i <= blursize; i++)
-		{
-			for(int j = -blursize; j <= blursize; j++)
-			{
-				sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-			}
-		}
-		sample /= (blur*2.0) * (blur*2.0);
-		gl_FragColor = sample;
-	}
-	else if (underwater > 0.0)
-	{
-		vec2 p = (vec2(gl_FragCoord.x - mapCoord.x, texSize.y - gl_FragCoord.y - mapCoord.y)) / texSize.xy, c1 = p, c2 = p;
-		float cc1 = col(c1);
-
-		c2.x += texSize.x/delta;
-		float dx = emboss*(cc1-col(c2))/delta;
-
-		c2.x = p.x;
-		c2.y += texSize.y/delta;
-		float dy = emboss*(cc1-col(c2))/delta;
-
-		c1.x += dx*2.;
-		c1.y = -(c1.y+dy*2.);
-
-		float alpha = 1.+dot(dx,dy)*intence;
-			
-		float ddx = dx - reflectionCutOff;
-		float ddy = dy - reflectionCutOff;
-		if (ddx > 0. && ddy > 0.) alpha = pow(alpha, ddx*ddy*reflectionIntence);
-			
-		vec4 col = texture2D(tex,c1)*(alpha);
-		gl_FragColor = col;
-	}
-
 	if (colorize.r > 0.0 || colorize.g > 0.0 || colorize.b > 0.0)
 	{
 		float grey = (gl_FragColor.r*0.3+gl_FragColor.g*0.59+gl_FragColor.b*0.11) * colorize.a;
@@ -216,67 +52,3 @@ void main(void)
 		gl_FragColor = mix(gl_FragColor, solipsism_warning_color, dist);
 	}
 }
-
-/*uniform sampler2D tex;
-uniform vec2 texSize;
-int blursize = 5;
-
-void main(void)
-{
-	vec2 offset = 1.0/texSize;
-
-	// Center Pixel
-	vec4 sample = vec4(0.0,0.0,0.0,0.0);
-	float factor = ((float(blursize)*2.0)+1.0);
-	factor = factor*factor;
-
-	for(int i = -blursize; i <= blursize; i++)
-	{
-		for(int j = -blursize; j <= blursize; j++)
-		{
-			sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-		}
-	}
-	sample /= float((blursize*2) * (blursize*2));
-
-	float grey = sample.r*0.3+sample.g*0.59+sample.b*0.11;
-	vec3 color = vec3(1, 0, 0);
-	gl_FragColor = vec4(vec3(color*grey),1.0);
-}
-*/
-/*
-uniform sampler2D tex;
-uniform sampler3D noiseVol;
-uniform float tick;
-float do_blur = 3.0;
-uniform vec2 texSize;
-
-void main(void)
-{
-	if (do_blur > 0.0)
-	{
-		vec2 offset = 1.0/texSize;
-		offset.y += texture3D(noiseVol, vec3(gl_TexCoord[0].xy, tick/100000))/30;
-
-		// Center Pixel
-		vec4 sample = vec4(0.0,0.0,0.0,0.0);
-		float factor = ((float(do_blur)*2.0)+1.0);
-		factor = factor*factor;
-
-		for(int i = -do_blur; i <= do_blur; i++)
-		{
-			for(int j = -do_blur; j <= do_blur; j++)
-			{
-				sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
-			}
-		}
-		sample /= float((do_blur*2) * (do_blur*2));
-
-		gl_FragColor = sample;
-	}
-
-	float grey = gl_FragColor.r*0.3+gl_FragColor.g*0.59+gl_FragColor.b*0.11;
-	vec3 color = vec3(1, 0, 0);
-	gl_FragColor = vec4(vec3(color*grey),1.0);
-}
-*/
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo.lua b/game/modules/tome/data/gfx/shaders/main_fbo.lua
index 5d15f72ad7a08d1e5f505ff8cc5668e8451fc9aa..1c33fc14ca86dee22985523b716dd6de336d6273 100644
--- a/game/modules/tome/data/gfx/shaders/main_fbo.lua
+++ b/game/modules/tome/data/gfx/shaders/main_fbo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/blur.frag b/game/modules/tome/data/gfx/shaders/main_fbo/blur.frag
new file mode 100644
index 0000000000000000000000000000000000000000..492d77f4f323c1049c29a4d300bc1f1dbdee84e4
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/blur.frag
@@ -0,0 +1,25 @@
+uniform float blur;
+uniform float tick;
+uniform vec2 texSize;
+uniform sampler2D tex;
+
+void main(void)
+{
+	int blursize = int(blur);
+	vec2 offset = 1.0/texSize;
+
+	// Center Pixel
+	vec4 sample = vec4(0.0,0.0,0.0,0.0);
+	float factor = ((float(blursize)*2.0)+1.0);
+	factor = factor*factor;
+
+	for(int i = -blursize; i <= blursize; i++)
+	{
+		for(int j = -blursize; j <= blursize; j++)
+		{
+			sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
+		}
+	}
+	sample /= (blur*2.0) * (blur*2.0);
+	gl_FragColor = sample;
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/blur.lua b/game/modules/tome/data/gfx/shaders/main_fbo/blur.lua
new file mode 100644
index 0000000000000000000000000000000000000000..08847b5d91b583078f0922e4de737c6a97a6bef0
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/blur.lua
@@ -0,0 +1,28 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "main_fbo/blur",
+	vert = nil,
+	args = {
+		tex = { texture = 0 },
+	},
+	clone = false,
+	permanent = true,
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/motionblur.frag b/game/modules/tome/data/gfx/shaders/main_fbo/motionblur.frag
new file mode 100644
index 0000000000000000000000000000000000000000..508bb8428419f4906935d6edf1b5c6efa1b8f97d
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/motionblur.frag
@@ -0,0 +1,69 @@
+uniform float motionblur;
+uniform float tick;
+uniform sampler2D noisevol;
+uniform vec2 texSize;
+uniform sampler2D tex;
+uniform vec2 mapCoord;
+
+void main(void)
+{
+	gl_FragColor = texture2D(tex, gl_TexCoord[0].xy);
+
+	int blursize = int(motionblur);
+	vec2 offset = 0.8/texSize;
+
+	float fTime0_X = tick / 20000.0;
+	float coord = gl_TexCoord[0].x + gl_TexCoord[0].y * texSize[0];
+	float noisy1 = texture2D(noisevol,vec2(coord,fTime0_X)).r;
+	float noisy2 = texture2D(noisevol,vec2(coord/5.0,fTime0_X/1.5)).r;
+	float noisy3 = texture2D(noisevol,vec2(coord/7.0,fTime0_X/2.0)).r;
+	float noisy = (noisy1+noisy2+noisy3)/3.0;
+
+	// Center Pixel
+	vec4 sample = vec4(0.0,0.0,0.0,0.0);
+	float factor = ((float(blursize)*2.0)+1.0);
+	factor = factor*factor;
+
+	if (noisy < 0.25)
+	{
+		for(int i = -blursize; i <= 0; i++)
+		{
+			for(int j = -blursize; j <= 0; j++)
+			{
+				sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
+			}
+		}
+	}
+	else if (noisy < 0.50)
+	{
+		for(int i = 0; i <= blursize; i++)
+		{
+			for(int j = 0; j <= blursize; j++)
+			{
+				sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
+			}
+		}
+	}
+	else if (noisy < 0.75)
+	{
+		for(int i = 0; i <= blursize; i++)
+		{
+			for(int j = -blursize; j <= 0; j++)
+			{
+				sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
+			}
+		}
+	}
+	else
+	{
+		for(int i = -blursize; i <= 0; i++)
+		{
+			for(int j = 0; j <= blursize; j++)
+			{
+				sample += texture2D(tex, vec2(gl_TexCoord[0].xy+vec2(float(i)*offset.x, float(j)*offset.y)));
+			}
+		}
+	}
+	sample /= float((motionblur*1.5) * (motionblur*0.5));
+	gl_FragColor = sample;
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/motionblur.lua b/game/modules/tome/data/gfx/shaders/main_fbo/motionblur.lua
new file mode 100644
index 0000000000000000000000000000000000000000..4ca6ca12c33ecbd0f3b038bf49dc25839d0dd934
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/motionblur.lua
@@ -0,0 +1,28 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "main_fbo/motionblur",
+	vert = nil,
+	args = {
+		tex = { texture = 0 },
+	},
+	clone = false,
+	permanent = true,
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/underwater.frag b/game/modules/tome/data/gfx/shaders/main_fbo/underwater.frag
new file mode 100644
index 0000000000000000000000000000000000000000..ba413ab5f631f8ac87dac08ecaa7e0ab64d14e03
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/underwater.frag
@@ -0,0 +1,84 @@
+uniform float tick;
+uniform vec2 texSize;
+uniform sampler2D tex;
+
+// Simple Water shader. (c) Victor Korsun, bitekas@gmail.com; 2012.
+//
+// Attribution-ShareAlike CC License.
+
+#ifdef GL_ES
+precision highp float;
+#endif
+
+uniform vec2 mapCoord;
+
+const float PI = 3.1415926535897932;
+
+// play with these parameters to custimize the effect
+// ===================================================
+
+//speed
+const float speed = 0.05;
+const float speed_x = 0.3;
+const float speed_y = 0.3;
+
+// refraction
+const float emboss = 0.05;
+const float intensity = 0.4;
+const int steps = 6;
+const float frequency = 100.0;
+const int angle = 7; // better when a prime
+
+// reflection
+const float delta = 60.;
+const float intence = 700.;
+
+const float reflectionCutOff = 0.012;
+const float reflectionIntence = 200000.;
+
+// ===================================================
+
+float time = tick / 30000.0;
+
+float col(vec2 coord)
+{
+	float delta_theta = 2.0 * PI / float(angle);
+	float col = 0.0;
+	float theta = 0.0;
+	for (int i = 0; i < steps; i++)
+	{
+		vec2 adjc = coord;
+		theta = delta_theta*float(i);
+		adjc.x += cos(theta)*time*speed + time * speed_x;
+		adjc.y -= sin(theta)*time*speed - time * speed_y;
+		col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*frequency)*intensity;
+	}
+
+	return cos(col);
+}
+
+void main(void)
+{
+	gl_FragColor = texture2D(tex, gl_TexCoord[0].xy);
+	vec2 p = (vec2(gl_FragCoord.x - mapCoord.x, texSize.y - gl_FragCoord.y - mapCoord.y)) / texSize.xy, c1 = p, c2 = p;
+	float cc1 = col(c1);
+
+	c2.x += texSize.x/delta;
+	float dx = emboss*(cc1-col(c2))/delta;
+
+	c2.x = p.x;
+	c2.y += texSize.y/delta;
+	float dy = emboss*(cc1-col(c2))/delta;
+
+	c1.x += dx*2.;
+	c1.y = -(c1.y+dy*2.);
+
+	float alpha = 1.+dot(dx,dy)*intence;
+		
+	float ddx = dx - reflectionCutOff;
+	float ddy = dy - reflectionCutOff;
+	if (ddx > 0. && ddy > 0.) alpha = pow(alpha, ddx*ddy*reflectionIntence);
+		
+	vec4 col = texture2D(tex,c1)*(alpha);
+	gl_FragColor = col;
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/underwater.lua b/game/modules/tome/data/gfx/shaders/main_fbo/underwater.lua
new file mode 100644
index 0000000000000000000000000000000000000000..75f8754ef36c949292c5bbc8793e9e2f8657c021
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/underwater.lua
@@ -0,0 +1,28 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "main_fbo/underwater",
+	vert = nil,
+	args = {
+		tex = { texture = 0 },
+	},
+	clone = false,
+	permanent = true,
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/wobbling.frag b/game/modules/tome/data/gfx/shaders/main_fbo/wobbling.frag
new file mode 100644
index 0000000000000000000000000000000000000000..bf717cf8dd80ee4cbeeb0efc63e04ea7ad6bbb72
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/wobbling.frag
@@ -0,0 +1,165 @@
+uniform float wobbling;
+uniform float tick;
+uniform sampler2D noisevol;
+uniform vec2 texSize;
+uniform sampler2D tex;
+uniform vec2 mapCoord;
+
+const float PI = 3.1415926535897932;
+
+// play with these parameters to custimize the effect
+// ===================================================
+
+//speed
+const float speed = 0.05;
+const float speed_x = 0.3;
+const float speed_y = 0.3;
+
+// refraction
+const float emboss = 0.05;
+const float intensity = 0.4;
+const int steps = 6;
+const float frequency = 100.0;
+const int angle = 7; // better when a prime
+
+// reflection
+const float delta = 60.;
+const float intence = 700.;
+
+const float reflectionCutOff = 0.012;
+const float reflectionIntence = 200000.;
+
+float time = tick / 30000.0;
+
+float col(vec2 coord)
+{
+	float delta_theta = 2.0 * PI / float(angle);
+	float col = 0.0;
+	float theta = 0.0;
+	for (int i = 0; i < steps; i++)
+	{
+		vec2 adjc = coord;
+		theta = delta_theta*float(i);
+		adjc.x += cos(theta)*time*speed + time * speed_x;
+		adjc.y -= sin(theta)*time*speed - time * speed_y;
+		col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*frequency)*intensity;
+	}
+
+	return cos(col);
+}
+
+vec4 permute( vec4 x ) {
+
+	return mod( ( ( x * 34.0 ) + 1.0 ) * x, 289.0 );
+
+} 
+
+vec4 taylorInvSqrt( vec4 r ) {
+
+	return 1.79284291400159 - 0.85373472095314 * r;
+
+}
+
+float snoise( vec3 v ) {
+
+	const vec2 C = vec2( 1.0 / 6.0, 1.0 / 3.0 );
+	const vec4 D = vec4( 0.0, 0.5, 1.0, 2.0 );
+
+	// First corner
+
+	vec3 i  = floor( v + dot( v, C.yyy ) );
+	vec3 x0 = v - i + dot( i, C.xxx );
+
+	// Other corners
+
+	vec3 g = step( x0.yzx, x0.xyz );
+	vec3 l = 1.0 - g;
+	vec3 i1 = min( g.xyz, l.zxy );
+	vec3 i2 = max( g.xyz, l.zxy );
+
+	vec3 x1 = x0 - i1 + 1.0 * C.xxx;
+	vec3 x2 = x0 - i2 + 2.0 * C.xxx;
+	vec3 x3 = x0 - 1. + 3.0 * C.xxx;
+
+	// Permutations
+
+	i = mod( i, 289.0 );
+	vec4 p = permute( permute( permute(
+		i.z + vec4( 0.0, i1.z, i2.z, 1.0 ) )
+		+ i.y + vec4( 0.0, i1.y, i2.y, 1.0 ) )
+		+ i.x + vec4( 0.0, i1.x, i2.x, 1.0 ) );
+
+	// Gradients
+	// ( N*N points uniformly over a square, mapped onto an octahedron.)
+
+	float n_ = 1.0 / 7.0; // N=7
+
+	vec3 ns = n_ * D.wyz - D.xzx;
+
+	vec4 j = p - 49.0 * floor( p * ns.z *ns.z );  //  mod(p,N*N)
+
+	vec4 x_ = floor( j * ns.z );
+	vec4 y_ = floor( j - 7.0 * x_ );    // mod(j,N)
+
+	vec4 x = x_ *ns.x + ns.yyyy;
+	vec4 y = y_ *ns.x + ns.yyyy;
+	vec4 h = 1.0 - abs( x ) - abs( y );
+
+	vec4 b0 = vec4( x.xy, y.xy );
+	vec4 b1 = vec4( x.zw, y.zw );
+
+
+	vec4 s0 = floor( b0 ) * 2.0 + 1.0;
+	vec4 s1 = floor( b1 ) * 2.0 + 1.0;
+	vec4 sh = -step( h, vec4( 0.0 ) );
+
+	vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;
+	vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
+
+	vec3 p0 = vec3( a0.xy, h.x );
+	vec3 p1 = vec3( a0.zw, h.y );
+	vec3 p2 = vec3( a1.xy, h.z );
+	vec3 p3 = vec3( a1.zw, h.w );
+
+	// Normalise gradients
+
+	vec4 norm = taylorInvSqrt( vec4( dot( p0, p0 ), dot( p1, p1 ), dot( p2, p2 ), dot( p3, p3 ) ) );
+	p0 *= norm.x;
+	p1 *= norm.y;
+	p2 *= norm.z;
+	p3 *= norm.w;
+
+	// Mix final noise value
+
+	vec4 m = max( 0.6 - vec4( dot( x0, x0 ), dot( x1, x1 ), dot( x2, x2 ), dot( x3, x3 ) ), 0.0 );
+	m = m * m;
+	return 42.0 * dot( m*m, vec4( dot( p0, x0 ), dot( p1, x1 ),
+		dot( p2, x2 ), dot( p3, x3 ) ) );
+
+}  
+
+
+vec2 snoise2(vec3 pos)
+{
+	return vec2(snoise(pos), snoise(pos + vec3(0.0, 0.0, 1.0)));
+}
+
+void main(void)
+{
+	float scaledTime = tick / 5000.0;
+	vec2 coord = gl_TexCoord[0].xy;
+	coord.x *= texSize.x / texSize.y;
+	vec2 offset =
+		snoise2(vec3(coord / 2.0,  scaledTime / 0.25)) * 0.33 * 3.0 + 
+		snoise2(vec3(coord / 2.0, scaledTime / 2.0)) * 0.0 + 
+		snoise2(vec3(coord / 4.0, scaledTime / 4.0)) * 0.0;
+
+	offset.x *= texSize.x / texSize.y;
+
+	float ratio = clamp(1.5 * pow(length(vec2(0.5, 0.5) - gl_TexCoord[0].xy) / (0.7071), 2.0), 0.0, 1.0); //sqrt(2) / 2 = 0.7071
+	ratio *= (1.0 + snoise(vec3(coord / 2.0, scaledTime / 0.25 + 10.0))) * 0.5;
+
+	gl_FragColor = 
+		texture2D(tex, gl_TexCoord[0].xy) * (1.0 - ratio) + 
+		texture2D(tex, gl_TexCoord[0].xy + offset * 0.01 * wobbling) * ratio;
+}
diff --git a/game/modules/tome/data/gfx/shaders/main_fbo/wobbling.lua b/game/modules/tome/data/gfx/shaders/main_fbo/wobbling.lua
new file mode 100644
index 0000000000000000000000000000000000000000..3f16a9ff41d865a27f30b0dc7e1cd2e0b7be7dad
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/main_fbo/wobbling.lua
@@ -0,0 +1,29 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "main_fbo/wobbling",
+	vert = nil,
+	args = {
+		tex = { texture = 0 },
+		noisevol = { texture = 1 },
+	},
+	clone = false,
+	permanent = true,
+}
diff --git a/game/modules/tome/data/gfx/shaders/moving_transparency.lua b/game/modules/tome/data/gfx/shaders/moving_transparency.lua
index 0cac4f29e70702a1e60825ea2dc8c4495899145d..e9631c6aa72349cbbde5c50ad7ca238dd9ecf518 100644
--- a/game/modules/tome/data/gfx/shaders/moving_transparency.lua
+++ b/game/modules/tome/data/gfx/shaders/moving_transparency.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/objectsoutline.lua b/game/modules/tome/data/gfx/shaders/objectsoutline.lua
index 20a07d3c06ae782da2a88fe619cc11e9a0c14bfa..ef5e4c203e797a0a552441519d5feec364a23640 100644
--- a/game/modules/tome/data/gfx/shaders/objectsoutline.lua
+++ b/game/modules/tome/data/gfx/shaders/objectsoutline.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/poison_water.lua b/game/modules/tome/data/gfx/shaders/poison_water.lua
index 6fa76ced607295696f9f7c21244a304c665a5b20..c594494ed167dd83fafa2bc5bbdca271b1c2a963 100644
--- a/game/modules/tome/data/gfx/shaders/poison_water.lua
+++ b/game/modules/tome/data/gfx/shaders/poison_water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/quad_hue.lua b/game/modules/tome/data/gfx/shaders/quad_hue.lua
index e132cfcf72966c4ed83f1a617ed7428b8b9083ad..36ea7a96b2d98df54b025366ed70a9241509e4d9 100644
--- a/game/modules/tome/data/gfx/shaders/quad_hue.lua
+++ b/game/modules/tome/data/gfx/shaders/quad_hue.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/resources.lua b/game/modules/tome/data/gfx/shaders/resources.lua
index e1047c907547b3d9ab61d5675724b1ac1abbed71..38b7cdf67f535e1b758ca00f5710c4c0dd196e4e 100644
--- a/game/modules/tome/data/gfx/shaders/resources.lua
+++ b/game/modules/tome/data/gfx/shaders/resources.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/resources2.lua b/game/modules/tome/data/gfx/shaders/resources2.lua
index 48721d4e0c076bc949100ba3d04fdd1b9e963855..af568325a11444246958f30d9c0b7f3e99de4d9c 100644
--- a/game/modules/tome/data/gfx/shaders/resources2.lua
+++ b/game/modules/tome/data/gfx/shaders/resources2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/runicshield.lua b/game/modules/tome/data/gfx/shaders/runicshield.lua
index 94d2f76b76557c7ea66296983ede3e2ee682a40f..7928bcd8312814af34300df4b1ca647877d8f18a 100644
--- a/game/modules/tome/data/gfx/shaders/runicshield.lua
+++ b/game/modules/tome/data/gfx/shaders/runicshield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/shadow_simulacrum.lua b/game/modules/tome/data/gfx/shaders/shadow_simulacrum.lua
index c4f7c6ef3c59811aa7e192217f1b0e13f86c91a0..1036e888d21e3e100065c6b668e6019b362b8f91 100644
--- a/game/modules/tome/data/gfx/shaders/shadow_simulacrum.lua
+++ b/game/modules/tome/data/gfx/shaders/shadow_simulacrum.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/shadowfire.lua b/game/modules/tome/data/gfx/shaders/shadowfire.lua
index c289fed0b3dfc8a535d0ccb77f2239f1c9733492..0fdbe9a028af9f6c719316ee2db64073a38f48ce 100644
--- a/game/modules/tome/data/gfx/shaders/shadowfire.lua
+++ b/game/modules/tome/data/gfx/shaders/shadowfire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/shield.lua b/game/modules/tome/data/gfx/shaders/shield.lua
index 27686f6af0ee4f829ebde846792dc768a5be31e6..1d5c1bc2388cf139039c5f5747962178a40fcabe 100644
--- a/game/modules/tome/data/gfx/shaders/shield.lua
+++ b/game/modules/tome/data/gfx/shaders/shield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/shockwave.lua b/game/modules/tome/data/gfx/shaders/shockwave.lua
index 5661495284c28f9951c575f3298ac0ab50909d7e..20d272210aac91290661eb421bf7f2d2da74d105 100644
--- a/game/modules/tome/data/gfx/shaders/shockwave.lua
+++ b/game/modules/tome/data/gfx/shaders/shockwave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/shockwave2.frag b/game/modules/tome/data/gfx/shaders/shockwave2.frag
index eef27831c05da898aa2fcee65582df847e0bce6f..460018a3eec2c34c71bb2fc0f5aa66f1bce26e5d 100644
--- a/game/modules/tome/data/gfx/shaders/shockwave2.frag
+++ b/game/modules/tome/data/gfx/shaders/shockwave2.frag
@@ -9,7 +9,7 @@ uniform float innerShockwaveWidth;
 uniform float outerShockwaveWidth;
 uniform float flameIntensity;
 
-uniform vec2 ellipsoidalFactor = vec2(1.0, 1.0); //(1.0, 1.0) is perfect circle, (2.0, 1.0) is vertical ellipse, (1.0, 2.0) is horizontal ellipse
+uniform vec2 ellipsoidalFactor; //(1.0, 1.0) is perfect circle, (2.0, 1.0) is vertical ellipse, (1.0, 2.0) is horizontal ellipse
 	
 vec4 permute( vec4 x ) {
 
diff --git a/game/modules/tome/data/gfx/shaders/shockwave2.lua b/game/modules/tome/data/gfx/shaders/shockwave2.lua
index e419eda87dadb08660627dc6cde3a837f6148bc1..ff8013eafc1b0179c8923d9945c9f01d2cea18b1 100644
--- a/game/modules/tome/data/gfx/shaders/shockwave2.lua
+++ b/game/modules/tome/data/gfx/shaders/shockwave2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -31,7 +31,7 @@ return {
 		shockwaveSpeed = shockwaveSpeed or 5.0,
 		flameIntensity = flameIntensity or 0.5, 
 
-		ellipsoidalFactor = 1.0, --1 is perfect circle, >1 is ellipsoidal
+		ellipsoidalFactor = {1.0, 1.0}, --1 is perfect circle, >1 is ellipsoidal
 		antialiasingRadius = antialiasingRadius or 0.98, --1.0 is no antialiasing, 0.0 - fully smoothed(looks worse)
 	},
 	resetargs = {
diff --git a/game/modules/tome/data/gfx/shaders/space_turbulence.lua b/game/modules/tome/data/gfx/shaders/space_turbulence.lua
index 077d8f6a851a20f99a72a615ef76e6be8c762202..007846e2572027ce4b42e1128645c07ed0e69da8 100644
--- a/game/modules/tome/data/gfx/shaders/space_turbulence.lua
+++ b/game/modules/tome/data/gfx/shaders/space_turbulence.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/sparks.lua b/game/modules/tome/data/gfx/shaders/sparks.lua
index 2e4655a0a40c64e0520ae4681582e840182a60ca..d16c8b07e41c7e405a303119e5d5310f4e67e1ce 100644
--- a/game/modules/tome/data/gfx/shaders/sparks.lua
+++ b/game/modules/tome/data/gfx/shaders/sparks.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/spinningwinds.lua b/game/modules/tome/data/gfx/shaders/spinningwinds.lua
index b8d180d2fee59ab98f873d4f7ed4f982fd5c7af2..561b3fed0fce02e024397813d93ebcc0d46f5cd6 100644
--- a/game/modules/tome/data/gfx/shaders/spinningwinds.lua
+++ b/game/modules/tome/data/gfx/shaders/spinningwinds.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/spinningwinds2.lua b/game/modules/tome/data/gfx/shaders/spinningwinds2.lua
index b8d180d2fee59ab98f873d4f7ed4f982fd5c7af2..561b3fed0fce02e024397813d93ebcc0d46f5cd6 100644
--- a/game/modules/tome/data/gfx/shaders/spinningwinds2.lua
+++ b/game/modules/tome/data/gfx/shaders/spinningwinds2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/starfield.lua b/game/modules/tome/data/gfx/shaders/starfield.lua
index 06f71ace419bee4249a3a5fea900ba2d9a70bf28..445fd7601ec691a897ffc893913209cdbbdc0c5c 100644
--- a/game/modules/tome/data/gfx/shaders/starfield.lua
+++ b/game/modules/tome/data/gfx/shaders/starfield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/stone.lua b/game/modules/tome/data/gfx/shaders/stone.lua
index 4b878a2d63a42683eb48ac6ec6c3d3350aa0250c..78fc290660b3876b7a6b872dd15ae04de01fe5b2 100644
--- a/game/modules/tome/data/gfx/shaders/stone.lua
+++ b/game/modules/tome/data/gfx/shaders/stone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/sun.lua b/game/modules/tome/data/gfx/shaders/sun.lua
index d29cf7d95df9ad0131e24bb81b4463f1fc929552..1da3a72fb938ed92192dc7a84d52ffd505530600 100644
--- a/game/modules/tome/data/gfx/shaders/sun.lua
+++ b/game/modules/tome/data/gfx/shaders/sun.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/sunaura.lua b/game/modules/tome/data/gfx/shaders/sunaura.lua
index 14ed43fd2f82d2b88b922bb237a755a56d4ae294..88d49cc584cb667c2af173834944b530abd39c06 100644
--- a/game/modules/tome/data/gfx/shaders/sunaura.lua
+++ b/game/modules/tome/data/gfx/shaders/sunaura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/target_fbo.lua b/game/modules/tome/data/gfx/shaders/target_fbo.lua
index 8e0ba1def4205224fd586ce3cc7d59de8014ac05..b0abf9a7cd953ff2cd3d876a1ee1697bb15bf4a1 100644
--- a/game/modules/tome/data/gfx/shaders/target_fbo.lua
+++ b/game/modules/tome/data/gfx/shaders/target_fbo.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/test.lua b/game/modules/tome/data/gfx/shaders/test.lua
index 00a2290eec0e72b9187386e1e8150c78206d9ce5..ad142a17975389a8fe6f200931ccbd7faa14b1c7 100644
--- a/game/modules/tome/data/gfx/shaders/test.lua
+++ b/game/modules/tome/data/gfx/shaders/test.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/textoutline.lua b/game/modules/tome/data/gfx/shaders/textoutline.lua
index a25e54e0247c19d454f170f9992bad96ac3d7966..dd0ec94f6e4e185e82a32a242caca247d4e07448 100644
--- a/game/modules/tome/data/gfx/shaders/textoutline.lua
+++ b/game/modules/tome/data/gfx/shaders/textoutline.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/tree.frag b/game/modules/tome/data/gfx/shaders/tree.frag
new file mode 100644
index 0000000000000000000000000000000000000000..fdb44aa1539f9049cda631dbe0bd78126514dcf2
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/tree.frag
@@ -0,0 +1,14 @@
+uniform sampler2D tex;
+uniform float tick;
+uniform vec2 mapCoord;
+uniform float attenuation;
+
+void main(void)
+{
+	float time = tick / 1000.0;
+	vec2 xy = gl_TexCoord[0].xy;
+//	if (xy.y <= 0.5) xy.x = xy.x + (0.5-xy.y) * sin(time + mapCoord.x / 40 + mapCoord.y) / 14.0;
+	if (xy.y <= 0.75) xy.x = xy.x + (0.75-xy.y) * sin(time + mapCoord.x / 40 + mapCoord.y) / attenuation;
+//	xy.x = xy.x + (1.0-xy.y) * sin(time + mapCoord.x / 40 + mapCoord.y) / attenuation;
+	gl_FragColor = texture2D(tex, xy) * gl_Color;
+}
diff --git a/game/modules/tome/data/gfx/shaders/tree.lua b/game/modules/tome/data/gfx/shaders/tree.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d0601a45fabe8382c31d163f1345c4b6d5610a7e
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/tree.lua
@@ -0,0 +1,27 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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 {
+	frag = "tree",
+	vert = nil,
+	args = {
+		attenuation = attenuation or 35,
+	},
+	clone = false,
+}
diff --git a/game/modules/tome/data/gfx/shaders/unique_glow.lua b/game/modules/tome/data/gfx/shaders/unique_glow.lua
index 6ed13b36618b7001ad178e0e3ce69dddb41bbb86..3a54a0247bd41cd3bd7d01d76e56601e82c403a3 100644
--- a/game/modules/tome/data/gfx/shaders/unique_glow.lua
+++ b/game/modules/tome/data/gfx/shaders/unique_glow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/water.lua b/game/modules/tome/data/gfx/shaders/water.lua
index 50b2488eb18538627edf9e8531828e773ae45978..58b082bd9cb036e537be55c16f407423c9d50136 100644
--- a/game/modules/tome/data/gfx/shaders/water.lua
+++ b/game/modules/tome/data/gfx/shaders/water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/water_ocean.lua b/game/modules/tome/data/gfx/shaders/water_ocean.lua
index 4629c9dc500a176e2e8cef05159e978d370c1dc0..682376cdebd67a42f25068f6e48c619e6d5b69e8 100644
--- a/game/modules/tome/data/gfx/shaders/water_ocean.lua
+++ b/game/modules/tome/data/gfx/shaders/water_ocean.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shaders/weather_vapours.lua b/game/modules/tome/data/gfx/shaders/weather_vapours.lua
index 1d34570c245c091438f70d069d704257be20427e..ec45dbc984708860ce9470d3e55e0812cf188b64 100644
--- a/game/modules/tome/data/gfx/shaders/weather_vapours.lua
+++ b/game/modules/tome/data/gfx/shaders/weather_vapours.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/gfx/shockbolt/attachements.lua b/game/modules/tome/data/gfx/shockbolt/attachements.lua
index 74a1572a4fedcc46e17871d89f54c7fa36976d65..4e2461b68f1a8dd61820a779cd38e10370d0f168 100644
--- a/game/modules/tome/data/gfx/shockbolt/attachements.lua
+++ b/game/modules/tome/data/gfx/shockbolt/attachements.lua
@@ -23,15 +23,6 @@ tiles["npc/humanoid_human_high_gladiator.png"] = { base=64,
 	back = {x=34, y=17},
 	head = {x=30, y=7},
 }
-dolls.race_dwarf = dolls.race_dwarf or {}
-dolls.race_dwarf.male = { base=64,
-	feet = {x=34, y=61},
-	back = {x=32, y=25},
-	hand2 = {x=55, y=39},
-	belly = {x=34, y=34},
-	hand1 = {x=10, y=39},
-	head = {x=32, y=10},
-}
 tiles["npc/humanoid_shalore_elvala_guard.png"] = { base=64,
 	feet = {x=32, y=61},
 	belly = {x=31, y=27},
@@ -55,13 +46,13 @@ tiles["npc/humanoid_human_human_citizen.png"] = { base=64,
 	back = {x=36, y=16},
 	head = {x=36, y=5},
 }
-tiles["npc/humanoid_orc_orc_master_assassin.png"] = { base=64,
-	feet = {x=31, y=60},
-	hand1 = {x=4, y=39},
-	hand2 = {x=59, y=32},
-	back = {x=29, y=18},
-	belly = {x=30, y=30},
-	head = {x=28, y=8},
+tiles["npc/humanoid_yeek_yeek_psionic.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=31, y=38},
+	hand2 = {x=33, y=38},
+	back = {x=32, y=23},
+	belly = {x=32, y=34},
+	head = {x=32, y=12},
 }
 tiles["npc/humanoid_orc_vor__grand_geomancer_of_the_pride.png"] = { base=64,
 	feet = {x=32, y=60},
@@ -79,13 +70,12 @@ tiles["npc/humanoid_human_ziguranth_wyrmic.png"] = { base=64,
 	belly = {x=33, y=30},
 	head = {x=32, y=4},
 }
-tiles["npc/humanoid_shalore_elven_cultist.png"] = { base=64,
-	feet = {x=29, y=60},
-	hand1 = {x=8, y=9},
-	hand2 = {x=52, y=9},
-	back = {x=30, y=16},
-	belly = {x=31, y=28},
-	head = {x=31, y=6},
+tiles["npc/humanoid_shalore_elven_warrior.png"] = { base=64,
+	feet = {x=32, y=61},
+	belly = {x=31, y=26},
+	hand1 = {x=13, y=31},
+	back = {x=31, y=14},
+	head = {x=31, y=5},
 }
 tiles["npc/humanoid_shalore_elandar.png"] = { base=64,
 	feet = {x=34, y=59},
@@ -95,13 +85,13 @@ tiles["npc/humanoid_shalore_elandar.png"] = { base=64,
 	belly = {x=33, y=22},
 	head = {x=29, y=-2},
 }
-tiles["npc/humanoid_dwarf_ziguranth_warrior.png"] = { base=64,
-	feet = {x=34, y=59},
-	hand1 = {x=18, y=43},
-	hand2 = {x=50, y=44},
-	belly = {x=35, y=36},
-	back = {x=35, y=22},
-	head = {x=35, y=7},
+tiles["npc/humanoid_human_high_sun_paladin_rodmour.png"] = { base=64,
+	feet = {x=32, y=59},
+	hand1 = {x=12, y=35},
+	hand2 = {x=48, y=36},
+	belly = {x=32, y=29},
+	back = {x=32, y=15},
+	head = {x=32, y=3},
 }
 dolls.race_runic_golem = dolls.race_runic_golem or {}
 dolls.race_runic_golem.all = { base=64,
@@ -120,13 +110,13 @@ tiles["npc/humanoid_human_assassin_lord.png"] = { base=64,
 	back = {x=31, y=16},
 	head = {x=32, y=5},
 }
-tiles["npc/humanoid_human_celia.png"] = { base=64,
-	feet = {x=28, y=59},
-	hand1 = {x=15, y=16},
-	hand2 = {x=50, y=-20},
-	belly = {x=28, y=2},
-	back = {x=29, y=-16},
-	head = {x=29, y=-33},
+tiles["npc/humanoid_human_rogue.png"] = { base=64,
+	feet = {x=36, y=58},
+	hand1 = {x=8, y=36},
+	hand2 = {x=55, y=29},
+	back = {x=30, y=21},
+	belly = {x=30, y=31},
+	head = {x=27, y=7},
 }
 tiles["npc/humanoid_dwarf_norgan.png"] = { base=64,
 	feet = {x=41, y=57},
@@ -234,13 +224,13 @@ tiles["npc/canine_warg.png"] = { base=64,
 	belly = {x=12, y=32},
 	head = {x=33, y=13},
 }
-tiles["npc/humanoid_human_lumberjack.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=17, y=37},
-	hand2 = {x=44, y=37},
-	back = {x=32, y=17},
-	belly = {x=33, y=31},
-	head = {x=32, y=4},
+tiles["npc/humanoid_human_cryomancer.png"] = { base=64,
+	feet = {x=37, y=59},
+	hand1 = {x=22, y=6},
+	hand2 = {x=44, y=32},
+	belly = {x=36, y=28},
+	back = {x=35, y=16},
+	head = {x=34, y=5},
 }
 tiles["npc/acid_ant.png"] = { base=64,
 	feet = {x=36, y=57},
@@ -258,13 +248,20 @@ tiles["npc/humanoid_shalore_elven_corruptor.png"] = { base=64,
 	belly = {x=31, y=33},
 	head = {x=31, y=10},
 }
-tiles["npc/humanoid_human_townsfolk_farmer_maggot01_64.png"] = { base=64,
-	feet = {x=36, y=60},
-	hand1 = {x=11, y=31},
-	hand2 = {x=51, y=25},
-	back = {x=35, y=25},
-	belly = {x=36, y=37},
-	head = {x=34, y=11},
+tiles["npc/humanoid_human_townsfolk_village_idiot01_64.png"] = { base=64,
+	belly = {x=37, y=34},
+	feet = {x=35, y=58},
+	back = {x=33, y=24},
+	head = {x=32, y=8},
+}
+dolls.race_halfling = dolls.race_halfling or {}
+dolls.race_halfling.female = { base=64,
+	feet = {x=34, y=62},
+	hand1 = {x=12, y=38},
+	hand2 = {x=50, y=40},
+	belly = {x=34, y=36},
+	back = {x=32, y=24},
+	head = {x=32, y=12},
 }
 tiles["npc/humanoid_elf_elven_sun_mage.png"] = { base=64,
 	feet = {x=35, y=62},
@@ -274,13 +271,31 @@ tiles["npc/humanoid_elf_elven_sun_mage.png"] = { base=64,
 	back = {x=32, y=16},
 	head = {x=31, y=4},
 }
-tiles["npc/humanoid_human_townsfolk_battlescarred_veteran01_64.png"] = { base=64,
-	feet = {x=35, y=57},
-	hand1 = {x=16, y=39},
-	hand2 = {x=52, y=39},
-	back = {x=33, y=19},
-	belly = {x=33, y=30},
-	head = {x=32, y=7},
+dolls.race_halfling = dolls.race_halfling or {}
+dolls.race_halfling.male = { base=64,
+	feet = {x=34, y=61},
+	hand1 = {x=14, y=39},
+	hand2 = {x=50, y=39},
+	belly = {x=33, y=36},
+	back = {x=32, y=25},
+	head = {x=32, y=14},
+}
+tiles["npc/humanoid_human_storm_wyrmic.png"] = { base=64,
+	feet = {x=34, y=60},
+	hand1 = {x=15, y=32},
+	hand2 = {x=53, y=37},
+	back = {x=31, y=21},
+	belly = {x=31, y=31},
+	head = {x=27, y=9},
+}
+dolls.race_ghoul = dolls.race_ghoul or {}
+dolls.race_ghoul.all = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=20, y=37},
+	hand2 = {x=48, y=38},
+	back = {x=34, y=20},
+	belly = {x=33, y=38},
+	head = {x=33, y=8},
 }
 tiles["npc/animal_feline_snow_cat.png"] = { base=64,
 	head = {x=17, y=18},
@@ -293,14 +308,21 @@ tiles["npc/humanoid_human_master_alchemist.png"] = { base=64,
 	belly = {x=37, y=28},
 	head = {x=29, y=8},
 }
-dolls.race_halfling = dolls.race_halfling or {}
-dolls.race_halfling.female = { base=64,
-	feet = {x=34, y=62},
-	hand1 = {x=12, y=38},
-	hand2 = {x=50, y=40},
-	belly = {x=34, y=36},
-	back = {x=32, y=24},
-	head = {x=32, y=12},
+tiles["npc/humanoid_human_riala_shalarak.png"] = { base=64,
+	feet = {x=33, y=59},
+	hand1 = {x=17, y=7},
+	hand2 = {x=58, y=30},
+	back = {x=35, y=17},
+	belly = {x=34, y=27},
+	head = {x=33, y=5},
+}
+tiles["npc/humanoid_human_fire_wyrmic.png"] = { base=64,
+	feet = {x=31, y=60},
+	hand1 = {x=12, y=30},
+	hand2 = {x=49, y=36},
+	belly = {x=28, y=28},
+	back = {x=28, y=19},
+	head = {x=24, y=9},
 }
 tiles["npc/humanoid_shalore_elven_elite_warrior.png"] = { base=64,
 	feet = {x=33, y=62},
@@ -309,13 +331,13 @@ tiles["npc/humanoid_shalore_elven_elite_warrior.png"] = { base=64,
 	back = {x=31, y=15},
 	head = {x=32, y=6},
 }
-tiles["npc/humanoid_human_riala_shalarak.png"] = { base=64,
-	feet = {x=33, y=59},
-	hand1 = {x=17, y=7},
-	hand2 = {x=58, y=30},
-	back = {x=35, y=17},
-	belly = {x=34, y=27},
-	head = {x=33, y=5},
+tiles["npc/humanoid_orc_orc_assassin.png"] = { base=64,
+	feet = {x=36, y=60},
+	hand1 = {x=4, y=30},
+	hand2 = {x=40, y=3},
+	back = {x=33, y=20},
+	belly = {x=42, y=29},
+	head = {x=24, y=11},
 }
 tiles["npc/humanoid_yaech_slaver.png"] = { base=64,
 	feet = {x=46, y=58},
@@ -325,56 +347,6 @@ tiles["npc/humanoid_yaech_slaver.png"] = { base=64,
 	belly = {x=38, y=34},
 	head = {x=28, y=17},
 }
-dolls.race_halfling = dolls.race_halfling or {}
-dolls.race_halfling.male = { base=64,
-	feet = {x=34, y=61},
-	hand1 = {x=14, y=39},
-	hand2 = {x=50, y=39},
-	belly = {x=33, y=36},
-	back = {x=32, y=25},
-	head = {x=32, y=14},
-}
-tiles["npc/humanoid_orc_orc_greatmother.png"] = { base=64,
-	feet = {x=35, y=59},
-	hand1 = {x=4, y=-4},
-	hand2 = {x=58, y=2},
-	back = {x=32, y=-40},
-	belly = {x=30, y=-3},
-	head = {x=33, y=-55},
-}
-tiles["npc/humanoid_yeek_yeek_commoner_05.png"] = { base=64,
-	feet = {x=31, y=61},
-	hand1 = {x=12, y=22},
-	hand2 = {x=24, y=35},
-	back = {x=30, y=21},
-	belly = {x=32, y=34},
-	head = {x=30, y=12},
-}
-dolls.race_ghoul = dolls.race_ghoul or {}
-dolls.race_ghoul.all = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=20, y=37},
-	hand2 = {x=48, y=38},
-	back = {x=34, y=20},
-	belly = {x=33, y=38},
-	head = {x=33, y=8},
-}
-tiles["npc/humanoid_human_melnela.png"] = { base=64,
-	feet = {x=33, y=59},
-	hand1 = {x=17, y=8},
-	hand2 = {x=58, y=30},
-	back = {x=35, y=19},
-	belly = {x=35, y=31},
-	head = {x=33, y=6},
-}
-tiles["npc/humanoid_shalore_elven_blood_mage.png"] = { base=64,
-	feet = {x=32, y=59},
-	hand1 = {x=15, y=36},
-	hand2 = {x=46, y=36},
-	back = {x=30, y=17},
-	belly = {x=30, y=33},
-	head = {x=30, y=7},
-}
 dolls.race_human = dolls.race_human or {}
 dolls.race_human.female = { base=64,
 	feet = {x=33, y=60},
@@ -384,21 +356,30 @@ dolls.race_human.female = { base=64,
 	back = {x=33, y=16},
 	head = {x=32, y=3},
 }
-tiles["npc/humanoid_orc_orc_pyromancer.png"] = { base=64,
-	feet = {x=28, y=61},
-	hand1 = {x=6, y=30},
-	hand2 = {x=59, y=15},
-	back = {x=30, y=17},
-	belly = {x=28, y=30},
-	head = {x=40, y=5},
+tiles["npc/humanoid_orc_orc_mage_hunter.png"] = { base=64,
+	feet = {x=32, y=61},
+	hand1 = {x=6, y=34},
+	hand2 = {x=57, y=31},
+	back = {x=28, y=20},
+	belly = {x=29, y=32},
+	head = {x=27, y=8},
 }
-tiles["npc/humanoid_human_aluin_the_fallen.png"] = { base=64,
-	feet = {x=31, y=60},
-	hand1 = {x=18, y=36},
-	hand2 = {x=41, y=38},
-	belly = {x=29, y=29},
-	back = {x=29, y=18},
-	head = {x=28, y=5},
+tiles["npc/humanoid_yeek_yeek_commoner_03.png"] = { base=64,
+	feet = {x=32, y=59},
+	hand1 = {x=17, y=42},
+	hand2 = {x=50, y=44},
+	back = {x=32, y=24},
+	belly = {x=33, y=36},
+	head = {x=31, y=12},
+}
+dolls.race_dwarf = dolls.race_dwarf or {}
+dolls.race_dwarf.male = { base=64,
+	feet = {x=34, y=61},
+	back = {x=32, y=25},
+	hand2 = {x=55, y=39},
+	belly = {x=34, y=34},
+	hand1 = {x=10, y=39},
+	head = {x=32, y=10},
 }
 dolls.race_dwarf = dolls.race_dwarf or {}
 dolls.race_dwarf.female = { base=64,
@@ -409,29 +390,6 @@ dolls.race_dwarf.female = { base=64,
 	hand1 = {x=9, y=39},
 	head = {x=33, y=9},
 }
-tiles["npc/humanoid_orc_orc_fighter.png"] = { base=64,
-	feet = {x=30, y=60},
-	hand1 = {x=7, y=8},
-	hand2 = {x=57, y=39},
-	back = {x=35, y=20},
-	belly = {x=31, y=34},
-	head = {x=39, y=10},
-}
-tiles["npc/humanoid_human_lost_merchant.png"] = { base=64,
-	feet = {x=35, y=59},
-	belly = {x=35, y=36},
-	hand1 = {x=16, y=47},
-	back = {x=32, y=24},
-	head = {x=30, y=5},
-}
-tiles["npc/humanoid_elf_elven_archer.png"] = { base=64,
-	feet = {x=32, y=61},
-	hand1 = {x=13, y=32},
-	hand2 = {x=51, y=32},
-	belly = {x=32, y=28},
-	back = {x=32, y=15},
-	head = {x=32, y=5},
-}
 dolls.race_skeleton = dolls.race_skeleton or {}
 dolls.race_skeleton.all = { base=64,
 	feet = {x=32, y=62},
@@ -441,45 +399,109 @@ dolls.race_skeleton.all = { base=64,
 	back = {x=31, y=16},
 	head = {x=30, y=4},
 }
-tiles["npc/humanoid_orc_orc_blood_mage.png"] = { base=64,
-	feet = {x=34, y=59},
-	hand1 = {x=11, y=36},
-	hand2 = {x=57, y=37},
-	back = {x=33, y=17},
-	belly = {x=34, y=32},
+dolls.race_yeek = dolls.race_yeek or {}
+dolls.race_yeek.all = { base=64,
+	feet = {x=32, y=62},
+	hand1 = {x=16, y=39},
+	hand2 = {x=46, y=40},
+	belly = {x=32, y=36},
+	back = {x=31, y=26},
+	head = {x=31, y=12},
+}
+tiles["npc/humanoid_orc_orc_cryomancer.png"] = { base=64,
+	feet = {x=35, y=60},
+	hand1 = {x=5, y=14},
+	hand2 = {x=57, y=30},
+	back = {x=29, y=17},
+	belly = {x=36, y=31},
+	head = {x=23, y=7},
+}
+tiles["npc/humanoid_human_aluin_the_fallen.png"] = { base=64,
+	feet = {x=31, y=60},
+	hand1 = {x=18, y=36},
+	hand2 = {x=41, y=38},
+	belly = {x=29, y=29},
+	back = {x=29, y=18},
+	head = {x=28, y=5},
+}
+tiles["npc/humanoid_human_tempest.png"] = { base=64,
+	feet = {x=26, y=59},
+	hand1 = {x=19, y=31},
+	hand2 = {x=41, y=6},
+	back = {x=27, y=16},
+	belly = {x=26, y=30},
+	head = {x=28, y=4},
+}
+tiles["npc/humanoid_orc_orc_soldier.png"] = { base=64,
+	feet = {x=36, y=62},
+	hand1 = {x=9, y=39},
+	hand2 = {x=58, y=36},
+	back = {x=29, y=21},
+	belly = {x=34, y=34},
+	head = {x=25, y=9},
+}
+tiles["npc/humanoid_human_linaniil_supreme_archmage.png"] = { base=64,
+	feet = {x=38, y=60},
+	hand1 = {x=10, y=7},
+	hand2 = {x=49, y=29},
+	belly = {x=37, y=19},
+	back = {x=35, y=1},
+	head = {x=31, y=-13},
+}
+tiles["npc/humanoid_elf_elven_archer.png"] = { base=64,
+	feet = {x=32, y=61},
+	hand1 = {x=13, y=32},
+	hand2 = {x=51, y=32},
+	belly = {x=32, y=28},
+	back = {x=32, y=15},
 	head = {x=32, y=5},
 }
-tiles["npc/humanoid_human_fire_wyrmic.png"] = { base=64,
+tiles["npc/humanoid_human_trickster.png"] = { base=64,
+	feet = {x=36, y=60},
+	back = {x=35, y=17},
+	hand2 = {x=5, y=32},
+	belly = {x=37, y=29},
+	head = {x=30, y=6},
+}
+tiles["npc/humanoid_orc_orc_master_assassin.png"] = { base=64,
 	feet = {x=31, y=60},
-	hand1 = {x=12, y=30},
-	hand2 = {x=49, y=36},
-	belly = {x=28, y=28},
-	back = {x=28, y=19},
-	head = {x=24, y=9},
+	hand1 = {x=4, y=39},
+	hand2 = {x=59, y=32},
+	back = {x=29, y=18},
+	belly = {x=30, y=30},
+	head = {x=28, y=8},
 }
-tiles["npc/humanoid_human_enthralled_slave.png"] = { base=64,
-	feet = {x=33, y=58},
-	hand1 = {x=16, y=35},
-	hand2 = {x=47, y=36},
-	belly = {x=32, y=29},
-	back = {x=32, y=18},
-	head = {x=31, y=5},
+tiles["npc/humanoid_human_derth_guard.png"] = { base=64,
+	feet = {x=37, y=59},
+	hand1 = {x=10, y=18},
+	hand2 = {x=48, y=33},
+	belly = {x=36, y=29},
+	back = {x=34, y=17},
+	head = {x=34, y=5},
 }
-tiles["npc/humanoid_yeek_yeek_commoner_04.png"] = { base=64,
-	feet = {x=33, y=60},
-	hand1 = {x=17, y=40},
-	hand2 = {x=50, y=44},
-	back = {x=32, y=25},
-	belly = {x=32, y=36},
-	head = {x=32, y=8},
+tiles["npc/humanoid_shalore_elven_cultist.png"] = { base=64,
+	feet = {x=29, y=60},
+	hand1 = {x=8, y=9},
+	hand2 = {x=52, y=9},
+	back = {x=30, y=16},
+	belly = {x=31, y=28},
+	head = {x=31, y=6},
 }
-tiles["npc/humanoid_orc_orc_mother.png"] = { base=64,
-	feet = {x=33, y=59},
-	hand1 = {x=10, y=37},
-	hand2 = {x=53, y=35},
-	back = {x=30, y=9},
-	belly = {x=30, y=31},
-	head = {x=28, y=-6},
+tiles["npc/humanoid_human_spectator03.png"] = { base=64,
+	feet = {x=32, y=61},
+	hand1 = {x=16, y=38},
+	hand2 = {x=44, y=38},
+	back = {x=30, y=19},
+	belly = {x=30, y=30},
+	head = {x=30, y=4},
+}
+tiles["npc/humanoid_orc_orc_archer.png"] = { base=64,
+	feet = {x=30, y=60},
+	hand1 = {x=20, y=29},
+	hand2 = {x=56, y=30},
+	back = {x=30, y=20},
+	belly = {x=31, y=34},
+	head = {x=31, y=10},
 }
 tiles["npc/humanoid_yeek_yeek_commoner_06.png"] = { base=64,
 	feet = {x=30, y=61},
@@ -489,22 +511,6 @@ tiles["npc/humanoid_yeek_yeek_commoner_06.png"] = { base=64,
 	belly = {x=31, y=36},
 	head = {x=30, y=13},
 }
-tiles["npc/humanoid_human_thief.png"] = { base=64,
-	feet = {x=27, y=60},
-	hand1 = {x=8, y=27},
-	hand2 = {x=43, y=30},
-	back = {x=24, y=19},
-	belly = {x=27, y=30},
-	head = {x=18, y=7},
-}
-tiles["npc/humanoid_human_hexer.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=26, y=25},
-	hand2 = {x=37, y=25},
-	belly = {x=32, y=37},
-	back = {x=31, y=16},
-	head = {x=31, y=3},
-}
 tiles["npc/humanoid_halfling_sm_halfling.png"] = { base=64,
 	feet = {x=33, y=61},
 	hand1 = {x=10, y=14},
@@ -513,6 +519,22 @@ tiles["npc/humanoid_halfling_sm_halfling.png"] = { base=64,
 	back = {x=30, y=23},
 	head = {x=31, y=7},
 }
+tiles["npc/humanoid_orc_orc_master_wyrmic.png"] = { base=64,
+	feet = {x=39, y=60},
+	hand1 = {x=16, y=40},
+	hand2 = {x=58, y=36},
+	back = {x=33, y=21},
+	belly = {x=36, y=32},
+	head = {x=30, y=13},
+}
+tiles["npc/humanoid_human_reaver.png"] = { base=64,
+	feet = {x=34, y=59},
+	hand1 = {x=8, y=37},
+	hand2 = {x=52, y=31},
+	back = {x=29, y=17},
+	belly = {x=29, y=29},
+	head = {x=28, y=6},
+}
 tiles["npc/humanoid_elf_star_crusader.png"] = { base=64,
 	feet = {x=34, y=60},
 	hand1 = {x=11, y=30},
@@ -529,20 +551,20 @@ tiles["npc/humanoid_elf_high_chronomancer_zemekkys.png"] = { base=64,
 	back = {x=32, y=19},
 	head = {x=30, y=6},
 }
-tiles["npc/humanoid_orc_orc_master_wyrmic.png"] = { base=64,
-	feet = {x=39, y=60},
-	hand1 = {x=16, y=40},
-	hand2 = {x=58, y=36},
-	back = {x=33, y=21},
-	belly = {x=36, y=32},
-	head = {x=30, y=13},
+tiles["npc/humanoid_yaech_yaech_psion.png"] = { base=64,
+	feet = {x=5, y=58},
+	hand1 = {x=55, y=27},
+	hand2 = {x=42, y=32},
+	back = {x=23, y=31},
+	belly = {x=25, y=40},
+	head = {x=33, y=15},
 }
-tiles["npc/humanoid_human_reaver.png"] = { base=64,
-	feet = {x=34, y=59},
-	hand1 = {x=8, y=37},
-	hand2 = {x=52, y=31},
-	back = {x=29, y=17},
-	belly = {x=29, y=29},
+tiles["npc/humanoid_orc_orc_corruptor.png"] = { base=64,
+	feet = {x=35, y=61},
+	hand1 = {x=15, y=39},
+	hand2 = {x=51, y=37},
+	back = {x=31, y=17},
+	belly = {x=34, y=36},
 	head = {x=28, y=6},
 }
 tiles["npc/humanoid_halfling_halfling_gardener.png"] = { base=64,
@@ -553,13 +575,13 @@ tiles["npc/humanoid_halfling_halfling_gardener.png"] = { base=64,
 	back = {x=31, y=22},
 	head = {x=29, y=8},
 }
-tiles["npc/humanoid_human_argoniel.png"] = { base=64,
-	feet = {x=30, y=59},
-	hand1 = {x=9, y=2},
-	hand2 = {x=57, y=9},
-	belly = {x=32, y=22},
-	back = {x=32, y=10},
-	head = {x=32, y=-3},
+tiles["npc/humanoid_human_cutpurse.png"] = { base=64,
+	feet = {x=36, y=59},
+	hand1 = {x=9, y=34},
+	hand2 = {x=46, y=34},
+	belly = {x=30, y=29},
+	back = {x=29, y=18},
+	head = {x=28, y=7},
 }
 tiles["npc/humanoid_orc_fiery_orc_wyrmic.png"] = { base=64,
 	feet = {x=33, y=60},
@@ -576,13 +598,13 @@ tiles["npc/humanoid_orc_ukruk_the_fierce.png"] = { base=64,
 	back = {x=28, y=17},
 	head = {x=25, y=8},
 }
-tiles["npc/humanoid_yaech_yaech_psion.png"] = { base=64,
-	feet = {x=5, y=58},
-	hand1 = {x=55, y=27},
-	hand2 = {x=42, y=32},
-	back = {x=23, y=31},
-	belly = {x=25, y=40},
-	head = {x=33, y=15},
+tiles["npc/humanoid_human_rej_arkatis.png"] = { base=64,
+	feet = {x=34, y=59},
+	hand1 = {x=24, y=17},
+	hand2 = {x=38, y=19},
+	back = {x=33, y=15},
+	belly = {x=33, y=26},
+	head = {x=32, y=4},
 }
 tiles["npc/humanoid_orc_young_orc.png"] = { base=64,
 	feet = {x=35, y=60},
@@ -592,29 +614,29 @@ tiles["npc/humanoid_orc_young_orc.png"] = { base=64,
 	belly = {x=35, y=32},
 	head = {x=30, y=8},
 }
-tiles["npc/humanoid_orc_orc_corruptor.png"] = { base=64,
-	feet = {x=35, y=61},
-	hand1 = {x=15, y=39},
-	hand2 = {x=51, y=37},
-	back = {x=31, y=17},
-	belly = {x=34, y=36},
-	head = {x=28, y=6},
+tiles["npc/humanoid_elenulach_thief.png"] = { base=64,
+	feet = {x=30, y=60},
+	hand1 = {x=18, y=37},
+	hand2 = {x=42, y=37},
+	belly = {x=30, y=32},
+	back = {x=30, y=17},
+	head = {x=30, y=6},
 }
-tiles["npc/humanoid_human_townsfolk_blubbering_idiot01_64.png"] = { base=64,
-	feet = {x=33, y=59},
-	hand1 = {x=19, y=41},
-	hand2 = {x=47, y=40},
-	back = {x=31, y=19},
-	belly = {x=31, y=33},
-	head = {x=29, y=7},
+tiles["npc/humanoid_human_lumberjack.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=17, y=37},
+	hand2 = {x=44, y=37},
+	back = {x=32, y=17},
+	belly = {x=33, y=31},
+	head = {x=32, y=4},
 }
-tiles["npc/humanoid_halfling_protector_myssil.png"] = { base=64,
-	feet = {x=32, y=60},
-	hand1 = {x=16, y=43},
-	hand2 = {x=45, y=39},
-	belly = {x=31, y=34},
-	back = {x=30, y=22},
-	head = {x=30, y=7},
+tiles["npc/humanoid_human_pyromancer.png"] = { base=64,
+	feet = {x=35, y=59},
+	hand1 = {x=19, y=7},
+	hand2 = {x=41, y=32},
+	back = {x=32, y=17},
+	belly = {x=34, y=29},
+	head = {x=32, y=4},
 }
 tiles["npc/humanoid_dwarf_dwarven_guard.png"] = { base=64,
 	feet = {x=30, y=59},
@@ -624,12 +646,13 @@ tiles["npc/humanoid_dwarf_dwarven_guard.png"] = { base=64,
 	belly = {x=29, y=36},
 	head = {x=28, y=6},
 }
-tiles["npc/humanoid_naga_naga_tidewarden.png"] = { base=64,
-	feet = {x=32, y=61},
-	belly = {x=32, y=9},
-	hand1 = {x=31, y=12},
-	back = {x=32, y=-3},
-	head = {x=34, y=-15},
+tiles["npc/humanoid_human_ice_wyrmic.png"] = { base=64,
+	feet = {x=30, y=61},
+	back = {x=32, y=19},
+	hand2 = {x=58, y=17},
+	belly = {x=32, y=33},
+	hand1 = {x=9, y=36},
+	head = {x=36, y=11},
 }
 tiles["npc/humanoid_yaech_yaech_mindslayer.png"] = { base=64,
 	feet = {x=58, y=58},
@@ -646,29 +669,29 @@ tiles["npc/humanoid_human_townsfolk_meanlooking_mercenary01_64.png"] = { base=64
 	back = {x=36, y=19},
 	head = {x=33, y=6},
 }
-tiles["npc/humanoid_human_rogue.png"] = { base=64,
-	feet = {x=36, y=58},
-	hand1 = {x=8, y=36},
-	hand2 = {x=55, y=29},
-	back = {x=30, y=21},
-	belly = {x=30, y=31},
-	head = {x=27, y=7},
+tiles["npc/humanoid_orc_brotoq_the_reaver.png"] = { base=64,
+	feet = {x=38, y=59},
+	hand1 = {x=14, y=31},
+	hand2 = {x=58, y=33},
+	back = {x=38, y=15},
+	belly = {x=38, y=26},
+	head = {x=35, y=3},
 }
-tiles["npc/humanoid_human_human_farmer.png"] = { base=64,
-	feet = {x=32, y=60},
-	hand1 = {x=11, y=20},
-	hand2 = {x=44, y=38},
-	belly = {x=31, y=31},
-	back = {x=29, y=18},
-	head = {x=29, y=5},
+tiles["npc/humanoid_yeek_yeek_commoner_05.png"] = { base=64,
+	feet = {x=31, y=61},
+	hand1 = {x=12, y=22},
+	hand2 = {x=24, y=35},
+	back = {x=30, y=21},
+	belly = {x=32, y=34},
+	head = {x=30, y=12},
 }
-tiles["npc/humanoid_yaech_yaech_hunter.png"] = { base=64,
-	feet = {x=6, y=7},
-	hand1 = {x=33, y=50},
-	hand2 = {x=59, y=37},
-	back = {x=34, y=29},
-	belly = {x=23, y=29},
-	head = {x=46, y=19},
+tiles["npc/humanoid_shalore_shalore_rune_master.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=17, y=34},
+	hand2 = {x=48, y=34},
+	back = {x=32, y=14},
+	belly = {x=33, y=30},
+	head = {x=32, y=4},
 }
 tiles["npc/humanoid_thalore_thalore_hunter.png"] = { base=64,
 	feet = {x=31, y=59},
@@ -686,29 +709,29 @@ tiles["npc/humanoid_orc_rak_shor_cultist.png"] = { base=64,
 	belly = {x=30, y=35},
 	head = {x=29, y=8},
 }
-tiles["npc/humanoid_orc_orc_grand_master_assassin.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=4, y=32},
-	hand2 = {x=60, y=39},
-	back = {x=35, y=18},
-	belly = {x=34, y=30},
-	head = {x=37, y=7},
+tiles["npc/humanoid_halfling_halfling_slinger.png"] = { base=64,
+	feet = {x=27, y=57},
+	hand1 = {x=16, y=15},
+	hand2 = {x=55, y=30},
+	belly = {x=31, y=42},
+	back = {x=33, y=32},
+	head = {x=36, y=19},
 }
-tiles["npc/humanoid_human_tempest.png"] = { base=64,
-	feet = {x=26, y=59},
-	hand1 = {x=19, y=31},
-	hand2 = {x=41, y=6},
-	back = {x=27, y=16},
-	belly = {x=26, y=30},
-	head = {x=28, y=4},
+tiles["npc/humanoid_human_slinger.png"] = { base=64,
+	feet = {x=38, y=59},
+	hand1 = {x=10, y=18},
+	hand2 = {x=50, y=36},
+	back = {x=34, y=17},
+	belly = {x=37, y=27},
+	head = {x=34, y=5},
 }
-tiles["npc/humanoid_shalore_shalore_rune_master.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=17, y=34},
-	hand2 = {x=48, y=34},
-	back = {x=32, y=14},
-	belly = {x=33, y=30},
-	head = {x=32, y=4},
+tiles["npc/humanoid_human_human_guard.png"] = { base=64,
+	feet = {x=33, y=60},
+	hand1 = {x=19, y=29},
+	hand2 = {x=46, y=25},
+	belly = {x=31, y=30},
+	back = {x=30, y=17},
+	head = {x=28, y=5},
 }
 tiles["npc/humanoid_elf_fillarel_aldaren.png"] = { base=64,
 	feet = {x=25, y=59},
@@ -718,22 +741,6 @@ tiles["npc/humanoid_elf_fillarel_aldaren.png"] = { base=64,
 	back = {x=24, y=3},
 	head = {x=23, y=-12},
 }
-tiles["npc/humanoid_thalore_thalore_wilder.png"] = { base=64,
-	feet = {x=27, y=59},
-	hand1 = {x=11, y=31},
-	hand2 = {x=44, y=30},
-	back = {x=29, y=11},
-	belly = {x=28, y=23},
-	head = {x=29, y=-1},
-}
-tiles["npc/humanoid_human_shady_cornac_man.png"] = { base=64,
-	feet = {x=35, y=60},
-	hand1 = {x=19, y=35},
-	hand2 = {x=49, y=35},
-	back = {x=32, y=17},
-	belly = {x=33, y=29},
-	head = {x=29, y=4},
-}
 tiles["npc/humanoid_orc_grushnak__battlemaster_of_the_pride.png"] = { base=64,
 	feet = {x=30, y=61},
 	hand1 = {x=10, y=40},
@@ -742,44 +749,44 @@ tiles["npc/humanoid_orc_grushnak__battlemaster_of_the_pride.png"] = { base=64,
 	belly = {x=30, y=32},
 	head = {x=30, y=11},
 }
-tiles["npc/humanoid_orc_orc_mage_hunter.png"] = { base=64,
-	feet = {x=32, y=61},
-	hand1 = {x=6, y=34},
-	hand2 = {x=57, y=31},
-	back = {x=28, y=20},
-	belly = {x=29, y=32},
-	head = {x=27, y=8},
+tiles["npc/humanoid_yaech_yaech_hunter.png"] = { base=64,
+	feet = {x=6, y=7},
+	hand1 = {x=33, y=50},
+	hand2 = {x=59, y=37},
+	back = {x=34, y=29},
+	belly = {x=23, y=29},
+	head = {x=46, y=19},
 }
-tiles["npc/humanoid_elenulach_thief.png"] = { base=64,
-	feet = {x=30, y=60},
-	hand1 = {x=18, y=37},
-	hand2 = {x=42, y=37},
-	belly = {x=30, y=32},
-	back = {x=30, y=17},
-	head = {x=30, y=6},
+tiles["npc/humanoid_human_melnela.png"] = { base=64,
+	feet = {x=33, y=59},
+	hand1 = {x=17, y=8},
+	hand2 = {x=58, y=30},
+	back = {x=35, y=19},
+	belly = {x=35, y=31},
+	head = {x=33, y=6},
 }
-tiles["npc/humanoid_naga_naga_tidecaller.png"] = { base=64,
+tiles["npc/humanoid_yeek_yeek_commoner_01.png"] = { base=64,
 	feet = {x=33, y=61},
-	hand1 = {x=12, y=15},
-	hand2 = {x=47, y=-14},
-	back = {x=27, y=-6},
-	belly = {x=30, y=7},
-	head = {x=26, y=-17},
+	hand1 = {x=14, y=39},
+	hand2 = {x=48, y=38},
+	back = {x=30, y=19},
+	belly = {x=33, y=32},
+	head = {x=30, y=10},
 }
-tiles["npc/humanoid_halfling_halfling_slinger.png"] = { base=64,
-	feet = {x=27, y=57},
-	hand1 = {x=16, y=15},
-	hand2 = {x=55, y=30},
-	belly = {x=31, y=42},
-	back = {x=33, y=32},
-	head = {x=36, y=19},
+tiles["npc/humanoid_human_spectator.png"] = { base=64,
+	feet = {x=37, y=59},
+	belly = {x=36, y=29},
+	hand1 = {x=50, y=37},
+	back = {x=35, y=17},
+	head = {x=34, y=5},
 }
-tiles["npc/humanoid_shalore_elven_warrior.png"] = { base=64,
-	feet = {x=32, y=61},
-	belly = {x=31, y=26},
-	hand1 = {x=13, y=31},
-	back = {x=31, y=14},
-	head = {x=31, y=5},
+tiles["npc/humanoid_naga_naga_tidecaller.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=12, y=15},
+	hand2 = {x=47, y=-14},
+	back = {x=27, y=-6},
+	belly = {x=30, y=7},
+	head = {x=26, y=-17},
 }
 tiles["npc/humanoid_yeek_yeek_summoner.png"] = { base=64,
 	feet = {x=33, y=61},
@@ -797,30 +804,37 @@ tiles["npc/humanoid_thalore_ziguranth_summoner.png"] = { base=64,
 	belly = {x=33, y=26},
 	head = {x=32, y=4},
 }
-dolls.race_yeek = dolls.race_yeek or {}
-dolls.race_yeek.all = { base=64,
-	feet = {x=32, y=62},
-	hand1 = {x=16, y=39},
-	hand2 = {x=46, y=40},
-	belly = {x=32, y=36},
-	back = {x=31, y=26},
-	head = {x=31, y=12},
+tiles["npc/humanoid_orc_orc_warrior.png"] = { base=64,
+	feet = {x=35, y=61},
+	hand1 = {x=8, y=38},
+	hand2 = {x=57, y=35},
+	back = {x=29, y=20},
+	belly = {x=34, y=34},
+	head = {x=25, y=9},
 }
-tiles["npc/humanoid_orc_orc_necromancer.png"] = { base=64,
-	feet = {x=32, y=59},
-	hand1 = {x=7, y=39},
-	hand2 = {x=53, y=36},
-	back = {x=28, y=17},
-	belly = {x=30, y=32},
-	head = {x=29, y=6},
+tiles["npc/humanoid_thalore_thalore_wilder.png"] = { base=64,
+	feet = {x=27, y=59},
+	hand1 = {x=11, y=31},
+	hand2 = {x=44, y=30},
+	back = {x=29, y=11},
+	belly = {x=28, y=23},
+	head = {x=29, y=-1},
 }
-tiles["npc/humanoid_orc_orc_cryomancer.png"] = { base=64,
-	feet = {x=35, y=60},
-	hand1 = {x=5, y=14},
-	hand2 = {x=57, y=30},
-	back = {x=29, y=17},
-	belly = {x=36, y=31},
-	head = {x=23, y=7},
+tiles["npc/humanoid_orc_orc_pyromancer.png"] = { base=64,
+	feet = {x=28, y=61},
+	hand1 = {x=6, y=30},
+	hand2 = {x=59, y=15},
+	back = {x=30, y=17},
+	belly = {x=28, y=30},
+	head = {x=40, y=5},
+}
+tiles["npc/humanoid_orc_orc_fighter.png"] = { base=64,
+	feet = {x=30, y=60},
+	hand1 = {x=7, y=8},
+	hand2 = {x=57, y=39},
+	back = {x=35, y=20},
+	belly = {x=31, y=34},
+	head = {x=39, y=10},
 }
 tiles["npc/humanoid_naga_lady_zoisla_the_tidebringer.png"] = { base=64,
 	feet = {x=36, y=61},
@@ -862,21 +876,20 @@ tiles["npc/humanoid_human_townsfolk_singing_happy_drunk01_64.png"] = { base=64,
 	belly = {x=30, y=31},
 	head = {x=23, y=10},
 }
-tiles["npc/humanoid_human_fryjia_loren.png"] = { base=64,
-	feet = {x=32, y=58},
-	hand1 = {x=17, y=31},
-	hand2 = {x=45, y=41},
-	belly = {x=29, y=32},
-	back = {x=29, y=21},
-	head = {x=29, y=8},
+tiles["npc/humanoid_human_human_farmer.png"] = { base=64,
+	feet = {x=32, y=60},
+	hand1 = {x=11, y=20},
+	hand2 = {x=44, y=38},
+	belly = {x=31, y=31},
+	back = {x=29, y=18},
+	head = {x=29, y=5},
 }
-tiles["npc/humanoid_orc_orc_soldier.png"] = { base=64,
-	feet = {x=36, y=62},
-	hand1 = {x=9, y=39},
-	hand2 = {x=58, y=36},
-	back = {x=29, y=21},
-	belly = {x=34, y=34},
-	head = {x=25, y=9},
+tiles["npc/humanoid_human_lost_merchant.png"] = { base=64,
+	feet = {x=35, y=59},
+	belly = {x=35, y=36},
+	hand1 = {x=16, y=47},
+	back = {x=32, y=24},
+	head = {x=30, y=5},
 }
 dolls.race_orc = dolls.race_orc or {}
 dolls.race_orc.all = { base=64,
@@ -895,37 +908,36 @@ tiles["npc/humanoid_orc_krogar.png"] = { base=64,
 	belly = {x=29, y=35},
 	head = {x=30, y=11},
 }
-tiles["npc/humanoid_orc_orc_grand_summoner.png"] = { base=64,
-	feet = {x=29, y=60},
-	hand1 = {x=9, y=8},
-	hand2 = {x=55, y=35},
-	back = {x=34, y=18},
-	belly = {x=32, y=30},
-	head = {x=36, y=7},
+tiles["npc/humanoid_halfling_halfling_citizen.png"] = { base=64,
+	feet = {x=31, y=58},
+	hand1 = {x=13, y=38},
+	hand2 = {x=48, y=41},
+	belly = {x=31, y=33},
+	back = {x=30, y=22},
+	head = {x=30, y=8},
 }
-tiles["npc/humanoid_human_derth_guard.png"] = { base=64,
-	feet = {x=37, y=59},
-	hand1 = {x=10, y=18},
-	hand2 = {x=48, y=33},
-	belly = {x=36, y=29},
-	back = {x=34, y=17},
-	head = {x=34, y=5},
+tiles["npc/humanoid_naga_naga_tidewarden.png"] = { base=64,
+	feet = {x=32, y=61},
+	belly = {x=32, y=9},
+	hand1 = {x=31, y=12},
+	back = {x=32, y=-3},
+	head = {x=34, y=-15},
 }
-tiles["npc/humanoid_orc_orc_archer.png"] = { base=64,
-	feet = {x=30, y=60},
-	hand1 = {x=20, y=29},
-	hand2 = {x=56, y=30},
-	back = {x=30, y=20},
-	belly = {x=31, y=34},
-	head = {x=31, y=10},
+tiles["npc/humanoid_orc_orc_greatmother.png"] = { base=64,
+	feet = {x=35, y=59},
+	hand1 = {x=4, y=-4},
+	hand2 = {x=58, y=2},
+	back = {x=32, y=-40},
+	belly = {x=30, y=-3},
+	head = {x=33, y=-55},
 }
-tiles["npc/humanoid_orc_orc_warrior.png"] = { base=64,
-	feet = {x=35, y=61},
-	hand1 = {x=8, y=38},
-	hand2 = {x=57, y=35},
-	back = {x=29, y=20},
-	belly = {x=34, y=34},
-	head = {x=25, y=9},
+tiles["npc/humanoid_human_arcane_blade.png"] = { base=64,
+	feet = {x=26, y=61},
+	hand1 = {x=17, y=3},
+	hand2 = {x=38, y=35},
+	belly = {x=27, y=29},
+	back = {x=27, y=22},
+	head = {x=29, y=13},
 }
 tiles["npc/humanoid_shalore_rhaloren_inquisitor.png"] = { base=64,
 	feet = {x=33, y=61},
@@ -959,13 +971,13 @@ tiles["npc/humanoid_human_meranas__herald_of_angolwen.png"] = { base=64,
 	belly = {x=35, y=31},
 	head = {x=31, y=4},
 }
-tiles["npc/humanoid_human_cutpurse.png"] = { base=64,
-	feet = {x=36, y=59},
-	hand1 = {x=9, y=34},
-	hand2 = {x=46, y=34},
-	belly = {x=30, y=29},
-	back = {x=29, y=18},
-	head = {x=28, y=7},
+tiles["npc/humanoid_orc_orc_elite_fighter.png"] = { base=64,
+	feet = {x=31, y=60},
+	hand1 = {x=11, y=37},
+	hand2 = {x=53, y=29},
+	back = {x=29, y=16},
+	belly = {x=31, y=33},
+	head = {x=29, y=4},
 }
 tiles["npc/humanoid_orc_kra_tor_the_gluttonous.png"] = { base=64,
 	feet = {x=38, y=57},
@@ -975,21 +987,21 @@ tiles["npc/humanoid_orc_kra_tor_the_gluttonous.png"] = { base=64,
 	belly = {x=29, y=27},
 	head = {x=23, y=1},
 }
-tiles["npc/humanoid_orc_orc_elite_fighter.png"] = { base=64,
-	feet = {x=31, y=60},
-	hand1 = {x=11, y=37},
-	hand2 = {x=53, y=29},
-	back = {x=29, y=16},
-	belly = {x=31, y=33},
-	head = {x=29, y=4},
+tiles["npc/humanoid_halfling_halfling_guard.png"] = { base=64,
+	feet = {x=38, y=59},
+	hand1 = {x=8, y=28},
+	hand2 = {x=54, y=43},
+	belly = {x=36, y=36},
+	back = {x=33, y=24},
+	head = {x=30, y=10},
 }
-tiles["npc/humanoid_human_bandit.png"] = { base=64,
-	feet = {x=39, y=56},
-	hand1 = {x=8, y=40},
-	hand2 = {x=51, y=26},
-	belly = {x=33, y=28},
-	back = {x=30, y=16},
-	head = {x=29, y=5},
+tiles["npc/humanoid_human_necromancer.png"] = { base=64,
+	feet = {x=27, y=61},
+	hand1 = {x=18, y=16},
+	hand2 = {x=40, y=41},
+	back = {x=34, y=17},
+	belly = {x=32, y=32},
+	head = {x=36, y=3},
 }
 tiles["npc/humanoid_human_townsfolk_filthy_street_urchin01_64.png"] = { base=64,
 	feet = {x=35, y=59},
@@ -1015,29 +1027,29 @@ tiles["npc/humanoid_human_urkis__the_high_tempest.png"] = { base=64,
 	belly = {x=33, y=24},
 	head = {x=33, y=-4},
 }
-tiles["npc/humanoid_human_high_slinger.png"] = { base=64,
-	feet = {x=29, y=59},
-	hand1 = {x=15, y=36},
-	hand2 = {x=57, y=18},
-	belly = {x=30, y=27},
-	back = {x=31, y=15},
-	head = {x=33, y=6},
+tiles["npc/humanoid_halfling_protector_myssil.png"] = { base=64,
+	feet = {x=32, y=60},
+	hand1 = {x=16, y=43},
+	hand2 = {x=45, y=39},
+	belly = {x=31, y=34},
+	back = {x=30, y=22},
+	head = {x=30, y=7},
 }
-tiles["npc/humanoid_dwarf_dwarven_earthwarden.png"] = { base=64,
-	feet = {x=34, y=58},
-	back = {x=36, y=22},
-	hand2 = {x=51, y=36},
-	belly = {x=35, y=37},
-	hand1 = {x=20, y=37},
-	head = {x=35, y=7},
+tiles["npc/humanoid_human_bandit.png"] = { base=64,
+	feet = {x=39, y=56},
+	hand1 = {x=8, y=40},
+	hand2 = {x=51, y=26},
+	belly = {x=33, y=28},
+	back = {x=30, y=16},
+	head = {x=29, y=5},
 }
-tiles["npc/humanoid_yeek_yeek_commoner_08.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=14, y=39},
-	hand2 = {x=48, y=36},
-	back = {x=31, y=21},
-	belly = {x=33, y=34},
-	head = {x=31, y=11},
+tiles["npc/humanoid_yaech_blood_master.png"] = { base=64,
+	feet = {x=22, y=60},
+	hand1 = {x=6, y=17},
+	hand2 = {x=50, y=27},
+	back = {x=29, y=25},
+	belly = {x=31, y=32},
+	head = {x=36, y=14},
 }
 tiles["npc/humanoid_dwarf_dwarven_summoner.png"] = { base=64,
 	feet = {x=38, y=59},
@@ -1047,29 +1059,29 @@ tiles["npc/humanoid_dwarf_dwarven_summoner.png"] = { base=64,
 	belly = {x=39, y=41},
 	head = {x=39, y=7},
 }
-tiles["npc/humanoid_orc_brotoq_the_reaver.png"] = { base=64,
-	feet = {x=38, y=59},
-	hand1 = {x=14, y=31},
-	hand2 = {x=58, y=33},
-	back = {x=38, y=15},
-	belly = {x=38, y=26},
-	head = {x=35, y=3},
+tiles["npc/humanoid_human_sand_wyrmic.png"] = { base=64,
+	feet = {x=29, y=60},
+	hand1 = {x=10, y=38},
+	hand2 = {x=58, y=17},
+	back = {x=32, y=19},
+	belly = {x=31, y=30},
+	head = {x=37, y=8},
 }
 tiles["npc/humanoid_human_townsfolk_boilcovered_wretch01_64.png"] = { base=64,
 	feet = {x=35, y=58},
 	hand1 = {x=19, y=38},
-	hand2 = {x=50, y=39},
-	back = {x=34, y=21},
-	belly = {x=34, y=34},
-	head = {x=28, y=10},
-}
-tiles["npc/humanoid_yaech_blood_master.png"] = { base=64,
-	feet = {x=22, y=60},
-	hand1 = {x=6, y=17},
-	hand2 = {x=50, y=27},
-	back = {x=29, y=25},
-	belly = {x=31, y=32},
-	head = {x=36, y=14},
+	hand2 = {x=50, y=39},
+	back = {x=34, y=21},
+	belly = {x=34, y=34},
+	head = {x=28, y=10},
+}
+tiles["npc/humanoid_dwarf_dwarven_earthwarden.png"] = { base=64,
+	feet = {x=34, y=58},
+	back = {x=36, y=22},
+	hand2 = {x=51, y=36},
+	belly = {x=35, y=37},
+	hand1 = {x=20, y=37},
+	head = {x=35, y=7},
 }
 tiles["npc/humanoid_orc_orc_high_cryomancer.png"] = { base=64,
 	feet = {x=36, y=60},
@@ -1079,13 +1091,13 @@ tiles["npc/humanoid_orc_orc_high_cryomancer.png"] = { base=64,
 	belly = {x=37, y=32},
 	head = {x=26, y=8},
 }
-tiles["npc/humanoid_human_sand_wyrmic.png"] = { base=64,
-	feet = {x=29, y=60},
-	hand1 = {x=10, y=38},
-	hand2 = {x=58, y=17},
-	back = {x=32, y=19},
-	belly = {x=31, y=30},
-	head = {x=37, y=8},
+tiles["npc/humanoid_human_hexer.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=26, y=25},
+	hand2 = {x=37, y=25},
+	belly = {x=32, y=37},
+	back = {x=31, y=16},
+	head = {x=31, y=3},
 }
 tiles["npc/humanoid_orc_orc_elite_berserker.png"] = { base=64,
 	feet = {x=34, y=61},
@@ -1095,21 +1107,21 @@ tiles["npc/humanoid_orc_orc_elite_berserker.png"] = { base=64,
 	belly = {x=30, y=32},
 	head = {x=33, y=7},
 }
-tiles["npc/humanoid_yeek_yeek_psionic.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=31, y=38},
-	hand2 = {x=33, y=38},
-	back = {x=32, y=23},
-	belly = {x=32, y=34},
-	head = {x=32, y=12},
+tiles["npc/humanoid_human_enthralled_slave.png"] = { base=64,
+	feet = {x=33, y=58},
+	hand1 = {x=16, y=35},
+	hand2 = {x=47, y=36},
+	belly = {x=32, y=29},
+	back = {x=32, y=18},
+	head = {x=31, y=5},
 }
-tiles["npc/humanoid_human_arcane_blade.png"] = { base=64,
-	feet = {x=26, y=61},
-	hand1 = {x=17, y=3},
-	hand2 = {x=38, y=35},
-	belly = {x=27, y=29},
-	back = {x=27, y=22},
-	head = {x=29, y=13},
+tiles["npc/humanoid_shalore_elven_tempest.png"] = { base=64,
+	feet = {x=35, y=60},
+	hand1 = {x=11, y=9},
+	hand2 = {x=49, y=36},
+	back = {x=32, y=16},
+	belly = {x=31, y=28},
+	head = {x=33, y=7},
 }
 tiles["npc/humanoid_human_townsfolk_pitiful_looking_beggar01_64.png"] = { base=64,
 	feet = {x=41, y=60},
@@ -1118,44 +1130,29 @@ tiles["npc/humanoid_human_townsfolk_pitiful_looking_beggar01_64.png"] = { base=6
 	belly = {x=41, y=33},
 	head = {x=31, y=10},
 }
-tiles["npc/humanoid_shalore_mean_looking_elven_guard.png"] = { base=64,
-	feet = {x=33, y=60},
-	belly = {x=32, y=27},
-	hand1 = {x=14, y=31},
-	back = {x=31, y=14},
-	head = {x=31, y=6},
-}
-tiles["npc/humanoid_yeek_yeek_commoner_01.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=14, y=39},
-	hand2 = {x=48, y=38},
-	back = {x=30, y=19},
-	belly = {x=33, y=32},
-	head = {x=30, y=10},
-}
-tiles["npc/humanoid_yeek_yeek_commoner_07.png"] = { base=64,
-	feet = {x=33, y=61},
-	hand1 = {x=14, y=39},
-	hand2 = {x=48, y=36},
-	back = {x=30, y=23},
-	belly = {x=33, y=37},
-	head = {x=31, y=11},
+tiles["npc/humanoid_dwarf_ziguranth_warrior.png"] = { base=64,
+	feet = {x=34, y=59},
+	hand1 = {x=18, y=43},
+	hand2 = {x=50, y=44},
+	belly = {x=35, y=36},
+	back = {x=35, y=22},
+	head = {x=35, y=7},
 }
-tiles["npc/humanoid_human_ice_wyrmic.png"] = { base=64,
-	feet = {x=30, y=61},
-	back = {x=32, y=19},
-	hand2 = {x=58, y=17},
-	belly = {x=32, y=33},
-	hand1 = {x=9, y=36},
-	head = {x=36, y=11},
+tiles["npc/humanoid_human_high_slinger.png"] = { base=64,
+	feet = {x=29, y=59},
+	hand1 = {x=15, y=36},
+	hand2 = {x=57, y=18},
+	belly = {x=30, y=27},
+	back = {x=31, y=15},
+	head = {x=33, y=6},
 }
-tiles["npc/humanoid_human_assassin.png"] = { base=64,
-	feet = {x=35, y=59},
-	hand1 = {x=12, y=16},
-	hand2 = {x=51, y=33},
-	belly = {x=34, y=32},
-	back = {x=31, y=16},
-	head = {x=29, y=5},
+tiles["npc/humanoid_human_celia.png"] = { base=64,
+	feet = {x=28, y=59},
+	hand1 = {x=15, y=16},
+	hand2 = {x=50, y=-20},
+	belly = {x=28, y=2},
+	back = {x=29, y=-16},
+	head = {x=29, y=-33},
 }
 tiles["npc/humanoid_shalore_archmage_tarelion.png"] = { base=64,
 	feet = {x=33, y=59},
@@ -1165,22 +1162,6 @@ tiles["npc/humanoid_shalore_archmage_tarelion.png"] = { base=64,
 	belly = {x=33, y=18},
 	head = {x=30, y=-11},
 }
-tiles["npc/humanoid_shalore_elven_mage.png"] = { base=64,
-	feet = {x=31, y=61},
-	hand1 = {x=11, y=35},
-	hand2 = {x=50, y=39},
-	back = {x=31, y=18},
-	belly = {x=31, y=30},
-	head = {x=30, y=6},
-}
-tiles["npc/humanoid_human_bandit_lord.png"] = { base=64,
-	feet = {x=34, y=59},
-	hand1 = {x=20, y=20},
-	hand2 = {x=38, y=21},
-	belly = {x=32, y=30},
-	back = {x=31, y=16},
-	head = {x=30, y=5},
-}
 tiles["npc/humanoid_human_blood_mage.png"] = { base=64,
 	feet = {x=32, y=61},
 	hand1 = {x=13, y=42},
@@ -1197,6 +1178,14 @@ tiles["npc/humanoid_human_geomancer.png"] = { base=64,
 	back = {x=28, y=15},
 	head = {x=28, y=2},
 }
+tiles["npc/humanoid_shalore_elven_mage.png"] = { base=64,
+	feet = {x=31, y=61},
+	hand1 = {x=11, y=35},
+	hand2 = {x=50, y=39},
+	back = {x=31, y=18},
+	belly = {x=31, y=30},
+	head = {x=30, y=6},
+}
 tiles["npc/humanoid_orc_orc_summoner.png"] = { base=64,
 	feet = {x=35, y=61},
 	hand1 = {x=9, y=35},
@@ -1213,6 +1202,30 @@ tiles["npc/humanoid_human_fallen_sun_paladin_aeryn.png"] = { base=64,
 	back = {x=32, y=0},
 	head = {x=31, y=-12},
 }
+tiles["npc/humanoid_yeek_yeek_commoner_07.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=14, y=39},
+	hand2 = {x=48, y=36},
+	back = {x=30, y=23},
+	belly = {x=33, y=37},
+	head = {x=31, y=11},
+}
+tiles["npc/humanoid_human_assassin.png"] = { base=64,
+	feet = {x=35, y=59},
+	hand1 = {x=12, y=16},
+	hand2 = {x=51, y=33},
+	belly = {x=34, y=32},
+	back = {x=31, y=16},
+	head = {x=29, y=5},
+}
+tiles["npc/humanoid_human_bandit_lord.png"] = { base=64,
+	feet = {x=34, y=59},
+	hand1 = {x=20, y=20},
+	hand2 = {x=38, y=21},
+	belly = {x=32, y=30},
+	back = {x=31, y=16},
+	head = {x=30, y=5},
+}
 tiles["npc/humanoid_orc_warmaster_gnarg.png"] = { base=64,
 	feet = {x=40, y=60},
 	hand1 = {x=60, y=27},
@@ -1229,13 +1242,20 @@ tiles["npc/humanoid_yeek_yeek_wayist.png"] = { base=64,
 	belly = {x=37, y=35},
 	head = {x=38, y=13},
 }
-tiles["npc/humanoid_halfling_halfling_guard.png"] = { base=64,
-	feet = {x=38, y=59},
-	hand1 = {x=8, y=28},
-	hand2 = {x=54, y=43},
-	belly = {x=36, y=36},
-	back = {x=33, y=24},
-	head = {x=30, y=10},
+tiles["npc/humanoid_human_thief.png"] = { base=64,
+	feet = {x=27, y=60},
+	hand1 = {x=8, y=27},
+	hand2 = {x=43, y=30},
+	back = {x=24, y=19},
+	belly = {x=27, y=30},
+	head = {x=18, y=7},
+}
+tiles["npc/humanoid_shalore_mean_looking_elven_guard.png"] = { base=64,
+	feet = {x=33, y=60},
+	belly = {x=32, y=27},
+	hand1 = {x=14, y=31},
+	back = {x=31, y=14},
+	head = {x=31, y=6},
 }
 tiles["npc/humanoid_human_subject_z.png"] = { base=64,
 	feet = {x=32, y=59},
@@ -1245,13 +1265,13 @@ tiles["npc/humanoid_human_subject_z.png"] = { base=64,
 	belly = {x=31, y=27},
 	head = {x=32, y=3},
 }
-tiles["npc/humanoid_human_spectator03.png"] = { base=64,
-	feet = {x=32, y=61},
-	hand1 = {x=16, y=38},
-	hand2 = {x=44, y=38},
-	back = {x=30, y=19},
-	belly = {x=30, y=30},
-	head = {x=30, y=4},
+tiles["npc/humanoid_human_townsfolk_battlescarred_veteran01_64.png"] = { base=64,
+	feet = {x=35, y=57},
+	hand1 = {x=16, y=39},
+	hand2 = {x=52, y=39},
+	back = {x=33, y=19},
+	belly = {x=33, y=30},
+	head = {x=32, y=7},
 }
 tiles["npc/humanoid_yeek_yeek_commoner_02.png"] = { base=64,
 	feet = {x=31, y=59},
@@ -1261,13 +1281,6 @@ tiles["npc/humanoid_yeek_yeek_commoner_02.png"] = { base=64,
 	belly = {x=32, y=35},
 	head = {x=31, y=11},
 }
-tiles["npc/humanoid_human_trickster.png"] = { base=64,
-	feet = {x=36, y=60},
-	back = {x=35, y=17},
-	hand2 = {x=5, y=32},
-	belly = {x=37, y=29},
-	head = {x=30, y=6},
-}
 tiles["npc/humanoid_orc_orc_baby.png"] = { base=64,
 	feet = {x=41, y=40},
 	hand1 = {x=12, y=43},
@@ -1276,13 +1289,13 @@ tiles["npc/humanoid_orc_orc_baby.png"] = { base=64,
 	belly = {x=39, y=26},
 	head = {x=19, y=22},
 }
-tiles["npc/humanoid_orc_orc_child.png"] = { base=64,
-	feet = {x=31, y=55},
-	hand1 = {x=8, y=36},
-	hand2 = {x=48, y=35},
-	back = {x=29, y=24},
-	belly = {x=30, y=32},
-	head = {x=25, y=12},
+tiles["npc/humanoid_human_argoniel.png"] = { base=64,
+	feet = {x=30, y=59},
+	hand1 = {x=9, y=2},
+	hand2 = {x=57, y=9},
+	belly = {x=32, y=22},
+	back = {x=32, y=10},
+	head = {x=32, y=-3},
 }
 tiles["npc/humanoid_human_last_hope_guard.png"] = { base=64,
 	feet = {x=31, y=60},
@@ -1292,21 +1305,13 @@ tiles["npc/humanoid_human_last_hope_guard.png"] = { base=64,
 	belly = {x=30, y=26},
 	head = {x=31, y=5},
 }
-tiles["npc/humanoid_halfling_halfling_citizen.png"] = { base=64,
-	feet = {x=31, y=58},
-	hand1 = {x=13, y=38},
-	hand2 = {x=48, y=41},
-	belly = {x=31, y=33},
-	back = {x=30, y=22},
-	head = {x=30, y=8},
-}
-tiles["npc/humanoid_human_slinger.png"] = { base=64,
-	feet = {x=38, y=59},
-	hand1 = {x=10, y=18},
-	hand2 = {x=50, y=36},
-	back = {x=34, y=17},
-	belly = {x=37, y=27},
-	head = {x=34, y=5},
+tiles["npc/humanoid_orc_orc_child.png"] = { base=64,
+	feet = {x=31, y=55},
+	hand1 = {x=8, y=36},
+	hand2 = {x=48, y=35},
+	back = {x=29, y=24},
+	belly = {x=30, y=32},
+	head = {x=25, y=12},
 }
 tiles["npc/humanoid_orc_orc_high_pyromancer.png"] = { base=64,
 	feet = {x=29, y=60},
@@ -1316,6 +1321,14 @@ tiles["npc/humanoid_orc_orc_high_pyromancer.png"] = { base=64,
 	belly = {x=28, y=33},
 	head = {x=39, y=10},
 }
+tiles["npc/humanoid_shalore_elven_blood_mage.png"] = { base=64,
+	feet = {x=32, y=59},
+	hand1 = {x=15, y=36},
+	hand2 = {x=46, y=36},
+	back = {x=30, y=17},
+	belly = {x=30, y=33},
+	head = {x=30, y=7},
+}
 tiles["npc/humanoid_dwarf_dwarven_paddlestriker.png"] = { base=64,
 	feet = {x=39, y=60},
 	hand1 = {x=15, y=37},
@@ -1324,14 +1337,6 @@ tiles["npc/humanoid_dwarf_dwarven_paddlestriker.png"] = { base=64,
 	belly = {x=35, y=35},
 	head = {x=33, y=6},
 }
-tiles["npc/humanoid_human_human_guard.png"] = { base=64,
-	feet = {x=33, y=60},
-	hand1 = {x=19, y=29},
-	hand2 = {x=46, y=25},
-	belly = {x=31, y=30},
-	back = {x=30, y=17},
-	head = {x=28, y=5},
-}
 tiles["npc/humanoid_human_alchemist.png"] = { base=64,
 	feet = {x=35, y=59},
 	hand1 = {x=10, y=32},
@@ -1340,6 +1345,14 @@ tiles["npc/humanoid_human_alchemist.png"] = { base=64,
 	back = {x=33, y=19},
 	head = {x=33, y=5},
 }
+tiles["npc/humanoid_human_martyr.png"] = { base=64,
+	feet = {x=37, y=60},
+	hand1 = {x=17, y=29},
+	hand2 = {x=46, y=31},
+	back = {x=29, y=14},
+	belly = {x=30, y=27},
+	head = {x=28, y=3},
+}
 tiles["npc/humanoid_human_apprentice_mage.png"] = { base=64,
 	feet = {x=30, y=61},
 	hand1 = {x=15, y=38},
@@ -1348,13 +1361,13 @@ tiles["npc/humanoid_human_apprentice_mage.png"] = { base=64,
 	back = {x=29, y=16},
 	head = {x=29, y=5},
 }
-tiles["npc/humanoid_yeek_yeek_commoner_03.png"] = { base=64,
-	feet = {x=32, y=59},
-	hand1 = {x=17, y=42},
-	hand2 = {x=50, y=44},
-	back = {x=32, y=24},
-	belly = {x=33, y=36},
-	head = {x=31, y=12},
+tiles["npc/humanoid_human_townsfolk_squinteyed_rogue01_64.png"] = { base=64,
+	feet = {x=33, y=57},
+	hand1 = {x=11, y=28},
+	hand2 = {x=53, y=38},
+	back = {x=33, y=20},
+	belly = {x=33, y=33},
+	head = {x=30, y=7},
 }
 tiles["npc/humanoid_human_townsfolk_aimless_looking_merchant01_64.png"] = { base=64,
 	feet = {x=37, y=58},
@@ -1364,13 +1377,13 @@ tiles["npc/humanoid_human_townsfolk_aimless_looking_merchant01_64.png"] = { base
 	belly = {x=35, y=38},
 	head = {x=29, y=6},
 }
-tiles["npc/humanoid_human_necromancer.png"] = { base=64,
-	feet = {x=27, y=61},
-	hand1 = {x=18, y=16},
-	hand2 = {x=40, y=41},
-	back = {x=34, y=17},
-	belly = {x=32, y=32},
-	head = {x=36, y=3},
+tiles["npc/humanoid_orc_orc_mother.png"] = { base=64,
+	feet = {x=33, y=59},
+	hand1 = {x=10, y=37},
+	hand2 = {x=53, y=35},
+	back = {x=30, y=9},
+	belly = {x=30, y=31},
+	head = {x=28, y=-6},
 }
 tiles["npc/humanoid_dwarf_lumberjack.png"] = { base=64,
 	feet = {x=34, y=60},
@@ -1380,45 +1393,29 @@ tiles["npc/humanoid_dwarf_lumberjack.png"] = { base=64,
 	belly = {x=35, y=38},
 	head = {x=34, y=8},
 }
-tiles["npc/humanoid_human_shadowblade.png"] = { base=64,
-	feet = {x=33, y=59},
-	hand1 = {x=8, y=15},
-	hand2 = {x=56, y=40},
-	back = {x=34, y=21},
-	belly = {x=28, y=31},
-	head = {x=37, y=9},
-}
-tiles["npc/humanoid_human_cryomancer.png"] = { base=64,
-	feet = {x=37, y=59},
-	hand1 = {x=22, y=6},
-	hand2 = {x=44, y=32},
-	belly = {x=36, y=28},
-	back = {x=35, y=16},
-	head = {x=34, y=5},
-}
-tiles["npc/humanoid_human_gladiator.png"] = { base=64,
-	feet = {x=35, y=58},
-	hand1 = {x=13, y=35},
-	hand2 = {x=53, y=36},
-	belly = {x=35, y=31},
-	back = {x=34, y=19},
-	head = {x=32, y=7},
+tiles["npc/humanoid_human_spectator02.png"] = { base=64,
+	feet = {x=30, y=59},
+	hand1 = {x=18, y=37},
+	hand2 = {x=41, y=37},
+	back = {x=30, y=16},
+	belly = {x=31, y=30},
+	head = {x=30, y=5},
 }
-tiles["npc/humanoid_human_linaniil_supreme_archmage.png"] = { base=64,
-	feet = {x=38, y=60},
-	hand1 = {x=10, y=7},
-	hand2 = {x=49, y=29},
-	belly = {x=37, y=19},
-	back = {x=35, y=1},
-	head = {x=31, y=-13},
+tiles["npc/humanoid_human_fryjia_loren.png"] = { base=64,
+	feet = {x=32, y=58},
+	hand1 = {x=17, y=31},
+	hand2 = {x=45, y=41},
+	belly = {x=29, y=32},
+	back = {x=29, y=21},
+	head = {x=29, y=8},
 }
-tiles["npc/humanoid_human_pyromancer.png"] = { base=64,
-	feet = {x=35, y=59},
-	hand1 = {x=19, y=7},
-	hand2 = {x=41, y=32},
-	back = {x=32, y=17},
-	belly = {x=34, y=29},
-	head = {x=32, y=4},
+tiles["npc/humanoid_human_townsfolk_blubbering_idiot01_64.png"] = { base=64,
+	feet = {x=33, y=59},
+	hand1 = {x=19, y=41},
+	hand2 = {x=47, y=40},
+	back = {x=31, y=19},
+	belly = {x=31, y=33},
+	head = {x=29, y=7},
 }
 tiles["npc/humanoid_human_valfred_loren.png"] = { base=64,
 	feet = {x=29, y=57},
@@ -1444,43 +1441,45 @@ tiles["npc/humanoid_orc_golbug_the_destroyer.png"] = { base=64,
 	belly = {x=29, y=25},
 	head = {x=32, y=-1},
 }
-tiles["npc/humanoid_human_townsfolk_village_idiot01_64.png"] = { base=64,
-	belly = {x=37, y=34},
-	feet = {x=35, y=58},
-	back = {x=33, y=24},
-	head = {x=32, y=8},
+tiles["npc/humanoid_yeek_yeek_commoner_08.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=14, y=39},
+	hand2 = {x=48, y=36},
+	back = {x=31, y=21},
+	belly = {x=33, y=34},
+	head = {x=31, y=11},
 }
-tiles["npc/humanoid_human_martyr.png"] = { base=64,
-	feet = {x=37, y=60},
-	hand1 = {x=17, y=29},
-	hand2 = {x=46, y=31},
-	back = {x=29, y=14},
-	belly = {x=30, y=27},
-	head = {x=28, y=3},
+tiles["npc/humanoid_orc_orc_blood_mage.png"] = { base=64,
+	feet = {x=34, y=59},
+	hand1 = {x=11, y=36},
+	hand2 = {x=57, y=37},
+	back = {x=33, y=17},
+	belly = {x=34, y=32},
+	head = {x=32, y=5},
 }
-tiles["npc/humanoid_human_human_sun_paladin.png"] = { base=64,
-	feet = {x=32, y=60},
-	hand1 = {x=14, y=32},
-	hand2 = {x=46, y=32},
-	belly = {x=31, y=29},
-	back = {x=31, y=17},
-	head = {x=31, y=5},
+tiles["npc/humanoid_human_shady_cornac_man.png"] = { base=64,
+	feet = {x=35, y=60},
+	hand1 = {x=19, y=35},
+	hand2 = {x=49, y=35},
+	back = {x=32, y=17},
+	belly = {x=33, y=29},
+	head = {x=29, y=4},
 }
-tiles["npc/humanoid_orc_orc_assassin.png"] = { base=64,
-	feet = {x=36, y=60},
-	hand1 = {x=4, y=30},
-	hand2 = {x=40, y=3},
-	back = {x=33, y=20},
-	belly = {x=42, y=29},
-	head = {x=24, y=11},
+tiles["npc/humanoid_orc_orc_grand_master_assassin.png"] = { base=64,
+	feet = {x=33, y=61},
+	hand1 = {x=4, y=32},
+	hand2 = {x=60, y=39},
+	back = {x=35, y=18},
+	belly = {x=34, y=30},
+	head = {x=37, y=7},
 }
-tiles["npc/humanoid_human_townsfolk_mangy_looking_leper01_64.png"] = { base=64,
-	feet = {x=36, y=57},
-	hand1 = {x=17, y=23},
-	hand2 = {x=18, y=35},
-	back = {x=32, y=18},
-	belly = {x=36, y=31},
-	head = {x=28, y=5},
+tiles["npc/humanoid_orc_orc_grand_summoner.png"] = { base=64,
+	feet = {x=29, y=60},
+	hand1 = {x=9, y=8},
+	hand2 = {x=55, y=35},
+	back = {x=34, y=18},
+	belly = {x=32, y=30},
+	head = {x=36, y=7},
 }
 tiles["npc/humanoid_orc_rak_shor__grand_necromancer_of_the_pride.png"] = { base=64,
 	feet = {x=29, y=60},
@@ -1506,21 +1505,21 @@ tiles["npc/humanoid_human_ben_cruthdar__the_cursed.png"] = { base=64,
 	back = {x=29, y=17},
 	head = {x=28, y=4},
 }
-tiles["npc/humanoid_human_rej_arkatis.png"] = { base=64,
-	feet = {x=34, y=59},
-	hand1 = {x=24, y=17},
-	hand2 = {x=38, y=19},
-	back = {x=33, y=15},
-	belly = {x=33, y=26},
-	head = {x=32, y=4},
+tiles["npc/humanoid_yeek_yeek_commoner_04.png"] = { base=64,
+	feet = {x=33, y=60},
+	hand1 = {x=17, y=40},
+	hand2 = {x=50, y=44},
+	back = {x=32, y=25},
+	belly = {x=32, y=36},
+	head = {x=32, y=8},
 }
-tiles["npc/humanoid_human_storm_wyrmic.png"] = { base=64,
-	feet = {x=34, y=60},
-	hand1 = {x=15, y=32},
-	hand2 = {x=53, y=37},
-	back = {x=31, y=21},
-	belly = {x=31, y=31},
-	head = {x=27, y=9},
+tiles["npc/humanoid_orc_orc_necromancer.png"] = { base=64,
+	feet = {x=32, y=59},
+	hand1 = {x=7, y=39},
+	hand2 = {x=53, y=36},
+	back = {x=28, y=17},
+	belly = {x=30, y=32},
+	head = {x=29, y=6},
 }
 dolls.race_elf = dolls.race_elf or {}
 dolls.race_elf.female = { base=64,
@@ -1539,13 +1538,13 @@ tiles["npc/humanoid_naga_naga_nereid.png"] = { base=64,
 	belly = {x=38, y=28},
 	head = {x=35, y=5},
 }
-tiles["npc/humanoid_human_spectator02.png"] = { base=64,
-	feet = {x=30, y=59},
-	hand1 = {x=18, y=37},
-	hand2 = {x=41, y=37},
-	back = {x=30, y=16},
-	belly = {x=31, y=30},
-	head = {x=30, y=5},
+tiles["npc/humanoid_human_townsfolk_mangy_looking_leper01_64.png"] = { base=64,
+	feet = {x=36, y=57},
+	hand1 = {x=17, y=23},
+	hand2 = {x=18, y=35},
+	back = {x=32, y=18},
+	belly = {x=36, y=31},
+	head = {x=28, y=5},
 }
 tiles["npc/humanoid_human_homeless_fighter.png"] = { base=64,
 	feet = {x=35, y=61},
@@ -1555,13 +1554,13 @@ tiles["npc/humanoid_human_homeless_fighter.png"] = { base=64,
 	back = {x=33, y=25},
 	head = {x=32, y=9},
 }
-tiles["npc/humanoid_shalore_elven_tempest.png"] = { base=64,
-	feet = {x=35, y=60},
-	hand1 = {x=11, y=9},
-	hand2 = {x=49, y=36},
-	back = {x=32, y=16},
-	belly = {x=31, y=28},
-	head = {x=33, y=7},
+tiles["npc/humanoid_human_townsfolk_farmer_maggot01_64.png"] = { base=64,
+	feet = {x=36, y=60},
+	hand1 = {x=11, y=31},
+	hand2 = {x=51, y=25},
+	back = {x=35, y=25},
+	belly = {x=36, y=37},
+	head = {x=34, y=11},
 }
 tiles["npc/humanoid_orc_orc_berserker.png"] = { base=64,
 	feet = {x=45, y=60},
@@ -1611,28 +1610,29 @@ tiles["npc/humanoid_orc_massok_the_dragonslayer.png"] = { base=64,
 	belly = {x=33, y=28},
 	head = {x=29, y=-3},
 }
-tiles["npc/humanoid_human_high_sun_paladin_rodmour.png"] = { base=64,
-	feet = {x=32, y=59},
-	hand1 = {x=12, y=35},
-	hand2 = {x=48, y=36},
-	belly = {x=32, y=29},
-	back = {x=32, y=15},
-	head = {x=32, y=3},
+tiles["npc/humanoid_human_gladiator.png"] = { base=64,
+	feet = {x=35, y=58},
+	hand1 = {x=13, y=35},
+	hand2 = {x=53, y=36},
+	belly = {x=35, y=31},
+	back = {x=34, y=19},
+	head = {x=32, y=7},
 }
-tiles["npc/humanoid_human_townsfolk_squinteyed_rogue01_64.png"] = { base=64,
-	feet = {x=33, y=57},
-	hand1 = {x=11, y=28},
-	hand2 = {x=53, y=38},
-	back = {x=33, y=20},
-	belly = {x=33, y=33},
-	head = {x=30, y=7},
+tiles["npc/humanoid_human_human_sun_paladin.png"] = { base=64,
+	feet = {x=32, y=60},
+	hand1 = {x=14, y=32},
+	hand2 = {x=46, y=32},
+	belly = {x=31, y=29},
+	back = {x=31, y=17},
+	head = {x=31, y=5},
 }
-tiles["npc/humanoid_human_spectator.png"] = { base=64,
-	feet = {x=37, y=59},
-	belly = {x=36, y=29},
-	hand1 = {x=50, y=37},
-	back = {x=35, y=17},
-	head = {x=34, y=5},
+tiles["npc/humanoid_human_shadowblade.png"] = { base=64,
+	feet = {x=33, y=59},
+	hand1 = {x=8, y=15},
+	hand2 = {x=56, y=40},
+	back = {x=34, y=21},
+	belly = {x=28, y=31},
+	head = {x=37, y=9},
 }
 tiles["npc/humanoid_human_sun_paladin_guren.png"] = { base=64,
 	feet = {x=35, y=60},
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/acera.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/acera.png
new file mode 100644
index 0000000000000000000000000000000000000000..5730520d8184cf9cfb4e01cd97554cff1d17a553
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/acera.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/arkuls_seige_arrows.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/arkuls_seige_arrows.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a5031b688b55f74efe537fa32926a435c149ef3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/arkuls_seige_arrows.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/boots_of_the_hunter.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/boots_of_the_hunter.png
new file mode 100644
index 0000000000000000000000000000000000000000..38b0a5b725b14d2b6e94bfe710b50db6f809c650
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/boots_of_the_hunter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/borosks_hate.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/borosks_hate.png
new file mode 100644
index 0000000000000000000000000000000000000000..23d4c22a9c24bfdaba28d29d8de86764ea47475b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/borosks_hate.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/butcher.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/butcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..5372b44fc69d5a1cf2fb396505662e2f5df42cf4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/butcher.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/crimson_robe.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/crimson_robe.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfd45658391c45fef6bfe22f24453476f3433cca
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/crimson_robe.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/destalas_scales.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/destalas_scales.png
new file mode 100644
index 0000000000000000000000000000000000000000..48fb1d3c7e165299709c164d6d548dc43d7f81e9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/destalas_scales.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/earthen_beads.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/earthen_beads.png
new file mode 100644
index 0000000000000000000000000000000000000000..8059d3b2eb9c71c9b58a14056d26fcf47d070a42
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/earthen_beads.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/eskatins_ultimatum.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/eskatins_ultimatum.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd8f8042bf5e0c2148157a7236e3467bd178ac33
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/eskatins_ultimatum.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/ethereal_embrace.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/ethereal_embrace.png
new file mode 100644
index 0000000000000000000000000000000000000000..c189077af4bf8465f4c290857d85875a8ae1941d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/ethereal_embrace.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/evermoss_robe.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/evermoss_robe.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ca8b1b8e6ff53adf4a5ddc5ed73e205a7ee572e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/evermoss_robe.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/everpyre_blade.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/everpyre_blade.png
new file mode 100644
index 0000000000000000000000000000000000000000..f22b715ad88613471f6a4415be77efcdfa658aca
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/everpyre_blade.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/exiler.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/exiler.png
new file mode 100644
index 0000000000000000000000000000000000000000..71c0f68c4179c333cd2b3b12c28ec9adf32872b1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/exiler.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/eyals_will.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/eyals_will.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3e510882718b06528614529509cd927e488aca9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/eyals_will.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_dreaming_one_new.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_dreaming_one_new.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2b5b6b644fe455431b4de04f39f8efa1cc60c36
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_dreaming_one_new.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_forest.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_forest.png
index 53d0cc5ac18228d792705da32df4960494b0f71d..7cdaa8b1950c196ff52e4847a01d215c45c8ccaa 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_forest.png and b/game/modules/tome/data/gfx/shockbolt/object/artifact/eye_of_the_forest.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/fist_of_the_destroyer.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/fist_of_the_destroyer.png
new file mode 100644
index 0000000000000000000000000000000000000000..80870ad911ce63dc57dff257265a7062424aa8ef
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/fist_of_the_destroyer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/frost_lords_chain.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/frost_lords_chain.png
new file mode 100644
index 0000000000000000000000000000000000000000..98b1092a5c32767bca0d0cd216a907b5a5b749e2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/frost_lords_chain.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/guise_of_the_hated.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/guise_of_the_hated.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c611383829cfe7486ce811ba7ef36e097bd0838
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/guise_of_the_hated.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/hand_of_the_worldshaper.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/hand_of_the_worldshaper.png
new file mode 100644
index 0000000000000000000000000000000000000000..a49c6bf223ecad27863d262ebe86be9125179cfa
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/hand_of_the_worldshaper.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/inertial_twine.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/inertial_twine.png
new file mode 100644
index 0000000000000000000000000000000000000000..3797781fc3b2d8ed68bbe237b162ace4b00412ae
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/inertial_twine.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/lightbringers_rod.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/lightbringers_rod.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d51b52060bfae00546d6fe70a240175715522b1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/lightbringers_rod.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/masochism.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/masochism.png
new file mode 100644
index 0000000000000000000000000000000000000000..ced22684ca13353fc9c1202997f026673e20112d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/masochism.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/mercy.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/mercy.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ed0d0105b33e26aba757de92eafa97aa72e49a0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/mercy.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/mnemonic.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/mnemonic.png
new file mode 100644
index 0000000000000000000000000000000000000000..abd41406d71d71e31066ac4c48f72066e79c26c3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/mnemonic.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/obliterator.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/obliterator.png
new file mode 100644
index 0000000000000000000000000000000000000000..cae5836cdba68864f733fba17089a28c6ce0fca9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/obliterator.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/omniscience.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/omniscience.png
new file mode 100644
index 0000000000000000000000000000000000000000..163e10b8555bf5d663ff87467cb16b6396eb7aa0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/omniscience.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/piercing_gaze.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/piercing_gaze.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b9fe85af4e670f86ed5162f4d9f30b5341880fe
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/piercing_gaze.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/punaes_blade.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/punaes_blade.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9df48891893018b4561f3d8774dcd777dfc7959
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/punaes_blade.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/ring_of_the_archlich.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/ring_of_the_archlich.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4a65f469276c57c08a87f3e0728255aca175ec9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/ring_of_the_archlich.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/shantiz_the_stromblade.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/shantiz_the_stromblade.png
new file mode 100644
index 0000000000000000000000000000000000000000..32a86b57c6cd887f3b2a9a5478c3fd847e3fcfd0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/shantiz_the_stromblade.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/shieldmaiden.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/shieldmaiden.png
new file mode 100644
index 0000000000000000000000000000000000000000..95a2065f3c0c96a02a331f2f592d094958ed1846
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/shieldmaiden.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/sludgegrip.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/sludgegrip.png
new file mode 100644
index 0000000000000000000000000000000000000000..2669e829bd61f32257042d32776d252852f59f02
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/sludgegrip.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/spelldrinker.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/spelldrinker.png
new file mode 100644
index 0000000000000000000000000000000000000000..de159bcf89df4416133bdf0e7c43e71fa1fe6d79
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/spelldrinker.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/swordbreaker.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/swordbreaker.png
new file mode 100644
index 0000000000000000000000000000000000000000..4288b810898c7ad53a3a003f06517343aa427830
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/swordbreaker.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/temporal_rift.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/temporal_rift.png
new file mode 100644
index 0000000000000000000000000000000000000000..424089b07c908bfc627bcb9905be6bae2077b148
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/temporal_rift.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/the_calm.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/the_calm.png
new file mode 100644
index 0000000000000000000000000000000000000000..6add1fa4089f6cda24f12f7bff6a3b32ffac0558
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/the_calm.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/the_rivers_fury.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/the_rivers_fury.png
new file mode 100644
index 0000000000000000000000000000000000000000..f535954a649bb083b9994d6c5034b9b96ff2de36
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/the_rivers_fury.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/the_titans_quiver.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/the_titans_quiver.png
new file mode 100644
index 0000000000000000000000000000000000000000..bba78604a20d5d8193f5afc61a0073833e0ce2b0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/the_titans_quiver.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/tirakais_maul.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/tirakais_maul.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ef0accf0a0b5c86bdd2c8fb477cf582658b896c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/tirakais_maul.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/twilights_edge.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/twilights_edge.png
new file mode 100644
index 0000000000000000000000000000000000000000..25fb1452e85d2225a83e804e8ccd03a592b4cca6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/twilights_edge.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/unbreakable_greaves.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/unbreakable_greaves.png
new file mode 100644
index 0000000000000000000000000000000000000000..f71247f428d71d486953546f4b2dbd82582b2f26
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/unbreakable_greaves.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/windborn_azurite.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/windborn_azurite.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8ae5dbe37779b0e2c45488c8f7a636fe5e73bab
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/windborn_azurite.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/wyrmbreath.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/wyrmbreath.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc964ba2bf9e49d62dab3d25f973f970e7d6a1df
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/wyrmbreath.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/yaldan_baoth.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/yaldan_baoth.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ee4bdf279c2d1646fb86d9679da01e412c3530b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/object/artifact/yaldan_baoth.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/base_01.png b/game/modules/tome/data/gfx/shockbolt/player/orc/base_01.png
index 74fe19c36844059af30de555f594791975e5d8fb..e1ebde324d8649c002709fd5fd40964bb85d23af 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/base_01.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/base_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_01.png b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_01.png
index 20f3ed90a978705c54fadcc16cdc9e04fec4d987..e42944157e0fcc773cf3dff22d6cd5fc002a2c5d 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_01.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_02.png b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_02.png
index 71a539e302aaa5dd0a1f2fbaf259dcefad8211fc..b183e4d45bac172aa6b14d5ae73437837eaa28c1 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_02.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_03.png b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_03.png
index 822f3ee8c841920aec7be036673c13b3d0dee47a..024dde32b036654bbfc577aa306bf8436c6791f4 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_03.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_04.png b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_04.png
index ac5f742cf8b3b24461fadfe98e3b7d1c62807987..ef12d8982eb4edade0128cc079917ff8cd8f5b05 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_04.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_05.png b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_05.png
index b1a9b1815f27ed8df61df726387ec68812112584..fb4cead9c0c1f0aeb1358892b9ffbc09de8fe001 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_05.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/cloak_hood_05.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/goggles_01.png b/game/modules/tome/data/gfx/shockbolt/player/orc/goggles_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0778be5f3c7b892228cd30eb7e226fd7c42a724
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/player/orc/goggles_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_01.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_01.png
index f92c183794a05716f8921f7482d6c59efc8b9038..a15d36e8752bea2c981a7eb0f025f53f9b25160c 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_01.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_02.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_02.png
index 5ce359f40438ff45ce5471ca3dbeb84012589031..a4e782454b78b895289de0c2372cd8283ec8607e 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_02.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_03.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_03.png
index 2c985099ea9d996e873ec66c828779a8cef2aa3a..6c71978bff7afc6427cb60f8f1f246cc49deba8e 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_03.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_04.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_04.png
index 367b3822506e6374e4c40a66b638188263954ab1..ae8c95d8e55c36ecebb8d1ba2e8a27c86a1d0f34 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_04.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_05.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_05.png
index 4bc52edbba5a7e79024c84aa28dbe1521f83e320..8849a94051d33613866841d2d554718f87d420c9 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_05.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_05.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_06.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_06.png
index 3473251126fdcaa64a49bce7db737dbf53da648c..f3b6433de34c7cdb5b0140d5b259ef6e4c4cc8ab 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_06.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_06.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_07.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_07.png
index ae4b864c4f57ed5125b0082a23d8f2c1bd5616a9..c48c3168a627a05e796a959270b0eb4ea33f587c 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_07.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_07.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_08.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_08.png
index 5d49828e3fcb334c2f1b575a7ec449beb4fa76e5..c6fba644fe123d44ae419ecbcf8ac0245e31e2b6 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_08.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_08.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_09.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_09.png
index 2c8f2b2125b111db90f132b7f32dda7ca4e26aa3..74ec18fba4f6ce2e4913fe20045689090b7474e5 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_09.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_09.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_10.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_10.png
index 32ab8661c92e2e6fbdbdc2e9c308ae4b90e1929e..dfc8209fbdc2ca5deef9d14d0b2b571035898f34 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_10.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_10.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_11.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_11.png
index 0e057a6691c248b4450b6116f44f054894c85d8a..9ee4a41e145a8d0f84cd3c7fecca974199a4a683 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_11.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_11.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_12.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_12.png
index 18c12790600250e464fae96bb3e014c047fca859..ab55c609395f1c2d35094d2f5a65f63e663debe6 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_12.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_12.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_13.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_13.png
index 7d2b5c1b8afe226d5fe3d5d709596a31abcb4f0c..c989814aa3bfb4100a1c62a60ac97f952c14f0fe 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_13.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_13.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_14.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_14.png
index fcd65ee43556b83192fcdffd1cefa6849ad479e5..410415e5fbc252836bb5689c527c976e34bcddb5 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_14.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_14.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_15.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_15.png
index fa829d396f33d2a497638eb2fa1a27cb70573921..e760858e664f5adba0afa1c09aa7e33fca0dc174 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_15.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_15.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_16.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_16.png
index 6b7d32484f65999ef8f014a8cde0e71292303867..fa673efda93435e69240b80164af068354203592 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_16.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_16.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_17.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_17.png
index ed06395ba2342f73c2709550d6adae25394dd7bc..1cd84463b076d74a04a082e8670e7625631eab20 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_17.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_17.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/head_18.png b/game/modules/tome/data/gfx/shockbolt/player/orc/head_18.png
index d907d49a9ffef215a0beb8fd5e39d91c4dcc3954..547d3c01b84f40ab27090e3712a96bf01e24ff84 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/head_18.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/head_18.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/monocle_left_01.png b/game/modules/tome/data/gfx/shockbolt/player/orc/monocle_left_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..28ceff1c16be93d0b4768db9bccf6ad5afffd9f1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/player/orc/monocle_left_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/monocle_right_01.png b/game/modules/tome/data/gfx/shockbolt/player/orc/monocle_right_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..5da92970dd10d8fa33dd6ba2c30627733d3101cf
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/player/orc/monocle_right_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/player/orc/special/fez.png b/game/modules/tome/data/gfx/shockbolt/player/orc/special/fez.png
index 368905db12a7bdd5512ef9212b62d35c4ee36b8a..664539c265153c49ea310e7f766823863ffad02a 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/player/orc/special/fez.png and b/game/modules/tome/data/gfx/shockbolt/player/orc/special/fez.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/shader_images/retch_effect.png b/game/modules/tome/data/gfx/shockbolt/shader_images/retch_effect.png
new file mode 100644
index 0000000000000000000000000000000000000000..327f01e318ab40bdf3c66cbe9996b22dba215f11
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/shader_images/retch_effect.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/shader_images/sun_effect.png b/game/modules/tome/data/gfx/shockbolt/shader_images/sun_effect.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb61466c79c0329a8cfd579424714b4185fe51b9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/shader_images/sun_effect.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_1_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_1_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..59584f25155cdacc7d6be4903aa5df2e9b49f815
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_1_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_2_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_2_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..eecac1fc10725164708875ea38e56f29a2937549
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_2_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_2_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_2_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..83126464ca3653984c63504f9cff7311bdba6958
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_2_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_3_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_3_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..bac795c41daf39c5342bf467032e9d547315758c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_3_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_4_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_4_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7549ab61e3881f6714177a2310258f5021360e76
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_4_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_4_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_4_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..0cf8628f210e5998b131052fc128dd7c1d1ccf1a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_4_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_6_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_6_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae2a57d0d2464a3af313b12a0182ceeedb062020
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_6_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_6_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_6_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..d937922ec89bec4cb367c4ee45370b86cf97a68e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_6_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_7_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_7_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4e9257d25f639739fb61d9fee3c3c1364a1c679
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_7_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_8_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_8_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d860080e6880185462772ae1cf552508ac06981
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_8_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_8_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_8_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..c5fd225883a9989932e28cd21a601ab3be7a8172
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_8_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_9_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_9_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f9f12421bc297432afc7fa7ee2fe82b8698c828
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_9_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_1_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_1_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bc3fcdbb827ac9f7464708bbb6ce4dba465b086
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_1_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_1_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_1_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..7da0c2b08de58689a4957c791c13124517f74a5e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_1_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_3_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_3_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..50feefaa25274165b286ade3b1539e009ee72523
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_3_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_3_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_3_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a62cafa2b847a11457ff48846a3b20ba17fbe9c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_3_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_7_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_7_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..d40a915c6766b7cbdc556ecd868069fb551b7ef3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_7_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_7_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_7_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..c148445e0874ff7fa6dcff3cac7d4353d0d6596d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_7_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_9_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_9_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b978db73765850b1bff5ebec4948cd7da48d9dca
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_9_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_9_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_9_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..f37f172b65b04abe11ef65b80e29b09cac6a5933
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_inner_9_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e44ef244f1a37cd281cbe7ec7b5c24d835efb14
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..92c3a282f7978f1a14fb3bb32d86584b227ff557
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ec8079e539640c5852074bf56bbf8d4eb54133a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..ded82fb7cf07a503e144de9bfdd496fa18eb67cb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_05.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..a99b9ed993acc15f4e9191fbbcfe71d6dca2ee98
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_05.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_06.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..9809a22438697f2f79b106beccf7f0b570973624
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_06.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_07.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..35b7719e4bac14cf519bb2d128e14f6ebccc4d71
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_07.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_08.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..d879f221ec1a92a18434e579a07bed5b6314387f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_08.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_09.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_09.png
new file mode 100644
index 0000000000000000000000000000000000000000..25710161c2787629f5683c23d39ae9e680116382
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_09.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_10.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..47ad151e7fb2b0b5b462d462c5e26976eb9b7b9e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_10.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_11.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff29ba011e287ba78ff63ecf3ad0cdcdaa35ed64
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_11.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_12.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2515b86c675d74c0eae5f72582db114bdc929fd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_12.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_13.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..a25c644d4e2b6cd814ed7bd47deace4dc718250c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_13.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_14.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..578af1594d0520684a12a609f066a2cf07fe0b98
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/autumn_grass_main_14.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_1_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_1_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f491f1532892db8c07fd05d52e90c0aba09bad5e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_1_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_2_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_2_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8c9cbe004074da9d74df3759ebfcc70f33b3b35
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_2_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_2_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_2_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..10b5f586fc6903d445fbf495d43aab92dd8a6437
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_2_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_3_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_3_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..db2dd9242afe6f1367a608155964d7317e2549c9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_3_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_4_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_4_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..d49d7a4a67a651b38226d05557f2c3d01c0696c2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_4_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_4_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_4_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef0fe4d633d0a90bbc94971b3209bb086bb45685
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_4_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_6_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_6_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f734024a61f989e26f3b975d405722a563c2cff
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_6_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_6_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_6_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..7eec6f0ab56fc4c8abe0150008263599394f95d0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_6_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_7_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_7_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..aeaadcf5a0ce995dac828e4ee5a82b996b9f44bc
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_7_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_8_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_8_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4a1c94b553a3f2fd0591ce249ba4bf3673680cb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_8_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_8_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_8_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e50e2831498e3c2514440ba292a220b2bc958b3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_8_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_9_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_9_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4bcd71178648e69a35de8da1f804f45ae98839e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_9_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_1_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_1_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a039d155588a9a50eac4c0e75df8084d4027338
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_1_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_1_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_1_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..dba9f571b365edebdf707c6e42aa4b3d44a8a9a9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_1_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_3_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_3_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b604cb9e08bc7602b15ce2491062a27b1be1ddd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_3_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_3_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_3_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..af12031756c6968eff119a2146626a5e817efed5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_3_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_7_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_7_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..154619976c299bf0c2687615b1ebb3bf125adf6e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_7_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_7_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_7_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c49ed72aec9b938f829d302f6b506a33b013b51
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_7_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_9_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_9_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..27140d11790d615e50e03205d94912a13fa17abf
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_9_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_9_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_9_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..8648ced1836d85b01f6ae91b31f0ade89639c8cc
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_inner_9_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8580985fb8c179b603fca826411b4f17d3c77b8
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0f245ffda2a3722ab1a7e28e49071140927d6f4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd6f7b20bd1b2a9b1da8c230cc87b999ca9ec88d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2f4acc7db490f12514d60e81e5952aa6c5fa31f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_05.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc24c78a8b11ff05e26dda3a26320279d62239ef
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_05.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_06.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5d965a27e4624a3e1d89fa2fab41b51aab0b438
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_06.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_07.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..1954421f0e696439e1400e941ee0bd2b2d3c2253
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_07.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_08.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..34e3f495924d4fa97bf6af982d955b32391ca668
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_08.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_09.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_09.png
new file mode 100644
index 0000000000000000000000000000000000000000..5091eac4dacc2907766805f8d6938b297fb73dc2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_09.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_10.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..3194fe8288b7e787082515a5316c429f19645f1a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_10.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_11.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..47cbceb6523fa100dcea319681ced87806bba6b1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_11.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_12.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..80f43fc5d16be07aea7ec536194f7d856381f2fa
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_12.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_13.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..89d22e27fd3696a7dd91a778941a9f7133156797
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_13.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_14.png b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..074741d9e7718f190ea59e3aa8b07c4f45232ae9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/grass/dark_grass_main_14.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert.png b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert.png
index 8fac1c292a87fdab5cb6ac1acd41c498b1a7b027..b15c07a4a67c21329be7ded567ffd4f5f05eb7f0 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert.png and b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_backg.png b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_backg.png
index 417c1e24191ec6b77e33c66b0fb4cb54144c307d..baef9e1503d242db2666b04f27f3278d5fcac0be 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_backg.png and b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_backg.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_north_backg.png b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_north_backg.png
new file mode 100644
index 0000000000000000000000000000000000000000..6bd692fcebfac176068b55444618836f39186ef0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_open_vert_north_backg.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_vert.png b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_vert.png
index 505aa408317a2194c292138bc5128db746111658..d656dc0dbbddb253ba926c929da31b5ee5167001 100644
Binary files a/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_vert.png and b/game/modules/tome/data/gfx/shockbolt/terrain/icecave/icecave_door1_vert.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage.png
new file mode 100644
index 0000000000000000000000000000000000000000..243847c4301142595ff8a7c8df2ac05362f33e57
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7af80b422bb86a736070ec7103db38f227407790
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_ash_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_ash_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..08325d7cea66db9d0fdf552262d4a254f5b6363a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_ash_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..f87d401a75ebad4593a2191eece5a725f5a63130
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5bacddae00ed5a3521cb181bca2e05b31d715f6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca44670f0860728bcbf4139473c089a83665fa2e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_trunk_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_trunk_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..85b61a7fb2b40416d8099b6b53cca9d8b1e8805d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_01_trunk_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage.png
new file mode 100644
index 0000000000000000000000000000000000000000..43e6c9a47272e2079ae1ecdc0014b03e2b0d81b5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5663d9f89b070160eb10a1db3a81fd76aed05a3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_ash_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_ash_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9dc450d9a3ed80cf910fa96891242eeccda8d9c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_ash_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..b12781f2f69cd992fd5b05173c7c2a3e03d05641
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..691840d9a4b5d94de72b5bae84f58fe71521728b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4faf2f1aa4d07610bbf7a97c6050117b6a4417c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_trunk_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_trunk_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd830d32af31a42c40658421f2056e597a5547a8
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_02_trunk_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7c3653a4d83b99986d26a7f8fcfc0ec9300f873
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9eea2a0beaeddd8bf17e9b80f8c48adea844379
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_ash_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_ash_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..842f534263abc23e08a0351757679fc39846a138
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_ash_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d1983da6e7f12137546616eee36b828e99fe69c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..36dc767f1373ed69727c6f89ece61233d03b161c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..60ba2c76a1d79f2d7bcc9256eda7c8fe006e1125
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_trunk_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_trunk_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b105de16aa99934eb599b4e58ee95de15112d36
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/burned_tree_03_trunk_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..045a9aefaec1c5ed98680d46ab9f4a1715626b9b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb3b755215da3c212cf09c5d229f2b72780093bb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfbe84f4e36a8c095d1c0c542e78317ef82c3f67
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..591976fef7fe970b10f738ba364d32ca3ba3679c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9f7a6fd151e10a80ff5640bfee2673f9e1fdd1f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..8bff5df37372c6ca052a78316dacb27bd4f7b710
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ee68dabae67c3ba011189c6ed2a7127144cd6cc
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..705edf19dd1ffec15e8305698e8ff90060d818ec
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/cypress_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf0e11bab640273c05a3695db745f002a53231b9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba2632228cf2499197e0dcbf75b599d9eedc83a9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..41d025ad24b0df738d5dcca02539a04bd15121d7
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..358786c86276072573d28819a36d585632310dbd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a8787a9954772b58020afc353d99418e59341b4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e389a8bd0cf3b4066e8c53cda0133922ed919a2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..6cfb7bcf4a2d30ce3120012e79181e0c351636f1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elm_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..44375f138d9280543e62246fa657d1f45a76e4ce
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..759f2af0213967bdb18981e5caa869a1edec5bc6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..6834b99927593e17e607801467788e72d6f5cd01
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..efae8a5cc7c6af571edd2085139cd3691abb800b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..1882243a539c60160dc587eb5032ecd1a7aeed3b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..73ec3e43968f34e589b8f60a5e028bc12e88189a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad8c68e2452f67ec389f565eb611ce3b26c63027
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/elventree_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_autumn_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_autumn_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e03664bf869208e9578a20073178e51ea615997
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_autumn_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_autumn_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_autumn_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..f07e5d049b48bc081cac002dc9ee29e443a4f851
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_autumn_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..f792b82e02b2c4cb80c39697fedd62bb71f2556d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..777e94d00bb1068a654f553e09a7cee50ad63740
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..113557232c01382974b1e143853726bc887698b4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..f00f899f097173fcf386df86fc56462bc415e44b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_spring_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_summer_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_summer_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..84dc00a1124936d80cf27404b00ecf04467c4232
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_summer_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_summer_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_summer_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..c88087fd78ec073eeb36e9fc02f61d759e7cfe52
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_summer_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..55e31fb64cef54514f0f1f2c20586da8fb8d7b17
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3ef6d12013e0c026a2cb5951b9bd570426d49f4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/fat_elventree_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..def4b2374a65656c175267600517d3680d34b5b1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..48d452463cb53d56507e1f247dbb8755952b95e2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..75160a7874f832e3cc8819931c4185197b2c5d90
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/gnarled_tree_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..c41de4ddce4f4e40b7fef8e1b2afaed40158c3d5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfed12dfae8ea27a5f317fc1b772dbefdd4dc9bb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ed585e806987cb55dda821dc7c2787ffeab8e44
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..57f60708d849abcebc02f900b746842899bb2729
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ea54685606a909625a054f9fc1766501c3d13cb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec7f428f25b9daa80c87986a256315e7ac0e6233
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_pine_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a94352f2bb68dc6679377d2f966974403e91804
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..456176d2fed7cff89211d32b527f943e648f3a0d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..74346de64f2901204ba086982af2dc2f0d56c5fa
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..f61cad5780bd44c36040dce433a9c22f7ac0575b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e99d15404e860d3c02ecfc70c51afd4484ea513
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_narrow_pine_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_pine_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_pine_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..07aec5afc13ef893a9aee3b5ba1c233a798a0612
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_pine_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6fa4a561a49b3337c5cc997b9eac7dfea823ef6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e2326037868026967d7fa265471819bb02a97b6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..66b7626a7dea52e235aa26b26da96dba90bc6ad7
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..65cc908b5e28497be8a211224c079a80b2dabe96
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..6171d6385f66dac8a4f1acaced9cae35c45ff316
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/light_small_wider_pine_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ba287864053c875d0ca79ad906a5da2069fd460
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0c46b62100df926daacb041e965c5a0284e2ca4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..1398d2babaccd6304b7c68c258ffc8108b485b54
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..09fa37e52f715d7e30a0dcf69fe942ab2382f5b9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7f83aa4c121c1510e8700e593ed32f7f3a91305
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffd17b7125633cd7f2e46489661fe980553106f1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..01dd3aad0c020205fe74f707344680950c2330ec
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..217c90c2433ef85c756fd6da21f0d88c6a27ab23
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/narrow_cypress_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5c62199e6cbff151edd2fa0ec970c75453f68f6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..837d949a812a0f70d6a95f0e0436dc3b7e2365cf
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..b70673309cbd68a7d10293529821c9fe906e89c3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..3742b72a1ded7e41a6fd1c34ab5e88e378bda149
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..26c349649eb46dc54ea4637e07e49781c54c2508
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..10fdfaca8aa708ecddde5030b0a91ae65cb79a23
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ea54685606a909625a054f9fc1766501c3d13cb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..922d32e21a86eee02174257c9a64f25ba5b1e9a5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/pine_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..9363f2f9c190c86d667e06da2a4242c808240aee
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a5aa5d06525a4a87565af56b97277762a36a4d1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a523b5570e49b0408d5c6e50c78ba2ae92175cd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_ash_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_ash_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..76a1ab1aaae7a2dd70726c79b05ec7aaf317cb56
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_ash_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..977e7d74d0b7ec56d0d39d8d19b3a409a826885f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_01_trunk_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdd1ac7ed281cf3be6d9ccc3f0fc360a6174ddda
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b704677827b00ab67d00cac8a09c548a88966bc0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_ash_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_ash_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2f5592d0fc50ae1dc8a197b31b8fd799dc73bd1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_ash_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..721bdb8db654ea6ec7fd0b4feca4ace065121786
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e52ce1448959f7168152b2718076d8aedc216f4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8cf718af715f226c6fd56fa8710fecfd5e5bb87
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_02_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad647bc0297e4a9ace62cd7daf75973bf792c8b2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_ash_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_ash_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..e50272b9ac1ac684c1913adac9b568ee9588b557
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_ash_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_ash_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_ash_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..af6ce8496e4263017fc08064c665d84cc6cbb483
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_ash_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..4487a991e518febb4f01f2149dc0e0e845476ee6
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..3237f4cf90bac8d7eb7a95ff29758e4814195756
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..87645e1ec6f8ec3735fe6373d8b2feb44ad9eae0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_burned_tree_03_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..299af1db5537ca4cc095ff577616488b8dbae146
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4c4395edbc7368d8ce760d6b1a231c5741dd845
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..714accb3e4a4b2976489e5ef53f6b9aa695a8020
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..5140ea1c626679defa0c1a66a59389e04c0c081c
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..9fd53a846f361980b1a05367439fc760393c9e40
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..8533e485f2d9a92fa98ee7ce50e416ebdaddf557
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..db9e39e51b1c6b7e378ae5323eaf644a72afb412
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1d26ad039957f9d402a929b5579d3a2de310124
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_cypress_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..105b08b31b1843487150818f6b39b082df9d7158
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..eca476578651cdd72af9b54c9fa3c94a9b4a3f7e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..44ad1d33fbeb9620a94bf145b7d8d42f47500a82
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..f406d6b7a0b1e55376994bb9cda68921ff88ea78
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a81511e609cf320736060d69aeb27468c73682b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..3106a4db91decd3a3561e8416b4a01ad071c4b04
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..719426180396c5c6eca9922c8dd88c244ce5165e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_elm_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb51567eab7ec948fbb0f3e6da70abf585b1f360
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..4354dd7797556a80bf18ee8f7c874cb66c69a0d2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba6d93a73d77d53b7fc18e0af945a8cad044fe92
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..8297931145fcca894dadde34eff35ba26560f761
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..0519df7e09cd1ce435d7259e00a5a9ad1e7b9cd5
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..65d9a7f7f2f9b1f4d499b629bcbde77731fbd27d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e99d15404e860d3c02ecfc70c51afd4484ea513
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e0ed986f51b51867acae6bea230c3382aba99cf
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_narrow_pine_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..ecb85e403ea59818bb251167062e3087377ddf31
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a282a1c9d6a98b656948be784470a2bdad4535d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1ff299a612c5053dcdd995126b324206e2a2db4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..46f846d4b525e038b71fe022ccc4dd147d2f5f29
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..070517ee673d9f44a3001dfc3779765cc66043ca
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..5587f05c8cf138132111b51ea0758f693a203a3e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..6171d6385f66dac8a4f1acaced9cae35c45ff316
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e0ed986f51b51867acae6bea230c3382aba99cf
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_wider_pine_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..62b1004ee352676f1985754d297436b4d8469959
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..9fa562e45e1c4259e544e55c98d080324ac5680d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2844330d334d4dbe709835efee5b24adc355dd3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..2dc9d41fdbdf40b921fa8af1dc6e85eafccd28b0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..5228984e4a39086f8ce7c54b34b417144d0a604b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..726c1df2fae93042bdb6e856e6f3227c894dd259
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..62439ca16f18b886332c217648aafa50c872cb5d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..e053a654b2b3016abff880bfa9f985ae0bdb9e79
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6eda91cd4412840af102be4905e8c006ba2ba35
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..9feb59ad5c088827cb41fa0ed829f8beebc4c992
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_roots_mist.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_roots_mist.png
new file mode 100644
index 0000000000000000000000000000000000000000..46b64fe0b43edd6af0d0e2a3f7ae3fbefc8c32db
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_roots_mist.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..fde7b82ead8e3fd570b66d6077fa3d8a32c5a3cd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_waterripples.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_waterripples.png
new file mode 100644
index 0000000000000000000000000000000000000000..5af14b2af9421cb2a4dacf204bd4e80feeb7a415
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_moss_waterripples.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_roots_mist.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_roots_mist.png
new file mode 100644
index 0000000000000000000000000000000000000000..46b64fe0b43edd6af0d0e2a3f7ae3fbefc8c32db
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_roots_mist.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..36ab8e88e0b69415492471453bcce6d5eee061a2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a02920fa8ca8a633c9a591b04215479955e3f59
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_waterripples.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_waterripples.png
new file mode 100644
index 0000000000000000000000000000000000000000..5af14b2af9421cb2a4dacf204bd4e80feeb7a415
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/small_willow_waterripples.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..2804abcffd70c7a0f2216d034dcbe14d664d4bfe
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c2955bce8972896c9357edaeed9278582d81bed
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..91885a5bf63cfac513d7a13e145c092bd2388f26
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a75898222ed8d6ffb64fb323d0cffdc5a595438
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_winter_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_winter_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..43d44c64355850d38a5a29092821f38745e39736
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_winter_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_winter_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_winter_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fc49d0018719a9fddb87157eb007b218e287fee
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_foliage_winter_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb0438daa9de5663ac31181372cb25ca0b63f662
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..2788ebd966015aebdb7121eb177dcc765ff05a47
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/tiny_cypress_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca18dcc0d2b827e69730c9275b245be88c2f9d00
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..bda223d7e8987c535912512d9bc03d51c455632e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_moss_autumn.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_moss_autumn.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ade983f92dd3c69f8e47d7bdecdf116ae91da98
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_moss_autumn.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..32d0a10237272c8f7b255f6a5ed42665a7228f42
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..3af3a62eb61835e5abd4e84295446453738724bd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..db5c57f2c1e0d67f23de2549f8fdab5cc9b3e497
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_bare.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_bare.png
new file mode 100644
index 0000000000000000000000000000000000000000..4df87a7c456870f91d69f3b1ca10356829732b97
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_bare.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_spring.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_spring.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf6e576d2ada6b9285399f64e10e556093952efb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_spring.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_summer.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_summer.png
new file mode 100644
index 0000000000000000000000000000000000000000..a10e0e8314a43d9314211b0943ab40ea361990a4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_summer.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_winter.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_winter.png
new file mode 100644
index 0000000000000000000000000000000000000000..91a15b8c763d20947b3bdfbb20eeccbd1c1b6648
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_foliage_winter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_roots_mist.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_roots_mist.png
new file mode 100644
index 0000000000000000000000000000000000000000..ceaa471b3c8e771d9675ecb9c9d81f1befac51a7
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_roots_mist.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3246a23ce2721bc02d66c51ae339bb91225ce69
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_waterripples.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_waterripples.png
new file mode 100644
index 0000000000000000000000000000000000000000..d91e62520e9028e40f652dc22cdfa3e070bd59b9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_moss_waterripples.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_roots_mist.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_roots_mist.png
new file mode 100644
index 0000000000000000000000000000000000000000..ceaa471b3c8e771d9675ecb9c9d81f1befac51a7
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_roots_mist.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_shadow.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c4976cf49fd18e8cf718c92846ea8719c2e0459
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_shadow.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_trunk.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..47479425df79815e8b3c89b075d2392dbe55fea2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_trunk.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_waterripples.png b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_waterripples.png
new file mode 100644
index 0000000000000000000000000000000000000000..d91e62520e9028e40f652dc22cdfa3e070bd59b9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/trees/willow_waterripples.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_cross_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_cross_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4ec7865681bec978942cf12fca0b2cd659c91a0
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_cross_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa163ae6ac3881f34f9b335c0b3e594dc0b3ad2e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8c03510b22b2b81d921b9399f9d2dcf4bcecb0a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..aacc82f700f38e7abaedbca35b6a6b2fb212c2b8
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cc8c86979f08d7780f43d2d99608f93b4584df4
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_end_a_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..352afbc5a177c8776fbb2021af5d25a9643c4dd3
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..47ef8d7312a85595ba91ec44d145704af3219c6f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..77c2298bef2117f525666c88266ba0e057b4a76a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_horizontal_a_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac54128494cdf5ff5e2f563e908d8f22d9aaef40
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_b_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_b_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..68f791e1c53fe7de31a595020593f9ea775da8ed
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_b_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_c_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_c_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..37c9e3a3066373a394a4315c6c7d94c07d6c77ba
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_c_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_d_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_d_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8421fd32716e1841fcce3b392e7bf4b5a6b380f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_t_section_d_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e8be8d386a3a711b3bafc85ea994e049d19aa0d
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_a_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_a_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f1235b06e869d4d3d6b2f794fcbaad583360cbc
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_a_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_b_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_b_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd6153ddf97b244faf610862609d1e7db691e2d1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_b_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_b_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_b_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..a01bd52983991326329d2ca53bc39158c9632342
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_b_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_c_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_c_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..3397c025282413b7c2f840b9fe04b7fdd9633797
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_c_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_c_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_c_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..f23840b76cae413b84d6ccfdca05870a22ccdc9a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_c_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_d_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_d_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..f49d6dfe48e70342e2ba27a7e6ec7717404567a9
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_d_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_d_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_d_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec3ff370186cfdee2b5ad4f226d24aec84dda053
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_turn_d_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa7dc64e0a96663ff27a8867a3fbb1a172a0e5f1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee3bb37949b7c3dcbdeac4386e442ca117344fbf
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c0add5817ed973a041343da4a8ee79c84438e7e
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/wooden_barricade/barricade_vertical_a_03.png differ
diff --git a/game/modules/tome/data/gfx/talents/absorption_strike.png b/game/modules/tome/data/gfx/talents/absorption_strike.png
new file mode 100644
index 0000000000000000000000000000000000000000..28fffa9c1c3d31a565fc66492bf6f5a7d8032da3
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/absorption_strike.png differ
diff --git a/game/modules/tome/data/gfx/talents/acidfire.png b/game/modules/tome/data/gfx/talents/acidfire.png
new file mode 100644
index 0000000000000000000000000000000000000000..72eaccfbf62f186efd46dbcc7cf48489a61b4ebe
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/acidfire.png differ
diff --git a/game/modules/tome/data/gfx/talents/axe_kick.png b/game/modules/tome/data/gfx/talents/axe_kick.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed14c95a9cb4e4604616ee921aca294d6142016c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/axe_kick.png differ
diff --git a/game/modules/tome/data/gfx/talents/body_of_ice.png b/game/modules/tome/data/gfx/talents/body_of_ice.png
new file mode 100644
index 0000000000000000000000000000000000000000..bcdf4cff89483fe2c19cf347770b30a05853f99c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/body_of_ice.png differ
diff --git a/game/modules/tome/data/gfx/talents/butterfly_kick.png b/game/modules/tome/data/gfx/talents/butterfly_kick.png
new file mode 100644
index 0000000000000000000000000000000000000000..9006d02696d6ce75a625006ab47828e2c1df2347
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/butterfly_kick.png differ
diff --git a/game/modules/tome/data/gfx/talents/caustic_golem.png b/game/modules/tome/data/gfx/talents/caustic_golem.png
new file mode 100644
index 0000000000000000000000000000000000000000..1116085a284e1440785ca1d8a65234e420a361f5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/caustic_golem.png differ
diff --git a/game/modules/tome/data/gfx/talents/caustic_mire.png b/game/modules/tome/data/gfx/talents/caustic_mire.png
new file mode 100644
index 0000000000000000000000000000000000000000..410c429960dbba681c0d240498895e0e2d48f53f
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/caustic_mire.png differ
diff --git a/game/modules/tome/data/gfx/talents/dissolving_acid.png b/game/modules/tome/data/gfx/talents/dissolving_acid.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2c2b9451edbc6400ba08ef4ef73ce9b774ed6ab
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/dissolving_acid.png differ
diff --git a/game/modules/tome/data/gfx/talents/dynamic_recharge.png b/game/modules/tome/data/gfx/talents/dynamic_recharge.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6566f2cf7896c994c3bf8bbdb1537ae0589049c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/dynamic_recharge.png differ
diff --git a/game/modules/tome/data/gfx/talents/execution.png b/game/modules/tome/data/gfx/talents/execution.png
new file mode 100644
index 0000000000000000000000000000000000000000..50ce10b90f75b8beed1e125251d53bbfa4fdc5a8
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/execution.png differ
diff --git a/game/modules/tome/data/gfx/talents/eyal_s_wrath.png b/game/modules/tome/data/gfx/talents/eyal_s_wrath.png
new file mode 100644
index 0000000000000000000000000000000000000000..db7f8071eb3e0ab60ecf2d958d99447e8bc44863
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/eyal_s_wrath.png differ
diff --git a/game/modules/tome/data/gfx/talents/fearless_cleave.png b/game/modules/tome/data/gfx/talents/fearless_cleave.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bf888e2086afd871d4b0650a39db20bf2bd25ee
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/fearless_cleave.png differ
diff --git a/game/modules/tome/data/gfx/talents/flash_freeze.png b/game/modules/tome/data/gfx/talents/flash_freeze.png
new file mode 100644
index 0000000000000000000000000000000000000000..444be95a1931e79ab71e3970ca355f2c1318134c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/flash_freeze.png differ
diff --git a/game/modules/tome/data/gfx/talents/flash_of_the_blade.png b/game/modules/tome/data/gfx/talents/flash_of_the_blade.png
new file mode 100644
index 0000000000000000000000000000000000000000..3dd1a6990a9cd3426a59ea62f198579a3e29afd4
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/flash_of_the_blade.png differ
diff --git a/game/modules/tome/data/gfx/talents/hurricane_throw.png b/game/modules/tome/data/gfx/talents/hurricane_throw.png
new file mode 100644
index 0000000000000000000000000000000000000000..a61f6a5de149cc3180dda2e3605deb77eb5b070e
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/hurricane_throw.png differ
diff --git a/game/modules/tome/data/gfx/talents/ice_armour.png b/game/modules/tome/data/gfx/talents/ice_armour.png
new file mode 100644
index 0000000000000000000000000000000000000000..29f710b5e2cc91e212939f00e1196eebf2e1e3c4
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/ice_armour.png differ
diff --git a/game/modules/tome/data/gfx/talents/illumination.png b/game/modules/tome/data/gfx/talents/illumination.png
new file mode 100644
index 0000000000000000000000000000000000000000..655ea852a57f2d7e98c4751361c785cfc04589ce
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/illumination.png differ
diff --git a/game/modules/tome/data/gfx/talents/light_burst.png b/game/modules/tome/data/gfx/talents/light_burst.png
new file mode 100644
index 0000000000000000000000000000000000000000..83f53cfbd4d8e8567e6806ab9e4055eaa4ac7dda
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/light_burst.png differ
diff --git a/game/modules/tome/data/gfx/talents/lightburn.png b/game/modules/tome/data/gfx/talents/lightburn.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b30959ab933d98da762c88b074aa0d030d3a95d
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/lightburn.png differ
diff --git a/game/modules/tome/data/gfx/talents/living_lightning.png b/game/modules/tome/data/gfx/talents/living_lightning.png
new file mode 100644
index 0000000000000000000000000000000000000000..621f99e351395a7bdc8e06f22a090d3f1cd830dc
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/living_lightning.png differ
diff --git a/game/modules/tome/data/gfx/talents/mark_of_light.png b/game/modules/tome/data/gfx/talents/mark_of_light.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e2ada88e7ebe46d0e912ee079efd8f1dbcd4ef2
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/mark_of_light.png differ
diff --git a/game/modules/tome/data/gfx/talents/nature_s_defiance.png b/game/modules/tome/data/gfx/talents/nature_s_defiance.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ac5a3d8dbe4d9464fbdd343690e06d46e230ec5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/nature_s_defiance.png differ
diff --git a/game/modules/tome/data/gfx/talents/path_of_the_sun.png b/game/modules/tome/data/gfx/talents/path_of_the_sun.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cc54168db8d1bcbba79458bae5ac3e2b26c2c21
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/path_of_the_sun.png differ
diff --git a/game/modules/tome/data/gfx/talents/radiance.png b/game/modules/tome/data/gfx/talents/radiance.png
new file mode 100644
index 0000000000000000000000000000000000000000..d36dbf1f7683b263a57e6c6b00ab6360e7c14a16
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/radiance.png differ
diff --git a/game/modules/tome/data/gfx/talents/reclaim.png b/game/modules/tome/data/gfx/talents/reclaim.png
new file mode 100644
index 0000000000000000000000000000000000000000..66184e2dbc4f8d282b896e7a9b88ac464f5ba1c5
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/reclaim.png differ
diff --git a/game/modules/tome/data/gfx/talents/reflex_defense.png b/game/modules/tome/data/gfx/talents/reflex_defense.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7b7c42cb1d13578dff72b87f2b8fb74f9beeef3
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/reflex_defense.png differ
diff --git a/game/modules/tome/data/gfx/talents/relentless_fury.png b/game/modules/tome/data/gfx/talents/relentless_fury.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3b4e7992ce35e2a909d739f445a9c0eea08a202
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/relentless_fury.png differ
diff --git a/game/modules/tome/data/gfx/talents/righteous_strength.png b/game/modules/tome/data/gfx/talents/righteous_strength.png
new file mode 100644
index 0000000000000000000000000000000000000000..74d4c8de4183eb157721989a99c41827c061b908
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/righteous_strength.png differ
diff --git a/game/modules/tome/data/gfx/talents/searing_sight.png b/game/modules/tome/data/gfx/talents/searing_sight.png
new file mode 100644
index 0000000000000000000000000000000000000000..343cf41f2c41b21cf8dee47e0720d645a286952d
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/searing_sight.png differ
diff --git a/game/modules/tome/data/gfx/talents/shieldsmaiden_aura.png b/game/modules/tome/data/gfx/talents/shieldsmaiden_aura.png
new file mode 100644
index 0000000000000000000000000000000000000000..5db2a5eb5e5e04d1a2df84e9206b5c898e08cc43
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/shieldsmaiden_aura.png differ
diff --git a/game/modules/tome/data/gfx/talents/sun_beam.png b/game/modules/tome/data/gfx/talents/sun_beam.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b9b30770dfb58d29d9bccb623e4ee772a0ee604
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/sun_beam.png differ
diff --git a/game/modules/tome/data/gfx/talents/sun_vengeance.png b/game/modules/tome/data/gfx/talents/sun_vengeance.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e0b530e86079ad90362ffb1c36d1d8ac5bc7c7c
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/sun_vengeance.png differ
diff --git a/game/modules/tome/data/gfx/talents/suncloak.png b/game/modules/tome/data/gfx/talents/suncloak.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0cf950a0e6e4e34815e7f4fc3ed321b9f915868
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/suncloak.png differ
diff --git a/game/modules/tome/data/gfx/talents/thunderclap.png b/game/modules/tome/data/gfx/talents/thunderclap.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a36d75cb0c5d2f6310b07d5d53639f77192c2c1
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/thunderclap.png differ
diff --git a/game/modules/tome/data/gfx/talents/unified_body.png b/game/modules/tome/data/gfx/talents/unified_body.png
new file mode 100644
index 0000000000000000000000000000000000000000..a98a8cb4286664b676b0502120b4bd29470444cc
Binary files /dev/null and b/game/modules/tome/data/gfx/talents/unified_body.png differ
diff --git a/game/modules/tome/data/gfx/ui/definitions/deathbox.lua b/game/modules/tome/data/gfx/ui/definitions/deathbox.lua
new file mode 100644
index 0000000000000000000000000000000000000000..81f112591f5e57425378886864f625ae7b85f57e
--- /dev/null
+++ b/game/modules/tome/data/gfx/ui/definitions/deathbox.lua
@@ -0,0 +1,29 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+deathbox = {
+	frame_shadow = {x=15, y=15, a=0.5},
+	frame_alpha = 1,
+	frame_darkness = 0.6,
+	frame_ox1 = -60,
+	frame_ox2 =  60,
+	frame_oy1 = -60,
+	frame_oy2 =  60,
+--	title_bar = {x=0, y=-17, w=4, h=25},
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/ingredients.lua b/game/modules/tome/data/ingredients.lua
index 77896877573d265be625c01df8898404d777e423..8313b95d2c41037819cf9b3f4d5dc8d75ca6ac73 100644
--- a/game/modules/tome/data/ingredients.lua
+++ b/game/modules/tome/data/ingredients.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/keybinds/tome.lua b/game/modules/tome/data/keybinds/tome.lua
index f8d91f23dc9b5d19b055a2ed5d32935afda81dee..36e1d785a5d6d5317ee9e3a4b6762d6e44c44d2d 100644
--- a/game/modules/tome/data/keybinds/tome.lua
+++ b/game/modules/tome/data/keybinds/tome.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/age-allure.lua b/game/modules/tome/data/lore/age-allure.lua
index cba7436f2d76f4fb525314e1845c1df018742dda..163f0a6ef36b2dd3009617e105d846a6a65eb339 100644
--- a/game/modules/tome/data/lore/age-allure.lua
+++ b/game/modules/tome/data/lore/age-allure.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/age-pyre.lua b/game/modules/tome/data/lore/age-pyre.lua
index ae19006bbd8f32f758d60fab09a9343bfa490496..55d0e415d51860ae3b2a44a3f1b67f889fa55d1e 100644
--- a/game/modules/tome/data/lore/age-pyre.lua
+++ b/game/modules/tome/data/lore/age-pyre.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/angolwen.lua b/game/modules/tome/data/lore/angolwen.lua
index a06e854443e4b444ef59a253440e82c5c4c2a0a2..3d581919b7f482edba898072ea859c92cbe545eb 100644
--- a/game/modules/tome/data/lore/angolwen.lua
+++ b/game/modules/tome/data/lore/angolwen.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/ardhungol.lua b/game/modules/tome/data/lore/ardhungol.lua
new file mode 100644
index 0000000000000000000000000000000000000000..07deeca779c49ce7858ac81f3226238bed3a9ace
--- /dev/null
+++ b/game/modules/tome/data/lore/ardhungol.lua
@@ -0,0 +1,71 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+--------------------------------------------------------------------------
+-- Ardhungol & Spiderkin
+--------------------------------------------------------------------------
+
+newLore{
+	id = "ardhungol-1",
+	category = "ardhungol",
+	name = "Rashim Journal (1)",
+	lore = [[#{bold}#Journal Entry I#{normal}#
+
+It's been some time since High Sun Paladin Aeryn sent me out on an assignment. According to recent intelligence, it would seem that a cavern has mysteriously emerged near our outpost, the Gates of Morning. They have bestowed the name "Ardhungol" on the newly discovered cavern. The elder warriors seem anxious in regards to the origin of this new subterranean area; they're likely concerned that the orcs are using Ardhungol as a staging point for further aggression against the Gates of Morning. I'll have to make sure I'm well equipped for this journey; the fate of us all could hang in the balance.
+
+#{bold}#Journal Entry II#{normal}#
+
+I spoke with the border patrols tonight. There seem to have been several sightings of orcs and other wild beasts roaming throughout the wilderness, yet strangely enough, none seem to have been anywhere near Ardhungol. Perhaps the subterranean cavern was simply a natural phenomenon with unfortunate timing. It's either that, or an unknown force powerful enough to alter the very foundation of the land upon its arrival. I shudder at the latter thought, but for now this is all merely speculation. If all goes well, I'll be ready to depart by dawn.
+]]
+}
+
+newLore{
+	id = "ardhungol-2",
+	category = "ardhungol",
+	name = "Rashim Journal (2)",
+	lore = [[#{bold}#Journal Entry III#{normal}#
+
+It was a half days journey from the Gates of Morning to Ardhungol, but I've finally arrived. I've decided to rest beneath the shade of a great oak tree and enjoy one of the sweet rolls my wife Melnela prepared for me. I'm unsure why, but the closer I've come to Ardhungol, the thicker the atmosphere has become, almost as if there is a foreign energy infecting the very air I breathe. I've been to many places in this vast world, but I've never felt an aura quite like this; I will have to uncover the source of this energy before I can bring a full report back to Aeryn.
+
+#{bold}#Journal Entry IV#{normal}#
+
+A thick green veil of mist permeates the air within this cavern; I'm uncertain if this is a byproduct of whatever creatures now inhabit this place, or if it's coming directly from another source. There also seem to be arcane rifts appearing in different locations throughout the cavern, though I dare not approach them; I will leave them for our anorithils to assess after I have secured the area. I must admit, I'm not looking forward to encountering the origin of a threat this grave, yet it is my sworn duty as a Sun Paladin to face what lies ahead; even should it be my own doom.
+
+#{bold}#Journal Entry V#{normal}#
+
+Impossible; how could spiders have grown to such an immense size? Not only that, but the markings and physical traits are unlike any arachnid I have previously encountered. The first one I encountered nearly took my left arm during its initial assault, if my reflexes had been a split second slower, I fear the worst may have transpired. If the Gates of Morning are assaulted by not only the orcs, but also this new –found species of arachnids, I fear all hope will be lost. For the sake of all Eyal, I must venture further into this spider infested cavern and destroy the source of this incursion.
+]]
+}
+
+newLore{
+	id = "ardhungol-3",
+	category = "ardhungol",
+	name = "Rashim Journal (3)",
+	lore = [[#{bold}#Journal Entry VI#{normal}#
+
+It took some time, but my muscles have started to adapt and react to the unique movements of these arachnid. The way they fight, it's almost as if they possess a higher level of thought, elevating them far beyond the base intelligence of lesser arachnid... is it possible that they could be sentient? Do they act individually, or are they perhaps manipulated by a greater arachnid? Let us pray that this species is not connected through a hive mind, for this threat could become even greater than I had imagined.
+
+#{bold}#Journal Entry VII#{normal}#
+
+I have slain dozens of these arachnids, each one seemingly more difficult than the last. I am unsure if this is a result of my weariness, or if they are also adapting to my movements and battle techniques. I don't see how that could be possible however, a mere spider couldn't possibly adapt to the battle techniques of a veteran Sun Paladin, it's simply not feasible. Furthermore, the origin of these spiders worries me. So far I have not found any other entrances to this cavern, meaning they were transported here via other means. Those arcane rifts I found earlier are starting to worry me, and I fear for us all when I think of what may be waiting for us beyond them. I must put these thoughts out of my mind; distractions will only serve to weaken my resolve.
+
+#{bold}#Journal Entry VIII#{normal}#
+
+Incredible, the size of that arachnid is unimaginable; there is no doubt about it, that spider is the matriarch here. I am heavily wounded, but there is no turning back now; I must finish what I started for the sake of all those awaiting my return. If I don't make it back, whoever is now reading this journal, please make High Sun Paladin Aeryn at the Gates of Morning aware of the grave situation... and tell Melnela that I'm sorry.]]
+}
diff --git a/game/modules/tome/data/lore/blighted-ruins.lua b/game/modules/tome/data/lore/blighted-ruins.lua
index f085cf3d5c3e6bc33fe63f5ef4c0bea11de6f0e6..d25d7e77453460c2485ee2d081604c51b69a5f7a 100644
--- a/game/modules/tome/data/lore/blighted-ruins.lua
+++ b/game/modules/tome/data/lore/blighted-ruins.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/daikara.lua b/game/modules/tome/data/lore/daikara.lua
index 9b40b107a74319e2d84cee4a6206c1faffb8a236..46da886e9e476f30d48b116aec6b4b3f09304fdf 100644
--- a/game/modules/tome/data/lore/daikara.lua
+++ b/game/modules/tome/data/lore/daikara.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/dreadfell.lua b/game/modules/tome/data/lore/dreadfell.lua
index d2cff8661f46681f9acd4bc9cf929ddd4526c09f..37acc9337b3410d0d4d77c7627baa7d451f50929 100644
--- a/game/modules/tome/data/lore/dreadfell.lua
+++ b/game/modules/tome/data/lore/dreadfell.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/elvala.lua b/game/modules/tome/data/lore/elvala.lua
index d06c89c6833383381ad9dba2698da145bc679b61..536f82be2f9e91a8b3704afff81fdfe2bafc06a0 100644
--- a/game/modules/tome/data/lore/elvala.lua
+++ b/game/modules/tome/data/lore/elvala.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/fearscape.lua b/game/modules/tome/data/lore/fearscape.lua
index 92e90723f05af13a81d6a73e0df72f3e455eda76..3e92cddd2bb0b0d4a98591fc36b217bb556a33d0 100644
--- a/game/modules/tome/data/lore/fearscape.lua
+++ b/game/modules/tome/data/lore/fearscape.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,7 +25,7 @@ newLore{
 	id = "fearscape-entry",
 	category = "fearscape",
 	name = "a fearsome sight",
-	lore = [[You stand in a field of fire, the flames dancing back and forth like hell-spawned corn waving in the wind. It licks your feet, your skin, your face, and writhes around in tiny shapes which tear across your flesh and crawl down your throat. It burns and blazes through your body, and crazed thoughts fill your mind. This is Goedalath they tell you, the Fearscape, and you have no rightful place here.
+	lore = [[You stand in a field of fire, the flames dancing back and forth like blaze-spawned corn waving in the wind. It licks your feet, your skin, your face, and writhes around in tiny shapes which tear across your flesh and crawl down your throat. It burns and blazes through your body, and crazed thoughts fill your mind. This is Goedalath they tell you, the Fearscape, and you have no rightful place here.
 
 In the distance you see looming, demonic shapes of absolute darkness, towering above the blazing land like wardens of doom. The sky is black, but above your head hangs a round world that you recognise as Eyal. Across the burning plains gather armies of fiendish figures, and glowing eyes turn up with hateful glowers to your home world. Suddenly both you and it and seem small and frail. As the flames fill your body with pain your only thought is of escape.]],
 }
diff --git a/game/modules/tome/data/lore/fun.lua b/game/modules/tome/data/lore/fun.lua
index a55bd1e7dd1cd116a7cfd9f88c683f0cfb74be2c..3f76dbbc5f55331339d7838e943d55e3753459b8 100644
--- a/game/modules/tome/data/lore/fun.lua
+++ b/game/modules/tome/data/lore/fun.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/high-peak.lua b/game/modules/tome/data/lore/high-peak.lua
index 34fc5ed4869e3fbd0193da2c4338bbd53f5f46c3..973f721ff2c241ddd9f78a473c6defdf673a443f 100644
--- a/game/modules/tome/data/lore/high-peak.lua
+++ b/game/modules/tome/data/lore/high-peak.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/infinite-dungeon.lua b/game/modules/tome/data/lore/infinite-dungeon.lua
index 964cc0a9916ca15a9c7a10bb50c498b38d95aaa7..de2b59c62d7e9cdc701ca345811c32fbdf6f42b7 100644
--- a/game/modules/tome/data/lore/infinite-dungeon.lua
+++ b/game/modules/tome/data/lore/infinite-dungeon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/iron-throne.lua b/game/modules/tome/data/lore/iron-throne.lua
index 8f5db5273eb01cab4a894615766a900e11e17856..ba5c6691f7a50993785d5dbd536e19a96b00ddfa 100644
--- a/game/modules/tome/data/lore/iron-throne.lua
+++ b/game/modules/tome/data/lore/iron-throne.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/keepsake.lua b/game/modules/tome/data/lore/keepsake.lua
index 0c59cff5c088768ea7f08880718e95d7d381bc7c..58512dc8380a9ae90c539f042649662b1c938ed4 100644
--- a/game/modules/tome/data/lore/keepsake.lua
+++ b/game/modules/tome/data/lore/keepsake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/kor-pul.lua b/game/modules/tome/data/lore/kor-pul.lua
index b7c266af0bee0e98be501c4803a326229fe1d754..2282350185f718b85b0c610c91b62f53aaaeaafe 100644
--- a/game/modules/tome/data/lore/kor-pul.lua
+++ b/game/modules/tome/data/lore/kor-pul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/last-hope.lua b/game/modules/tome/data/lore/last-hope.lua
index e8ef7d98dd6351894f615fe4a345c70704a10b34..cc22a82fc0ac4415d2f6877e7c352a2b4ca7f79a 100644
--- a/game/modules/tome/data/lore/last-hope.lua
+++ b/game/modules/tome/data/lore/last-hope.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/lore.lua b/game/modules/tome/data/lore/lore.lua
index 23b32eb18b3516987ba3451c67c6838a5ecb94bd..e4b054bc2195aaab84d7f5af5d74047a6ff1256a 100644
--- a/game/modules/tome/data/lore/lore.lua
+++ b/game/modules/tome/data/lore/lore.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -48,3 +48,4 @@ load("/data/lore/misc.lua")
 load("/data/lore/high-peak.lua")
 load("/data/lore/arena.lua")
 load("/data/lore/keepsake.lua")
+load("/data/lore/ardhungol.lua")
diff --git a/game/modules/tome/data/lore/maze.lua b/game/modules/tome/data/lore/maze.lua
index 1355752e8b5bde168e9e30fabf6a583b8e5035e3..df33522f7e1ab8c2f5f3b4605e19a8c2a9161eb4 100644
--- a/game/modules/tome/data/lore/maze.lua
+++ b/game/modules/tome/data/lore/maze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/misc.lua b/game/modules/tome/data/lore/misc.lua
index 4ad4f99e03236c72cca07113cecce7886f3f0f6e..a361614204e4b4e2a55e9e5d2fe4b91b58014734 100644
--- a/game/modules/tome/data/lore/misc.lua
+++ b/game/modules/tome/data/lore/misc.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -663,12 +663,17 @@ newLore{
 	lore = [[Dirge of the Naloren
 
 There once was a village
-the Nalore held dear
+the Nalore held dear,
 but when Ol' Walrog came t'pillage,
-they did quiver in fear.
+they cowered in fear.
 
-So remember the tale
-of dead Old Shellsea,
-for Ol' Walrog sent the gale,
-that ended Old Shellsea.]]
+He trampled their men
+and their babes newly born,
+and seeing it finished,
+he summoned a storm.
+
+So remember old Shellsea
+as she was in the past,
+for Ol' Walrog sent the gale
+that drowned her at last.]]
 }
diff --git a/game/modules/tome/data/lore/noxious-caldera.lua b/game/modules/tome/data/lore/noxious-caldera.lua
index 5076a1fec50d6ace6a06693ecf40804e98d9197b..3226fb5aec951554e3e3c6f0cb70d7afc939de8f 100644
--- a/game/modules/tome/data/lore/noxious-caldera.lua
+++ b/game/modules/tome/data/lore/noxious-caldera.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/old-forest.lua b/game/modules/tome/data/lore/old-forest.lua
index d5b416ebaf00dba80afd9f62c6ba25371d2cd415..ea1dfb010f1102247b0669bdec6f3614b20634c7 100644
--- a/game/modules/tome/data/lore/old-forest.lua
+++ b/game/modules/tome/data/lore/old-forest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/orc-prides.lua b/game/modules/tome/data/lore/orc-prides.lua
index 8b1abfe189879c79d974b36929ed5b3f802c19d6..c5dff59c7917b4a96f3ba6cd499f3e5e45a5802d 100644
--- a/game/modules/tome/data/lore/orc-prides.lua
+++ b/game/modules/tome/data/lore/orc-prides.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/rhaloren.lua b/game/modules/tome/data/lore/rhaloren.lua
index f1d9ddca03e1641c27b1ad9281a597a9966b3054..3b1bcabf85a5dcd8d9cd7aedb2c4b4166c6304aa 100644
--- a/game/modules/tome/data/lore/rhaloren.lua
+++ b/game/modules/tome/data/lore/rhaloren.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/sandworm.lua b/game/modules/tome/data/lore/sandworm.lua
index bc82664c5d79682bc18a1d63c4c58c07bcda83a2..42d28945d27be53c7b4b17ece6303f3fa516a144 100644
--- a/game/modules/tome/data/lore/sandworm.lua
+++ b/game/modules/tome/data/lore/sandworm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/scintillating-caves.lua b/game/modules/tome/data/lore/scintillating-caves.lua
index 02d3ba95bc67fa660575ced68959935fd09f9e97..6a906c013309bbf77eaa3d48257cee2b6d9c5a23 100644
--- a/game/modules/tome/data/lore/scintillating-caves.lua
+++ b/game/modules/tome/data/lore/scintillating-caves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/shertul.lua b/game/modules/tome/data/lore/shertul.lua
index 1a29337e289db88a50cfd9ef484d2f9e58d4c0ae..85378a943f795a8f2f7729949392a9847c41d147 100644
--- a/game/modules/tome/data/lore/shertul.lua
+++ b/game/modules/tome/data/lore/shertul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/slazish.lua b/game/modules/tome/data/lore/slazish.lua
index 5defcd80b7e7dd464db7163cd4405bdd7c6be529..75deb0a93d40e2877a91a007a54bb2e43d036f7b 100644
--- a/game/modules/tome/data/lore/slazish.lua
+++ b/game/modules/tome/data/lore/slazish.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/spellblaze.lua b/game/modules/tome/data/lore/spellblaze.lua
index 74e360d656996c5ce35d61174e08c41dfd6199c2..eb1903e7017b4bc58c93fc474d3ec920394f0588 100644
--- a/game/modules/tome/data/lore/spellblaze.lua
+++ b/game/modules/tome/data/lore/spellblaze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/spellhunt.lua b/game/modules/tome/data/lore/spellhunt.lua
index fcbc94768ac8962f85a339e97d743192396cb5fe..d0a9484fd9ce7077795e0df1143fedef3f043884 100644
--- a/game/modules/tome/data/lore/spellhunt.lua
+++ b/game/modules/tome/data/lore/spellhunt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/sunwall.lua b/game/modules/tome/data/lore/sunwall.lua
index a3e3d41a25ad888423345ed2e2179fa975d26603..05fa2a78ee339e6fe3e596a09ebdfe126692da70 100644
--- a/game/modules/tome/data/lore/sunwall.lua
+++ b/game/modules/tome/data/lore/sunwall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/trollmire.lua b/game/modules/tome/data/lore/trollmire.lua
index 541f87d03fa8fdd28b68a004ab5da7164cc6b41e..7ca7a8d03c4be6195ed01ba9f0447ea633c93005 100644
--- a/game/modules/tome/data/lore/trollmire.lua
+++ b/game/modules/tome/data/lore/trollmire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/lore/zigur.lua b/game/modules/tome/data/lore/zigur.lua
index 5472b2e1d78dfc0a77942bbf46af1b05c3f237fd..f717094bb1a7f091f461f78997c78c152a9038cb 100644
--- a/game/modules/tome/data/lore/zigur.lua
+++ b/game/modules/tome/data/lore/zigur.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/events/old-battle-field.lua b/game/modules/tome/data/maps/events/old-battle-field.lua
index 4c431be0c7f9cd99fa06178e487ecb975fe17a02..f5725c45846c8597dd74d7e31538a9f3847541bb 100644
--- a/game/modules/tome/data/maps/events/old-battle-field.lua
+++ b/game/modules/tome/data/maps/events/old-battle-field.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/quests/lost-merchant.lua b/game/modules/tome/data/maps/quests/lost-merchant.lua
index 3770ffcf6bf503f42782b95c5be426fa7db4fcca..c8b86883fd2edd1685b054e7735a5dc1b3928275 100644
--- a/game/modules/tome/data/maps/quests/lost-merchant.lua
+++ b/game/modules/tome/data/maps/quests/lost-merchant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/stellar-system/shandral.lua b/game/modules/tome/data/maps/stellar-system/shandral.lua
index 8cbf114cab8cba125adab9dd4c83118b81362db3..3b95df16b28eff668189a5a36c5e000fff8a8690 100644
--- a/game/modules/tome/data/maps/stellar-system/shandral.lua
+++ b/game/modules/tome/data/maps/stellar-system/shandral.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/angolwen.lua b/game/modules/tome/data/maps/towns/angolwen.lua
index 455fe99b9e13ca70f12982d1d3029d85d7bf7ee6..7b60b79c8563efad8b998e0e5b49474b19ce614e 100644
--- a/game/modules/tome/data/maps/towns/angolwen.lua
+++ b/game/modules/tome/data/maps/towns/angolwen.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/derth.lua b/game/modules/tome/data/maps/towns/derth.lua
index 5e5be30c2cd2a98e8f7ecba807a37bd01eef0fab..a67ec5e8e6ac21d398f8249fdd66bf6e6b57624f 100644
--- a/game/modules/tome/data/maps/towns/derth.lua
+++ b/game/modules/tome/data/maps/towns/derth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/elvala.lua b/game/modules/tome/data/maps/towns/elvala.lua
index 396c3d89374d35dbf7f24cc9adc4c14ef5477c00..19c66dd891432638060002259505f195f3837622 100644
--- a/game/modules/tome/data/maps/towns/elvala.lua
+++ b/game/modules/tome/data/maps/towns/elvala.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/gates-of-morning.lua b/game/modules/tome/data/maps/towns/gates-of-morning.lua
index 876e9bbc0281f1b940a31160ba92b40216b90e67..eec3bb223e34c1eb908f2ef21acb2616117a004e 100644
--- a/game/modules/tome/data/maps/towns/gates-of-morning.lua
+++ b/game/modules/tome/data/maps/towns/gates-of-morning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/irkkk.lua b/game/modules/tome/data/maps/towns/irkkk.lua
index 65c57f5d4cc202c67241108ecd111f36d9637220..4e01774937bac01e10a79ebbc27260856a8371dd 100644
--- a/game/modules/tome/data/maps/towns/irkkk.lua
+++ b/game/modules/tome/data/maps/towns/irkkk.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/iron-council.lua b/game/modules/tome/data/maps/towns/iron-council.lua
index ea52fec1d0515dbbacc40077c7e5ea95d67e27ea..aa6158f214bcc9b1df539f958176eb8760749501 100644
--- a/game/modules/tome/data/maps/towns/iron-council.lua
+++ b/game/modules/tome/data/maps/towns/iron-council.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/last-hope.lua b/game/modules/tome/data/maps/towns/last-hope.lua
index 20ea058974092260b3cf1338de16b0e7f2153c54..26950fb2228c5824199cd260c42adced0f10a4e3 100644
--- a/game/modules/tome/data/maps/towns/last-hope.lua
+++ b/game/modules/tome/data/maps/towns/last-hope.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/lumberjack-village.lua b/game/modules/tome/data/maps/towns/lumberjack-village.lua
index da99379c5493cc6d5e1321a8ef3822891ea981ba..089a845c59ba5a43ab381ffc8269b4d60e718d73 100644
--- a/game/modules/tome/data/maps/towns/lumberjack-village.lua
+++ b/game/modules/tome/data/maps/towns/lumberjack-village.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/point-zero.lua b/game/modules/tome/data/maps/towns/point-zero.lua
index 15e81b3a7a146d1870a5f672d7cfea37f1ed693c..393437e32bb6a167cbc31f44709008ea10821674 100644
--- a/game/modules/tome/data/maps/towns/point-zero.lua
+++ b/game/modules/tome/data/maps/towns/point-zero.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/towns/shatur.lua b/game/modules/tome/data/maps/towns/shatur.lua
index 652d74f612e46a347fbff485103e6b5d092359ee..5a9477585b9ca08a1d538525f169a52403828cb6 100644
--- a/game/modules/tome/data/maps/towns/shatur.lua
+++ b/game/modules/tome/data/maps/towns/shatur.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,8 +18,8 @@
 -- darkgod@te4.org
 
 defineTile('<', "GRASS_UP_WILDERNESS")
-defineTile('t', "TREE")
-defineTile('s', {"ROCKY_SNOWY_TREE","ROCKY_SNOWY_TREE2","ROCKY_SNOWY_TREE3","ROCKY_SNOWY_TREE4","ROCKY_SNOWY_TREE5","ROCKY_SNOWY_TREE6","ROCKY_SNOWY_TREE7","ROCKY_SNOWY_TREE8","ROCKY_SNOWY_TREE9","ROCKY_SNOWY_TREE10","ROCKY_SNOWY_TREE11","ROCKY_SNOWY_TREE12","ROCKY_SNOWY_TREE13","ROCKY_SNOWY_TREE14","ROCKY_SNOWY_TREE15","ROCKY_SNOWY_TREE16","ROCKY_SNOWY_TREE17","ROCKY_SNOWY_TREE18","ROCKY_SNOWY_TREE19","ROCKY_SNOWY_TREE20"})
+defineTile('t', "ELVEN_TREE")
+defineTile('s', "SNOW_ELVEN_TREE")
 defineTile('-', "ROCKY_GROUND")
 defineTile('~', "DEEP_WATER")
 defineTile('.', "GRASS")
diff --git a/game/modules/tome/data/maps/towns/zigur.lua b/game/modules/tome/data/maps/towns/zigur.lua
index 2b27ec4bd0ad652d748d56a299b1bd94db6ebcd0..63a3cc92ef53ec8391fe68fdf823155b01b85e72 100644
--- a/game/modules/tome/data/maps/towns/zigur.lua
+++ b/game/modules/tome/data/maps/towns/zigur.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/tutorial/tutorial1.lua b/game/modules/tome/data/maps/tutorial/tutorial1.lua
index 10e23573e3709aae90252b187eb4c9aed0c170f3..66b323406e6b7cbf3a103d046c5988ae3931f610 100644
--- a/game/modules/tome/data/maps/tutorial/tutorial1.lua
+++ b/game/modules/tome/data/maps/tutorial/tutorial1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/tutorial/tutorial2.lua b/game/modules/tome/data/maps/tutorial/tutorial2.lua
index 9b0bcd14fb59ba0c6213a19f4047ab408f47da17..136a1ab89402193946544ba0fb8dddddad898f78 100644
--- a/game/modules/tome/data/maps/tutorial/tutorial2.lua
+++ b/game/modules/tome/data/maps/tutorial/tutorial2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/tutorial/tutorial3.lua b/game/modules/tome/data/maps/tutorial/tutorial3.lua
index 14026098566cef25e72d7482cddaf379f3492dd7..a54d1c72834a271994d6872a61fb3917fc7ab290 100644
--- a/game/modules/tome/data/maps/tutorial/tutorial3.lua
+++ b/game/modules/tome/data/maps/tutorial/tutorial3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/tutorial/tutorial4.lua b/game/modules/tome/data/maps/tutorial/tutorial4.lua
index b2911ac105aa361793d0463c82e838d717c06050..28200fc21c278f109feefebe2a05f4b2c265b95d 100644
--- a/game/modules/tome/data/maps/tutorial/tutorial4.lua
+++ b/game/modules/tome/data/maps/tutorial/tutorial4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/tutorial/tutorial5.lua b/game/modules/tome/data/maps/tutorial/tutorial5.lua
index 8139e3aeb14b345351f3b411edcda1aa08c25a14..1181102eaf342c0595994790e8556f56e55d2b57 100644
--- a/game/modules/tome/data/maps/tutorial/tutorial5.lua
+++ b/game/modules/tome/data/maps/tutorial/tutorial5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/tutorial/tutorial6.lua b/game/modules/tome/data/maps/tutorial/tutorial6.lua
index c222a19eae761bb3659bc05b7daf3251c93bfca6..26374b65c4b694999ebd027ee20c185ca7dd654a 100644
--- a/game/modules/tome/data/maps/tutorial/tutorial6.lua
+++ b/game/modules/tome/data/maps/tutorial/tutorial6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/32-chambers.lua b/game/modules/tome/data/maps/vaults/32-chambers.lua
index c3cf9d8f15324b69ca9107c8792cb845dcefba10..52f0ac3ba0701541026544cf2a9d18fb957fb04a 100644
--- a/game/modules/tome/data/maps/vaults/32-chambers.lua
+++ b/game/modules/tome/data/maps/vaults/32-chambers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/acidic-vault.lua b/game/modules/tome/data/maps/vaults/acidic-vault.lua
index 05ffa259ea45e6ba7b48d74ffaf1c90bc4381e0d..de6abeadb1b8db059306eae8686fca4a6595e05b 100644
--- a/game/modules/tome/data/maps/vaults/acidic-vault.lua
+++ b/game/modules/tome/data/maps/vaults/acidic-vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua b/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua
index e6788a1b9e13e0e7cfc16143213eabd948cf1422..b6380d86a777994b1152fddec2c7c9e6ef95a993 100644
--- a/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua
+++ b/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/bandit-fortress.lua b/game/modules/tome/data/maps/vaults/bandit-fortress.lua
index 2585660dfb1f9966b0d8e8c233cc82d507bcfc90..f8e151b65b2989a49b18ede7c1c5ced0ed857e40 100644
--- a/game/modules/tome/data/maps/vaults/bandit-fortress.lua
+++ b/game/modules/tome/data/maps/vaults/bandit-fortress.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/circle.lua b/game/modules/tome/data/maps/vaults/circle.lua
index 06b480bb384383fd6281d6e28643576362d48d40..a78b6c16c630a482832e85c39277766820ec537e 100644
--- a/game/modules/tome/data/maps/vaults/circle.lua
+++ b/game/modules/tome/data/maps/vaults/circle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/crypt.lua b/game/modules/tome/data/maps/vaults/crypt.lua
index fbb926c719f47ddefb88c48fb2f7c4e5db7f17d7..1adbb2153da09768a64646163a6309629917ca57 100644
--- a/game/modules/tome/data/maps/vaults/crypt.lua
+++ b/game/modules/tome/data/maps/vaults/crypt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/demon-nest-1.lua b/game/modules/tome/data/maps/vaults/demon-nest-1.lua
index 79f6e7fc6cc21cc54db29039477e24bab9a59295..8cd2c64fcf01c7a1d7ba507cfe7e57b8e41a8285 100644
--- a/game/modules/tome/data/maps/vaults/demon-nest-1.lua
+++ b/game/modules/tome/data/maps/vaults/demon-nest-1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/demon-nest-2.lua b/game/modules/tome/data/maps/vaults/demon-nest-2.lua
index 02151d1624e5d53dd61bd45acf4da13fb00453fa..9ec8a94cfdfcf0d54152117bac8616cb7c25f678 100644
--- a/game/modules/tome/data/maps/vaults/demon-nest-2.lua
+++ b/game/modules/tome/data/maps/vaults/demon-nest-2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/demon-nest-3.lua b/game/modules/tome/data/maps/vaults/demon-nest-3.lua
index b25fd062e7013414ac776093764fdd610af4fc7b..bf59ed149297a14342a9c5ee16233890a73d45e3 100644
--- a/game/modules/tome/data/maps/vaults/demon-nest-3.lua
+++ b/game/modules/tome/data/maps/vaults/demon-nest-3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/diggers.lua b/game/modules/tome/data/maps/vaults/diggers.lua
index 3807e5002276ceddbaa8449dea5bdb8b159e075a..fa175e1cf6dca606370b4150f8b9066b5973e5b7 100644
--- a/game/modules/tome/data/maps/vaults/diggers.lua
+++ b/game/modules/tome/data/maps/vaults/diggers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/double-t.lua b/game/modules/tome/data/maps/vaults/double-t.lua
index 18ce8eb1729289ecf7331e7e6fdd963c63deabe2..4b398635e8a943b3349dce929559f5c75c3c81a8 100644
--- a/game/modules/tome/data/maps/vaults/double-t.lua
+++ b/game/modules/tome/data/maps/vaults/double-t.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/dragon-loot.lua b/game/modules/tome/data/maps/vaults/dragon-loot.lua
index 25f9a9581b815d4644603096819e49a803e201d6..0f98ae5f9073460904eecb4f628aba1f75f39f62 100644
--- a/game/modules/tome/data/maps/vaults/dragon-loot.lua
+++ b/game/modules/tome/data/maps/vaults/dragon-loot.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/dragon_lair.lua b/game/modules/tome/data/maps/vaults/dragon_lair.lua
index 252bc1813a2bc556d40aa49e29db0a62cc9d76aa..f7dd5b2fd38f6680625456670f2467be5479bfb4 100644
--- a/game/modules/tome/data/maps/vaults/dragon_lair.lua
+++ b/game/modules/tome/data/maps/vaults/dragon_lair.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/forest-ruined-building1.lua b/game/modules/tome/data/maps/vaults/forest-ruined-building1.lua
index b683d98d1e2cc87c8caa196731b534232f6d46f3..f69e364403ee979bbceb21e400da873c66ad2b4a 100644
--- a/game/modules/tome/data/maps/vaults/forest-ruined-building1.lua
+++ b/game/modules/tome/data/maps/vaults/forest-ruined-building1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/forest-ruined-building2.lua b/game/modules/tome/data/maps/vaults/forest-ruined-building2.lua
index 31bfff5f300714ee57848a18d09b875f7f0c46b4..bee05844414a8b33e330648796b19c9e0840d536 100644
--- a/game/modules/tome/data/maps/vaults/forest-ruined-building2.lua
+++ b/game/modules/tome/data/maps/vaults/forest-ruined-building2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/forest-ruined-building3.lua b/game/modules/tome/data/maps/vaults/forest-ruined-building3.lua
index 5132da44f8cf28d7ce79591b03d914f19b69d356..aea7be07bcb48a14ae0910b1c080b0d223d0a91f 100644
--- a/game/modules/tome/data/maps/vaults/forest-ruined-building3.lua
+++ b/game/modules/tome/data/maps/vaults/forest-ruined-building3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/forest-snake-pit.lua b/game/modules/tome/data/maps/vaults/forest-snake-pit.lua
index a17c1075df8877ddc9734f2d127a54e478345298..1de3c99b098c6a02cfd6a124230b0f83a92e8a59 100644
--- a/game/modules/tome/data/maps/vaults/forest-snake-pit.lua
+++ b/game/modules/tome/data/maps/vaults/forest-snake-pit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/frost-dragon-lair.lua b/game/modules/tome/data/maps/vaults/frost-dragon-lair.lua
index a296ff25781d4cfbabe27eae471de121763c8978..c9e7edc16369f4172ef486e3483e9d7ada14194a 100644
--- a/game/modules/tome/data/maps/vaults/frost-dragon-lair.lua
+++ b/game/modules/tome/data/maps/vaults/frost-dragon-lair.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/greater-checkerboard.lua b/game/modules/tome/data/maps/vaults/greater-checkerboard.lua
index 1523d792d00a8aadf82ad67e53bc4858b1bbd851..0197bd647f839a53189538a4fc31a6aadc566f95 100644
--- a/game/modules/tome/data/maps/vaults/greater-checkerboard.lua
+++ b/game/modules/tome/data/maps/vaults/greater-checkerboard.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/greater-crypt.lua b/game/modules/tome/data/maps/vaults/greater-crypt.lua
index 4e70e489192e1bf5d9a60cf66ea39a8f246c00df..bcef42b584bcc36876cdffd1787801b9a5a898cb 100644
--- a/game/modules/tome/data/maps/vaults/greater-crypt.lua
+++ b/game/modules/tome/data/maps/vaults/greater-crypt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/greater-money-vault.lua b/game/modules/tome/data/maps/vaults/greater-money-vault.lua
index 27437febe939ce8b9e7bc8e530e0486c3c76bbe4..aa0087f6d041de5e57b4f909ef4ccf112dcf2678 100644
--- a/game/modules/tome/data/maps/vaults/greater-money-vault.lua
+++ b/game/modules/tome/data/maps/vaults/greater-money-vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/hillbert_curve.lua b/game/modules/tome/data/maps/vaults/hillbert_curve.lua
index 7730a3ddea22447d1573b1af17b399f06b4bea49..8fb4d76f928918cf1c45da1a6377023723df922c 100644
--- a/game/modules/tome/data/maps/vaults/hillbert_curve.lua
+++ b/game/modules/tome/data/maps/vaults/hillbert_curve.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/honey_glade.lua b/game/modules/tome/data/maps/vaults/honey_glade.lua
index b5513ad8f05f80cb153f584a436d803cf347ff8f..cadecc21456d232f454e6adb162614914701ce0c 100644
--- a/game/modules/tome/data/maps/vaults/honey_glade.lua
+++ b/game/modules/tome/data/maps/vaults/honey_glade.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/horror-chamber.lua b/game/modules/tome/data/maps/vaults/horror-chamber.lua
index e67ee46d8f149885e69d26c9bbe808b3af4a703a..16a9d58e4831067c9164ac3e832ae5fae72e58fd 100644
--- a/game/modules/tome/data/maps/vaults/horror-chamber.lua
+++ b/game/modules/tome/data/maps/vaults/horror-chamber.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/hostel.lua b/game/modules/tome/data/maps/vaults/hostel.lua
index 9634e03c3128f380103ae91aa4c460bf15bdf9bf..4750418f79c71f3d4dec1892518f0bfb90643899 100644
--- a/game/modules/tome/data/maps/vaults/hostel.lua
+++ b/game/modules/tome/data/maps/vaults/hostel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/lava_island.lua b/game/modules/tome/data/maps/vaults/lava_island.lua
index f43699e11557188767590264a9dc324ebc6fd12a..6dad08690b308f3f734c9e59c916b77fb2c33615 100644
--- a/game/modules/tome/data/maps/vaults/lava_island.lua
+++ b/game/modules/tome/data/maps/vaults/lava_island.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/lich-lair.lua b/game/modules/tome/data/maps/vaults/lich-lair.lua
index a45e092ac5090bbf9256c90401fb43c8782e5a9b..6e8f8c0597ea26fa1bcb1acb36a21def97814b7c 100644
--- a/game/modules/tome/data/maps/vaults/lich-lair.lua
+++ b/game/modules/tome/data/maps/vaults/lich-lair.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/lightning-vault.lua b/game/modules/tome/data/maps/vaults/lightning-vault.lua
index aa243836ed2aa424b852d027e01445b640c1f1e9..ba13f7fba5f7a3aef183de48901809dcd71cdb59 100644
--- a/game/modules/tome/data/maps/vaults/lightning-vault.lua
+++ b/game/modules/tome/data/maps/vaults/lightning-vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/loot-vault.lua b/game/modules/tome/data/maps/vaults/loot-vault.lua
index e74ea2489a6c8e3abc91694abf82b830ba2734af..7a5dde1823e162011cdb084545cfedc8e9c94c7a 100644
--- a/game/modules/tome/data/maps/vaults/loot-vault.lua
+++ b/game/modules/tome/data/maps/vaults/loot-vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/mage-hideout.lua b/game/modules/tome/data/maps/vaults/mage-hideout.lua
index 98ec2541d39090a36159eabdc9c9f3d48e809708..b0a588a3795758e22e99d9e2d1660a1dd69ed922 100644
--- a/game/modules/tome/data/maps/vaults/mage-hideout.lua
+++ b/game/modules/tome/data/maps/vaults/mage-hideout.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/mold-path.lua b/game/modules/tome/data/maps/vaults/mold-path.lua
index 7d4cd0164dfa7f6f34be019db354ea9ce735ced8..8cf0fe207f8c9ac92b383a6d18948cab86c0fc8b 100644
--- a/game/modules/tome/data/maps/vaults/mold-path.lua
+++ b/game/modules/tome/data/maps/vaults/mold-path.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/old-forest-swamp.lua b/game/modules/tome/data/maps/vaults/old-forest-swamp.lua
index 3ea42f8eb42913d49e7fe47dc900cfade83e4297..35609e0991e2bd2707f6836ca222c0bdfdbad9ce 100644
--- a/game/modules/tome/data/maps/vaults/old-forest-swamp.lua
+++ b/game/modules/tome/data/maps/vaults/old-forest-swamp.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/orc-armoury.lua b/game/modules/tome/data/maps/vaults/orc-armoury.lua
index 158f0b5dcf3ab0772d312237909d8e8909f91ec5..0163054e3224fb75723b04aac9864b506d16d53a 100644
--- a/game/modules/tome/data/maps/vaults/orc-armoury.lua
+++ b/game/modules/tome/data/maps/vaults/orc-armoury.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/orc-hatred.lua b/game/modules/tome/data/maps/vaults/orc-hatred.lua
index 0b3ebb69823473880284c44fe319b21483cb92a6..3b96b7849cbca0a966aa036a7c1b1ee5262eaa9f 100644
--- a/game/modules/tome/data/maps/vaults/orc-hatred.lua
+++ b/game/modules/tome/data/maps/vaults/orc-hatred.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/orc-necromancer.lua b/game/modules/tome/data/maps/vaults/orc-necromancer.lua
index 28f1c74199830c7ffa08a3e48c76142d1e2873ac..62f8f858016cd8a63ee9962e8013b5c1174b3432 100644
--- a/game/modules/tome/data/maps/vaults/orc-necromancer.lua
+++ b/game/modules/tome/data/maps/vaults/orc-necromancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua b/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua
index 25c1455a7de71c6aa3389865b0fc50b5346f262b..35d0c92c5ac306d9e804df1c49d7bc7b21d186fc 100644
--- a/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua
+++ b/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/plantlife.lua b/game/modules/tome/data/maps/vaults/plantlife.lua
index f1c9dbc1721910bcd8349638d90f5abea388599d..88598b2f0c40cf6501101f76dedec83b2ec89826 100644
--- a/game/modules/tome/data/maps/vaults/plantlife.lua
+++ b/game/modules/tome/data/maps/vaults/plantlife.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/quiet.lua b/game/modules/tome/data/maps/vaults/quiet.lua
index e53eebf77a824d01eb5249f7fcedad424339ca52..c483dd6478b00d302c7545c96fa8ebcdafd21f0b 100644
--- a/game/modules/tome/data/maps/vaults/quiet.lua
+++ b/game/modules/tome/data/maps/vaults/quiet.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/rain-of-death.lua b/game/modules/tome/data/maps/vaults/rain-of-death.lua
index 981340dfbc8e98e468409f75cdcef2f01a288566..d79aa90109da4f9bdeb93fe8fd6ac25d220f8e47 100644
--- a/game/modules/tome/data/maps/vaults/rain-of-death.lua
+++ b/game/modules/tome/data/maps/vaults/rain-of-death.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/rat-nest.lua b/game/modules/tome/data/maps/vaults/rat-nest.lua
index 9b7e99beb9d9b36485d75b454b5ae611c957164b..223af86329d9adeae3199cb6399d1c503c025be6 100644
--- a/game/modules/tome/data/maps/vaults/rat-nest.lua
+++ b/game/modules/tome/data/maps/vaults/rat-nest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua b/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua
index 1570a4e7a2f205dee1bae3d98fb632e4312b0bfb..86f9460fc75e60abe108cf2464f3920af113ecd6 100644
--- a/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua
+++ b/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/snow-giant-camp.lua b/game/modules/tome/data/maps/vaults/snow-giant-camp.lua
index fcf13fcad97dbec94ef79f0a20b89e7691302501..409af2c8c2dddf04d9d61f0acc7e3926a1d5990c 100644
--- a/game/modules/tome/data/maps/vaults/snow-giant-camp.lua
+++ b/game/modules/tome/data/maps/vaults/snow-giant-camp.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/spider-den.lua b/game/modules/tome/data/maps/vaults/spider-den.lua
index f086fa50599d2b5fef66d3055d05378ed8c76bd0..f7450093566c185472cb4e4996a84dc42cda92cc 100644
--- a/game/modules/tome/data/maps/vaults/spider-den.lua
+++ b/game/modules/tome/data/maps/vaults/spider-den.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/test.lua b/game/modules/tome/data/maps/vaults/test.lua
index 87009d343f1a867f1a66bb7805c2134ae13ba306..089eae7f8f6b943eba96e2b229c18d6b3483dcc8 100644
--- a/game/modules/tome/data/maps/vaults/test.lua
+++ b/game/modules/tome/data/maps/vaults/test.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/thief-hideout.lua b/game/modules/tome/data/maps/vaults/thief-hideout.lua
index bf8e7e5dfe9138d66f1cbe4577bc2fc5bbbeb5f4..c0d71fb8fb2de65e0ffea34c7fd66a7d2f28e010 100644
--- a/game/modules/tome/data/maps/vaults/thief-hideout.lua
+++ b/game/modules/tome/data/maps/vaults/thief-hideout.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/trapped-hexagon.lua b/game/modules/tome/data/maps/vaults/trapped-hexagon.lua
index 4cf9020354572045970e617f5c42a5ac79f97643..4d91e5c87a8e5b2348cfa3b3aa09a5be3f866226 100644
--- a/game/modules/tome/data/maps/vaults/trapped-hexagon.lua
+++ b/game/modules/tome/data/maps/vaults/trapped-hexagon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/treasure1.lua b/game/modules/tome/data/maps/vaults/treasure1.lua
index 3f01b18a8dfd48f47a33e58ce3bd42874125684b..a8ced220aca937af6bfe086615ec47c492ead5ee 100644
--- a/game/modules/tome/data/maps/vaults/treasure1.lua
+++ b/game/modules/tome/data/maps/vaults/treasure1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/trickvault.lua b/game/modules/tome/data/maps/vaults/trickvault.lua
index fbb4ab5b4840ceca790cdd2911a9e61ddd71f9bf..a83c477c24f4ac99ac4f909be6fc2eb8d6a28c29 100644
--- a/game/modules/tome/data/maps/vaults/trickvault.lua
+++ b/game/modules/tome/data/maps/vaults/trickvault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/troll-hideout.lua b/game/modules/tome/data/maps/vaults/troll-hideout.lua
index 9414c80ad1d12c0296afd3516a21813e6f908022..90c28ede9decb73e61429d25e3b0ac141111c1d7 100644
--- a/game/modules/tome/data/maps/vaults/troll-hideout.lua
+++ b/game/modules/tome/data/maps/vaults/troll-hideout.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/water-vault.lua b/game/modules/tome/data/maps/vaults/water-vault.lua
index 139f3b4bf049480a4941b80d37d0c4bf5824cda0..ef18809545f2952cb6f3e4fb5380a96b2b982ca7 100644
--- a/game/modules/tome/data/maps/vaults/water-vault.lua
+++ b/game/modules/tome/data/maps/vaults/water-vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/xorn-trap.lua b/game/modules/tome/data/maps/vaults/xorn-trap.lua
index b41011a61d4eb66d91c8d3f158675766bef0e65b..4cd815014cc8d1f57d86480f49ba91b8a4508190 100644
--- a/game/modules/tome/data/maps/vaults/xorn-trap.lua
+++ b/game/modules/tome/data/maps/vaults/xorn-trap.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/yin-yang.lua b/game/modules/tome/data/maps/vaults/yin-yang.lua
index 538fcd5a463ab226ddcb7f9ac0368a6a7d187a31..a10dcbc846b445cdb53ef4089d958d8f758fa7a8 100644
--- a/game/modules/tome/data/maps/vaults/yin-yang.lua
+++ b/game/modules/tome/data/maps/vaults/yin-yang.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/vaults/zigzag-chambers.lua b/game/modules/tome/data/maps/vaults/zigzag-chambers.lua
index 731f1b0a30a61a9fdd7b5ee145b8dd7a4620c731..514936f1aa001a2f9c9b5d13005ed2e00ed2a721 100644
--- a/game/modules/tome/data/maps/vaults/zigzag-chambers.lua
+++ b/game/modules/tome/data/maps/vaults/zigzag-chambers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/wilderness/eyal.lua b/game/modules/tome/data/maps/wilderness/eyal.lua
index e7cc6edb07107e0dc72f7ab9e964d08470edf864..6068e5c9d8410f3ff0a2e54f05ac6b68cf6dd913 100644
--- a/game/modules/tome/data/maps/wilderness/eyal.lua
+++ b/game/modules/tome/data/maps/wilderness/eyal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -451,6 +451,7 @@ addSpot({36, 25}, "world-encounter", "lost-merchant")
 addSpot({37, 25}, "world-encounter", "lost-merchant")
 addSpot({35, 35}, "world-encounter", "noxious-caldera")
 addSpot({53, 5}, "world-encounter", "sludgenest")
+addSpot({162, 59}, "world-encounter", "orc-breeding-pits-spawn")
 
 -- addZone section
 addZone({1, 1, 78, 43}, "zonename", "Maj'Eyal")
@@ -471,6 +472,7 @@ addZone({37, 5, 50, 9}, "world-encounter", "merchant-quest")
 addZone({56, 8, 65, 13}, "world-encounter", "merchant-quest")
 addZone({69, 3, 77, 17}, "world-encounter", "merchant-quest")
 addZone({30, 28, 35, 33}, "world-encounter", "merchant-quest")
+addZone({145, 51, 167, 63}, "world-encounter", "orc-breeding-pits")
 
 -- ASCII map section
 return {
diff --git a/game/modules/tome/data/maps/zones/arena-unlock.lua b/game/modules/tome/data/maps/zones/arena-unlock.lua
index f40621e6ddb9b5cdad743776b43bcd97f69d0900..5f2be6fefe4ed731557642f1fe07742900df9723 100644
--- a/game/modules/tome/data/maps/zones/arena-unlock.lua
+++ b/game/modules/tome/data/maps/zones/arena-unlock.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/arena.lua b/game/modules/tome/data/maps/zones/arena.lua
index ca73e3d75ec47305f36fa850c46f1203f10821c3..ed85dba713270337c1c1a1bf3d546f261b8a2786 100644
--- a/game/modules/tome/data/maps/zones/arena.lua
+++ b/game/modules/tome/data/maps/zones/arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/blighted-ruins-last.lua b/game/modules/tome/data/maps/zones/blighted-ruins-last.lua
index f1776ac252c389d0d93c29de2896287f48f5a69b..112e421b36099637574037ef1b515e27afbba03b 100644
--- a/game/modules/tome/data/maps/zones/blighted-ruins-last.lua
+++ b/game/modules/tome/data/maps/zones/blighted-ruins-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/charred-scar.lua b/game/modules/tome/data/maps/zones/charred-scar.lua
index 8ba55ecc943163d34c045a74a8454e6b9462d245..18413b36a04109b49b0598218b5e86695ca89a93 100644
--- a/game/modules/tome/data/maps/zones/charred-scar.lua
+++ b/game/modules/tome/data/maps/zones/charred-scar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/crypt-kryl-feijan-last.lua b/game/modules/tome/data/maps/zones/crypt-kryl-feijan-last.lua
index 8029dcbf787f46c0f805df4b2a8b4ef27ce03aab..08499827b125c0598a6e91b81107d519adc38113 100644
--- a/game/modules/tome/data/maps/zones/crypt-kryl-feijan-last.lua
+++ b/game/modules/tome/data/maps/zones/crypt-kryl-feijan-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/deep-bellow-last.lua b/game/modules/tome/data/maps/zones/deep-bellow-last.lua
index 4c370b94b74020feb05e678abea3e0d520b0213b..94517593b49adb5a4491578266915bd35a81d5d6 100644
--- a/game/modules/tome/data/maps/zones/deep-bellow-last.lua
+++ b/game/modules/tome/data/maps/zones/deep-bellow-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/dreadfell-ambush.lua b/game/modules/tome/data/maps/zones/dreadfell-ambush.lua
index a14ba684f55f9ebd7fb9270823dac42c616ce367..b4c82df7a32583d456d48fae3737ef01cb177aad 100644
--- a/game/modules/tome/data/maps/zones/dreadfell-ambush.lua
+++ b/game/modules/tome/data/maps/zones/dreadfell-ambush.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/eruan-last.lua b/game/modules/tome/data/maps/zones/eruan-last.lua
index d1ce54ce8807d5e894a79b6549433aaa12d6d55d..1e154082146235468e0a7cd24f9384094cb485a0 100644
--- a/game/modules/tome/data/maps/zones/eruan-last.lua
+++ b/game/modules/tome/data/maps/zones/eruan-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/flooded-cave-last.lua b/game/modules/tome/data/maps/zones/flooded-cave-last.lua
index 436ff646f64cb104530f8a74ddca7eadad26077b..efe4e6f6f6d609ebcd59d232e5e751400ae25d4e 100644
--- a/game/modules/tome/data/maps/zones/flooded-cave-last.lua
+++ b/game/modules/tome/data/maps/zones/flooded-cave-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/gladium.lua b/game/modules/tome/data/maps/zones/gladium.lua
index 1ce2f16ff2d9daba53a2f8bf8f5d2947863dc957..e33c559ccf4a56726b6177f97968625769f5a907 100644
--- a/game/modules/tome/data/maps/zones/gladium.lua
+++ b/game/modules/tome/data/maps/zones/gladium.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/halfling-ruins-last.lua b/game/modules/tome/data/maps/zones/halfling-ruins-last.lua
index d59c65b46ac84ce2b518c621bd6732f2663dd9ba..2985d6251a46e78eeefd5f45ee91d618f7d21e3e 100644
--- a/game/modules/tome/data/maps/zones/halfling-ruins-last.lua
+++ b/game/modules/tome/data/maps/zones/halfling-ruins-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/high-peak-last.lua b/game/modules/tome/data/maps/zones/high-peak-last.lua
index 8c664dc82d047cfe3446a621c0036fd43f962c70..8bb3bdef5930e74db4cf6fd56aba43cbff970bb4 100644
--- a/game/modules/tome/data/maps/zones/high-peak-last.lua
+++ b/game/modules/tome/data/maps/zones/high-peak-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/keepsake-cave-entrance.lua b/game/modules/tome/data/maps/zones/keepsake-cave-entrance.lua
index 7d73dea7efb307836a92f05fd80d53c2c135b0b5..a9dec966c5f1883da1c203e36935f3c421ac46b8 100644
--- a/game/modules/tome/data/maps/zones/keepsake-cave-entrance.lua
+++ b/game/modules/tome/data/maps/zones/keepsake-cave-entrance.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/keepsake-cave-last.lua b/game/modules/tome/data/maps/zones/keepsake-cave-last.lua
index e0757d1ed59e6c1294c75d6c0f230bca8ea285c7..45d4ce788e74df4f306a35c14b15648c00eb48a3 100644
--- a/game/modules/tome/data/maps/zones/keepsake-cave-last.lua
+++ b/game/modules/tome/data/maps/zones/keepsake-cave-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/keepsake-dream.lua b/game/modules/tome/data/maps/zones/keepsake-dream.lua
index d0fbe5ae6400a04425fc33dd467658713f640d00..a56906d09277483df73d90f8b38daa0503f8db63 100644
--- a/game/modules/tome/data/maps/zones/keepsake-dream.lua
+++ b/game/modules/tome/data/maps/zones/keepsake-dream.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/keepsake-meadow.lua b/game/modules/tome/data/maps/zones/keepsake-meadow.lua
index b849638195327b9b67b28f133c40d03c1032143c..57318745ce39a5be8b93092fba41e87fd72e4f3e 100644
--- a/game/modules/tome/data/maps/zones/keepsake-meadow.lua
+++ b/game/modules/tome/data/maps/zones/keepsake-meadow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/lake-nur.lua b/game/modules/tome/data/maps/zones/lake-nur.lua
index 43afb3bbc47ea9678e837eec3664cac7e7183b74..d99d9618242ca95a8afb29c6e9462b6605c6a125 100644
--- a/game/modules/tome/data/maps/zones/lake-nur.lua
+++ b/game/modules/tome/data/maps/zones/lake-nur.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/last-hope-graveyard.lua b/game/modules/tome/data/maps/zones/last-hope-graveyard.lua
index 2d2f75ddfc129be6c93510a45722eb49e9276dab..1f2717f67a0d930cdf6a7853679e9dd27037536f 100644
--- a/game/modules/tome/data/maps/zones/last-hope-graveyard.lua
+++ b/game/modules/tome/data/maps/zones/last-hope-graveyard.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/last-hope-mausoleum.lua b/game/modules/tome/data/maps/zones/last-hope-mausoleum.lua
index bd28d78b6b67e9eb67b606ff5d3eafda49232b68..941e943e6bf5e5a0bafe179723b3898b524783d7 100644
--- a/game/modules/tome/data/maps/zones/last-hope-mausoleum.lua
+++ b/game/modules/tome/data/maps/zones/last-hope-mausoleum.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/mark-spellblaze-last.lua b/game/modules/tome/data/maps/zones/mark-spellblaze-last.lua
index 6a233a8326e22e79f5949f20cbb26b481f4ce5db..db63b728d25bf7e399a9891cba35175f2ed1761e 100644
--- a/game/modules/tome/data/maps/zones/mark-spellblaze-last.lua
+++ b/game/modules/tome/data/maps/zones/mark-spellblaze-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -26,7 +26,7 @@ subGenerator{
 		sqrt_percent = 45,
 		noise = "fbm_perlin",
 		floor = "BURNT_GROUND",
-		wall = {"BURNT_TREE1","BURNT_TREE2","BURNT_TREE3","BURNT_TREE4","BURNT_TREE5","BURNT_TREE6","BURNT_TREE7","BURNT_TREE8","BURNT_TREE9","BURNT_TREE10","BURNT_TREE11","BURNT_TREE12","BURNT_TREE13","BURNT_TREE14","BURNT_TREE15","BURNT_TREE16","BURNT_TREE17","BURNT_TREE18","BURNT_TREE19","BURNT_TREE20",},
+		wall = "BURNT_TREE",
 		up = "BURNT_UP4",
 		down = "BURNT_DOWN6",
 	},
@@ -36,7 +36,7 @@ subGenerator{
 checkConnectivity({55,24}, "entrance", "boss-area", "boss-area")
 
 -- defineTile section
-defineTile("#", {"BURNT_TREE1","BURNT_TREE2","BURNT_TREE3","BURNT_TREE4","BURNT_TREE5","BURNT_TREE6","BURNT_TREE7","BURNT_TREE8","BURNT_TREE9","BURNT_TREE10","BURNT_TREE11","BURNT_TREE12","BURNT_TREE13","BURNT_TREE14","BURNT_TREE15","BURNT_TREE16","BURNT_TREE17","BURNT_TREE18","BURNT_TREE19","BURNT_TREE20",})
+defineTile("#", "BURNT_TREE")
 defineTile("~", "LAVA")
 defineTile("+", "ALTAR")
 defineTile(".", "BURNT_GROUND")
diff --git a/game/modules/tome/data/maps/zones/orc-breeding-pit-first.lua b/game/modules/tome/data/maps/zones/orc-breeding-pit-first.lua
index 916650b35cfde3984ffcbb92f19ce91629544fb4..b90baf566db8204439b523b721104c75f5ec8509 100644
--- a/game/modules/tome/data/maps/zones/orc-breeding-pit-first.lua
+++ b/game/modules/tome/data/maps/zones/orc-breeding-pit-first.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/prides-middle.lua b/game/modules/tome/data/maps/zones/prides-middle.lua
index 9657b7964701f54fc3b626bdf6a5f286e20c7a80..c9c13300d57c2bdbe892a86c5084a97b545dede8 100644
--- a/game/modules/tome/data/maps/zones/prides-middle.lua
+++ b/game/modules/tome/data/maps/zones/prides-middle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/prides.lua b/game/modules/tome/data/maps/zones/prides.lua
index 214459fe1a444e990e3eeec9e94e8fa17d1e34d2..c066b31d7b7d4becebfd6d4209a4a2d556389984 100644
--- a/game/modules/tome/data/maps/zones/prides.lua
+++ b/game/modules/tome/data/maps/zones/prides.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/reknor-escape-last.lua b/game/modules/tome/data/maps/zones/reknor-escape-last.lua
index e16acf3f87377e52777337b86757e4cb05dc8a85..16929e4db35210f14882c7cb7bcf75a635ebf8c8 100644
--- a/game/modules/tome/data/maps/zones/reknor-escape-last.lua
+++ b/game/modules/tome/data/maps/zones/reknor-escape-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/reknor-last.lua b/game/modules/tome/data/maps/zones/reknor-last.lua
index 7fb257950cf3bb31cedc95875c5d162739a0a666..61abc56bc3f38723d16389533654bdd8a35ff0d2 100644
--- a/game/modules/tome/data/maps/zones/reknor-last.lua
+++ b/game/modules/tome/data/maps/zones/reknor-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/rhaloren-camp-last.lua b/game/modules/tome/data/maps/zones/rhaloren-camp-last.lua
index b79e2d4792aae3f9285f903f8b95141bd2913743..82c5130a897ac728226edbdd0bac5f6d5e98741f 100644
--- a/game/modules/tome/data/maps/zones/rhaloren-camp-last.lua
+++ b/game/modules/tome/data/maps/zones/rhaloren-camp-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/ring-of-blood.lua b/game/modules/tome/data/maps/zones/ring-of-blood.lua
index 02bb2342a3128ee584c4f3edc76489d3ca112344..264bb64afc76c07456df1f673af943402053d757 100644
--- a/game/modules/tome/data/maps/zones/ring-of-blood.lua
+++ b/game/modules/tome/data/maps/zones/ring-of-blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/ruined-dungeon.lua b/game/modules/tome/data/maps/zones/ruined-dungeon.lua
index c5008ca8ce2e64d3260263efb698eaf256558afe..e8c3eb375b9c4a29d85022bd9deba1d8dfc7970a 100644
--- a/game/modules/tome/data/maps/zones/ruined-dungeon.lua
+++ b/game/modules/tome/data/maps/zones/ruined-dungeon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/ruins-kor-pul-invaded-last.lua b/game/modules/tome/data/maps/zones/ruins-kor-pul-invaded-last.lua
index afe930198e2cc604d839eaae0dee97653fcb83fc..a0b95a06237f4d7d2c1d8887f7609af24c1f46b3 100644
--- a/game/modules/tome/data/maps/zones/ruins-kor-pul-invaded-last.lua
+++ b/game/modules/tome/data/maps/zones/ruins-kor-pul-invaded-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/ruins-kor-pul-last.lua b/game/modules/tome/data/maps/zones/ruins-kor-pul-last.lua
index a61ae15d55ed4d727c51f01b802461a65b6c97d6..f988ee5d2e9d2fafa3ef0665ff8fd5a89b7af298 100644
--- a/game/modules/tome/data/maps/zones/ruins-kor-pul-last.lua
+++ b/game/modules/tome/data/maps/zones/ruins-kor-pul-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/shadow-crypt-last.lua b/game/modules/tome/data/maps/zones/shadow-crypt-last.lua
index f0cf94ca04550becb1f72aeb89ef6684a3284efd..64613cf97cc88866a9269bf3088a31540e328231 100644
--- a/game/modules/tome/data/maps/zones/shadow-crypt-last.lua
+++ b/game/modules/tome/data/maps/zones/shadow-crypt-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/shertul-fortress-caldizar.lua b/game/modules/tome/data/maps/zones/shertul-fortress-caldizar.lua
index 0e6f0b00acb79bbba472dd53464b90b13fbffd99..bafa788e14bd0e5fdff40db87d73459ad55a820b 100644
--- a/game/modules/tome/data/maps/zones/shertul-fortress-caldizar.lua
+++ b/game/modules/tome/data/maps/zones/shertul-fortress-caldizar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/shertul-fortress.lua b/game/modules/tome/data/maps/zones/shertul-fortress.lua
index 07136e4bd04d6b430563c5cc9fb7b891c11f640e..632b492f10e49005868feb9898fa01451d5090ef 100644
--- a/game/modules/tome/data/maps/zones/shertul-fortress.lua
+++ b/game/modules/tome/data/maps/zones/shertul-fortress.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/slime-tunnels.lua b/game/modules/tome/data/maps/zones/slime-tunnels.lua
index 14a9fb3218093f5df3a529014d3536f5854cbbee..be0c0efb2703dfb008a12b6d062991f098301a70 100644
--- a/game/modules/tome/data/maps/zones/slime-tunnels.lua
+++ b/game/modules/tome/data/maps/zones/slime-tunnels.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/south-beach.lua b/game/modules/tome/data/maps/zones/south-beach.lua
index b19a38dbc1531caf492023f6864fbd28e85dc0fb..3dff01b6c6e6691b84755c8ea604f227236b6231 100644
--- a/game/modules/tome/data/maps/zones/south-beach.lua
+++ b/game/modules/tome/data/maps/zones/south-beach.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/tannen-tower-1.lua b/game/modules/tome/data/maps/zones/tannen-tower-1.lua
index 95422aa9175978058db67a25026a591a003e2aab..fcec443fbc9af9e55171146b6059461a85db89d0 100644
--- a/game/modules/tome/data/maps/zones/tannen-tower-1.lua
+++ b/game/modules/tome/data/maps/zones/tannen-tower-1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/tannen-tower-2.lua b/game/modules/tome/data/maps/zones/tannen-tower-2.lua
index 83b20978415d816f3a1899c58c0628d8f086af20..4ff707a6012798cd76f016d5817363e40b1735ae 100644
--- a/game/modules/tome/data/maps/zones/tannen-tower-2.lua
+++ b/game/modules/tome/data/maps/zones/tannen-tower-2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/tannen-tower-3.lua b/game/modules/tome/data/maps/zones/tannen-tower-3.lua
index e155721d262d09dddb22e7d51e6835c9ad8e7010..10558d3a719e6775079c9b0c1d1deb17ddd1d719 100644
--- a/game/modules/tome/data/maps/zones/tannen-tower-3.lua
+++ b/game/modules/tome/data/maps/zones/tannen-tower-3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/tannen-tower-4.lua b/game/modules/tome/data/maps/zones/tannen-tower-4.lua
index cc535448ba79027f521cd7ac552e6e6e3d58f95b..0cff83b4108d964a21ec9679a8ca613c0dc5962c 100644
--- a/game/modules/tome/data/maps/zones/tannen-tower-4.lua
+++ b/game/modules/tome/data/maps/zones/tannen-tower-4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/tempest-peak-top.lua b/game/modules/tome/data/maps/zones/tempest-peak-top.lua
index 9d619bc8abffa214d3e75d4c016b0a9fa4be37e5..852e37cf2e2aa94968ad0ecf4aa3c9c979462b52 100644
--- a/game/modules/tome/data/maps/zones/tempest-peak-top.lua
+++ b/game/modules/tome/data/maps/zones/tempest-peak-top.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/temple-of-creation-first.lua b/game/modules/tome/data/maps/zones/temple-of-creation-first.lua
index 1ed80099e5d80c40db5963323d7a652f3f105005..43077d7e1f6362d578ba0a100b781cb249fe9930 100644
--- a/game/modules/tome/data/maps/zones/temple-of-creation-first.lua
+++ b/game/modules/tome/data/maps/zones/temple-of-creation-first.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/temple-of-creation-last.lua b/game/modules/tome/data/maps/zones/temple-of-creation-last.lua
index 13606495198ecd975d522615cb7540d94d30ac39..a23f8033aa436ef06fd1de87c7c469cbbfc01246 100644
--- a/game/modules/tome/data/maps/zones/temple-of-creation-last.lua
+++ b/game/modules/tome/data/maps/zones/temple-of-creation-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/trollmire-treasure.lua b/game/modules/tome/data/maps/zones/trollmire-treasure.lua
index 578d6410e954423adec20b821a2cb45953910edc..a379105f48b7287648ae1ecc9493404772718646 100644
--- a/game/modules/tome/data/maps/zones/trollmire-treasure.lua
+++ b/game/modules/tome/data/maps/zones/trollmire-treasure.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/unremarkable-cave.lua b/game/modules/tome/data/maps/zones/unremarkable-cave.lua
index 68f3d93a40d365184186c4d11e4f46ee4d188cf8..56a95067aa1796956fb878447aef10a2b8671dcd 100644
--- a/game/modules/tome/data/maps/zones/unremarkable-cave.lua
+++ b/game/modules/tome/data/maps/zones/unremarkable-cave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/valley-moon.lua b/game/modules/tome/data/maps/zones/valley-moon.lua
index 25c3554bf213887736386cb550e8698ea731c30a..3afdeb962631d2e969bf7069865e4dcaddac9a38 100644
--- a/game/modules/tome/data/maps/zones/valley-moon.lua
+++ b/game/modules/tome/data/maps/zones/valley-moon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/maps/zones/vor-armoury-last.lua b/game/modules/tome/data/maps/zones/vor-armoury-last.lua
index c183bd5dec0769857aef78220e4911a9261d86f1..2a495a640c7ace9ae15e55a3a8c9f35b60cc2d19 100644
--- a/game/modules/tome/data/maps/zones/vor-armoury-last.lua
+++ b/game/modules/tome/data/maps/zones/vor-armoury-last.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/anti-antimagic.lua b/game/modules/tome/data/quests/anti-antimagic.lua
index a21a013bf170689d1e1c9c8e189a6ebb1feca356..730f89159da384263b90c434129fe292c294ec78 100644
--- a/game/modules/tome/data/quests/anti-antimagic.lua
+++ b/game/modules/tome/data/quests/anti-antimagic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/antimagic.lua b/game/modules/tome/data/quests/antimagic.lua
index 7f46dc6ff570a4af83d19978db627d4df9b686ba..7ec8186b291c10e3e0e8c13325b0f2b681debcff 100644
--- a/game/modules/tome/data/quests/antimagic.lua
+++ b/game/modules/tome/data/quests/antimagic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/arena-unlock.lua b/game/modules/tome/data/quests/arena-unlock.lua
index 28519866c2dde5dafeda042467cd6c8852cf9e01..666e56ccf4a963e409faf43352910c48a2c120cc 100644
--- a/game/modules/tome/data/quests/arena-unlock.lua
+++ b/game/modules/tome/data/quests/arena-unlock.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/arena.lua b/game/modules/tome/data/quests/arena.lua
index a62dae7188771c95da8195b3d0cfda2ab1e14e52..53e3d63816092b5284feb4dd8eb6bf6ca381eb0e 100644
--- a/game/modules/tome/data/quests/arena.lua
+++ b/game/modules/tome/data/quests/arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/brotherhood-of-alchemists.lua b/game/modules/tome/data/quests/brotherhood-of-alchemists.lua
index 8423ffe76d9d4d609983550302a34b4cba53ed73..b7f13a6e8a380c5020cd1f2d6618199c6f9bf62a 100644
--- a/game/modules/tome/data/quests/brotherhood-of-alchemists.lua
+++ b/game/modules/tome/data/quests/brotherhood-of-alchemists.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/charred-scar.lua b/game/modules/tome/data/quests/charred-scar.lua
index 27de173ad02c094481153921bab88f2794e48a60..9fe29a9bfea0b58ad79452f99201d5e0300c7f49 100644
--- a/game/modules/tome/data/quests/charred-scar.lua
+++ b/game/modules/tome/data/quests/charred-scar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/deep-bellow.lua b/game/modules/tome/data/quests/deep-bellow.lua
index ef70546f893a98c0a096e9d50b385ae3fc754875..800d1aff8f9bedd558f1dfa1e102d369e4e77077 100644
--- a/game/modules/tome/data/quests/deep-bellow.lua
+++ b/game/modules/tome/data/quests/deep-bellow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/dreadfell.lua b/game/modules/tome/data/quests/dreadfell.lua
index 331fe70750b16458721d3283b8b2eea412475bdf..e4019dce3b10ad8d5ebec015641b006458135296 100644
--- a/game/modules/tome/data/quests/dreadfell.lua
+++ b/game/modules/tome/data/quests/dreadfell.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/east-portal.lua b/game/modules/tome/data/quests/east-portal.lua
index 66391c0f9c0ef120cfaf38d56b4253a7051312b4..f013d38b5644ca5842c22cdb7be334c62291a978 100644
--- a/game/modules/tome/data/quests/east-portal.lua
+++ b/game/modules/tome/data/quests/east-portal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/escort-duty.lua b/game/modules/tome/data/quests/escort-duty.lua
index 904cbdacd39e66aa532f044dce848b01177193b6..d41dac08a7f4f4d45b294a2cc25902dd34e94381 100644
--- a/game/modules/tome/data/quests/escort-duty.lua
+++ b/game/modules/tome/data/quests/escort-duty.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/grave-necromancer.lua b/game/modules/tome/data/quests/grave-necromancer.lua
index 8f66d2b80c84d7fa7d4f03dbc077109033c52edf..98cc50e1a17894e3c117f4f657f9d2a62493de50 100644
--- a/game/modules/tome/data/quests/grave-necromancer.lua
+++ b/game/modules/tome/data/quests/grave-necromancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/high-peak.lua b/game/modules/tome/data/quests/high-peak.lua
index a4d6fa67ac8d608ff8f6296ee8ea2ad85fd088b6..4a6614bcea9e93bac6b93d1446513581d15e0d14 100644
--- a/game/modules/tome/data/quests/high-peak.lua
+++ b/game/modules/tome/data/quests/high-peak.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/infinite-dungeon.lua b/game/modules/tome/data/quests/infinite-dungeon.lua
index 8c5b33cefecc06ddf53ff76ed3d0ab039944b1da..5553dfd91506d8c994aa959ab0f4bd8b4c24d072 100644
--- a/game/modules/tome/data/quests/infinite-dungeon.lua
+++ b/game/modules/tome/data/quests/infinite-dungeon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/keepsake.lua b/game/modules/tome/data/quests/keepsake.lua
index 2c3b5f346e5887764b2480e442354b8b2207b1fd..f2e8d66c7b94281c198b9919fa2f13fc86599105 100644
--- a/game/modules/tome/data/quests/keepsake.lua
+++ b/game/modules/tome/data/quests/keepsake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/kryl-feijan-escape.lua b/game/modules/tome/data/quests/kryl-feijan-escape.lua
index 9b654905bad08ca5d0d8ab8b629e474a81add787..b6baccc68cc650907b36da4d75c3441614e28283 100644
--- a/game/modules/tome/data/quests/kryl-feijan-escape.lua
+++ b/game/modules/tome/data/quests/kryl-feijan-escape.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/lichform.lua b/game/modules/tome/data/quests/lichform.lua
index 34b2be7d2a37f5be59228738740315aaf2982138..dd441f87de349475b91e6425bb142c78453b7ccb 100644
--- a/game/modules/tome/data/quests/lichform.lua
+++ b/game/modules/tome/data/quests/lichform.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/lightning-overload.lua b/game/modules/tome/data/quests/lightning-overload.lua
index f82c0bfc5074db509443052b230cf1fda0e9e56e..096a9b7c4b38fdc4440fcb4e4c2b463a685a9e62 100644
--- a/game/modules/tome/data/quests/lightning-overload.lua
+++ b/game/modules/tome/data/quests/lightning-overload.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/lost-merchant.lua b/game/modules/tome/data/quests/lost-merchant.lua
index 0b4dadfe36a61657eda5cad7d9689bd1c6ef4489..bc89367811d5c1cfec3333189dcc7f2eb7473a5e 100644
--- a/game/modules/tome/data/quests/lost-merchant.lua
+++ b/game/modules/tome/data/quests/lost-merchant.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/love-melinda.lua b/game/modules/tome/data/quests/love-melinda.lua
index 0877b9057094b43927d5c48df6a16974fcb86a4f..e9b73a787df30fcceabb9a3c121bc015c7aef893 100644
--- a/game/modules/tome/data/quests/love-melinda.lua
+++ b/game/modules/tome/data/quests/love-melinda.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -57,7 +57,7 @@ function spawnFortress(self, who) game:onTickEnd(function()
 		moddable_tile = "human_female",
 		moddable_tile_base = "base_redhead_01.png",
 		moddable_tile_ornament = {female="braid_redhead_01"},
-		desc = [[You saved her from the depth of a cultists lair and fell in love with her. She has moved in the Fortress to see you more often.]],
+		desc = [[You saved her from the depth of a cultists' lair and fell in love with her. She has moved into the Fortress to see you more often.]],
 		autolevel = "tank",
 		ai = "none",
 		stats = { str=8, dex=7, mag=8, con=12 },
diff --git a/game/modules/tome/data/quests/lumberjack-cursed.lua b/game/modules/tome/data/quests/lumberjack-cursed.lua
index 06989455680553faffd51e65a06497fbec9e0b76..682f2907ff299ba2be4cc4e8a771d7906a6c628b 100644
--- a/game/modules/tome/data/quests/lumberjack-cursed.lua
+++ b/game/modules/tome/data/quests/lumberjack-cursed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/mage-apprentice.lua b/game/modules/tome/data/quests/mage-apprentice.lua
index 1e674e171a179e7415d81e529a9e313c740e30b6..704341042d63f97597df5d7f2a8355ba4fa0a914 100644
--- a/game/modules/tome/data/quests/mage-apprentice.lua
+++ b/game/modules/tome/data/quests/mage-apprentice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/master-jeweler.lua b/game/modules/tome/data/quests/master-jeweler.lua
index a67c06158bcd573279c8027aab242f9b45bccfb1..127155f58d00d9c68651e0a3a69666543268556d 100644
--- a/game/modules/tome/data/quests/master-jeweler.lua
+++ b/game/modules/tome/data/quests/master-jeweler.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -83,7 +83,12 @@ summon_limmir = function(self, who)
 	local limmir = game.zone:makeEntityByName(game.level, "actor", "LIMMIR")
 	limmir.limmir_target = {x=42, y=11}
 	limmir.limmir_target2 = {x=24, y=25}
+	limmir.no_inventory_access = true
+	limmir.remove_from_party_on_death = true
+	limmir.no_party_ai = true
 	game.zone:addEntity(game.level, limmir, "actor", 45, 1)
+
+	game.party:addMember(limmir, {type="quest", title="Limmir (Quest)", temporary_level = true})
 end
 
 ritual_end = function(self)
diff --git a/game/modules/tome/data/quests/orb-command.lua b/game/modules/tome/data/quests/orb-command.lua
index fbb98143c166f24f8fdcc4b54091e19464ec413b..5b2af8bbc7a5b6da9344b1c65694f19ac3631e12 100644
--- a/game/modules/tome/data/quests/orb-command.lua
+++ b/game/modules/tome/data/quests/orb-command.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/orc-breeding-pits.lua b/game/modules/tome/data/quests/orc-breeding-pits.lua
new file mode 100644
index 0000000000000000000000000000000000000000..f8ac9e7b53d78feb6a8f71c1a71bdeae1d892c44
--- /dev/null
+++ b/game/modules/tome/data/quests/orc-breeding-pits.lua
@@ -0,0 +1,60 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+-- Quest for the the breeding pits
+name = "Desperate Measures"
+desc = function(self, who)
+	local desc = {}
+	desc[#desc+1] = "You have encountered a dying sun paladin that told you about the orcs breeding pit, a true abomination."
+	if self:isStatus(engine.Quest.COMPLETED, "wuss-out") then
+		desc[#desc+1] = "You have decided to report the information to Aeryn so she can deal with it."
+		if self:isStatus(engine.Quest.COMPLETED, "wuss-out-done") then
+			desc[#desc+1] = "Aeryn said she would send troops to deal with it."
+		end
+	else
+		desc[#desc+1] = "You have taken upon yourself to cleanse it and deal a crippling blow to the orcs."
+		if self:isStatus(engine.Quest.COMPLETED, "genocide") then
+			desc[#desc+1] = "The abominable task is done."
+		end
+	end
+	return table.concat(desc, "\n")
+end
+
+on_status_change = function(self, who, status, sub)
+	if self:isCompleted() then
+		who:setQuestStatus(self.id, engine.Quest.DONE)
+	end
+end
+
+reveal = function(self)
+	local spot = game.level:pickSpot{type="world-encounter", subtype="orc-breeding-pits-spawn"}
+	if not spot then return end
+
+	local g = game.level.map(spot.x, spot.y, engine.Map.TERRAIN):cloneFull()
+	g.__nice_tile_base = nil
+	g.name = "Entrance to the orc breeding pit"
+	g.display='>' g.color_r=colors.GREEN.r g.color_g=colors.GREEN.g g.color_b=colors.GREEN.b g.notice = true
+	g.change_level=1 g.change_zone="orc-breeding-pit" g.glow=true
+	g.add_displays = g.add_displays or {}
+	g.add_displays[#g.add_displays+1] = mod.class.Grid.new{image="terrain/ladder_down.png"}
+	g.nice_tiler = nil
+	g:initGlow()
+	game.zone:addEntity(game.level, g, "terrain", spot.x, spot.y)
+	return true
+end
diff --git a/game/modules/tome/data/quests/orc-hunt.lua b/game/modules/tome/data/quests/orc-hunt.lua
index b4276db966f851d50e6d3dba1ea30d808e14e80b..8cd6bee548d7dae5aeabaa5979009fd350cfb668 100644
--- a/game/modules/tome/data/quests/orc-hunt.lua
+++ b/game/modules/tome/data/quests/orc-hunt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/orc-pride.lua b/game/modules/tome/data/quests/orc-pride.lua
index fc36ca3f562f248f033a67c4e769848c3f5a25e8..30549479d080738808a589515c859baefb42eaff 100644
--- a/game/modules/tome/data/quests/orc-pride.lua
+++ b/game/modules/tome/data/quests/orc-pride.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/paradoxology.lua b/game/modules/tome/data/quests/paradoxology.lua
index 072670b30a387416372dd90bcbf4fb473ab68024..e5969daa808e39f5e491c1e6ad941476594a31ca 100644
--- a/game/modules/tome/data/quests/paradoxology.lua
+++ b/game/modules/tome/data/quests/paradoxology.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/pre-charred-scar.lua b/game/modules/tome/data/quests/pre-charred-scar.lua
index 0b6844b56059683da4f6373ad6110c6c031783f9..d918c674aa6877dce62e5b37563ae0666541d180 100644
--- a/game/modules/tome/data/quests/pre-charred-scar.lua
+++ b/game/modules/tome/data/quests/pre-charred-scar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/rel-tunnel.lua b/game/modules/tome/data/quests/rel-tunnel.lua
index c959c0306ee5d008a9b85f0fc30d1235d6c77035..ee20bd892f8208277aed6b8333f159807fab16a0 100644
--- a/game/modules/tome/data/quests/rel-tunnel.lua
+++ b/game/modules/tome/data/quests/rel-tunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/ring-of-blood.lua b/game/modules/tome/data/quests/ring-of-blood.lua
index 288bfde50b9da71acb6c40e7fe2ae621859aef9e..5e3c7f0dec3687ef3b7f78fdf0e69a2d93417aee 100644
--- a/game/modules/tome/data/quests/ring-of-blood.lua
+++ b/game/modules/tome/data/quests/ring-of-blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/shertul-fortress.lua b/game/modules/tome/data/quests/shertul-fortress.lua
index 14411b2fd9baa42d7f29cfefc8dbfc1ee9ba02b5..08751dc67764981ee5de5c454bf3d2edb400f3ac 100644
--- a/game/modules/tome/data/quests/shertul-fortress.lua
+++ b/game/modules/tome/data/quests/shertul-fortress.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/spydric-infestation.lua b/game/modules/tome/data/quests/spydric-infestation.lua
index affd0ce8675f8cff7f64ffa31bffdaccb94fe457..dec39c76b401d15d1ce0ecb0b34c62f2e5c38260 100644
--- a/game/modules/tome/data/quests/spydric-infestation.lua
+++ b/game/modules/tome/data/quests/spydric-infestation.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/staff-absorption.lua b/game/modules/tome/data/quests/staff-absorption.lua
index 98e529259269fac34e7e1b7696455f2c7d732239..2f10fb9a159b07f92dbc10da8ac3ba4284bce674 100644
--- a/game/modules/tome/data/quests/staff-absorption.lua
+++ b/game/modules/tome/data/quests/staff-absorption.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-allied.lua b/game/modules/tome/data/quests/start-allied.lua
index 11181d3ee6e427f9a1488dcbd73270e92f30b74f..18d5bb08962a5baf4de851d448800b5157d9daff 100644
--- a/game/modules/tome/data/quests/start-allied.lua
+++ b/game/modules/tome/data/quests/start-allied.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-archmage.lua b/game/modules/tome/data/quests/start-archmage.lua
index a93f6df223f6ff44da032cccb18fbc381a4a2713..48183c46736587092f65f044be94acb82f8cba32 100644
--- a/game/modules/tome/data/quests/start-archmage.lua
+++ b/game/modules/tome/data/quests/start-archmage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-dwarf.lua b/game/modules/tome/data/quests/start-dwarf.lua
index 7af827fc9f0f7c8e0037ade28302951dc0f4ba15..64c618e5c5fff1ca050684147270d11b2f833c51 100644
--- a/game/modules/tome/data/quests/start-dwarf.lua
+++ b/game/modules/tome/data/quests/start-dwarf.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-point-zero.lua b/game/modules/tome/data/quests/start-point-zero.lua
index d0f66a4c864da7c45b932da64ee052d9142b3053..69d2a6b349652cad1ed76d4e423f43317cf38ae8 100644
--- a/game/modules/tome/data/quests/start-point-zero.lua
+++ b/game/modules/tome/data/quests/start-point-zero.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-shaloren.lua b/game/modules/tome/data/quests/start-shaloren.lua
index 848867c6af64a0b4963d74b170198404e4086ab6..52378d2f1703b74b485014d8e053232c431664b5 100644
--- a/game/modules/tome/data/quests/start-shaloren.lua
+++ b/game/modules/tome/data/quests/start-shaloren.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-sunwall.lua b/game/modules/tome/data/quests/start-sunwall.lua
index cd36e469e0495da0a771ec6d052cedcba90b2c94..336ac3567a9f292082e41abe3d7a9e6121705377 100644
--- a/game/modules/tome/data/quests/start-sunwall.lua
+++ b/game/modules/tome/data/quests/start-sunwall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-thaloren.lua b/game/modules/tome/data/quests/start-thaloren.lua
index 131197ee35e5c861a8c0c89fd0017f2b0d98a5fc..ebde64807e6dbac1eda7bd629a34d95aa08c71d8 100644
--- a/game/modules/tome/data/quests/start-thaloren.lua
+++ b/game/modules/tome/data/quests/start-thaloren.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-undead.lua b/game/modules/tome/data/quests/start-undead.lua
index d38fb365c1c8a20f28ba97adc2ff60212c2f7799..4ecebe5f0a42a1c2cdf01c67ff19331f720ebe24 100644
--- a/game/modules/tome/data/quests/start-undead.lua
+++ b/game/modules/tome/data/quests/start-undead.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/start-yeek.lua b/game/modules/tome/data/quests/start-yeek.lua
index c3ec30cb599f97b61bae21da8b4373989901da9c..7e2bb0717202c3b78252a6e42bfd6d75f2eb4c9a 100644
--- a/game/modules/tome/data/quests/start-yeek.lua
+++ b/game/modules/tome/data/quests/start-yeek.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/starter-zones.lua b/game/modules/tome/data/quests/starter-zones.lua
index 5789dd6a4f6e89f336adb1aaf15a11aacc1f069b..07e12283907a2c0e001e5e5d5002c023f1cd3291 100644
--- a/game/modules/tome/data/quests/starter-zones.lua
+++ b/game/modules/tome/data/quests/starter-zones.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/strange-new-world.lua b/game/modules/tome/data/quests/strange-new-world.lua
index 5adf105418697a89a2a36b6569c7e615d1853260..4d30fc11a315347cf8b97a849eaa3095c3429be1 100644
--- a/game/modules/tome/data/quests/strange-new-world.lua
+++ b/game/modules/tome/data/quests/strange-new-world.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/temple-of-creation.lua b/game/modules/tome/data/quests/temple-of-creation.lua
index 353f90359a15f98fd082bfef31e8908bf8fc95bb..e842dfff2c0fd855437ad56f32c6d1767a664654 100644
--- a/game/modules/tome/data/quests/temple-of-creation.lua
+++ b/game/modules/tome/data/quests/temple-of-creation.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/temporal-rift.lua b/game/modules/tome/data/quests/temporal-rift.lua
index 9f066b1d3531561d68176e659f54fd793ba76775..fc1d63ee8a8718b9741ec9e6bc10f65f1c7b9b2e 100644
--- a/game/modules/tome/data/quests/temporal-rift.lua
+++ b/game/modules/tome/data/quests/temporal-rift.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/trollmire-treasure.lua b/game/modules/tome/data/quests/trollmire-treasure.lua
index 35059e3e7fc543a1fe74cf97f38c70cd8ca40b45..a8ae8e2a31fc9b411e79f72531a508cc4fa62c9f 100644
--- a/game/modules/tome/data/quests/trollmire-treasure.lua
+++ b/game/modules/tome/data/quests/trollmire-treasure.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/tutorial-combat-stats.lua b/game/modules/tome/data/quests/tutorial-combat-stats.lua
index f7df8510790bf422c5d022515e5edd09191d6140..d529a0933bb2d7c4dd8e60a830943adfcd78b5ac 100644
--- a/game/modules/tome/data/quests/tutorial-combat-stats.lua
+++ b/game/modules/tome/data/quests/tutorial-combat-stats.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/tutorial.lua b/game/modules/tome/data/quests/tutorial.lua
index f9b7de97bf23604b5e4e7e599a3a36e6020d45c5..7c19d2f305d1ffffb55c8f2215147a27c1f17785 100644
--- a/game/modules/tome/data/quests/tutorial.lua
+++ b/game/modules/tome/data/quests/tutorial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/void-gerlyk.lua b/game/modules/tome/data/quests/void-gerlyk.lua
index 3ac22ae11f93e2aadefbbc6a3e8a49f0ab662f77..8e746af04a823672f45a71bba83906224e6ec2ac 100644
--- a/game/modules/tome/data/quests/void-gerlyk.lua
+++ b/game/modules/tome/data/quests/void-gerlyk.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/west-portal.lua b/game/modules/tome/data/quests/west-portal.lua
index 34e39ce970a12132dab5134f145bbd64d29f99e1..d31fce7f84114c75062f71041186c3639ae2a0e9 100644
--- a/game/modules/tome/data/quests/west-portal.lua
+++ b/game/modules/tome/data/quests/west-portal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/quests/wild-wild-east.lua b/game/modules/tome/data/quests/wild-wild-east.lua
index b40e24847dff227072f127441372082f92b32d74..528f1a76123493cee3a4c9d4f052a60c44f3c24c 100644
--- a/game/modules/tome/data/quests/wild-wild-east.lua
+++ b/game/modules/tome/data/quests/wild-wild-east.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/basic_cell.lua b/game/modules/tome/data/rooms/basic_cell.lua
index 72112d7b274a31cc7b6712922885e1322c87eb78..e26b4faf99f9d8392f2d595bd37a84d0cc4301f6 100644
--- a/game/modules/tome/data/rooms/basic_cell.lua
+++ b/game/modules/tome/data/rooms/basic_cell.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/big_cells.lua b/game/modules/tome/data/rooms/big_cells.lua
index 13f8447bf7fbdbd6840bee96bfba9882fda04931..3c36efe0287f89e54bb4e99687bf447b5f6b7a36 100644
--- a/game/modules/tome/data/rooms/big_cells.lua
+++ b/game/modules/tome/data/rooms/big_cells.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/big_cross.lua b/game/modules/tome/data/rooms/big_cross.lua
index 96b10f4b906064224c15fe28de87961e56713a78..557c4eedbf13e8c0453deae525b3638d05bea7cb 100644
--- a/game/modules/tome/data/rooms/big_cross.lua
+++ b/game/modules/tome/data/rooms/big_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/big_inner_circle.lua b/game/modules/tome/data/rooms/big_inner_circle.lua
index 9e204f7a3782022287c8b96ec84f9cd1aaddf32d..22de65fca7fc6bfb1666275d669a5aac7d2eb735 100644
--- a/game/modules/tome/data/rooms/big_inner_circle.lua
+++ b/game/modules/tome/data/rooms/big_inner_circle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/broken_infinity.lua b/game/modules/tome/data/rooms/broken_infinity.lua
index 7378b9b1839dea4db591aef059daff84d6f6a76a..fdb75148e5d4c3877afe7bd8733c3f5e2a9910c9 100644
--- a/game/modules/tome/data/rooms/broken_infinity.lua
+++ b/game/modules/tome/data/rooms/broken_infinity.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/broken_room.lua b/game/modules/tome/data/rooms/broken_room.lua
index cadbd55a46fb0a7ef5681ee9770c47167dab1b38..6dbc5d564a03d0528bd68dbecb10bcbcad9d20ef 100644
--- a/game/modules/tome/data/rooms/broken_room.lua
+++ b/game/modules/tome/data/rooms/broken_room.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/broken_x.lua b/game/modules/tome/data/rooms/broken_x.lua
index 8d133a2e0a62c05eeb755230098dfeb3d9c15ff8..516a895f33c2f7a1a770a04435f7330c23571373 100644
--- a/game/modules/tome/data/rooms/broken_x.lua
+++ b/game/modules/tome/data/rooms/broken_x.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells.lua b/game/modules/tome/data/rooms/cells.lua
index 9a84f4d2e4373c4aca6796c377c07e658be0b8d8..4309fb72d285715b062ad3eb5aab044602658ef1 100644
--- a/game/modules/tome/data/rooms/cells.lua
+++ b/game/modules/tome/data/rooms/cells.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells10.lua b/game/modules/tome/data/rooms/cells10.lua
index 4fb438d54c6d3997e6772da27615eff16050970f..ffdce6b14ce4050b2ee1f72782035dfb3f4e631d 100644
--- a/game/modules/tome/data/rooms/cells10.lua
+++ b/game/modules/tome/data/rooms/cells10.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells2.lua b/game/modules/tome/data/rooms/cells2.lua
index 7ffe1590f31b6e8c20795a1231486a492ea5b6c6..a0033a5b70dd8c8c4eaf88f3690cc242628419bd 100644
--- a/game/modules/tome/data/rooms/cells2.lua
+++ b/game/modules/tome/data/rooms/cells2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells3.lua b/game/modules/tome/data/rooms/cells3.lua
index 7498261cf76edc6a1430d2adb67388967eb4166e..a3cd5d0e50b781b59beba81e6ff87a4a78915acc 100644
--- a/game/modules/tome/data/rooms/cells3.lua
+++ b/game/modules/tome/data/rooms/cells3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells4.lua b/game/modules/tome/data/rooms/cells4.lua
index 41afbf50807200e7b08a9427c52298e4ec2c4321..8d388ce7cd4e3df5862d305391f1f0aa8e9fa39a 100644
--- a/game/modules/tome/data/rooms/cells4.lua
+++ b/game/modules/tome/data/rooms/cells4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells5.lua b/game/modules/tome/data/rooms/cells5.lua
index 2ec4d51ec38a9552893f01237bcf3fd882789103..e321c239fbc74d8657949a2c12364479a3f4ea82 100644
--- a/game/modules/tome/data/rooms/cells5.lua
+++ b/game/modules/tome/data/rooms/cells5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells6.lua b/game/modules/tome/data/rooms/cells6.lua
index 0f8cd05fba798ed8e9532a877bfc387c93521059..0ca4ccb711387a7ffbe0174950af3192aef90f49 100644
--- a/game/modules/tome/data/rooms/cells6.lua
+++ b/game/modules/tome/data/rooms/cells6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells7.lua b/game/modules/tome/data/rooms/cells7.lua
index 5e3d4805814dd245c19a7d2be73e8382204ed765..a0b61129342ff612cd8c44c10d8777b8d47f6195 100644
--- a/game/modules/tome/data/rooms/cells7.lua
+++ b/game/modules/tome/data/rooms/cells7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells8.lua b/game/modules/tome/data/rooms/cells8.lua
index 5db64e224740e5e0fb5604e6c8255684074da2f0..cca3f3dcae60472dddef32df0089b8486bf0aab6 100644
--- a/game/modules/tome/data/rooms/cells8.lua
+++ b/game/modules/tome/data/rooms/cells8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cells9.lua b/game/modules/tome/data/rooms/cells9.lua
index bb730fc4fbb8c86668cff3feaa167d7d7d049d72..0734d0bd0e79ed10fe7cac76a1c923d07d4aaefa 100644
--- a/game/modules/tome/data/rooms/cells9.lua
+++ b/game/modules/tome/data/rooms/cells9.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/center_arrows.lua b/game/modules/tome/data/rooms/center_arrows.lua
index 49fea2f58c17da6ca155d0d2e52787361540d33b..1bed09eb049c28732e19df9c9b354c1efdb9afb3 100644
--- a/game/modules/tome/data/rooms/center_arrows.lua
+++ b/game/modules/tome/data/rooms/center_arrows.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/circle_cross.lua b/game/modules/tome/data/rooms/circle_cross.lua
index 7112c21697de28e9472a0ae739d23f0f36e63b2f..500febfbf562d16c5ae21834a27bc623b302f50f 100644
--- a/game/modules/tome/data/rooms/circle_cross.lua
+++ b/game/modules/tome/data/rooms/circle_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/circular.lua b/game/modules/tome/data/rooms/circular.lua
index fac2b7dad034c920a8a8b9b9cfe6d2cf3d292016..9ece4261f7d30bb541e1264085762fb46d2e6d0c 100644
--- a/game/modules/tome/data/rooms/circular.lua
+++ b/game/modules/tome/data/rooms/circular.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cross.lua b/game/modules/tome/data/rooms/cross.lua
index c6149c623e999614398e60c49005ab44bbd6f3d5..10f425495b583a64792aa3b91595e23f64a32a5e 100644
--- a/game/modules/tome/data/rooms/cross.lua
+++ b/game/modules/tome/data/rooms/cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cross_circled.lua b/game/modules/tome/data/rooms/cross_circled.lua
index 737e0d473b426328fa51145bd6050c74b2c13b14..80e994145e1f2e6d9cb0774170352f05d6a8c988 100644
--- a/game/modules/tome/data/rooms/cross_circled.lua
+++ b/game/modules/tome/data/rooms/cross_circled.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/cross_quartet.lua b/game/modules/tome/data/rooms/cross_quartet.lua
index 08f8919a3377f5227f957d26aba003502a8c1c24..2afb5f65b6ce4ce78bb743a1005ce4cf7b5616c0 100644
--- a/game/modules/tome/data/rooms/cross_quartet.lua
+++ b/game/modules/tome/data/rooms/cross_quartet.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/double_helix.lua b/game/modules/tome/data/rooms/double_helix.lua
index ab6b8224d091c4fd9580732253ecad1b02384df5..9849f3d985690c98dc44f6c67b273fb48ee042d5 100644
--- a/game/modules/tome/data/rooms/double_helix.lua
+++ b/game/modules/tome/data/rooms/double_helix.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/double_t.lua b/game/modules/tome/data/rooms/double_t.lua
index 3173ba7b322528adf59012918bfb8865b07f02d5..00b0a09fe5606d4a80abf32b2f5f16396c331fe2 100644
--- a/game/modules/tome/data/rooms/double_t.lua
+++ b/game/modules/tome/data/rooms/double_t.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/double_y.lua b/game/modules/tome/data/rooms/double_y.lua
index cb990d716fd2a8e06c74cea9427a196a90596b26..fb4eafe2fff731c76702ccbdd2214f4d53bba544 100644
--- a/game/modules/tome/data/rooms/double_y.lua
+++ b/game/modules/tome/data/rooms/double_y.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/equal.lua b/game/modules/tome/data/rooms/equal.lua
index e9f9e6dd8e11b891f9adb0d745f406e40f585492..045357e193b1a41a49150ed7eb7636d8efd0bd75 100644
--- a/game/modules/tome/data/rooms/equal.lua
+++ b/game/modules/tome/data/rooms/equal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/equal2.lua b/game/modules/tome/data/rooms/equal2.lua
index 4f5502b6e61531743d7c1144270d2cd3053ee8b4..79e16af3169614e5bcad26bee9c14b6db3d9e7a4 100644
--- a/game/modules/tome/data/rooms/equal2.lua
+++ b/game/modules/tome/data/rooms/equal2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/five_blocks.lua b/game/modules/tome/data/rooms/five_blocks.lua
index 091b6778579691fd40213413d7457f20885c72da..9f78d3aa3c9bb2b7a31deb6ac84b642521ab7018 100644
--- a/game/modules/tome/data/rooms/five_blocks.lua
+++ b/game/modules/tome/data/rooms/five_blocks.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/five_pillars.lua b/game/modules/tome/data/rooms/five_pillars.lua
index 3b25cbb3ced380c07dec9527edbae5500a741052..49065e649c1836e33ae83ac69e4e7eea758c24ed 100644
--- a/game/modules/tome/data/rooms/five_pillars.lua
+++ b/game/modules/tome/data/rooms/five_pillars.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/five_walls.lua b/game/modules/tome/data/rooms/five_walls.lua
index 4f5a0bd6e193235e7a074dcd7799fca8a7b52125..bf78e5926ea5dd66e081c71769538ee50183d7ec 100644
--- a/game/modules/tome/data/rooms/five_walls.lua
+++ b/game/modules/tome/data/rooms/five_walls.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/forest_clearing.lua b/game/modules/tome/data/rooms/forest_clearing.lua
index 89c749eb21732fa5440d61fca7e84d3ca71c767f..74e76b353426395ceeb447d7ba88848da650c67c 100644
--- a/game/modules/tome/data/rooms/forest_clearing.lua
+++ b/game/modules/tome/data/rooms/forest_clearing.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/four_blocks.lua b/game/modules/tome/data/rooms/four_blocks.lua
index 9aa652493569104a3b66fd026b7aced1b924fac9..73c0901f8e38d4c1190b369e01b4fc7103f75a24 100644
--- a/game/modules/tome/data/rooms/four_blocks.lua
+++ b/game/modules/tome/data/rooms/four_blocks.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/four_chambers.lua b/game/modules/tome/data/rooms/four_chambers.lua
index 2c0010759b33240bd08aa7ec1774da1c62ab7d68..d17c5e88a19353599c493db0f814e26dd51e207b 100644
--- a/game/modules/tome/data/rooms/four_chambers.lua
+++ b/game/modules/tome/data/rooms/four_chambers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/greater_vault.lua b/game/modules/tome/data/rooms/greater_vault.lua
index 82851fc3bbce46c23314d877ade30d4846db7498..fa0d31e391fad561bb0a485657175fd7343c1195 100644
--- a/game/modules/tome/data/rooms/greater_vault.lua
+++ b/game/modules/tome/data/rooms/greater_vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/h.lua b/game/modules/tome/data/rooms/h.lua
index 55cff7454b3eaec9d909da7a1d09538070562647..42476a9b3f2e65bd69b249bc09c3f7453780c751 100644
--- a/game/modules/tome/data/rooms/h.lua
+++ b/game/modules/tome/data/rooms/h.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/hollow_cross.lua b/game/modules/tome/data/rooms/hollow_cross.lua
index bdae43c72e57d470158f360cf81ce6bf9ffede54..e982117540da815723629cb7c8646cbf3e1a2e59 100644
--- a/game/modules/tome/data/rooms/hollow_cross.lua
+++ b/game/modules/tome/data/rooms/hollow_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner.lua b/game/modules/tome/data/rooms/inner.lua
index fbbedd58f51b3f609798f7c96802fab4fa65d96b..58097c82f495036018719c2deb1928549283145c 100644
--- a/game/modules/tome/data/rooms/inner.lua
+++ b/game/modules/tome/data/rooms/inner.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner_checkerboard.lua b/game/modules/tome/data/rooms/inner_checkerboard.lua
index 520d2cc1e2e1e64d7cfa8915ef2dd5cd7ccc0ffa..9f58767cf1971674a5c11d3f809fe4882a844d3d 100644
--- a/game/modules/tome/data/rooms/inner_checkerboard.lua
+++ b/game/modules/tome/data/rooms/inner_checkerboard.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner_circle.lua b/game/modules/tome/data/rooms/inner_circle.lua
index 8ef37a876e9516b6e0348e1d2325cb56b0796ced..fd5286584b70213369a78eedf094c7f2b0679ba0 100644
--- a/game/modules/tome/data/rooms/inner_circle.lua
+++ b/game/modules/tome/data/rooms/inner_circle.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner_circle2.lua b/game/modules/tome/data/rooms/inner_circle2.lua
index e992319af73091046bfc74e7cfd8b82ece2cf55a..7b900eec3fe5a1585ad0716f17257da48d31dba4 100644
--- a/game/modules/tome/data/rooms/inner_circle2.lua
+++ b/game/modules/tome/data/rooms/inner_circle2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner_cross.lua b/game/modules/tome/data/rooms/inner_cross.lua
index 7c73ae531213d5811ab14126c634c5456233cf6a..5bd1dfe9837773c5b80a048ddb6d376b385272f5 100644
--- a/game/modules/tome/data/rooms/inner_cross.lua
+++ b/game/modules/tome/data/rooms/inner_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner_fort.lua b/game/modules/tome/data/rooms/inner_fort.lua
index c25a9dadb2604fadd7e2d3ac4e77f615adb7a234..7f5ab132daef562200490479e70c06e9b5dc0678 100644
--- a/game/modules/tome/data/rooms/inner_fort.lua
+++ b/game/modules/tome/data/rooms/inner_fort.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/inner_pillar.lua b/game/modules/tome/data/rooms/inner_pillar.lua
index f7a186586afaa471a884c54d1576e80eca6ca164..773f49e3ae35525d61d3b95eb3cbcb8097c2a1a6 100644
--- a/game/modules/tome/data/rooms/inner_pillar.lua
+++ b/game/modules/tome/data/rooms/inner_pillar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/interstice.lua b/game/modules/tome/data/rooms/interstice.lua
index b838abd3c45fe44c0096301bb4777227e21d09b8..850d73beb534dab94b7d6bb19a7c97ee477a301e 100644
--- a/game/modules/tome/data/rooms/interstice.lua
+++ b/game/modules/tome/data/rooms/interstice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/lesser_vault.lua b/game/modules/tome/data/rooms/lesser_vault.lua
index 6f118213e2eca57a599912ac81be3595dd6095e1..d1e2d2edf1e879c99a11b47a77e9cab9c109e30b 100644
--- a/game/modules/tome/data/rooms/lesser_vault.lua
+++ b/game/modules/tome/data/rooms/lesser_vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/long_hall.lua b/game/modules/tome/data/rooms/long_hall.lua
index 43dab37f1326fee6d35c1584ed13eb9874e0100f..3e4fe4edc3a42b1318dc380881c042e3d9affb51 100644
--- a/game/modules/tome/data/rooms/long_hall.lua
+++ b/game/modules/tome/data/rooms/long_hall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/long_hall2.lua b/game/modules/tome/data/rooms/long_hall2.lua
index 93c9e346fda28a326f5c762b384dc88f84f90e46..50d27e5158a5d8074f00c7e665e6287e1613059f 100644
--- a/game/modules/tome/data/rooms/long_hall2.lua
+++ b/game/modules/tome/data/rooms/long_hall2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/maze.lua b/game/modules/tome/data/rooms/maze.lua
index 61f2a95d0ab3e6e161d7e99e449b0e7fe243a6a6..4fdacfe190e95258076a1c317979773c60b4419b 100644
--- a/game/modules/tome/data/rooms/maze.lua
+++ b/game/modules/tome/data/rooms/maze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/micro_pillar.lua b/game/modules/tome/data/rooms/micro_pillar.lua
index f88d2c710bed7b370b6d858fc18977f76cb972a6..ebede92a11b8fb13a3b177f17a4f54fec43b7ce2 100644
--- a/game/modules/tome/data/rooms/micro_pillar.lua
+++ b/game/modules/tome/data/rooms/micro_pillar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/money_vault.lua b/game/modules/tome/data/rooms/money_vault.lua
index b9d00dcffc0434e50354fac91cb05359aafee080..6a5da3f2b87dcbc5d3854858987789b73822cf01 100644
--- a/game/modules/tome/data/rooms/money_vault.lua
+++ b/game/modules/tome/data/rooms/money_vault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/multi_pillar.lua b/game/modules/tome/data/rooms/multi_pillar.lua
index f19702e5378d40ad9e41d6071b5b06366e38a47e..9f7983b858cc86a0d7eb8f29907800f13d3a4f4f 100644
--- a/game/modules/tome/data/rooms/multi_pillar.lua
+++ b/game/modules/tome/data/rooms/multi_pillar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/narrow_spiral.lua b/game/modules/tome/data/rooms/narrow_spiral.lua
index fed7ad481b8490f239a4455b5dd8e3354e5a0c57..b828c01a2d802e601cc6618768840d88c29be7f5 100644
--- a/game/modules/tome/data/rooms/narrow_spiral.lua
+++ b/game/modules/tome/data/rooms/narrow_spiral.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/nine_chambers.lua b/game/modules/tome/data/rooms/nine_chambers.lua
index 0ca2653ac79539ca43ec11248191e3f67de9491a..7b69f4e924f392c3cd8ce7f6b7e354d65c9ff0c9 100644
--- a/game/modules/tome/data/rooms/nine_chambers.lua
+++ b/game/modules/tome/data/rooms/nine_chambers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/oval.lua b/game/modules/tome/data/rooms/oval.lua
index c6149c623e999614398e60c49005ab44bbd6f3d5..10f425495b583a64792aa3b91595e23f64a32a5e 100644
--- a/game/modules/tome/data/rooms/oval.lua
+++ b/game/modules/tome/data/rooms/oval.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/pilar.lua b/game/modules/tome/data/rooms/pilar.lua
index a7fa2eb3f9bed8283d4dc3ce63385f50b693fd55..a3d04836d56b6abe242426a8d3f1573c15fde76a 100644
--- a/game/modules/tome/data/rooms/pilar.lua
+++ b/game/modules/tome/data/rooms/pilar.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/pilar2.lua b/game/modules/tome/data/rooms/pilar2.lua
index b361657df0e752318d5e41cbdec082691e01aa16..b67f731e7a9a99dcbfb707c63ca464c67b434e6a 100644
--- a/game/modules/tome/data/rooms/pilar2.lua
+++ b/game/modules/tome/data/rooms/pilar2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/pilar_big.lua b/game/modules/tome/data/rooms/pilar_big.lua
index fef18369ed7a7a1c9f6ec0a9bc8feb6e6d3fbd23..904d0d68260b8dcaa514de955648162d6d38bbc3 100644
--- a/game/modules/tome/data/rooms/pilar_big.lua
+++ b/game/modules/tome/data/rooms/pilar_big.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/pit.lua b/game/modules/tome/data/rooms/pit.lua
index 9edf41bfb9da5db71e9558b572b37a240a38baf3..addedb934ec391c3c7ba271a6fbe750473200ae6 100644
--- a/game/modules/tome/data/rooms/pit.lua
+++ b/game/modules/tome/data/rooms/pit.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/pod.lua b/game/modules/tome/data/rooms/pod.lua
index e6daa50e9ab490531d63924a80a5719917ffd251..9d401fb5ec7f63c307a2b43cc49473ce29d37665 100644
--- a/game/modules/tome/data/rooms/pod.lua
+++ b/game/modules/tome/data/rooms/pod.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/random_room.lua b/game/modules/tome/data/rooms/random_room.lua
index d6bbed63b93b66b23dc0dc7c0f6f3e5a3369ede2..9f1d3e0a65d64212df3e9e379878fd03eda76f26 100644
--- a/game/modules/tome/data/rooms/random_room.lua
+++ b/game/modules/tome/data/rooms/random_room.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/rocky_snowy_trees.lua b/game/modules/tome/data/rooms/rocky_snowy_trees.lua
index 575525c197c7e3591a0222b7319719474a674d22..6ea847beb89f72842b423ab1f3860c50966ec0bb 100644
--- a/game/modules/tome/data/rooms/rocky_snowy_trees.lua
+++ b/game/modules/tome/data/rooms/rocky_snowy_trees.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/s.lua b/game/modules/tome/data/rooms/s.lua
index b96855dd57f733cbf772949d986ec6b71d6c5082..82f89fe1ec47c046ee212567b83ccb7a4e65efe0 100644
--- a/game/modules/tome/data/rooms/s.lua
+++ b/game/modules/tome/data/rooms/s.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/side_passages_2.lua b/game/modules/tome/data/rooms/side_passages_2.lua
index 07eeda44f20e40949317071b893ecda02ca897c0..f99eeb5fbe8a5d2f55b1acd3c2f78dce9dc155bd 100644
--- a/game/modules/tome/data/rooms/side_passages_2.lua
+++ b/game/modules/tome/data/rooms/side_passages_2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/side_passages_4.lua b/game/modules/tome/data/rooms/side_passages_4.lua
index c2e6aea97d23b2bfdc23c10b1c962c0a2e9d7213..1173ccdfe0e5a18ef5617e587d81d92d4e7b0f3a 100644
--- a/game/modules/tome/data/rooms/side_passages_4.lua
+++ b/game/modules/tome/data/rooms/side_passages_4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/sideways_s.lua b/game/modules/tome/data/rooms/sideways_s.lua
index b178721edc3569c72d22980d4bec520b4da394be..52a5c087bd998d0b16fa0544f9011885765695d4 100644
--- a/game/modules/tome/data/rooms/sideways_s.lua
+++ b/game/modules/tome/data/rooms/sideways_s.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/simple.lua b/game/modules/tome/data/rooms/simple.lua
index fd2f700e09cbdb1e92dd58c4969470ff0e6d2e06..eebaf3e8a48764b8183d9fa94a6afcd77d8f5379 100644
--- a/game/modules/tome/data/rooms/simple.lua
+++ b/game/modules/tome/data/rooms/simple.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/small_cross.lua b/game/modules/tome/data/rooms/small_cross.lua
index a5e7b13fe64e8a200966e272578dd76dadc71cb8..958fa9cc02e9a62f97ef68494be7f8aa3b132b50 100644
--- a/game/modules/tome/data/rooms/small_cross.lua
+++ b/game/modules/tome/data/rooms/small_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/small_inner_cross.lua b/game/modules/tome/data/rooms/small_inner_cross.lua
index 92f8210d2fb28dd5a42678ea8e98ccd06ce2ddf1..63e5183be4a7e5f8a4d9700200edbb793d67065a 100644
--- a/game/modules/tome/data/rooms/small_inner_cross.lua
+++ b/game/modules/tome/data/rooms/small_inner_cross.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/small_x.lua b/game/modules/tome/data/rooms/small_x.lua
index d60fd7b059f22ff4de30e31c6396ad0011b75107..86a408f07e7cf824c375c4cfe5647c6dbc469e48 100644
--- a/game/modules/tome/data/rooms/small_x.lua
+++ b/game/modules/tome/data/rooms/small_x.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/space_tree_pod.lua b/game/modules/tome/data/rooms/space_tree_pod.lua
index 44f72ce1d8c46bb9949a1b099cd54447be30c533..dfca99e07299b972ca3fb3d50cc37fa08928de97 100644
--- a/game/modules/tome/data/rooms/space_tree_pod.lua
+++ b/game/modules/tome/data/rooms/space_tree_pod.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/spiral_cell.lua b/game/modules/tome/data/rooms/spiral_cell.lua
index 69a0a3a6bca9b76f1d7610ced462892550d543ce..ff86b1d8d7afcbc90a46a7a6047c8869eef36361 100644
--- a/game/modules/tome/data/rooms/spiral_cell.lua
+++ b/game/modules/tome/data/rooms/spiral_cell.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/split1.lua b/game/modules/tome/data/rooms/split1.lua
index eecb76746651dc73146831c9885e93103d9a3d6b..e7dc33e98f88579978db31fb8f40464544a554c7 100644
--- a/game/modules/tome/data/rooms/split1.lua
+++ b/game/modules/tome/data/rooms/split1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/split2.lua b/game/modules/tome/data/rooms/split2.lua
index 3eeb6f7f43be5621dfc4c1ced677df2c65de4f25..133baf369dc4299789b121ac6beb52f51c9c0401 100644
--- a/game/modules/tome/data/rooms/split2.lua
+++ b/game/modules/tome/data/rooms/split2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/thick_n.lua b/game/modules/tome/data/rooms/thick_n.lua
index 192e45938d630b73f48cec91e0cd04112d4f852d..00760692b5bf03098232236700bbdceda1c68f60 100644
--- a/game/modules/tome/data/rooms/thick_n.lua
+++ b/game/modules/tome/data/rooms/thick_n.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/thick_wall.lua b/game/modules/tome/data/rooms/thick_wall.lua
index d39d6c924d2c030968d936d033aca36b3f025bf3..1153b6abe7cd579a22e483405937cdeaf2a48485 100644
--- a/game/modules/tome/data/rooms/thick_wall.lua
+++ b/game/modules/tome/data/rooms/thick_wall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/tiny_pillars.lua b/game/modules/tome/data/rooms/tiny_pillars.lua
index e01658b0aeef345c3aa1989e7297153ba964dd50..07bd086b3ffeae5d164bbb37c825ff46059bc5ea 100644
--- a/game/modules/tome/data/rooms/tiny_pillars.lua
+++ b/game/modules/tome/data/rooms/tiny_pillars.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/two_domes.lua b/game/modules/tome/data/rooms/two_domes.lua
index 94e0a0d401a665c4010d84785a2d7660e00233b6..8caf97e8b127109f22723efabf747c2a1c826a83 100644
--- a/game/modules/tome/data/rooms/two_domes.lua
+++ b/game/modules/tome/data/rooms/two_domes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/two_passages.lua b/game/modules/tome/data/rooms/two_passages.lua
index 09f62248cc2e20311bcf15ea52c16091a1602a20..a3cd9103ef56f65db656732608de579d3e44ccdd 100644
--- a/game/modules/tome/data/rooms/two_passages.lua
+++ b/game/modules/tome/data/rooms/two_passages.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/weird1.lua b/game/modules/tome/data/rooms/weird1.lua
index 4c5daacd1aa1d79889e18fcbc766fbb445b78226..153ef1a1e0be22bb717fbc70a3ff1233db6cc122 100644
--- a/game/modules/tome/data/rooms/weird1.lua
+++ b/game/modules/tome/data/rooms/weird1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/weird2.lua b/game/modules/tome/data/rooms/weird2.lua
index 915502fa24b844faa2cf0d6d0ec64aa47676acbb..86ce09985d7acc3ec7646b7c60b3f0e156ebed64 100644
--- a/game/modules/tome/data/rooms/weird2.lua
+++ b/game/modules/tome/data/rooms/weird2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/womb.lua b/game/modules/tome/data/rooms/womb.lua
index 109cb8f3701f9bd60824ac53473c455f23679d14..e55454ec70602e16b24863375c8ed4fe7b93196d 100644
--- a/game/modules/tome/data/rooms/womb.lua
+++ b/game/modules/tome/data/rooms/womb.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/xroads.lua b/game/modules/tome/data/rooms/xroads.lua
index 0b678e9a345f3e5f0de723b9f9c7a1e993f2ec6e..324f242bd2cc62ab8c7336204d2ffbd9e56ced79 100644
--- a/game/modules/tome/data/rooms/xroads.lua
+++ b/game/modules/tome/data/rooms/xroads.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/y.lua b/game/modules/tome/data/rooms/y.lua
index c9a83a6cc3ea8508bae527b206ab08d827d59b93..86bd4bd511fdf46fcf86b114e5892548dc464f85 100644
--- a/game/modules/tome/data/rooms/y.lua
+++ b/game/modules/tome/data/rooms/y.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/zigzag.lua b/game/modules/tome/data/rooms/zigzag.lua
index e9d1029050da5aad031e21581bd127c0bbeeb490..0baf46e26dc2b7f6c51fa01326fb733507c9a06e 100644
--- a/game/modules/tome/data/rooms/zigzag.lua
+++ b/game/modules/tome/data/rooms/zigzag.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/zones/prox.lua b/game/modules/tome/data/rooms/zones/prox.lua
index 37067cb806474320679690f921785c0f27de9ae3..8932e44f9705878a8e6804b14d5ad215168afe26 100644
--- a/game/modules/tome/data/rooms/zones/prox.lua
+++ b/game/modules/tome/data/rooms/zones/prox.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/rooms/zones/zoisla.lua b/game/modules/tome/data/rooms/zones/zoisla.lua
index f067b42cecf824663235dc1a6d5fbc8f6597efe3..f1a87cf7871d53defa090f94acc947b0ccff3353 100644
--- a/game/modules/tome/data/rooms/zones/zoisla.lua
+++ b/game/modules/tome/data/rooms/zones/zoisla.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/sound/actions/punch1.ogg b/game/modules/tome/data/sound/actions/punch1.ogg
index a627234cb74aaf73432d076a0ac7c2f18b3cf581..419fb07f8bc18350ccf54e8bc2b72ac8495bd84e 100644
Binary files a/game/modules/tome/data/sound/actions/punch1.ogg and b/game/modules/tome/data/sound/actions/punch1.ogg differ
diff --git a/game/modules/tome/data/sound/actions/punch2.ogg b/game/modules/tome/data/sound/actions/punch2.ogg
index e04f96785bdba9a3e460b396eaae41f8a438bb3d..1af136f9851ca1c4b365c303c71ace24147aead1 100644
Binary files a/game/modules/tome/data/sound/actions/punch2.ogg and b/game/modules/tome/data/sound/actions/punch2.ogg differ
diff --git a/game/modules/tome/data/sound/actions/punch3.ogg b/game/modules/tome/data/sound/actions/punch3.ogg
index effec0ff03e836a6e685b963e85a624976513b21..be1eeac3c1b3b57b1ed114862e94ec47a0a2321b 100644
Binary files a/game/modules/tome/data/sound/actions/punch3.ogg and b/game/modules/tome/data/sound/actions/punch3.ogg differ
diff --git a/game/modules/tome/data/sound/actions/punch4.ogg b/game/modules/tome/data/sound/actions/punch4.ogg
index 808ea280de7601dba2acb8858b0438c56ed72667..1696d687053f42daf1fb0fcfbcbd439457357154 100644
Binary files a/game/modules/tome/data/sound/actions/punch4.ogg and b/game/modules/tome/data/sound/actions/punch4.ogg differ
diff --git a/game/modules/tome/data/sound/actions/whip_hit.ogg b/game/modules/tome/data/sound/actions/whip_hit.ogg
index 6939c150541618011813ea21ba8826d9afb3586a..f080220fd30ca6dab6dd7e0c8539dde73fb59684 100644
Binary files a/game/modules/tome/data/sound/actions/whip_hit.ogg and b/game/modules/tome/data/sound/actions/whip_hit.ogg differ
diff --git a/game/modules/tome/data/sound/actions/whip_miss.ogg b/game/modules/tome/data/sound/actions/whip_miss.ogg
index 08eecf42f070f838c1696d70ab09c2c167fa054d..70d18f02189e860e1f49ed26087700d75c5ae920 100644
Binary files a/game/modules/tome/data/sound/actions/whip_miss.ogg and b/game/modules/tome/data/sound/actions/whip_miss.ogg differ
diff --git a/game/modules/tome/data/talents.lua b/game/modules/tome/data/talents.lua
index 5eaddd1c99979d71f1c8f8c1b4eaf67a20e552b6..11a01db61630adc575f7986f72988111064f46a6 100644
--- a/game/modules/tome/data/talents.lua
+++ b/game/modules/tome/data/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/celestial.lua b/game/modules/tome/data/talents/celestial/celestial.lua
index f3c1308e6dc354d0ba364c861ba59e71179e909f..1c8cb7370a06707653b7f81f65b22b9d81c6e26c 100644
--- a/game/modules/tome/data/talents/celestial/celestial.lua
+++ b/game/modules/tome/data/talents/celestial/celestial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,6 +22,9 @@ newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestia
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/chants", name = "chants", generic = true, description = "Chant the glory of the Sun." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/light", name = "light", generic = true, description = "Invoke the power of the light to heal and mend." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/combat", name = "combat", description = "Your devotion allows you to combat your foes with indomitable determination." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/radiance", name = "radiance", description = "You channel the light of the sun through your body." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/crusader", name = "crusader", description = "Forgo your shield for the chance to crush your foes with a mighty two handed weapon." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/sunlight", name = "sunlight", description = "Summon the power of the Sun to burn your foes." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/sun", name = "sun", description = "Summon the power of the Sun to burn your foes." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/glyphs", name = "glyphs", min_lev = 10, description = "Bind the brilliant powers into glyphs to trap your foes." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="celestial/twilight", name = "twilight", description = "Stand between the darkness and the light, harnessing both." }
@@ -76,11 +79,14 @@ divi_req_high5 = {
 }
 
 load("/data/talents/celestial/chants.lua")
+load("/data/talents/celestial/sunlight.lua")
 load("/data/talents/celestial/sun.lua")
 load("/data/talents/celestial/combat.lua")
 load("/data/talents/celestial/light.lua")
 load("/data/talents/celestial/glyphs.lua")
 load("/data/talents/celestial/guardian.lua")
+load("/data/talents/celestial/radiance.lua")
+load("/data/talents/celestial/crusader.lua")
 
 load("/data/talents/celestial/twilight.lua")
 load("/data/talents/celestial/hymns.lua")
diff --git a/game/modules/tome/data/talents/celestial/chants.lua b/game/modules/tome/data/talents/celestial/chants.lua
index b8b0f3573c6a66cd28f09a9db7a3fef319692d6a..437d9fa248f23eacb0461190c840c4647b68cfb4 100644
--- a/game/modules/tome/data/talents/celestial/chants.lua
+++ b/game/modules/tome/data/talents/celestial/chants.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/circles.lua b/game/modules/tome/data/talents/celestial/circles.lua
index 55a1bb9b7fff10e5a2924230706a86ad9180552b..4d9d22d14769255c522ed5865ce58f016dbfff0e 100644
--- a/game/modules/tome/data/talents/celestial/circles.lua
+++ b/game/modules/tome/data/talents/celestial/circles.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/combat.lua b/game/modules/tome/data/talents/celestial/combat.lua
index 39ec927da4cfd6e49fe478f51494316a71f35ab1..8b3331d7ad02b93eadd9f6e6c9ab4d832759c876 100644
--- a/game/modules/tome/data/talents/celestial/combat.lua
+++ b/game/modules/tome/data/talents/celestial/combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/crusader.lua b/game/modules/tome/data/talents/celestial/crusader.lua
new file mode 100644
index 0000000000000000000000000000000000000000..b67d5612fd890ff93d15f05aef3d96d33800abb3
--- /dev/null
+++ b/game/modules/tome/data/talents/celestial/crusader.lua
@@ -0,0 +1,167 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+newTalent{
+	name = "Absorption Strike",
+	type = {"celestial/crusader", 1},
+	require = divi_req1,
+	points = 5,
+	cooldown = 8,
+	positive = -7,
+	tactical = { ATTACK = 2, DISABLE = 1 },
+	range = 1,
+	requires_target = true,
+	getWeakness = function(self, t) return self:combatTalentScale(t, 20, 45, 0.75) end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 2.3) end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+		local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)
+		if hit then
+			self:project({type="ball", radius=2, selffire=false}, self.x, self.y, function(px, py)
+				local a = game.level.map(px, py, Map.ACTOR)
+				if a then
+					a:setEffect(a.EFF_ABSORPTION_STRIKE, 5, {apply_power=self:combatSpellpower(), power=t.getWeakness(self, t)})
+				end
+			end)
+		end
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		return ([[You strike your foe with your two handed weapon, dealing %d%% weapon damage.
+		If the attack hits all foes in radius 2 will have their light resistance reduced by %d%% for 5 turns.]]):
+		format(100 * damage, t.getWeakness(self, t))
+	end,
+}
+
+newTalent{
+	name = "Mark of Light",
+	type = {"celestial/crusader", 2},
+	require = divi_req2,
+	points = 5,
+	no_energy = true,
+	cooldown = 15,
+	positive = 20,
+	tactical = { ATTACK=0.5, DISABLE=2, HEAL=2 },
+	range = 1,
+	requires_target = true,
+	getPower = function(self, t) return self:combatTalentScale(t, 30, 70) end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.2, 0.7) end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+		local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)
+		if hit then
+			target:setEffect(target.EFF_MARK_OF_LIGHT, 5, {apply_power=self:combatSpellpower(), src=self, power=t.getPower(self, t)})
+		end
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		return ([[You swifty thrust the hilt of your 2H weapon into your target, dealing %d%% weapon damage.
+		If the attack hits the creature is marked with light for 5 turns. All melee hits you deal to it will heal you for %d%% of the damage done.]]):
+		format(100 * damage, t.getPower(self, t))
+	end,
+}
+
+newTalent{
+	name = "Righteous Strength",
+	type = {"celestial/crusader",3},
+	require = divi_req3,
+	points = 5,
+	mode = "passive",
+	getArmor = function(self, t) return self:combatTalentScale(t, 5, 30) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 120) end,
+	getCrit = function(self, t) return self:combatTalentScale(t, 3, 10, 0.75) end,
+	getPower = function(self, t) return self:combatTalentScale(t, 5, 20) end,
+	callbackOnCrit = function(self, t, kind, dam, chance, target)
+		if kind ~= "physical" or not target then return end
+		if self.turn_procs.righteous_strength then return end
+		self.turn_procs.righteous_strength = true
+
+		target:setEffect(target.EFF_LIGHTBURN, 5, {apply_power=self:combatSpellpower(), src=self, dam=t.getDamage(self, t)/5, armor=t.getArmor(self, t)})
+		self:setEffect(self.EFF_RIGHTEOUS_STRENGTH, 4, {power=t.getPower(self, t), max_power=t.getPower(self, t) * 3})
+	end,
+	passives = function(self, t, p)
+		self:talentTemporaryValue(p, "combat_physcrit", t.getCrit(self, t))
+	end,
+	info = function(self, t)
+		return ([[While wielding a two handed weapon, your critical strike chance is increased by %d%%, and your melee criticals instill you with righteous strength, increasing all physical and light damage you deal by %d%%, stacking up to 3 times.
+		In addition, your melee critical strikes leave a lasting lightburn on the target, dealing %0.2f light damage over 5 turns and reducing opponents armour by %d.
+		The damage increase with your Spellpower.]]):
+		format(t.getCrit(self, t), t.getPower(self, t), damDesc(self, DamageType.LIGHT, t.getDamage(self, t)), t.getArmor(self, t))
+	end,
+}
+
+newTalent{
+	name = "Flash of the Blade",
+	type = {"celestial/crusader", 4},
+	require = divi_req4,
+	random_ego = "attack",
+	points = 5,
+	cooldown = 10,
+	positive = 15,
+	tactical = { ATTACKAREA = {LIGHT = 2} },
+	range = 0,
+	radius = 2,
+	requires_target = true,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)}
+	end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	get1Damage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.6) end,
+	get2Damage = function(self, t) return self:combatTalentWeaponDamage(t, 0.5, 1.2) end,
+	action = function(self, t)
+		local tg1 = self:getTalentTarget(t) tg1.radius = 1
+		local tg2 = self:getTalentTarget(t)
+		self:project(tg1, self.x, self.y, function(px, py, tg, self)
+			local target = game.level.map(px, py, Map.ACTOR)
+			if target and target ~= self then
+				self:attackTarget(target, nil, t.get1Damage(self, t), true)
+			end
+		end)
+		self:project(tg2, self.x, self.y, function(px, py, tg, self)
+			local target = game.level.map(px, py, Map.ACTOR)
+			if target and target ~= self then
+				self:attackTarget(target, DamageType.LIGHT, t.get2Damage(self, t), true)
+				if self:getTalentLevel(t) >= 4 then
+					target:setEffect(target.EFF_DAZED, 3, {apply_power=self:combatSpellpower()})
+				end
+			end
+		end)
+
+		self:addParticles(Particles.new("meleestorm", 2, {radius=2, img="spinningwinds_yellow"}))
+		self:addParticles(Particles.new("meleestorm", 1, {img="spinningwinds_yellow"}))
+		return true
+	end,
+	info = function(self, t)
+		return ([[Infuse your two handed weapon with light while spinning around.
+		All creatures in radius one take %d%% weapon damage.
+		In addition while spinning your weapon shines so much it deals %d%% light weapon damage to all foes in radius 2.
+		At level 4 creatures may also be dazed by the light.]]):
+		format(t.get1Damage(self, t) * 100, t.get2Damage(self, t) * 100)
+	end,
+}
diff --git a/game/modules/tome/data/talents/celestial/eclipse.lua b/game/modules/tome/data/talents/celestial/eclipse.lua
index e78dd2b669eeceba31ef0f6540ddaed78a2c574f..52e43d15e261b31c11dc13f03b9103e27e973021 100644
--- a/game/modules/tome/data/talents/celestial/eclipse.lua
+++ b/game/modules/tome/data/talents/celestial/eclipse.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/glyphs.lua b/game/modules/tome/data/talents/celestial/glyphs.lua
index 31346e63fa10244a5294f220871609f0102f5f4d..06d1748b3c7a2e9f0423640ba19104ea4733dd0c 100644
--- a/game/modules/tome/data/talents/celestial/glyphs.lua
+++ b/game/modules/tome/data/talents/celestial/glyphs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -165,7 +165,7 @@ newTalent{
 		return ([[You bind light in a glyph on the floor. All targets walking over the glyph will be hit by a blast that knocks them back and does %0.2f physical damage.
 		The glyph is a hidden trap (%d detection and %d disarm power based on your Magic) and lasts for %d turns.
 		The damage will increase with your Spellpower.]]):
-		format(damDesc(self, DamageType.SPELLKNOCKBACK, damage), t.trapPower(self, t)*0.8, t.trapPower(self, t), duration)
+		format(damDesc(self, DamageType.PHYSICAL, damage), t.trapPower(self, t)*0.8, t.trapPower(self, t), duration)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/celestial/guardian.lua b/game/modules/tome/data/talents/celestial/guardian.lua
index a3a285798ccd0395931b18c4179965f7d70430fd..cc83d9702d84fd9460168b6a95089b7085d38513 100644
--- a/game/modules/tome/data/talents/celestial/guardian.lua
+++ b/game/modules/tome/data/talents/celestial/guardian.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/hymns.lua b/game/modules/tome/data/talents/celestial/hymns.lua
index c3fb9084e4265a1a946d50a14b17f5bc3f542641..5e2c8e3f8876ad30012e4cb811f8153c64c4d376 100644
--- a/game/modules/tome/data/talents/celestial/hymns.lua
+++ b/game/modules/tome/data/talents/celestial/hymns.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/light.lua b/game/modules/tome/data/talents/celestial/light.lua
index 8136e4b7e8e2a35b6628866cfafd834d44406508..7cd8501b0eb1dcf2f6f31185e469a841e7a61bd3 100644
--- a/game/modules/tome/data/talents/celestial/light.lua
+++ b/game/modules/tome/data/talents/celestial/light.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/radiance.lua b/game/modules/tome/data/talents/celestial/radiance.lua
new file mode 100644
index 0000000000000000000000000000000000000000..9284ff378a8bb8a487c57052089dbb39e82180b6
--- /dev/null
+++ b/game/modules/tome/data/talents/celestial/radiance.lua
@@ -0,0 +1,139 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+function radianceRadius(self)
+	return self:getTalentRadius(self:getTalentFromId(self.T_RADIANCE))
+end
+
+newTalent{
+	name = "Radiance",
+	type = {"celestial/radiance", 1},
+	mode = "passive",
+	require = divi_req1,
+	points = 5,
+	radius = function(self, t) return self:combatTalentScale(t, 3, 7) end,
+	getResist = function(self, t) return math.min(100, self:combatTalentScale(t, 20, 90)) end,
+	passives = function(self, t, p)
+		self:talentTemporaryValue(p, "radiance_aura", radianceRadius(self))
+		self:talentTemporaryValue(p, "blind_immune", t.getResist(self, t) / 100)
+	end,
+	info = function(self, t)
+		return ([[You are so infused with sunlight that your body glows permanently in radius %d, even in dark places.
+		The light protects your eyes, giving %d%% blindness resistance.
+		The light radius overrides your normal light if it is bigger (it does not stack).
+		]]):
+		format(radianceRadius(self), t.getResist(self, t))
+	end,
+}
+
+newTalent{
+	name = "Illumination",
+	type = {"celestial/radiance", 2},
+	require = divi_req2,
+	points = 5,
+	mode = "passive",
+	getPower = function(self, t) return 15 + self:combatTalentSpellDamage(t, 1, 100) end,
+	getDef = function(self, t) return 5 + self:combatTalentSpellDamage(t, 1, 35) end,
+	callbackOnActBase = function(self, t)
+		local radius = radianceRadius(self)
+		local grids = core.fov.circle_grids(self.x, self.y, radius, true)
+		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then
+			target:setEffect(target.EFF_ILLUMINATION, 1, {power=t.getPower(self, t), def=t.getDef(self, t)})
+			local ss = self:isTalentActive(self.T_SEARING_SIGHT)
+			if ss then
+				local dist = core.fov.distance(self.x, self.y, target.x, target.y) - 1
+				local coeff = math.scale(radius - dist, 1, radius, 0.1, 1)
+				local realdam = DamageType:get(DamageType.LIGHT).projector(self, target.x, target.y, DamageType.LIGHT, ss.dam * coeff)
+				if ss.daze and rng.percent(ss.daze) and target:canBe("stun") then
+					target:setEffect(target.EFF_DAZED, 3, {apply_power=self:combatSpellpower()})
+				end
+
+				if realdam and realdam > 0 and self:hasEffect(self.EFF_LIGHT_BURST) then
+					self:setEffect(self.EFF_LIGHT_BURST_SPEED, 4, {})
+				end
+			end
+		end end end		
+	end,
+	info = function(self, t)
+		return ([[The light of your Radiance allows you to see that which would normally be unseen.
+		All actors in your Radiance aura have their invisibility and stealth power reduced by %d.
+		In addition, all actors affected by illumination are easier to see and therefore hit; their defense is reduced by %d and all evasion bonuses from being unseen are negated.
+		The effects increase with your Spellpower.]]):
+		format(t.getPower(self, t), t.getDef(self, t))
+	end,
+}
+
+newTalent{
+	name = "Searing Sight",
+	type = {"celestial/radiance",3},
+	require = divi_req3,
+	mode = "sustained",
+	points = 5,
+	cooldown = 15,
+	range = function(self) return radianceRadius(self) end,
+	tactical = { ATTACKAREA = {LIGHT=1} },
+	sustain_positive = 40,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 1, 90) end,
+	getDaze = function(self, t) return self:combatTalentLimit(t, 35, 5, 20) end,
+	activate = function(self, t)
+		local daze = nil
+		if self:getTalentLevel(t) >= 4 then daze = t.getDaze(self, t) end
+		return {dam=t.getDamage(self, t), daze=daze}
+	end,
+	deactivate = function(self, t, p)
+	end,
+	info = function(self, t)
+		return ([[Your Radiance is so powerful it burns all foes caught in it, doing up to %0.2f light damage (reduced with distance) to all foes caught inside.
+		At level 4 the light is so bright it has %d%% chances to daze them for 3 turns.
+		The damage increase with your Spellpower.]]):
+		format(damDesc(self, DamageType.LIGHT, t.getDamage(self, t)), t.getDaze(self, t))
+	end,
+}
+
+newTalent{
+	name = "Light Burst",
+	type = {"celestial/radiance", 4},
+	require = divi_req4,
+	points = 5,
+	cooldown = 25,
+	positive = 15,
+	tactical = { DISABLE = {blind=1} },
+	range = function(self) return radianceRadius(self) end,
+	requires_target = true,
+	getDur = function(self, t) return self:combatTalentLimit(t, 9, 2, 6) end,
+	getMax = function(self, t) return math.floor(self:combatTalentScale(t, 2, 8)) end,
+	action = function(self, t)
+		local radius = radianceRadius(self)
+		local grids = core.fov.circle_grids(self.x, self.y, radius, true)
+		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then
+			if target:canBe("blind") then
+				target:setEffect(target.EFF_BLINDED, 4, {apply_power=self:combatSpellpower()})
+			end
+		end end end
+
+		self:setEffect(self.EFF_LIGHT_BURST, t.getDur(self, t), {max=t.getMax(self, t)})
+		return true
+	end,
+	info = function(self, t)
+		return ([[Concentrate your Radiance in a blinding flash of light. All foes caught inside will be blinded for 3 turns.
+		In addition for %d turns each time your Searing Sight damages a foe you gain a movement bonus of 10%%, stacking up to %d times.]]):
+		format(t.getDur(self, t), t.getMax(self, t))
+	end,
+}
+
diff --git a/game/modules/tome/data/talents/celestial/star-fury.lua b/game/modules/tome/data/talents/celestial/star-fury.lua
index 167edfdf98c03d16f0091e65c370c29796eaa183..b89585eed8d6fc09622615e5e7596e748db0d4f5 100644
--- a/game/modules/tome/data/talents/celestial/star-fury.lua
+++ b/game/modules/tome/data/talents/celestial/star-fury.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/celestial/sun.lua b/game/modules/tome/data/talents/celestial/sun.lua
index 9adadb421a9df65d49ad981cf8524eaf0d4657aa..5013eb8768640dda128801d12525385fec8d5054 100644
--- a/game/modules/tome/data/talents/celestial/sun.lua
+++ b/game/modules/tome/data/talents/celestial/sun.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,7 +18,7 @@
 -- darkgod@te4.org
 
 newTalent{
-	name = "Searing Light",
+	name = "Sun Beam",
 	type = {"celestial/sun", 1},
 	require = divi_req1,
 	random_ego = "attack",
@@ -27,140 +27,131 @@ newTalent{
 	positive = -16,
 	range = 7,
 	tactical = { ATTACK = {LIGHT = 2} },
+	no_energy = function(self, t) return self:attr("amplify_sun_beam") and true or false end,
 	direct_hit = true,
 	reflectable = true,
 	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 6, 160) end,
-	getDamageOnSpot = function(self, t) return self:combatTalentSpellDamage(t, 6, 80) end,
+	getDamage = function(self, t)
+		local mult = 1
+		if self:attr("amplify_sun_beam") then mult = 1 + self:attr("amplify_sun_beam") / 100 end
+		return self:combatTalentSpellDamage(t, 6, 220) * mult
+	end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 2, 4)) end,
 	action = function(self, t)
-		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.LIGHT, self:spellCrit(t.getDamage(self, t)), {type="light"})
 
-		local _ _, x, y = self:canProject(tg, x, y)
-		-- Add a lasting map effect
-		game.level.map:addEffect(self,
-			x, y, 4,
-			DamageType.LIGHT, t.getDamageOnSpot(self, t),
-			0,
-			5, nil,
-			{type="light_zone"},
-			nil, self:spellFriendlyFire()
-		)
+		if self:getTalentLevel(t) >= 4 then
+			local _ _, x, y = self:canProject(tg, x, y)
+			self:project({type="ball", x=x, y=y, radius=1, selffire=false}, x, y, DamageType.BLIND, t.getDuration(self, t), {type="light"})
+		end
+		self:removeEffect(self.EFF_SUN_VENGEANCE)
 
 		game:playSoundNear(self, "talents/flame")
 		return true
 	end,
 	info = function(self, t)
 		local damage = t.getDamage(self, t)
-		local damageonspot = t.getDamageOnSpot(self, t)
-		return ([[Calls the power of the Sun into a searing lance, doing %0.2f damage to the target and leaving a spot on the ground for 4 turns that does %0.2f light damage to anyone within it.
+		return ([[Calls the a beam of light from the Sun, doing %0.2f damage to the target.
+		At level 4 the beam will be so intense it blinds all foes in radius 1 for %d turns.
 		The damage dealt will increase with your Spellpower.]]):
-		format(damDesc(self, DamageType.LIGHT, damage), damageonspot)
+		format(damDesc(self, DamageType.LIGHT, damage), t.getDuration(self, t))
 	end,
 }
 
 newTalent{
-	name = "Sun Flare",
+	name = "Suncloak",
 	type = {"celestial/sun", 2},
 	require = divi_req2,
 	points = 5,
-	random_ego = "attack",
-	cooldown = 22,
+	cooldown = 15,
 	positive = -15,
-	tactical = { ATTACKAREA = {LIGHT = 1}, DISABLE = 2 },
+	tactical = { BUFF = 2 },
 	direct_hit = true,
-	range = 0,
-	radius = function(self, t) return math.floor(self:combatTalentScale(t, 2.5, 4.5)) end,
-	target = function(self, t)
-		return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t), talent=t}
-	end,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 4, 80) end,
-	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end,
+	requires_target = true,
+	range = 10,
+	getResists = function(self, t) return 10 + self:combatTalentSpellDamage(t, 4, 150) / 10 end,
+	getDuration = function(self, t) return 20 + self:combatTalentSpellDamage(t, 4, 400) / 10 end,
 	action = function(self, t)
-		local tg = self:getTalentTarget(t)
-		-- Temporarily turn on "friendlyfire" to lite all tiles
-		tg.selffire = true
-		tg.radius = tg.radius * 2
-		self:project(tg, self.x, self.y, DamageType.LITE, 1)
-		tg.radius = tg.radius / 2
-		tg.selffire = false
-		local grids = self:project(tg, self.x, self.y, DamageType.BLIND, t.getDuration(self, t))
-		if self:getTalentLevel(t) >= 3 then
-			self:project(tg, self.x, self.y, DamageType.LIGHT, t.getDamage(self, t))
-		end
-		game.level.map:particleEmitter(self.x, self.y, tg.radius, "sunburst", {radius=tg.radius, grids=grids, tx=self.x, ty=self.y, max_alpha=80})
+		self:setEffect(self.EFF_SUNCLOAK, 5, {reduce=t.getDuration(self, t), resists=t.getResists(self, t)})
 		game:playSoundNear(self, "talents/flame")
 		return true
 	end,
 	info = function(self, t)
-		local radius = self:getTalentRadius(t)
-		local damage = t.getDamage(self, t)
-		local duration = t.getDuration(self, t)
-		return ([[Invokes the Sun to cause a flare within radius %d, blinding your foes for %d turns and lighting up your immediate area (radius %d).
-		At level 3 it will also do %0.2f light damage within radius %d.
-		The damage done will increase with your Spellpower.]]):
-		format(radius, duration, radius * 2, damDesc(self, DamageType.LIGHT, damage), radius)
+		return ([[You wrap yourself in a cloak of sunlight for 5 turns.
+		While the cloak is active all new detrimental temporary effects have their duration reduced by %d%% and all your resistances are increased by %d%%.
+		The effects will increase with your Spellpower.]]):
+		format(t.getDuration(self, t), t.getResists(self, t))
    end,
 }
 
 newTalent{
-	name = "Firebeam",
+	name = "Sun's Vengeance", short_name = "SUN_VENGEANCE",
 	type = {"celestial/sun",3},
 	require = divi_req3,
+	mode = "passive",
 	points = 5,
-	random_ego = "attack",
-	cooldown = 7,
-	positive = -20,
-	tactical = { ATTACK = {FIRE = 2}  },
-	range = 7,
-	direct_hit = true,
-	requires_target = true,
-	target = function(self, t)
-		return {type="beam", range=self:getTalentRange(t), talent=t}
+	getCrit = function(self, t) return self:combatTalentScale(t, 2, 10, 0.75) end,
+	getProcChance = function(self, t) return self:combatTalentScale(t, 40, 100) end,
+	passives = function(self, t, p)
+		self:talentTemporaryValue(p, "combat_spellcrit", t.getCrit(self, t))
+		self:talentTemporaryValue(p, "combat_physcrit", t.getCrit(self, t))
 	end,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 200) end,
-	action = function(self, t)
-		local tg = self:getTalentTarget(t)
-		local x, y = self:getTarget(tg)
-		if not x or not y then return nil end
-		self:project(tg, x, y, DamageType.FIRE, self:spellCrit(t.getDamage(self, t)))
-		local _ _, x, y = self:canProject(tg, x, y)
-		game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "light_beam", {tx=x-self.x, ty=y-self.y})
+	callbackOnCrit = function(self, t, kind, dam, chance)
+		if kind ~= "spell" and kind ~= "physical" then return end
+		if not rng.percent(t.getProcChance(self, t)) then return end
+		if self.turn_procs.sun_vengeance then return end
+		self.turn_procs.sun_vengeance = true
 
-		game:playSoundNear(self, "talents/flame")
-		return true
+		if self:isTalentCoolingDown(self.T_SUN_BEAM) then
+			self.talents_cd[self.T_SUN_BEAM] = self.talents_cd[self.T_SUN_BEAM] - 1
+			if self.talents_cd[self.T_SUN_BEAM] <= 0 then self.talents_cd[self.T_SUN_BEAM] = nil end
+		else
+			self:setEffect(self.EFF_SUN_VENGEANCE, 2, {})
+		end
 	end,
 	info = function(self, t)
-		local damage = t.getDamage(self, t)
-		return ([[Call forth the Sun to summon a fiery beam, burning all targets in a line for %0.2f fire damage.
-		The damage done will increase with your Spellpower.]]):
-		format(damDesc(self, DamageType.FIRE, damage))
+		local crit = t.getCrit(self, t)
+		local chance = t.getProcChance(self, t)
+		return ([[Infuse yourself with the raging fury of the Sun, increasing your physical and spell critical chance by %d%%.
+		Each time you crit with a physical attack or a spell you have %d%% chance to gain Sun's Vengeance for 2 turns.
+		While affected your Sun Beam will take no turn to use and deal 25%% more damage.
+		If Sun Beam was on cooldown, the remaining turns are reduced by one instead.
+		This effect can only happen once per turn.]]):
+		format(crit, chance)
 	end,
 }
 
 newTalent{
-	name = "Sunburst",
+	name = "Path of the Sun",
 	type = {"celestial/sun", 4},
 	require = divi_req4,
 	points = 5,
-	random_ego = "attack",
 	cooldown = 15,
 	positive = -20,
-	tactical = { ATTACKAREA = {LIGHT = 2} },
-	range = 0,
-	radius = 3,
+	tactical = { ATTACKAREA = {LIGHT = 2}, CLOSEIN = 2 },
+	range = function(self, t) return self:combatTalentLimit(t, 10, 4, 9) end,
 	direct_hit = true,
 	target = function(self, t)
-		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), friendlyfire=false, talent=t}
+		return {type="beam", range=self:getTalentRange(t), talent=t}
 	end,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 160) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 310) end,
 	action = function(self, t)
 		local tg = self:getTalentTarget(t)
-		local grids = self:project(tg, self.x, self.y, DamageType.LIGHT, self:spellCrit(t.getDamage(self, t)))
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+
+		local dam = self:spellCrit(t.getDamage(self, t))
+		local grids = self:project(tg, x, y, function() end)
+		grids[self.x] = grids[self.x] or {}
+		grids[self.x][self.y] = true
+		local _ _, x, y = self:canProject(tg, x, y)
+		game.level.map:addEffect(self, self.x, self.y, 5, DamageType.SUN_PATH, dam / 5, 0, 5, grids, MapEffect.new{color_br=255, color_bg=249, color_bb=60, alpha=100, effect_shader="shader_images/sun_effect.png"}, nil, true)
+		game.level.map:addEffect(self, self.x, self.y, 5, DamageType.COSMETIC, 0      , 0, 5, grids, {type="sun_path", args={tx=x-self.x, ty=y-self.y}, only_one=true}, nil, true)
 
-		game.level.map:particleEmitter(self.x, self.y, tg.radius, "sunburst", {radius=tg.radius, grids=grids, tx=self.x, ty=self.y})
+		self:setEffect(self.EFF_PATH_OF_THE_SUN, 5, {})
 
 		game:playSoundNear(self, "talents/fireflash")
 		return true
@@ -168,7 +159,8 @@ newTalent{
 	info = function(self, t)
 		local radius = self:getTalentRadius(t)
 		local damage = t.getDamage(self, t)
-		return ([[Conjures a furious burst of Sunlight, dealing %0.2f light damage to all around you in a radius of %d.
-		The damage done will increase with your Spellpower.]]):format(damDesc(self, DamageType.LIGHT, damage), radius)
+		return ([[A path of sunlight appears in front of you for 5 turns. All foes standing inside take %0.2f light damage per turn.
+		While standing in the path your movements cost no turns.
+		The damage done will increase with your Spellpower.]]):format(damDesc(self, DamageType.LIGHT, damage / 5), radius)
 	end,
 }
diff --git a/game/modules/tome/data/talents/celestial/sunlight.lua b/game/modules/tome/data/talents/celestial/sunlight.lua
new file mode 100644
index 0000000000000000000000000000000000000000..2574e1b7bb8a127245d35ab4e1a3f2cf0f7bd3c2
--- /dev/null
+++ b/game/modules/tome/data/talents/celestial/sunlight.lua
@@ -0,0 +1,174 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+newTalent{
+	name = "Searing Light",
+	type = {"celestial/sunlight", 1},
+	require = divi_req1,
+	random_ego = "attack",
+	points = 5,
+	cooldown = 6,
+	positive = -16,
+	range = 7,
+	tactical = { ATTACK = {LIGHT = 2} },
+	direct_hit = true,
+	reflectable = true,
+	requires_target = true,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 6, 160) end,
+	getDamageOnSpot = function(self, t) return self:combatTalentSpellDamage(t, 6, 80) end,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, DamageType.LIGHT, self:spellCrit(t.getDamage(self, t)), {type="light"})
+
+		local _ _, x, y = self:canProject(tg, x, y)
+		-- Add a lasting map effect
+		game.level.map:addEffect(self,
+			x, y, 4,
+			DamageType.LIGHT, t.getDamageOnSpot(self, t),
+			0,
+			5, nil,
+			{type="light_zone"},
+			nil, self:spellFriendlyFire()
+		)
+
+		game:playSoundNear(self, "talents/flame")
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		local damageonspot = t.getDamageOnSpot(self, t)
+		return ([[Calls the power of the Sun into a searing lance, doing %0.2f damage to the target and leaving a spot on the ground for 4 turns that does %0.2f light damage to anyone within it.
+		The damage dealt will increase with your Spellpower.]]):
+		format(damDesc(self, DamageType.LIGHT, damage), damageonspot)
+	end,
+}
+
+newTalent{
+	name = "Sun Flare",
+	type = {"celestial/sunlight", 2},
+	require = divi_req2,
+	points = 5,
+	random_ego = "attack",
+	cooldown = 22,
+	positive = -15,
+	tactical = { ATTACKAREA = {LIGHT = 1}, DISABLE = 2 },
+	direct_hit = true,
+	range = 0,
+	radius = function(self, t) return math.floor(self:combatTalentScale(t, 2.5, 4.5)) end,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t), talent=t}
+	end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 4, 80) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end,
+	action = function(self, t)
+		local tg = self:getTalentTarget(t)
+		-- Temporarily turn on "friendlyfire" to lite all tiles
+		tg.selffire = true
+		tg.radius = tg.radius * 2
+		self:project(tg, self.x, self.y, DamageType.LITE, 1)
+		tg.radius = tg.radius / 2
+		tg.selffire = false
+		local grids = self:project(tg, self.x, self.y, DamageType.BLIND, t.getDuration(self, t))
+		if self:getTalentLevel(t) >= 3 then
+			self:project(tg, self.x, self.y, DamageType.LIGHT, t.getDamage(self, t))
+		end
+		game.level.map:particleEmitter(self.x, self.y, tg.radius, "sunburst", {radius=tg.radius, grids=grids, tx=self.x, ty=self.y, max_alpha=80})
+		game:playSoundNear(self, "talents/flame")
+		return true
+	end,
+	info = function(self, t)
+		local radius = self:getTalentRadius(t)
+		local damage = t.getDamage(self, t)
+		local duration = t.getDuration(self, t)
+		return ([[Invokes the Sun to cause a flare within radius %d, blinding your foes for %d turns and lighting up your immediate area (radius %d).
+		At level 3 it will also do %0.2f light damage within radius %d.
+		The damage done will increase with your Spellpower.]]):
+		format(radius, duration, radius * 2, damDesc(self, DamageType.LIGHT, damage), radius)
+   end,
+}
+
+newTalent{
+	name = "Firebeam",
+	type = {"celestial/sunlight",3},
+	require = divi_req3,
+	points = 5,
+	random_ego = "attack",
+	cooldown = 7,
+	positive = -20,
+	tactical = { ATTACK = {FIRE = 2}  },
+	range = 7,
+	direct_hit = true,
+	requires_target = true,
+	target = function(self, t)
+		return {type="beam", range=self:getTalentRange(t), talent=t}
+	end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 200) end,
+	action = function(self, t)
+		local tg = self:getTalentTarget(t)
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, DamageType.FIRE, self:spellCrit(t.getDamage(self, t)))
+		local _ _, x, y = self:canProject(tg, x, y)
+		game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "light_beam", {tx=x-self.x, ty=y-self.y})
+
+		game:playSoundNear(self, "talents/flame")
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		return ([[Call forth the Sun to summon a fiery beam, burning all targets in a line for %0.2f fire damage.
+		The damage done will increase with your Spellpower.]]):
+		format(damDesc(self, DamageType.FIRE, damage))
+	end,
+}
+
+newTalent{
+	name = "Sunburst",
+	type = {"celestial/sunlight", 4},
+	require = divi_req4,
+	points = 5,
+	random_ego = "attack",
+	cooldown = 15,
+	positive = -20,
+	tactical = { ATTACKAREA = {LIGHT = 2} },
+	range = 0,
+	radius = 3,
+	direct_hit = true,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), friendlyfire=false, talent=t}
+	end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 160) end,
+	action = function(self, t)
+		local tg = self:getTalentTarget(t)
+		local grids = self:project(tg, self.x, self.y, DamageType.LIGHT, self:spellCrit(t.getDamage(self, t)))
+
+		game.level.map:particleEmitter(self.x, self.y, tg.radius, "sunburst", {radius=tg.radius, grids=grids, tx=self.x, ty=self.y})
+
+		game:playSoundNear(self, "talents/fireflash")
+		return true
+	end,
+	info = function(self, t)
+		local radius = self:getTalentRadius(t)
+		local damage = t.getDamage(self, t)
+		return ([[Conjures a furious burst of Sunlight, dealing %0.2f light damage to all around you in a radius of %d.
+		The damage done will increase with your Spellpower.]]):format(damDesc(self, DamageType.LIGHT, damage), radius)
+	end,
+}
diff --git a/game/modules/tome/data/talents/celestial/twilight.lua b/game/modules/tome/data/talents/celestial/twilight.lua
index a935a0f897d6811faabb2e8ef2a0143b9db01f25..4fa2205251ac82b87be75bacc05f6ff43257dadb 100644
--- a/game/modules/tome/data/talents/celestial/twilight.lua
+++ b/game/modules/tome/data/talents/celestial/twilight.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -237,7 +237,7 @@ newTalent{
 			ai_target = {actor=target},
 			ai = "summoned", ai_real = target.ai,
 			resists = { all = modifier, [DamageType.DARKNESS] = 50, [DamageType.LIGHT] = - 50, },
-			desc = [[A dark shadowy shape who's form resembles the creature it was taken from.]],
+			desc = [[A dark, shadowy shape whose form resembles the humanoid creature it was taken from. It is not a perfect replica, though, and it makes you feel uneasy to look at it.]],
 		}
 		m:removeAllMOs()
 		m.make_escort = nil
diff --git a/game/modules/tome/data/talents/chronomancy/age-manipulation.lua b/game/modules/tome/data/talents/chronomancy/age-manipulation.lua
index 7d8beca1c5429ca8845710bf25a0746ecc4cad9a..cf645386fed0aa45bd4a47e56306cd39699acb8f 100644
--- a/game/modules/tome/data/talents/chronomancy/age-manipulation.lua
+++ b/game/modules/tome/data/talents/chronomancy/age-manipulation.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/anomalies.lua b/game/modules/tome/data/talents/chronomancy/anomalies.lua
index f7b0077c8a819fc8d55ad3aaec64d68500a48a6a..7faeac2559603d337a99fa23c85138c2cf14c80c 100644
--- a/game/modules/tome/data/talents/chronomancy/anomalies.lua
+++ b/game/modules/tome/data/talents/chronomancy/anomalies.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -86,6 +86,7 @@ newTalent{
 	type = {"chronomancy/anomalies", 1},
 	points = 1,
 	range = 10,
+	paradox = 0,
 	direct_hit = true,
 	type_no_req = true,
 	cooldown = 1,
@@ -250,6 +251,7 @@ newTalent{
 	points = 1,
 	type_no_req = true,
 	cooldown = 1,
+	paradox = 0,
 	no_unlearn_last = true,
 	getDamage = function(self, t) return getAnomalyDamage(self)/4 end,
 	getDuration = function(self, t) return math.ceil(self:combatScale(self:getParadox(), 0, 0, 1150/50, 1150)) end,
@@ -663,27 +665,27 @@ newTalent{
 					m.name = "human farmer"
 					m.subtype = "human"
 					m.image = "npc/humanoid_human_human_farmer.png"
-					m.desc = [[A weather-worn human farmer, looking at a loss as to what's going on.]]
+					m.desc = [[A weather-worn Human farmer, looking at a loss as to what's going on.]]
 					m.faction = "allied-kingdoms"
 					m.resolvers.inscriptions(1, "infusion")
 				elseif race == 2 then
 					m.name = "halfling gardener"
 					m.subtype = "halfling"
-					m.desc = [[A rugged halfling gardener, looking quite confused as to what he's doing here.]]
+					m.desc = [[A rugged Halfling gardener, looking quite confused as to what he's doing here.]]
 					m.faction = "allied-kingdoms"
 					m.image = "npc/humanoid_halfling_halfling_gardener.png"
 					m.resolvers.inscriptions(1, "infusion")
 				elseif race == 3 then
 					m.name = "shalore scribe"
 					m.subtype = "shalore"
-					m.desc = [[A scrawny elven scribe, looking bewildered at his surroundings.]]
+					m.desc = [[A scrawny Elven scribe, looking bewildered at his surroundings.]]
 					m.faction = "shalore"
 					m.image = "npc/humanoid_shalore_shalore_rune_master.png"
 					m.resolvers.inscriptions(1, "rune")
 				elseif race == 4 then
 					m.name = "dwarven lumberjack"
 					m.subtype = "dwarf"
-					m.desc = [[A brawny dwarven lumberjack, looking a bit upset at his current situation.]]
+					m.desc = [[A brawny Dwarven lumberjack, looking a bit upset at his current situation.]]
 					m.faction = "iron-throne"
 					m.image = "npc/humanoid_dwarf_lumberjack.png"
 					m.resolvers.inscriptions(1, "rune")
diff --git a/game/modules/tome/data/talents/chronomancy/chronomancer.lua b/game/modules/tome/data/talents/chronomancy/chronomancer.lua
index 17a4e924d6322e026170e4c2b43be934bec3749c..969d537b7db0da15c2f6684f8094b36f1e723a6c 100644
--- a/game/modules/tome/data/talents/chronomancy/chronomancer.lua
+++ b/game/modules/tome/data/talents/chronomancy/chronomancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/chronomancy.lua b/game/modules/tome/data/talents/chronomancy/chronomancy.lua
index 76a0753acd46effd1e2b4fdc7e317f7c219c5fc4..3ebae73df0b7700ec188e2c30c4079d481eff994 100644
--- a/game/modules/tome/data/talents/chronomancy/chronomancy.lua
+++ b/game/modules/tome/data/talents/chronomancy/chronomancy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/energy.lua b/game/modules/tome/data/talents/chronomancy/energy.lua
index 32d20c41a36366a9d82f3c2a8029603b063ebc0d..1b5cba661702dca6f0ff488b65f5aedad67a7498 100644
--- a/game/modules/tome/data/talents/chronomancy/energy.lua
+++ b/game/modules/tome/data/talents/chronomancy/energy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/gravity.lua b/game/modules/tome/data/talents/chronomancy/gravity.lua
index 9ba807ed21d0c61ed33ba1eb2ae01fbd82e2b72a..1a435102db3760f160d8d3cf5d1ab715dd02b503 100644
--- a/game/modules/tome/data/talents/chronomancy/gravity.lua
+++ b/game/modules/tome/data/talents/chronomancy/gravity.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/matter.lua b/game/modules/tome/data/talents/chronomancy/matter.lua
index ad2a5d97c33acd1e7a77615e91e60d76823626f5..e468b5b0a288eef47b9569d3d75e99a0dcb85198 100644
--- a/game/modules/tome/data/talents/chronomancy/matter.lua
+++ b/game/modules/tome/data/talents/chronomancy/matter.lua
@@ -1,5 +1,5 @@
 -- ToME -  Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/paradox.lua b/game/modules/tome/data/talents/chronomancy/paradox.lua
index a070c87a24cf34077cad3e8f44fe0f18f5d3061d..681e9902b5f48d3d41090cd6f5dba5fa028428ed 100644
--- a/game/modules/tome/data/talents/chronomancy/paradox.lua
+++ b/game/modules/tome/data/talents/chronomancy/paradox.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
index 8d147f8a87dfef1ac2270393b1af6fefcc88474b..58b6e52587694a99b7bcde08bbd8195187cff110 100644
--- a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
+++ b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua b/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua
index 5cfa119ec44aa84ed9c46f88facbc496500452fb..a95babc6f97c490f3484688ebb586b86a9271471 100644
--- a/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua
+++ b/game/modules/tome/data/talents/chronomancy/spacetime-weaving.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/speed-control.lua b/game/modules/tome/data/talents/chronomancy/speed-control.lua
index 2f629c71504acf91049df6a0fb127a787b9b6eff..21a244473d37dd6892fdea74f33b80f3f0970324 100644
--- a/game/modules/tome/data/talents/chronomancy/speed-control.lua
+++ b/game/modules/tome/data/talents/chronomancy/speed-control.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/temporal-archery.lua b/game/modules/tome/data/talents/chronomancy/temporal-archery.lua
index fc5a1d7c6b32cc0ba149f8de9a7961a5a356f917..f72d1c4991a2fa3b223137652bdec46022bee370 100644
--- a/game/modules/tome/data/talents/chronomancy/temporal-archery.lua
+++ b/game/modules/tome/data/talents/chronomancy/temporal-archery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/temporal-combat.lua b/game/modules/tome/data/talents/chronomancy/temporal-combat.lua
index c3823dffee401a7b61030588152eefad61afd2e9..3ecb2906eb14ccf23fc0d1724b0c85b43043d0e9 100644
--- a/game/modules/tome/data/talents/chronomancy/temporal-combat.lua
+++ b/game/modules/tome/data/talents/chronomancy/temporal-combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
index c784f62009a75e86181b1a613e66b3d30356fd9e..932f2aeb30cf4f17d2bb0f5ebccf93aad95afad4 100644
--- a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
+++ b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/chronomancy/timetravel.lua b/game/modules/tome/data/talents/chronomancy/timetravel.lua
index f5d7e059a01fa7424deea368dd82d75b3c53d38a..d1b62f8406a37462dfd09e0f9ebc3d8655c88985 100644
--- a/game/modules/tome/data/talents/chronomancy/timetravel.lua
+++ b/game/modules/tome/data/talents/chronomancy/timetravel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/blight.lua b/game/modules/tome/data/talents/corruptions/blight.lua
index 6cbe51a45e65ddfd091f258b28ad26654586331a..0898c6c8b811bcf435580d81cfb02bd51a9398b9 100644
--- a/game/modules/tome/data/talents/corruptions/blight.lua
+++ b/game/modules/tome/data/talents/corruptions/blight.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/blood.lua b/game/modules/tome/data/talents/corruptions/blood.lua
index 95c45900a97efd86a8f8a03da5997f6ac52e74ff..c9841d1de40a0bd16ece4699c98ea35aa5fe5460 100644
--- a/game/modules/tome/data/talents/corruptions/blood.lua
+++ b/game/modules/tome/data/talents/corruptions/blood.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/bone.lua b/game/modules/tome/data/talents/corruptions/bone.lua
index a9334b040e28e7e03301b2f0c30a4d17d3a5a778..0980ffb19167d8c7037e9c528aec01f6c008b5d2 100644
--- a/game/modules/tome/data/talents/corruptions/bone.lua
+++ b/game/modules/tome/data/talents/corruptions/bone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/corruptions.lua b/game/modules/tome/data/talents/corruptions/corruptions.lua
index 6a2f0f02434c017de5656fb83349583dd436ff3b..7bdbe8a5c82a8ad9d58aa02f452215bf64c48ea9 100644
--- a/game/modules/tome/data/talents/corruptions/corruptions.lua
+++ b/game/modules/tome/data/talents/corruptions/corruptions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/curses.lua b/game/modules/tome/data/talents/corruptions/curses.lua
index 2c1612ac1ca62dff04adeb691e5a44b18e540119..c9044081270f4e293237d49ad67bb0d50dc72614 100644
--- a/game/modules/tome/data/talents/corruptions/curses.lua
+++ b/game/modules/tome/data/talents/corruptions/curses.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/hexes.lua b/game/modules/tome/data/talents/corruptions/hexes.lua
index 42cdcdbe2c8506331b18e3eefb2eb34899237e3c..74119ed846bf63acdf7432411ff8c90646c5b242 100644
--- a/game/modules/tome/data/talents/corruptions/hexes.lua
+++ b/game/modules/tome/data/talents/corruptions/hexes.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/plague.lua b/game/modules/tome/data/talents/corruptions/plague.lua
index e8a176104d4290a709c545725540fb87261953cf..5e967ed3ab1162b5cde44ba639167320be9b4396 100644
--- a/game/modules/tome/data/talents/corruptions/plague.lua
+++ b/game/modules/tome/data/talents/corruptions/plague.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/reaving-combat.lua b/game/modules/tome/data/talents/corruptions/reaving-combat.lua
index cc00794bbcba710b69246c40b247c87a25fc0237..b7675c833276f78d87fc0ecc29b79ab37bec491b 100644
--- a/game/modules/tome/data/talents/corruptions/reaving-combat.lua
+++ b/game/modules/tome/data/talents/corruptions/reaving-combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/sanguisuge.lua b/game/modules/tome/data/talents/corruptions/sanguisuge.lua
index c967d5061bd3d80b2636078b2c4184cdfb86f701..be91a98ae767ebdf5cadf7e32f4f2c830ee5ca05 100644
--- a/game/modules/tome/data/talents/corruptions/sanguisuge.lua
+++ b/game/modules/tome/data/talents/corruptions/sanguisuge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/scourge.lua b/game/modules/tome/data/talents/corruptions/scourge.lua
index 8d7cccdb931c21ca7569dba309e5fa409288fc8d..48360328ae60cef4a6ace9af297b68d6af5e6de8 100644
--- a/game/modules/tome/data/talents/corruptions/scourge.lua
+++ b/game/modules/tome/data/talents/corruptions/scourge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -173,9 +173,9 @@ newTalent{
 		local speed1, hit1 = self:attackTargetWith(target, weapon.combat, DamageType.DARKNESS, self:combatTalentWeaponDamage(t, 0.6, 1.4))
 
 		if hit1 then
-			self.combat_physcrit = self.combat_physcrit + 100
+			self.turn_procs.auto_phys_crit = true
 			local speed2, hit2 = self:attackTargetWith(target, offweapon.combat, DamageType.BLIGHT, self:getOffHandMult(offweapon.combat, self:combatTalentWeaponDamage(t, 0.6, 1.4)))
-			self.combat_physcrit = self.combat_physcrit - 100
+			self.turn_procs.auto_phys_crit = nil
 			if hit2 and target:canBe("blind") then
 				target:setEffect(target.EFF_BLINDED, 4, {apply_power=self:combatPhysicalpower()})
 			else
diff --git a/game/modules/tome/data/talents/corruptions/shadowflame.lua b/game/modules/tome/data/talents/corruptions/shadowflame.lua
index 3f638965d9ee87bed1a82a7b91a17b84c1415e35..961e5b07d663e6fb020f799ce9cc8da609b4a648 100644
--- a/game/modules/tome/data/talents/corruptions/shadowflame.lua
+++ b/game/modules/tome/data/talents/corruptions/shadowflame.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/torment.lua b/game/modules/tome/data/talents/corruptions/torment.lua
index 081939eacaf03ea8b3718cde295846dd27b0fddd..4b62c2c87c0615ac5cb88bfa8ba4da4f38a2c8c3 100644
--- a/game/modules/tome/data/talents/corruptions/torment.lua
+++ b/game/modules/tome/data/talents/corruptions/torment.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/corruptions/vim.lua b/game/modules/tome/data/talents/corruptions/vim.lua
index d1081a718806c87afd801628ea356767b45605d5..5721e312ebbc5d2a8eef53d0587fdd3df8fd7c6c 100644
--- a/game/modules/tome/data/talents/corruptions/vim.lua
+++ b/game/modules/tome/data/talents/corruptions/vim.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/ambush.lua b/game/modules/tome/data/talents/cunning/ambush.lua
index dabe9e3fe489f5576b9a362d80b5ab9aa91450cc..f7729f5a3c220a326043d2d5eca808d0fea9d1b6 100644
--- a/game/modules/tome/data/talents/cunning/ambush.lua
+++ b/game/modules/tome/data/talents/cunning/ambush.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -130,7 +130,7 @@ newTalent{
 			ai_target = {actor=nil},
 			ai = "summoned", ai_real = "tactical",
 			name = "Shadow of "..self.name,
-			desc = [[A dark shadowy shape whose form resembles you.]],
+			desc = [[A dark shadowy shape whose form resembles your own.]],
 		}
 		m:removeAllMOs()
 		m.make_escort = nil
diff --git a/game/modules/tome/data/talents/cunning/cunning.lua b/game/modules/tome/data/talents/cunning/cunning.lua
index eeb5fc0b6d5000acef5c491277f3b473ca2b2dab..79ba82bc4ac8409a99abd58317d682a162bceb68 100644
--- a/game/modules/tome/data/talents/cunning/cunning.lua
+++ b/game/modules/tome/data/talents/cunning/cunning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/dirty.lua b/game/modules/tome/data/talents/cunning/dirty.lua
index 45bb0f8b9dd9f90cfdef8cad619fba4c3572063e..8d2e6b0e872e640a955f1c7590df08699b162773 100644
--- a/game/modules/tome/data/talents/cunning/dirty.lua
+++ b/game/modules/tome/data/talents/cunning/dirty.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -102,7 +102,7 @@ newTalent{
 		if hitted and not self.dead and tx == target.x and ty == target.y then
 			if not self:canMove(tx,ty,true) or not target:canMove(sx,sy,true) then
 				self:logCombat(target, "Terrain prevents #Source# from switching places with #Target#.")
-				return false
+				return true
 			end						
 			self:setEffect(self.EFF_EVASION, t.getDuration(self, t), {chance=50})
 			-- Displace
diff --git a/game/modules/tome/data/talents/cunning/lethality.lua b/game/modules/tome/data/talents/cunning/lethality.lua
index b473183f033ea3125a57692050827b3f9ab0cf09..4c8de35959c67d2e5dce1d6d39281fdbd3f35817 100644
--- a/game/modules/tome/data/talents/cunning/lethality.lua
+++ b/game/modules/tome/data/talents/cunning/lethality.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/poisons.lua b/game/modules/tome/data/talents/cunning/poisons.lua
index 8be6e641432f8ab0f72a028e6ce0eb0f399b1365..54ee86dca351a9daf18e6e3a16e56f8061bbe519 100644
--- a/game/modules/tome/data/talents/cunning/poisons.lua
+++ b/game/modules/tome/data/talents/cunning/poisons.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/scoundrel.lua b/game/modules/tome/data/talents/cunning/scoundrel.lua
index 0023c3b4d92d6c2fe46d88574de0fce3fd195abc..a7c54b10c367f5e66705faaf716c78a2ea1f0c2a 100644
--- a/game/modules/tome/data/talents/cunning/scoundrel.lua
+++ b/game/modules/tome/data/talents/cunning/scoundrel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/shadow-magic.lua b/game/modules/tome/data/talents/cunning/shadow-magic.lua
index ed8f1c3b3704d5ae74eb14422adfc3fd8f6463db..1abf5697e09dc220b488327f95dbc631454d6322 100644
--- a/game/modules/tome/data/talents/cunning/shadow-magic.lua
+++ b/game/modules/tome/data/talents/cunning/shadow-magic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/stealth.lua b/game/modules/tome/data/talents/cunning/stealth.lua
index dcb6d13f69ff7a03588f19e5f98726a87541cf08..03f7c6dfec9b443260c94cbdb62fc727d32241dc 100644
--- a/game/modules/tome/data/talents/cunning/stealth.lua
+++ b/game/modules/tome/data/talents/cunning/stealth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/survival.lua b/game/modules/tome/data/talents/cunning/survival.lua
index aa882f17892248293b4086690fbd53fb3e113785..fee45c58a3c41a63eb3ec58b5d800a95f779b433 100644
--- a/game/modules/tome/data/talents/cunning/survival.lua
+++ b/game/modules/tome/data/talents/cunning/survival.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/tactical.lua b/game/modules/tome/data/talents/cunning/tactical.lua
index 7dfc53b4416caf355040c379e60196b3389f7b56..942b0d697310dfc6aefb7c622c583b996af94015 100644
--- a/game/modules/tome/data/talents/cunning/tactical.lua
+++ b/game/modules/tome/data/talents/cunning/tactical.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cunning/traps.lua b/game/modules/tome/data/talents/cunning/traps.lua
index 1d5685ee2ceedc8b2b61d44e60dcf5568b64ae98..cbc6b835fb5ba8aea6ac336a78b64a3c92c24257 100644
--- a/game/modules/tome/data/talents/cunning/traps.lua
+++ b/game/modules/tome/data/talents/cunning/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/cursed-aura.lua b/game/modules/tome/data/talents/cursed/cursed-aura.lua
index dda4701f3e7cad0fd8b5814c4b6a91dc51990a4b..71f12438b71d06a70bd38095dd13c9ea796a18b6 100644
--- a/game/modules/tome/data/talents/cursed/cursed-aura.lua
+++ b/game/modules/tome/data/talents/cursed/cursed-aura.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -435,7 +435,7 @@ newTalent{
 			no_breath = 1,
 			disarm_immune = 1,
 			never_move = 1,
-			no_drops = true, -- remove to drop the weapon
+			--no_drops = true, -- remove to drop the weapon
 
 			resolvers.talents{
 				[Talents.T_WEAPON_COMBAT]={base=1, every=10},
@@ -504,6 +504,6 @@ newTalent{
 		local duration = t.getDuration(self, t)
 		local attackSpeed = 100/t.getAttackSpeed(self, t)
 
-		return ([[Instill a part of your living curse into a weapon in your inventory, and toss it nearby. This nearly impervious sentry will attack all nearby enemies for %d turns. When the curse ends, the weapon will crumble to dust, worn through by your hatred. Attack Speed: %d%%]]):format(duration, attackSpeed)
+		return ([[Instill a part of your living curse into a weapon in your inventory, and toss it nearby. This nearly impervious sentry will attack all nearby enemies for %d turns. When the curse ends, the weapon will drop to the ground. Attack Speed: %d%%]]):format(duration, attackSpeed)
 	end,
 }
diff --git a/game/modules/tome/data/talents/cursed/cursed-form.lua b/game/modules/tome/data/talents/cursed/cursed-form.lua
index c7808b2fadefe80c93c76ceead75692143c31274..0517ee96053159bb07fc8bcdb1a13d699cccfbfb 100644
--- a/game/modules/tome/data/talents/cursed/cursed-form.lua
+++ b/game/modules/tome/data/talents/cursed/cursed-form.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/cursed.lua b/game/modules/tome/data/talents/cursed/cursed.lua
index ea6403c0302ad6545e771c8a5b93c80fa4c22163..05bc19a700c4546738b955ad8042ae606d2fc3c3 100644
--- a/game/modules/tome/data/talents/cursed/cursed.lua
+++ b/game/modules/tome/data/talents/cursed/cursed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/dark-figure.lua b/game/modules/tome/data/talents/cursed/dark-figure.lua
index d47ce39e753122777c3dfa78afe83a39b7be0fdc..fc2032fa1bf16ce59e709450bd25d964433dd54b 100644
--- a/game/modules/tome/data/talents/cursed/dark-figure.lua
+++ b/game/modules/tome/data/talents/cursed/dark-figure.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/dark-sustenance.lua b/game/modules/tome/data/talents/cursed/dark-sustenance.lua
index 4b4c8b142fb44c422c9882cccc1773f87a9c68b5..f0efc8423195c2a18eb4f5b7fc0bec071fbfc77d 100644
--- a/game/modules/tome/data/talents/cursed/dark-sustenance.lua
+++ b/game/modules/tome/data/talents/cursed/dark-sustenance.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/darkness.lua b/game/modules/tome/data/talents/cursed/darkness.lua
index 39dbe90df8f4b6196e110f2dc6350cf5bfb9ba40..18550c01a6ad74ced18ecb86ca77146cbc2b657d 100644
--- a/game/modules/tome/data/talents/cursed/darkness.lua
+++ b/game/modules/tome/data/talents/cursed/darkness.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/endless-hunt.lua b/game/modules/tome/data/talents/cursed/endless-hunt.lua
index bdda9c69bff431aca3d090687030d41455648134..b2ded74824324502c5a086cf47072ae0b39dfe44 100644
--- a/game/modules/tome/data/talents/cursed/endless-hunt.lua
+++ b/game/modules/tome/data/talents/cursed/endless-hunt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -151,7 +151,7 @@ newTalent{
 		return getHateMultiplier(self, 0.35, 0.67, false, hate)
 	end,
 	getTargetDamageChange = function(self, t)
-		return -self:combatLimit(self:combatTalentStatDamage(t, "wil", 0.7, 0.9), 1, 0, 0, 0.75, 0.87) -- Limit < 100%
+		return -self:combatLimit(self:combatTalentStatDamage(t, "wil", 0.7, 0.9), 1, 0, 0, 0.75, 0.87)*100 -- Limit < 100%
 	end,
 	getDuration = function(self, t)
 		return 2
@@ -196,7 +196,7 @@ newTalent{
 		local targetDamageChange = t.getTargetDamageChange(self, t)
 		local duration = t.getDuration(self, t)
 		return ([[Harass your stalked victim with two quick attacks for %d%% (at 0 Hate) to %d%% (at 100+ Hate) damage each. Each attack that scores a hit disrupts one talent, rune or infusion for %d turns. Your opponent will be unnerved by the attacks, reducing the damage they deal by %d%% for %d turns.
-		Damage reduction increases with the Willpower stat.]]):format(t.getDamageMultiplier(self, t, 0) * 100, t.getDamageMultiplier(self, t, 100) * 100, cooldownDuration, -targetDamageChange * 100, duration)
+		Damage reduction increases with the Willpower stat.]]):format(t.getDamageMultiplier(self, t, 0) * 100, t.getDamageMultiplier(self, t, 100) * 100, cooldownDuration, -targetDamageChange, duration)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/cursed/fears.lua b/game/modules/tome/data/talents/cursed/fears.lua
index 3b3d928ad4574060b9192421a4f4d76751d96c8c..dfcd2f4316a7f9ea0c2ba22fffc9e75a94bf1295 100644
--- a/game/modules/tome/data/talents/cursed/fears.lua
+++ b/game/modules/tome/data/talents/cursed/fears.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/force-of-will.lua b/game/modules/tome/data/talents/cursed/force-of-will.lua
index 0dc4fd7324be5865386f66004cdc98d731febb9e..59466e10d82d80d79e8a90f0737d6cd50c425295 100644
--- a/game/modules/tome/data/talents/cursed/force-of-will.lua
+++ b/game/modules/tome/data/talents/cursed/force-of-will.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/gestures.lua b/game/modules/tome/data/talents/cursed/gestures.lua
index 60d20e635c5ecc01219f4d1cbdadb2d70f631ddb..5e5082250b7eee1904fe4226caaded046b57ee49 100644
--- a/game/modules/tome/data/talents/cursed/gestures.lua
+++ b/game/modules/tome/data/talents/cursed/gestures.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/gloom.lua b/game/modules/tome/data/talents/cursed/gloom.lua
index 1ff2036ed78226c68197f32b16c894f33e07163d..68cd723749dfcb16de52324ba84a57901117fdcb 100644
--- a/game/modules/tome/data/talents/cursed/gloom.lua
+++ b/game/modules/tome/data/talents/cursed/gloom.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/one-with-shadows.lua b/game/modules/tome/data/talents/cursed/one-with-shadows.lua
index 477c44c42912a6c8d01f732cc5d29e247ff04f63..8dae26557b75fa7cfdea5c013fa3829ce9ea201d 100644
--- a/game/modules/tome/data/talents/cursed/one-with-shadows.lua
+++ b/game/modules/tome/data/talents/cursed/one-with-shadows.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -129,7 +129,10 @@ newTalent{
 		self:setEffect(self.EFF_SHADOW_DECOY, 4, {power=t.getPower(self, t)})
 		self:forceUseTalent(t.id, {ignore_energy=true})
 
-		if self.player then self:setEmote(Emote.new("Fools, you never killed me; that was only my shadow!", 45)) end
+		if self.player then
+			self:setEmote(Emote.new("Fools, you never killed me; that was only my shadow!", 45))
+			world:gainAchievement("AVOID_DEATH", self)
+		end
 		return true
 	end,
 	activate = function(self, t)
diff --git a/game/modules/tome/data/talents/cursed/predator.lua b/game/modules/tome/data/talents/cursed/predator.lua
index 04db0f8a485f5b7199d02de06413edefb9c68eb9..af7f061e41d62e99987bec3d04191f84225054a0 100644
--- a/game/modules/tome/data/talents/cursed/predator.lua
+++ b/game/modules/tome/data/talents/cursed/predator.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/primal-magic.lua b/game/modules/tome/data/talents/cursed/primal-magic.lua
index 826232bb198034863d51e6cb061c5945fdb41b07..d46ce43f36404d5f47d51e8f74dffbc364639699 100644
--- a/game/modules/tome/data/talents/cursed/primal-magic.lua
+++ b/game/modules/tome/data/talents/cursed/primal-magic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/punishments.lua b/game/modules/tome/data/talents/cursed/punishments.lua
index cad4474b0c6e804c18b60e2627a8847d22f9fc12..85f09c5075863ed769b777c77a76ee945a6b0791 100644
--- a/game/modules/tome/data/talents/cursed/punishments.lua
+++ b/game/modules/tome/data/talents/cursed/punishments.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/rampage.lua b/game/modules/tome/data/talents/cursed/rampage.lua
index c49b6a6777320bdb50619e705e25bd91a33f55a8..06022991896c14cad24ac86a4b98fed68451c75f 100644
--- a/game/modules/tome/data/talents/cursed/rampage.lua
+++ b/game/modules/tome/data/talents/cursed/rampage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/shadows.lua b/game/modules/tome/data/talents/cursed/shadows.lua
index 18b3fcafd825b1862601dac63fb2bbb5de6804c5..2dd35a1ebf328b81934027ee6af847f50ded0522 100644
--- a/game/modules/tome/data/talents/cursed/shadows.lua
+++ b/game/modules/tome/data/talents/cursed/shadows.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/slaughter.lua b/game/modules/tome/data/talents/cursed/slaughter.lua
index d065316c845f485ce79d014563e8268b905188e3..0ae43c5210475163a38382d656e2ff448373a964 100644
--- a/game/modules/tome/data/talents/cursed/slaughter.lua
+++ b/game/modules/tome/data/talents/cursed/slaughter.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/strife.lua b/game/modules/tome/data/talents/cursed/strife.lua
index 5665523aa7649d0a26d71682c05e9a43f2d0d6ee..3cd2ec125dcca94b0ccf05d429f9d687d4d15603 100644
--- a/game/modules/tome/data/talents/cursed/strife.lua
+++ b/game/modules/tome/data/talents/cursed/strife.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/cursed/traveler.lua b/game/modules/tome/data/talents/cursed/traveler.lua
index f44c592b522baded9aea558ac47bfb4b51fa7d80..cc5dbd587725ec56a2e4b03d34e8e11c0e2622c3 100644
--- a/game/modules/tome/data/talents/cursed/traveler.lua
+++ b/game/modules/tome/data/talents/cursed/traveler.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Middle-Earth
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/antimagic.lua b/game/modules/tome/data/talents/gifts/antimagic.lua
index 67fb558e5c213c4ad7532d2f7082329ce6b54971..7ad4e3976f7d912ca80d35ce4a847d3fb56622bf 100644
--- a/game/modules/tome/data/talents/gifts/antimagic.lua
+++ b/game/modules/tome/data/talents/gifts/antimagic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/call.lua b/game/modules/tome/data/talents/gifts/call.lua
index 51f099a812fe3ee690c58df7ea959596dbf1d3ec..d0ad98de917a436ddb66c90b0813949061893c44 100644
--- a/game/modules/tome/data/talents/gifts/call.lua
+++ b/game/modules/tome/data/talents/gifts/call.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -36,10 +36,12 @@ newTalent{
 	end,
 	activate = function(self, t)
 		local ret = {}
+		
+		local boost = 1 + (self.enhance_meditate or 0)
 
-		local pt = 2 + self:combatTalentMindDamage(t, 20, 120) / 10
-		local save = 5 + self:combatTalentMindDamage(t, 10, 40)
-		local heal = 5 + self:combatTalentMindDamage(t, 12, 30)
+		local pt = (2 + self:combatTalentMindDamage(t, 20, 120) / 10) * boost
+		local save = (5 + self:combatTalentMindDamage(t, 10, 40)) * boost
+		local heal = (5 + self:combatTalentMindDamage(t, 12, 30)) * boost
 		
 		if self:knowTalent(self.T_EARTH_S_EYES) then
 			local te = self:getTalentFromId(self.T_EARTH_S_EYES)
@@ -58,9 +60,11 @@ newTalent{
 		return true
 	end,
 	info = function(self, t)
-		local pt = 2 + self:combatTalentMindDamage(t, 20, 120) / 10
-		local save = 5 + self:combatTalentMindDamage(t, 10, 40)
-		local heal = 5 + self:combatTalentMindDamage(t, 12, 30)
+		local boost = 1 + (self.enhance_meditate or 0)
+		
+		local pt = (2 + self:combatTalentMindDamage(t, 20, 120) / 10) * boost
+		local save = (5 + self:combatTalentMindDamage(t, 10, 40)) * boost
+		local heal = (5 + self:combatTalentMindDamage(t, 12, 30)) * boost
 		local rest = 0.5 * self:getTalentLevelRaw(t)
 		return ([[Meditate on your link with Nature.
 		While meditating, you regenerate %d equilibrium per turn, your Mental Save is increased by %d, and your healing factor increases by %d%%.
diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua
index 2c2275ff76ebf3142a790a9de82ddf631e93afd4..6d31a1c3e149843ea94cc783b87611cd0a8be691 100644
--- a/game/modules/tome/data/talents/gifts/cold-drake.lua
+++ b/game/modules/tome/data/talents/gifts/cold-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/corrosive-blades.lua b/game/modules/tome/data/talents/gifts/corrosive-blades.lua
index 1aac7683b5a4208b20d4d0d9cac751c789f118df..592453ae49e4d9206144f515745dacf770f925e0 100644
--- a/game/modules/tome/data/talents/gifts/corrosive-blades.lua
+++ b/game/modules/tome/data/talents/gifts/corrosive-blades.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -41,7 +41,7 @@ newTalent{
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		local dam = self:mindCrit(t.getDamage(self, t))
-		self:project(tg, x, y, DamageType.ACID, dam)
+		self:project(tg, x, y, DamageType.ACID_DISARM, dam)
 		local _ _, x, y = self:canProject(tg, x, y)
 		game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "ooze_beam", {tx=x-self.x, ty=y-self.y})
 		game:playSoundNear(self, "talents/slime")
@@ -49,8 +49,8 @@ newTalent{
 	end,
 	info = function(self, t)
 		local dam = t.getDamage(self, t)
-		return ([[Channel acid through your psiblades, extending their reach to create a beam doing %0.2f acid damage.
-		Damage increase with Mindpower.]]):
+		return ([[Channel acid through your psiblades, extending their reach to create a beam doing %0.1f Acid damage (which can disarm them).
+		The damage increases with your Mindpower.]]):
 		format(damDesc(self, DamageType.ACID, dam))
 	end,
 }
@@ -61,14 +61,21 @@ newTalent{
 	require = gifts_req_high2,
 	points = 5,
 	mode = "passive",
-	cooldown = function(self, t) return math.ceil(self:combatTalentLimit(t, 8, 30, 14)) end,
-	getResist = function(self, t) return 10 + self:combatTalentMindDamage(t, 10, 70) end,
+	getResist = function(self, t) return self:combatTalentMindDamage(t, 10, 40) end,
+	-- called in data.timed_effects.physical.lua for the CORROSIVE_NATURE effect
+	getAcidDamage = function(self, t, level)
+		return self:combatTalentScale(t, 5, 15, 0.75)*math.min(5, level or 1)^0.5/2.23
+	end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 2, 5, "log")) end,
+	passives = function(self, t, p)
+		self:talentTemporaryValue(p, "resists", {[DamageType.ACID]=t.getResist(self, t)})
+	end,
 	info = function(self, t)
-		local res = t.getResist(self, t)
-		return ([[Each time you deal nature damage to a creature its acid resistance is decreased by %d%% for 2 turns.
-		Resistance will decrease with Mindpower.
-		This effect can only happen at most once every %d turns.]]):
-		format(res, self:getTalentCooldown(t))
+		return ([[You gain %d%% Acid resistance.
+		When you deal Nature damage to a creature, you gain a %0.1f%% bonus to Acid damage for %d turns. 
+		This damage bonus will improve up to 4 times (no more than once each turn) with later Nature damage you do, up to a maximum of %0.1f%%.
+		The resistance and damage increase improve with your Mindpower.]]):
+		format(t.getResist(self, t), t.getAcidDamage(self, t, 1), t.getDuration(self, t), t.getAcidDamage(self, t, 5))
 	end,
 }
 
@@ -115,6 +122,7 @@ newTalent{
 	tactical = { ATTACKAREA = { ACID = 2 }, DISABLE = { knockback = 1 } },
 	target = function(self, t) return {type="ball", radius=self:getTalentRadius(t), range=self:getTalentRange(t), talent=t} end,
 	getDamage = function(self, t) return self:combatTalentMindDamage(t, 20, 290) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentLimit(t, 12, 5, 8)) end, -- Limit < 12
 	getNb = function(self, t) local l = self:getTalentLevel(t) 
 		if l < 3 then return 2
 		elseif l < 5 then return 3
@@ -131,13 +139,12 @@ newTalent{
 		local tg = {type="ball", radius=self:getTalentRadius(t), range=self:getTalentRange(t)}
 		local grids = {}
 		self:project(tg, x, y, function(px, py) 
-			if not game.level.map:checkEntity(px, py, Map.TERRAIN, "block_move") then grids[#grids+1] = {x=px, y=py} end
+			if not ((px == x and py == y) or game.level.map:checkEntity(px, py, Map.TERRAIN, "block_move") or game.level.map(px, py, Map.TRAP)) then grids[#grids+1] = {x=px, y=py} end
 		end)
-
 		for i = 1, t.getNb(self, t) do
-			local spot = rng.tableRemove(grids)
+			local spot = i == 1 and {x=x, y=y} or rng.tableRemove(grids)
 			if not spot then break end
-			local t = basetrap(self, t, spot.x, spot.y, 6, {
+			local t = basetrap(self, t, spot.x, spot.y, t.getDuration(self, t), {
 				type = "seed", name = "corrosive seed", color=colors.VIOLET, image = "trap/corrosive_seeds.png",
 				disarm_power = self:combatMindpower(),
 				dam = self:mindCrit(t.getDamage(self, t)),
@@ -167,9 +174,10 @@ newTalent{
 		local dam = t.getDamage(self, t)
 		local nb = t.getNb(self, t)
 		return ([[You focus on a target zone of radius 2 to make up to %d corrosive seeds appear.
-		When a creature walk over a seed it explodes, knocking them back and dealing %0.2f acid damage.
+		The first seed will appear at the center of the target zone, while others will appear at random spots.
+		Each seed lasts %d turns and will explode when a hostile creature walks over it, knocking the creature back and dealing %0.1f Acid damage within radius 1.
 		The damage will increase with your Mindpower.]]):
-		format(nb, damDesc(self, DamageType.ACID, dam))
+		format(nb, t.getDuration(self, t), damDesc(self, DamageType.ACID, dam))
 	end,
 }
 
@@ -179,19 +187,17 @@ newTalent{
 	require = gifts_req_high4,
 	mode = "sustained",
 	points = 5,
-	sustain_equilibrium = 20,
+	sustain_equilibrium = 15,
 	cooldown = 30,
 	tactical = { BUFF = 2 },
 	on_pre_use = function(self, t)
 		local main, off = self:hasPsiblades(true, true)
 		return main and off
 	end,
-	getAcidDamageIncrease = function(self, t) return self:getTalentLevelRaw(t) * 2 end,
-	getResistPenalty = function(self, t) return self:combatTalentLimit(t, 100, 17, 50) end, -- Limit < 100%
-	getRegen = function(self, t) return self:combatTalentLimit(t, 50, 6.5, 32.5) end, -- Limit < 50%
+	getResistPenalty = function(self, t) return self:combatTalentLimit(t, 100, 15, 50) end, -- Limit < 100%
+	getRegen = function(self, t) return self:combatTalentMindDamage(t, 10, 75) end,
 	activate = function(self, t)
 		game:playSoundNear(self, "talents/slime")
-
 		local particle
 		if core.shader.active(4) then
 			particle = self:addParticles(Particles.new("shader_ring_rotating", 1, {additive=true, radius=1.1}, {type="flames", zoom=5, npow=2, time_factor=9000, color1={0.5,0.7,0,1}, color2={0.3,1,0.3,1}, hide_center=0, xy={self.x, self.y}}))
@@ -199,23 +205,20 @@ newTalent{
 			particle = self:addParticles(Particles.new("master_summoner", 1))
 		end
 		return {
-			dam = self:addTemporaryValue("inc_damage", {[DamageType.ACID] = t.getAcidDamageIncrease(self, t)}),
 			resist = self:addTemporaryValue("resists_pen", {[DamageType.ACID] = t.getResistPenalty(self, t)}),
 			particle = particle,
 		}
 	end,
 	deactivate = function(self, t, p)
 		self:removeParticles(p.particle)
-		self:removeTemporaryValue("inc_damage", p.dam)
 		self:removeTemporaryValue("resists_pen", p.resist)
 		return true
 	end,
 	info = function(self, t)
-		local damageinc = t.getAcidDamageIncrease(self, t)
 		local ressistpen = t.getResistPenalty(self, t)
 		local regen = t.getRegen(self, t)
-		return ([[Surround yourself with nature forces, increasing all your acid damage by %d%% and ignoring %d%% acid resistance of your targets.
-		In addition the acid will nurish your bloated oozes, giving them %d%% life regeneration per turn.]])
-		:format(damageinc, ressistpen, regen)
+		return ([[Surround yourself with natural forces, ignoring %d%% acid resistance of your targets.
+		In addition, the acid will nurish your bloated oozes, giving them an additional %0.1f life regeneration per turn.]])
+		:format(ressistpen, regen)
 	end,
 }
diff --git a/game/modules/tome/data/talents/gifts/eyals-fury.lua b/game/modules/tome/data/talents/gifts/eyals-fury.lua
new file mode 100644
index 0000000000000000000000000000000000000000..6e8845c796942cc3275e7877ef06a427b524aecc
--- /dev/null
+++ b/game/modules/tome/data/talents/gifts/eyals-fury.lua
@@ -0,0 +1,233 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+newTalent{
+	name = "Reclaim",
+	type = {"wild-gift/eyals-fury", 1},
+	require = gifts_req_high1,
+	points = 5,
+	equilibrium = 5,
+	range = 7,
+	cooldown = 5,
+	tactical = { ATTACK = { NATURE = 1, ACID = 1 } },
+	target = function(self, t)
+		return {type="bolt", range=self:getTalentRange(t), talent=t, display = {particle=particle, trail=trail}, friendlyfire=false, friendlyblock=false}
+	end,
+	getDamage = function(self, t) return self:combatTalentMindDamage(t, 20, 320) end,
+	undeadBonus = 25,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local tx, ty, target = self:getTarget(tg)
+		if not (tx and ty) or core.fov.distance(self.x, self.y, tx, ty) > self:getTalentRange(t) then return nil end
+		if not target then return true end
+		local dam = self:mindCrit(t.getDamage(self, t))*(1 + ((target.undead or target.type == "construct") and t.undeadBonus/100 or 0))		
+		self:project(tg, tx, ty, DamageType.ACID, dam*0.5)
+		self:project(tg, tx, ty, DamageType.NATURE, dam*0.5)
+		game:playSoundNear(self, "talents/heal")
+		return true
+	end,
+	info = function(self, t)
+		local dam = t.getDamage(self, t)
+		return ([[You focus the inexorable pull of nature against a single creature, eroding it and allowing it to be reclaimed by the cycle of life.
+		This deals %0.1f Nature and %0.1f Acid damage to the target, and is particularly devastating against undead and constructs, dealing %d%% more damage to them.
+		The damage increases with your Mindpower.]]):
+		format(damDesc(self, DamageType.NATURE, dam/2), damDesc(self, DamageType.ACID, dam/2), t.undeadBonus)
+	end,
+}
+
+newTalent{
+	name = "Nature's Defiance",
+	type = {"wild-gift/eyals-fury", 2},
+	require = gifts_req_high2,
+	points = 5,
+	mode = "passive",
+	getSave = function(self, t) return self:combatTalentMindDamage(t, 5, 50) end,
+	getResist = function(self, t) return self:combatTalentMindDamage(t, 5, 40) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
+	getAffinity = function(self, t) return self:combatTalentLimit(t, 50, 5, 20) end, -- Limit <50%
+	getPower = function(self, t) return self:combatTalentMindDamage(t, 2, 8) end,
+	trigger = function(self, t, target, source_t) -- called in damage_types.lua default projector
+		self:setEffect(self.EFF_NATURE_REPLENISHMENT, t.getDuration(self, t), {power = t.getPower(self, t)})
+		return true
+	end,
+	passives = function(self, t, p)
+		self:talentTemporaryValue(p, "combat_spellresist", t.getSave(self, t))
+		self:talentTemporaryValue(p, "resists", {[DamageType.ARCANE]=t.getResist(self, t)})
+		self:talentTemporaryValue(p, "damage_affinity", {[DamageType.NATURE]=t.getAffinity(self, t)})
+	end,
+	info = function(self, t)
+		local p = t.getPower(self, t)
+		return ([[Your devotion to nature has made your body more attuned to the natural world and resistant to unnatural energies.
+		You gain %d Spell save, %0.1f%% Arcane resistance, and %0.1f%% Nature damage affinity.
+		You defy arcane forces, so that any time you take damage from a spell, you restore %0.1f Equilibrium each turn for %d turns.
+		The effects increase with your Mindpower.]]):
+		format(t.getSave(self, t), t.getResist(self, t), t.getAffinity(self, t), t.getPower(self, t), t.getDuration(self, t))
+	end,
+}
+
+newTalent{
+	name = "Acidfire", 
+	type = {"wild-gift/eyals-fury", 3},
+	require = gifts_req_high3,
+	points = 5,
+	equilibrium = 20,
+	cooldown = 25,
+	range = 8,
+	radius = 4,
+	direct_hit = true,
+	requires_target = true,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t)}
+	end,
+	tactical = { ATTACKAREA = { ACID = 2 },  DISABLE = {blind = 1} },
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
+	getDamage = function(self, t) return self:combatTalentMindDamage(t, 10, 70) end,
+	getChance = function(self, t) return self:combatTalentLimit(t, 100, 20, 40) end, --Limit < 100%
+	removeEffect = function(target) -- remove one random beneficial magical effect or sustain
+	-- Go through all beneficial magical effects
+		local effs = {}
+		for eff_id, p in pairs(target.tmp) do
+			local e = target.tempeffect_def[eff_id]
+			if e.type == "magical" and e.status == "beneficial" then
+				effs[#effs+1] = {"effect", eff_id}
+			end
+		end
+
+		-- Go through all sustained spells
+		for tid, act in pairs(target.sustain_talents) do
+			if act then
+				local talent = target:getTalentFromId(tid)
+				if talent.is_spell then effs[#effs+1] = {"talent", tid} end
+			end
+		end
+		if #effs == 0 then return end
+		local eff = rng.tableRemove(effs)
+
+		if eff[1] == "effect" then
+			target:removeEffect(eff[2])
+		else
+			target:forceUseTalent(eff[2], {ignore_energy=true})
+		end
+	end,
+	action = function(self, t)
+		local tg = self:getTalentTarget(t)
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		local _ _, _, _, x, y = self:canProject(tg, x, y)
+		-- Add a lasting map effect
+		local eff = game.level.map:addEffect(self,
+			x, y, t.getDuration(self, t), -- duration
+			engine.DamageType.ACID_BLIND, t.getDamage(self, t),
+			self:getTalentRadius(t), -- radius
+			5, nil,
+			{type="vapour"},
+			function(eff) --update_fct(effect)
+				local act
+				for i, g in pairs(eff.grids) do
+					for j, _ in pairs(eff.grids[i]) do
+						act = game.level.map(i, j, engine.Map.ACTOR)
+						if act then
+							if rng.percent(eff.chance) then
+								eff.removeEffect(act)
+							end
+						end
+					end
+				end
+			end,
+			false, -- no friendly fire
+			false -- no self fire
+		)
+		eff.chance = t.getChance(self, t)
+		eff.removeEffect = t.removeEffect
+		eff.name = "Acidfire cloud"
+		game:playSoundNear(self, "talents/cloud")
+		return true
+	end,
+	info = function(self, t)
+		return ([[You call upon the earth to create a blinding, corrosive cloud in an area of radius %d for %d turns.
+		Each turn, this cloud deals %0.1f Acid damage to each foe while (%d%% chance) burning away one beneficial magical effect.
+		The damage increases with your Mindpower.]]):
+		format(self:getTalentRadius(t), t.getDuration(self, t), damDesc(self, DamageType.ACID, t.getDamage(self, t)), t.getChance(self, t))
+	end,
+}
+
+newTalent{
+	name = "Eyal's Wrath",
+	type = {"wild-gift/eyals-fury", 4},
+	require = gifts_req_high5,
+	points = 5,
+	equilibrium = 20,
+	cooldown = 20,
+	radius = function(self, t) return math.floor(self:combatTalentLimit(t, 10, 4, 6)) end, --Limit < 10
+	tactical = { ATTACKAREA = { Nature = 2 },  EQUILIBRIUM = 1 },
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end,
+	getDamage = function(self, t) return self:combatTalentMindDamage(t, 10, 100) end,
+	getDrain = function(self, t) return self:combatTalentMindDamage(t, 10, 30) end,
+	drainMagic = function(eff, act)
+		if act:attr("invulnerable") or act:attr("no_timeflow") then return end
+		local mana = math.min(eff.drain, act:getMana())
+		local vim = math.min(eff.drain / 2, act:getVim())
+		local positive = math.min(eff.drain / 4, act:getPositive())
+		local negative = math.min(eff.drain / 4, act:getNegative())
+		act:incMana(-mana); act:incVim(-vim); act:incPositive(-positive); act:incNegative(-negative)
+		local drain = mana + vim + positive + negative
+		if drain > 0 then
+			game:delayedLogMessage(eff.src, act, "Eyal's Wrath", ("#CRIMSON#%s drains magical energy!"):format(eff:getName())) 
+			eff.src:incEquilibrium(-drain/10)
+		end
+	end,
+	action = function(self, t)
+		-- Add a lasting map effect
+		local eff = game.level.map:addEffect(self,
+			self.x, self.y, 7,
+			DamageType.NATURE, t.getDamage(self, t),
+			t.radius(self, t),
+			5, nil,
+			{type="generic_vortex", args = {radius = t.radius(self, t), rm = 5, rM=55, gm=250, gM=255, bm = 180, bM=255, am= 35, aM=90, density = 100}, only_one=true },
+			function(eff)
+				eff.x = eff.src.x
+				eff.y = eff.src.y
+				local act
+				for i, g in pairs(eff.grids) do
+					for j, _ in pairs(eff.grids[i]) do
+						act = game.level.map(i, j, engine.Map.ACTOR)
+						if act and act ~= eff.src and act:reactionToward(eff.src) < 0 then
+							eff.drainMagic(eff, act)
+						end
+					end
+				end
+				return true
+			end,
+			false, false
+		)
+		eff.drain = t.getDrain(self, t)
+		eff.drainMagic = t.drainMagic
+		eff.name = "Eyal's Wrath"
+		game:playSoundNear(self, "talents/thunderstorm")
+		return true
+	end,
+	info = function(self, t)
+		local drain = t.getDrain(self, t)
+		return ([[You draw deeply from your connection with nature to create a radius %d storm of natural forces around you for %d turns.
+		This storm moves with you and deals %0.1f Nature damage each turn to all foes it hits.
+		In addtion, it will drain up to %d Mana, %d Vim, %d Positive, and %d Negative energy from each enemy within it's area every turn, while you restore Equilibrium equal to 10%% of the amount drained.
+		The damage and drain increase with your Mindpower.]]):
+		format(self:getTalentRadius(t), t.getDuration(self, t), damDesc(self, DamageType.NATURE, t.getDamage(self, t)), drain, drain/2, drain/4, drain/4)
+	end,
+}
diff --git a/game/modules/tome/data/talents/gifts/fire-drake.lua b/game/modules/tome/data/talents/gifts/fire-drake.lua
index a0fad121672545c51ce203465de5a9d3d16266ab..5dee77ded242ecbe391dddb6a631cf8f490ee4b7 100644
--- a/game/modules/tome/data/talents/gifts/fire-drake.lua
+++ b/game/modules/tome/data/talents/gifts/fire-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/fungus.lua b/game/modules/tome/data/talents/gifts/fungus.lua
index 94fa834e5f6d7bfac6dfb64a426a8dde83ad658a..db726d2ad8d282ca738a955d9fc32ac217025cf1 100644
--- a/game/modules/tome/data/talents/gifts/fungus.lua
+++ b/game/modules/tome/data/talents/gifts/fungus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -74,14 +74,14 @@ newTalent{
 	require = gifts_req3,
 	points = 5,
 	mode = "passive",
-	getEq = function(self, t) return util.bound(math.ceil(self:getTalentLevel(t) / 2), 1, 4) end,
+	getEq = function(self, t) return self:combatTalentScale(t, 0.5, 2.5, 0.5, 0.5) end,
 	getTurn = function(self, t) return util.bound(50 + self:combatTalentMindDamage(t, 5, 500) / 10, 50, 160) end,
 	info = function(self, t)
 		local eq = t.getEq(self, t)
 		local turn = t.getTurn(self, t)
 		return ([[Your fungus can reach into the primordial ages of the world, granting you ancient instincts.
 		Each time a regeneration effect is used on you, you gain %d%% of a turn.
-		Also, regeneration effects on you will decrease your equilibrium by %d each turn.
+		Also, regeneration effects on you will decrease your equilibrium by %0.1f each turn.
 		The turn gain increases with your Mindpower.]]):
 		format(turn, eq)
 	end,
diff --git a/game/modules/tome/data/talents/gifts/gifts.lua b/game/modules/tome/data/talents/gifts/gifts.lua
index 46b80ab931f7a580ce0f03b5d275284e2c56ba6e..a173b340546d3040dbb8c53d80e0ab4f898bcf35 100644
--- a/game/modules/tome/data/talents/gifts/gifts.lua
+++ b/game/modules/tome/data/talents/gifts/gifts.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -41,6 +41,7 @@ newTalentType{ allow_random=true, is_mind=true, is_nature=true, type="wild-gift/
 newTalentType{ allow_random=true, is_mind=true, is_nature=true, type="wild-gift/malleable-body", name = "malleable body", description = "Your body's anatomy is starting to blur." }
 newTalentType{ allow_random=true, is_mind=true, is_nature=true, type="wild-gift/oozing-blades", name = "oozing blades", description = "You channel ooze through your psiblades." }
 newTalentType{ allow_random=true, is_mind=true, is_nature=true, type="wild-gift/corrosive-blades", name = "corrosive blades", description = "You channel acid through your psiblades." }
+newTalentType{ allow_random=true, is_mind=true, is_nature=true, type="wild-gift/eyals-fury", name = "eyal's fury", description = "Unleash nature's fury against foes around you." }
 
 -- Generic requires for gifts based on talent level
 gifts_req1 = {
@@ -221,3 +222,4 @@ load("/data/talents/gifts/summon-augmentation.lua")
 load("/data/talents/gifts/summon-advanced.lua")
 
 load("/data/talents/gifts/mindstar-mastery.lua")
+load("/data/talents/gifts/eyals-fury.lua")
diff --git a/game/modules/tome/data/talents/gifts/harmony.lua b/game/modules/tome/data/talents/gifts/harmony.lua
index 7fd108cbfc714a593917e46305ce20c042afb130..8f9230bf4f6ac58a7df289630cacbb79414d6ad2 100644
--- a/game/modules/tome/data/talents/gifts/harmony.lua
+++ b/game/modules/tome/data/talents/gifts/harmony.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/higher-draconic.lua b/game/modules/tome/data/talents/gifts/higher-draconic.lua
index 9ebda3aec1fd4637716fa0f68a2df63a6c013f6b..d47e0ea5b4bbd7f2c3392cee8382a98b69b46f9f 100644
--- a/game/modules/tome/data/talents/gifts/higher-draconic.lua
+++ b/game/modules/tome/data/talents/gifts/higher-draconic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/malleable-body.lua b/game/modules/tome/data/talents/gifts/malleable-body.lua
index d09dc34214454ee30de8b89e9e1cb7fff8217594..49fd5141386600343b39492caa5e05c1547e1a8e 100644
--- a/game/modules/tome/data/talents/gifts/malleable-body.lua
+++ b/game/modules/tome/data/talents/gifts/malleable-body.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/mindstar-mastery.lua b/game/modules/tome/data/talents/gifts/mindstar-mastery.lua
index d75986931efcf115b5089f2619e260d1029dee02..ea24fa16b34aed8790a72f79cd91408f577bef9c 100644
--- a/game/modules/tome/data/talents/gifts/mindstar-mastery.lua
+++ b/game/modules/tome/data/talents/gifts/mindstar-mastery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/moss.lua b/game/modules/tome/data/talents/gifts/moss.lua
index e3771218e78e6d0cd86a94bbab1cccdf5be6ad9c..b3749fa7f3be2a7bc3d7eed7cdb26bc61a041172 100644
--- a/game/modules/tome/data/talents/gifts/moss.lua
+++ b/game/modules/tome/data/talents/gifts/moss.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -35,7 +35,7 @@ newTalent{
 	no_energy = true,
 	tactical = { ATTACKAREA = {NATURE=1}, DISABLE = {pin = 1} },
 	getDamage = function(self, t) return self:combatTalentMindDamage(t, 6, 40) end,
-	getDuration = function(self, t) return math.ceil(self:combatTalentScale(t, 4, 8)) end, 
+	getDuration = function(self, t) return math.floor(self:combatTalentLimit(t, 16, 4, 8)) end, -- Limit < 16
 	getSlow = function(self, t) return math.ceil(self:combatTalentLimit(t, 100, 36, 60)) end, -- Limit < 100%
 	getPin = function(self, t) return math.ceil(self:combatTalentLimit(t, 100, 25, 45)) end, -- Limit < 100%
 	range = 0,
@@ -85,7 +85,7 @@ newTalent{
 	no_energy = true,
 	tactical = { ATTACKAREA = {NATURE=1}, HEAL = 1 },
 	getDamage = function(self, t) return self:combatTalentMindDamage(t, 6, 40) end,
-	getDuration = function(self, t) return math.ceil(self:combatTalentScale(t,4,8)) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentLimit(t, 16, 4, 8)) end, -- Limit < 16
 	getHeal = function(self, t) return math.floor(self:combatTalentLimit(t, 200, 62, 110)) end, -- Limit < 200%	
 	range = 0,
 	radius = function(self, t)
@@ -131,10 +131,10 @@ newTalent{
 	cooldown = 16,
 	equilibrium = 5,
 	no_energy = true,
-	tactical = { ATTACKAREA = {NATURE=1}, DISABLE = {pin = 1} },
+	tactical = { ATTACKAREA = {NATURE=1}, DISABLE = 2 },
 	getDamage = function(self, t) return self:combatTalentMindDamage(t, 6, 40) end,
-	getDuration = function(self, t) return math.ceil(self:combatTalentScale(t, 4, 8)) end,
-	getFail = function(self, t) return math.min(50, 15 + math.ceil(self:getTalentLevel(t) * 4)) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentLimit(t, 16, 4, 8)) end, -- Limit < 16
+	getFail = function(self, t) return self:combatTalentLimit(t, 50, 19, 35) end, -- Limit < 50%
 	range = 0,
 	radius = function(self, t)
 		return math.floor(self:combatTalentScale(t,2.5, 4.5, nil, 0, 0, true)) 
@@ -166,7 +166,7 @@ newTalent{
 		This moss is very slippery and causes affected foes to have a %d%% chance of failing to perform complex actions.
 		The moss lasts %d turns.
 		Moss talents are instant but place all other moss talents on cooldown for 3 turns.
-		The damage will increase with your Mindpower.]]):
+		The damage and the chance to apply the slippery effect increase with your Mindpower.]]):
 		format(radius, damDesc(self, DamageType.NATURE, damage), fail, duration)
 	end,
 }
@@ -179,9 +179,9 @@ newTalent{
 	cooldown = 16,
 	equilibrium = 5,
 	no_energy = true,
-	tactical = { ATTACKAREA = {NATURE=1}, DISABLE = {pin = 1} },
+	tactical = { ATTACKAREA = {NATURE=1}, DISABLE = {confusion = 1} },
 	getDamage = function(self, t) return self:combatTalentMindDamage(t, 6, 40) end,
-	getDuration = function(self, t) return math.ceil(self:combatTalentScale(t, 4, 8)) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentLimit(t, 16, 4, 8)) end, -- Limit < 16
 	getChance = function(self, t) return math.ceil(self:combatTalentLimit(t, 100, 25.5, 47.5)) end, -- Limit < 100%
 	getPower = function(self, t) return math.max(0,self:combatTalentLimit(t, 50, 20, 40)) end, -- Limit < 50%
 	range = 0,
diff --git a/game/modules/tome/data/talents/gifts/mucus.lua b/game/modules/tome/data/talents/gifts/mucus.lua
index 34d3f5ec445c0ffdb57dc17814079b4fe3ec4adb..6072dcf4d46931ebc908ea124db1b8039e2d19c1 100644
--- a/game/modules/tome/data/talents/gifts/mucus.lua
+++ b/game/modules/tome/data/talents/gifts/mucus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -31,19 +31,39 @@ newTalent{
 	equilibrium = 0,
 	cooldown = 20,
 	no_energy = true,
-	tactical = { BUFF = 2 },
+	tactical = { BUFF = 2, EQUILIBRIUM = 2,
+		ATTACKAREA = function(self, t)
+			if self:getTalentLevel(t)>=4 then return {NATURE = 1 } end
+		end
+	},
 	getDur = function(self, t) return math.floor(self:combatTalentLimit(t, 20, 4, 6.5)) end, -- Limit < 20
 	getDamage = function(self, t) return self:combatTalentMindDamage(t, 5, 90) end,
-	getEqui = function(self, t) return self:combatTalentMindDamage(t, 2, 10) end,
-	trigger = function(self, t, x, y, rad) 
-		game.level.map:addEffect(self,
-			x, y, t.getDur(self, t),
-			DamageType.MUCUS, {dam=t.getDamage(self, t), equi=t.getEqui(self, t)},
-			rad,
-			5, nil,
-			{type="mucus"},
-			nil, true
-		)
+	-- note meditation recovery: local pt = 2 + self:combatTalentMindDamage(t, 20, 120) / 10 = O(<1)
+	getEqui = function(self, t) return self:combatTalentMindDamage(t, 2, 8) end,
+	-- Called by MUCUS effect in mod.data.timed_effects.physical.lua
+	trigger = function(self, t, x, y, rad, eff) -- avoid stacking on map tile
+		local oldmucus = eff and eff[x] and eff[x][y] -- get previous mucus at this spot
+		if not oldmucus or oldmucus.duration <= 0 then -- make new mucus
+			local mucus=game.level.map:addEffect(self,
+				x, y, t.getDur(self, t),
+				DamageType.MUCUS, {dam=t.getDamage(self, t), self_equi=t.getEqui(self, t), equi=1, bonus_level = 0},
+				rad,
+				5, nil,
+				{type="mucus"},
+				nil, true
+			)
+			if eff then
+				eff[x] = eff[x] or {}
+				eff[x][y]=mucus
+			end
+		else
+			if oldmucus.duration > 0 then -- Enhance existing mucus
+				oldmucus.duration = oldmucus.duration + 1
+				oldmucus.dam.bonus_level = oldmucus.dam.bonus_level + 1
+				oldmucus.dam.self_equi = oldmucus.dam.self_equi + 1
+				oldmucus.dam.dam = t.getDamage(self, t) * (1+ self:combatTalentScale(oldmucus.dam.bonus_level, 0.25, 0.7))
+			end
+		end
 	end,
 	action = function(self, t)
 		local dur = t.getDur(self, t)
@@ -54,13 +74,13 @@ newTalent{
 		local dur = t.getDur(self, t)
 		local dam = t.getDamage(self, t)
 		local equi = t.getEqui(self, t)
-		return ([[You start to create mucus where you walk or stand for %d turns.
-		Mucus will poison all foes crossing it, dealing %0.2f nature damage every turn for 5 turn (stacking).
-		Any friendly creature walking the mucus will restore equilibrium by %d per turn.
-		Mucus will disappear after %d turns.
-		At level 4 the mucus will grow in a radius 1.
-		Damage and equilibrium regen increase with Mindpower.]]):
-		format(dur, damDesc(self, DamageType.NATURE, dam), equi, dur)
+		return ([[For %d turns, you lay down mucus where you walk or stand.
+		The mucus is placed automatically every turn and lasts %d turns.
+		At talent level 4 or greater, the mucus will expand to a radius 1 area from where it is placed.
+		Your mucus will poison all foes crossing it, dealing %0.1f nature damage every turn for 5 turns (stacking).
+		In addition, each turn, you will restore %0.1f Equilibrium while in your own mucus, and other friendly creatures in your mucus will restore 1 Equilibrium both for you and for themselves.
+		The Poison damage and Equilibrium regeneration increase with Mindpower, and laying down more mucus in the same spot will intensify its effects and extend its duration by 1 turn.]]):
+		format(dur, dur, damDesc(self, DamageType.NATURE, dam), equi)
 	end,
 }
 
@@ -83,7 +103,9 @@ newTalent{
 		if not x or not y then return nil end
 
 		local grids, px, py = self:project(tg, x, y, DamageType.ACID, self:mindCrit(t.getDamage(self, t)))
-		if self:knowTalent(self.T_MUCUS) then self:callTalent(self.T_MUCUS, nil, px, py, tg.radius) end
+		if self:knowTalent(self.T_MUCUS) then
+			self:callTalent(self.T_MUCUS, nil, px, py, tg.radius, self:hasEffect(self.EFF_MUCUS))
+		end
 		game.level.map:particleEmitter(px, py, tg.radius, "acidflash", {radius=tg.radius, tx=px, ty=py})
 
 		local tgts = {}
@@ -120,9 +142,9 @@ newTalent{
 	end,
 	info = function(self, t)
 		local dam = t.getDamage(self, t)
-		return ([[You call upon nature to turn the ground into an acidic explosion in a radius %d, dealing %0.2f acid damage to all creatures and creating mucus under it.
-		Also if you have any Mucus Oozes active they will, if in line of sight, instantly throw a slime spit (at reduced power) at one of the target hit by the splash.
-		Damage will increase with Mindpower.]]):
+		return ([[Calling upon nature, you cause the ground to erupt in an radius %d acidic explosion, dealing %0.1f acid damage to all creatures and creating mucus in the area.
+		Any Mucus Oozes you have active will, if in line of sight, instantly spit slime (at reduced power) at one of the targets hit by the splash.
+		The damage increases with your Mindpower.]]):
 		format(self:getTalentRadius(t), damDesc(self, DamageType.ACID, dam))
 	end,
 }
@@ -161,7 +183,8 @@ newTalent{
 	mode = "passive",
 	getMax = function(self, t) return math.floor(math.max(1, self:combatStatScale("cun", 0.5, 5))) end,
 	getChance = function(self, t) return self:combatLimit(self:combatTalentMindDamage(t, 5, 300), 50, 12.6, 26, 32, 220) end, -- Limit < 50% --> 12.6 @ 36, 32 @ 220
-
+	getSummonTime = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
+	-- by MUCUS damage type in mod.data.damage_types.lua
 	spawn = function(self, t)
 		local notok, nb, sumlim = checkMaxSummon(self, true, 1, "is_mucus_ooze")
 		if notok or nb > t.getMax(self, t) or not self:canBe("summon") then return end
@@ -181,6 +204,7 @@ newTalent{
 			type = "vermin", subtype = "oozes",
 			display = "j", color=colors.GREEN, image = "npc/vermin_oozes_green_ooze.png",
 			name = "mucus ooze",
+			faction = self.faction,
 			desc = "It's made from mucus and it's oozing.",
 			sound_moam = {"creatures/jelly/jelly_%d", 1, 3},
 			sound_die = {"creatures/jelly/jelly_die_%d", 1, 2},
@@ -208,7 +232,7 @@ newTalent{
 			combat = { dam=5, atk=0, apr=5, damtype=DamageType.POISON },
 
 			summoner = self, summoner_gain_exp=true, wild_gift_summon=true, is_mucus_ooze = true,
-			summon_time = math.floor(self:combatTalentScale(t, 6, 10)),
+			summon_time = t.getSummonTime(self, t),
 			max_summon_time = math.floor(self:combatTalentScale(t, 6, 10)),
 		}
 		m:learnTalent(m.T_MUCUS_OOZE_SPIT, true, self:getTalentLevelRaw(t))
@@ -232,12 +256,13 @@ newTalent{
 
 	end,
 	info = function(self, t)
-		return ([[Your mucus is brought to near sentience. Each turn there is a %d%% chance that a random spot of your mucus will spawn a Mucus Ooze.
-		Mucus Oozes will attack any of your foes by spitting slime at them.
-		You may have up to %d Oozes active at any time (based on your Cunning).
-		Any time you deal a mental critical, all your Mucus Oozes' remaining time will increase by 2.
-		The effect will increase with your Mindpower.]]):
-		format(t.getChance(self, t), t.getMax(self, t))
+		return ([[Your mucus is brought to near sentience.
+		Each turn, there is a %d%% chance that a random spot of your mucus will spawn a Mucus Ooze.
+		Mucus Oozes last %d turns and will attack any of your foes by spitting slime at them.
+		You may have up to %d Mucus Oozes active at any time (based on your Cunning).
+		Any time you deal a mental critical, the remaining time on all of your Mucus Oozes will increase by 2.
+		The spawn chance increases with your Mindpower.]]):
+		format(t.getChance(self, t), t.getSummonTime(self, t), t.getMax(self, t))
 	end,
 }
 
@@ -283,10 +308,9 @@ newTalent{
 	info = function(self, t)
 		local nb = t.getNb(self, t)
 		local energy = t.getEnergy(self, t)
-		return ([[You temporarily merge with your mucus, cleasing you from %d physical or magical effects.
-		You can then reappear on any tile in sight that is also covered by mucus.
-		This takes %d%% of a turn to do.
-		Only works when standing over mucus.]]):
+		return ([[You temporarily merge with your mucus, cleasing yourself of %d physical or magical effects.
+		You can then reemerge on any tile within sight and range that is also covered by mucus.
+		This is quick, requiring only %d%% of a turn to perform, but you must be in contact with your mucus.]]):
 		format(nb, (energy) * 100)
 	end,
 }
diff --git a/game/modules/tome/data/talents/gifts/ooze.lua b/game/modules/tome/data/talents/gifts/ooze.lua
index a1d03b094a61e2ed8c0d864729a815eaec2ebc0a..52066859626a52c43dce1a2a6a43b2fb11ecd9d8 100644
--- a/game/modules/tome/data/talents/gifts/ooze.lua
+++ b/game/modules/tome/data/talents/gifts/ooze.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,17 +25,29 @@ newTalent{
 	points = 5,
 	cooldown = 10,
 	sustain_equilibrium = 10,
-	tactical = { BUFF = 2 },
-	getMaxHP = function(self, t) return 50 + self:combatTalentMindDamage(t, 30, 250) end,
-	getMax = function(self, t) local _, _, max = checkMaxSummon(self, true) return math.min(max, math.max(1, math.floor(self:combatTalentScale(t, 0.5, 2.5)))) end,
+	tactical = { BUFF = 2,
+		EQUILIBRIUM = function(self, t)
+			if self:knowTalent(self.T_REABSORB) then return 1 end
+		end
+	},
+	getMaxHP = function(self, t) return
+		50 + self:combatTalentMindDamage(t, 30, 250) + self.max_life * self:combatTalentLimit(t, 0.25, .025, .1)
+	end,
+	getMax = function(self, t) local _, _, max = checkMaxSummon(self, true) return math.min(max, math.max(1, math.floor(self:combatTalentLimit(t, 6, 1, 3.1)))) end, --Limit < 6
 	getChance = function(self, t) return self:combatLimit(self:combatTalentStatDamage(t, "cun", 10, 400), 100, 20, 0, 61, 234) end, -- Limit < 100%
+	getOozeResist = function(self, t) return self:combatTalentLimit(t, 70, 15, 30) end, --Limit < 70%
+	getSummonTime = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
+	-- called in mod.class.Actor.onTakeHit
 	spawn = function(self, t, life)
+		-- check summoning limits
 		if checkMaxSummon(self, true) or not self:canBe("summon") then return end
+		local _, nb = checkMaxSummon(self, true, nil, "bloated_ooze")
+		if nb >= t.getMax(self, t) then	return end
 
 		-- Find space
 		local x, y = util.findFreeGrid(self.x, self.y, 5, true, {[Map.ACTOR]=true})
 		if not x then
-			game.logPlayer(self, "Not enough space to summon!")
+			game.logPlayer(self, "You try to split, but there is no free space close enough to summon!")
 			return
 		end
 
@@ -50,7 +62,7 @@ newTalent{
 			body = { INVEN = 10 },
 			autolevel = "tank",
 			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=1, },
-			stats = { wil=10, dex=10, mag=3, str=self:combatTalentScale(t, 0.8, 4, 0.75), con=self:combatStatScale("con", 10, 100, 0.75), cun=self:combatStatScale("cun", 10, 100, 0.75)},
+			stats = { wil=10, dex=10, mag=3, str=self:combatStatScale("wil", 10, 50, 0.75), con=self:combatStatScale("con", 10, 100, 0.75), cun=self:combatStatScale("cun", 10, 100, 0.75)},
 			global_speed_base = 0.5,
 			combat = {sound="creatures/jelly/jelly_hit"},
 			combat_armor = self:combatTalentScale(t, 5, 25),
@@ -61,28 +73,26 @@ newTalent{
 			cut_immune = 1,
 			blind_immune = 1,
 			bloated_ooze = 1,
-
-			resists = { all = 50 },
+			resists = { all = t.getOozeResist(self, t)},
+			resists_cap = table.clone(self.resists_cap),
 			fear_immune = 1,
-
 			blood_color = colors.GREEN,
 			level_range = {self.level, self.level}, exp_worth = 0,
 			max_life = 30,
-			life_regen = 0,
-
-			combat = { dam=5, atk=0, apr=5, damtype=DamageType.POISON },
+			life_regen = 0.1*life,
+			faction = self.faction,
+			combat = { dam=5, atk=self:combatStatScale("cun", 10, 100, 0.75), apr=5, damtype=DamageType.POISON },
 
 			summoner = self, summoner_gain_exp=true, wild_gift_summon=true,
-			summon_time = math.floor(self:combatTalentScale(t, 6, 10)),
+			summon_time = t.getSummonTime(self, t),
 			max_summon_time = math.floor(self:combatTalentScale(t, 6, 10)),
 			resolvers.sustains_at_birth(),
 		}
 		setupSummon(self, m, x, y)
-		m.max_life = life
-		m.life = life
+		m.max_life = math.min(life, t.getMaxHP(self, t))
+		m.life = m.max_life
 		if self:isTalentActive(self.T_ACIDIC_SOIL) then
-			local st = self:getTalentFromId(self.T_ACIDIC_SOIL)
-			m.life_regen = st.getRegen(self, st) * life / 100
+			m.life_regen = m.life_regen + self:callTalent(self.T_ACIDIC_SOIL, "getRegen")
 		end
 
 		game:playSoundNear(self, "talents/spell_generic2")
@@ -90,19 +100,23 @@ newTalent{
 		return true
 	end,
 	activate = function(self, t)
-		return {}
+		return {equil_regen = self:knowTalent(self.T_REABSORB) and self:addTemporaryValue("equilibrium_regen", -self:callTalent(self.T_REABSORB, "equiRegen"))}
 	end,
 	deactivate = function(self, t, p)
+		if p.equil_regen then self:removeTemporaryValue("equilibrium_regen", p.equil_regen) end
 		return true
 	end,
 	info = function(self, t)
+		local xs = self:knowTalent(self.T_REABSORB) and ([[In addition, you restore %0.1f Equilibrium per turn while this talent is active.
+		]]):format(self:callTalent(self.T_REABSORB, "equiRegen")) or ""
 		return ([[Your body is more like that of an ooze.
-		When you get hit you have up to a %d%% chance to split and create a Bloated Ooze with as much health as you have taken damage (up to %d).
-		All damage you take will be split equally between you and your Bloated Oozes.
-		You may have up to %d Bloated Oozes active at any time (based on your Cunning and talent level).
-		Bloated Oozes are very resilient (50%% all damage resistance) to damage not coming through your shared link.
-		The maximum life depends on Mindpower and the chance on Cunning.]]):
-		format(t.getChance(self, t), t.getMaxHP(self, t), t.getMax(self, t))
+		When you take damage, you may split and create a Bloated Ooze nearby within your line of sight.
+		This ooze has as much health as twice the damage you took (up to a maximum of %d, based on your Mindpower and maximum life).
+		The chance to split equals the percent of your health lost times %0.2f.
+		You may have up to %d Bloated Oozes active at any time (limited by talent level and the summoning limit), and all damage you take will be split equally between you and them so long as this talent is active.
+		Bloated Oozes last for %d turns, are very resilient (%d%% all damage resistance to damage not coming through your shared link), and regenerate life quickly.
+		%sThe chance to split increases with your Cunning.]]):
+		format(t.getMaxHP(self, t), t.getChance(self, t)*3/100, t.getMax(self, t), t.getSummonTime(self, t), t.getOozeResist(self, t), xs)
 	end,
 }
 
@@ -126,6 +140,7 @@ newTalent{
 		end
 		return false
 	end,
+	equiRegen = function(self, t) return 0.2 + self:combatTalentMindDamage(t, 0, 1.4) end,
 	action = function(self, t)
 		local possibles = {}
 		for _, coor in pairs(util.adjacentCoords(self.x, self.y)) do
@@ -147,10 +162,11 @@ newTalent{
 		return true
 	end,
 	info = function(self, t)
-		return ([[You randomly merge with an adjacent bloated ooze, granting you 40%% damage resistance for %d turns.
-		The merging also releases a burst of antimagic, dealing %0.2f manaburn damage in radius %d.
-		The effect will increase with your Mindpower.]]):
-		format(t.getDuration(self, t), damDesc(self, DamageType.ARCANE, t.getDam(self, t)),	3)
+		return ([[You randomly merge with an adjacent bloated ooze, granting you 40%% all damage resistance for %d turns.
+		This process releases a burst of antimagic, dealing %0.1f Manaburn damage in radius %d.
+		This talent allows you to restore %0.1f Equilibrium per turn while Mitosis is active.
+		The damage, duration and Equilibrium restoration increase with your Mindpower.]]):
+		format(t.getDuration(self, t), damDesc(self, DamageType.ARCANE, t.getDam(self, t)),	3, t.equiRegen(self, t))
 	end,
 }
 
@@ -161,13 +177,21 @@ newTalent{
 	points = 5,
 	equilibrium = 5,
 	cooldown = 20,
+	tactical = { ATTACK = { PHYSICAL = 1, ACID = 2 } },
 	getMax = function(self, t) local _, _, max = checkMaxSummon(self, true) return math.min(max, self:callTalent(self.T_MITOSIS, "getMax"), math.max(1, math.floor(self:combatTalentScale(t, 0.5, 2.5)))) end,
 	getModHP = function(self, t) return self:combatTalentLimit(t, 1, 0.46, 0.7) end, --  Limit < 1
+	getLife = function(self, t) return self:callTalent(self.T_MITOSIS, "getMaxHP")*t.getModHP(self, t) end,
+	getWepDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.7, 1.8) end,
+	on_pre_use = function(self, t)
+		local _, nb = checkMaxSummon(self, true, nil, "bloated_ooze")
+		return nb < t.getMax(self, t)
+	end,
 	action = function(self, t)
 		local ot = self:getTalentFromId(self.T_MITOSIS)
 		local _, cur_nb, max = checkMaxSummon(self, true, nil, "bloated_ooze")
+		local life = t.getLife(self, t)
 		for i = cur_nb + 1, t.getMax(self, t) do
-			ot.spawn(self, ot, ot.getMaxHP(self, ot) * t.getModHP(self, t))
+			ot.spawn(self, ot, life)
 		end
 
 		local list = {}
@@ -203,7 +227,7 @@ newTalent{
 				end
 				if core.fov.distance(tx, ty, target.x, target.y) <= 1 then
 					target:setTarget(ooze)
-					self:attackTarget(target, DamageType.ACID, self:combatTalentWeaponDamage(t, 0.6, 2.2), true)
+					self:attackTarget(target, DamageType.ACID, t.getWepDamage(self, t), true)
 				end
 			end
 		end
@@ -212,10 +236,11 @@ newTalent{
 		return true
 	end,
 	info = function(self, t)
-		return ([[Instantly call all your bloated oozes to fight and if below the maximum number of oozes allowed by the Mitosis talent, at most %d will be created with %d%% of the maximum life allowed by Mitosis.
-		Each of them will be transported near a random foe in sight grab its attention.
-		Taking advantage of the situation you channel a melee attack though all of them to their foes dealing %d%% weapon damage as acid.]]):
-		format(t.getMax(self, t), t.getModHP(self, t)*100, self:combatTalentWeaponDamage(t, 0.6, 2.2) * 100)
+		return ([[Instantly call all of your bloated oozes to your aid.
+		If you have less than the maximum number of oozes allowed by the Mitosis talent, up to %d will be created with %d life (%d%% of the maximum life allowed by Mitosis).
+		Each ooze created will form near a random foe in sight (no more than one ooze per target) and grab its attention.
+		This will then allow you to channel a melee attack through your ooze to its target, doing %d%% weapon damage (as Acid).]]):
+		format(t.getMax(self, t), t.getLife(self, t), t.getModHP(self, t)*100, t.getWepDamage(self, t) * 100)
 	end,
 }
 
@@ -225,20 +250,20 @@ newTalent{
 	require = gifts_req4,
 	points = 5,
 	mode = "passive",
-	critResist = function(self, t) return self:combatTalentScale(t, 20, 75) end,
-	immunities = function(self, t) return self:combatTalentLimit(t, 1, 0.2, 0.5) end, -- Limit < 100% immunities
+	--compare to lethality: self:combatTalentScale(t, 7.5, 25, 0.75)
+	critResist = function(self, t) return self:combatTalentScale(t, 15, 50, 0.75) end,
+	immunities = function(self, t) return self:combatTalentLimit(t, 1, 0.2, 0.7) end, -- Limit < 100% immunities
 	passives = function(self, t, p)
 		self:talentTemporaryValue(p, "blind_immune", t.immunities(self, t))
 		self:talentTemporaryValue(p, "poison_immune", t.immunities(self, t))
 		self:talentTemporaryValue(p, "disease_immune", t.immunities(self, t))
 		self:talentTemporaryValue(p, "cut_immune", t.immunities(self, t))
-		self:talentTemporaryValue(p, "confusion_immune", t.immunities(self, t))
 		self:talentTemporaryValue(p, "ignore_direct_crits", t.critResist(self, t))
 	end,
 	info = function(self, t)
-		return ([[Your body's internal organs are melded together, disguising your vital areas.
+		return ([[Your body's internal organs are indistinct, disguising your vital areas.
 		All direct critical hits (physical, mental, spells) against you have a %d%% lower Critical multiplier (but always do at least normal damage).
-		In addition you gain %d%% disease, poison, wounds, confusion and blindness resistances.]]):
+		In addition you gain %d%% resistance to disease, poison, wounds and blindness.]]):
 		format(t.critResist(self, t), 100*t.immunities(self, t))
 	end,
 }
diff --git a/game/modules/tome/data/talents/gifts/oozing-blades.lua b/game/modules/tome/data/talents/gifts/oozing-blades.lua
index d61d74768d05430e8e7f7a740f68d878e4b9bdbc..35bcb608603451312380e97ec324c13df9b15f4d 100644
--- a/game/modules/tome/data/talents/gifts/oozing-blades.lua
+++ b/game/modules/tome/data/talents/gifts/oozing-blades.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -24,7 +24,7 @@ newTalent{
 	points = 5,
 	equilibrium = 4,
 	cooldown = 3,
-	tactical = { ATTACKAREA = {NATURE=2} },
+	tactical = { ATTACKAREA = { NATURE = 2 },  DISABLE = 1 },
 	on_pre_use = function(self, t)
 		local main, off = self:hasPsiblades(true, true)
 		return main and off
@@ -50,8 +50,8 @@ newTalent{
 	end,
 	info = function(self, t)
 		local dam = t.getDamage(self, t)
-		return ([[Channel slime through your psiblades, extending their reach to create a beam doing %0.2f slime damage.
-		Damage increase with Mindpower.]]):
+		return ([[Channel slime through your psiblades, extending their reach to create a beam doing %0.1f Slime damage.
+		The damage increases with your Mindpower.]]):
 		format(damDesc(self, DamageType.NATURE, dam))
 	end,
 }
@@ -62,14 +62,21 @@ newTalent{
 	require = gifts_req_high2,
 	points = 5,
 	mode = "passive",
-	cooldown = function(self, t) return math.ceil(self:combatTalentLimit(t, 8, 30, 14)) end,
-	getResist = function(self, t) return 10 + self:combatTalentMindDamage(t, 10, 70) end,
+	getResist = function(self, t) return self:combatTalentMindDamage(t, 10, 40) end,
+	-- called in data.timed_effects.physical.lua for the NATURAL_ACID effect
+	getNatureDamage = function(self, t, level)
+		return self:combatTalentScale(t, 5, 15, 0.75)*math.min(5, level or 1)^0.5/2.23
+	end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 2, 5, "log")) end,
+	passives = function(self, t, p)
+		self:talentTemporaryValue(p, "resists", {[DamageType.NATURE]=t.getResist(self, t)})
+	end,
 	info = function(self, t)
-		local res = t.getResist(self, t)
-		return ([[Each time you deal acid damage to a creature its nature resistance is decreased by %d%% for 2 turns.
-		Resistance will decrease with Mindpower.
-		This effect can only happen at most once every %d turns.]]):
-		format(res, self:getTalentCooldown(t))
+		return ([[You gain %d%% Nature resistance.
+		When you deal Acid damage to a creature, you gain a %0.1f%% bonus to Nature damage for %d turns. 
+		This damage bonus will improve up to 4 times (no more than once each turn) with later Acid damage you do, up to a maximum of %0.1f%%.
+		The resistance and damage increase improve with your Mindpower.]]):
+		format(t.getResist(self, t), t.getNatureDamage(self, t, 1), t.getDuration(self, t), t.getNatureDamage(self, t, 5))
 	end,
 }
 
@@ -88,7 +95,7 @@ newTalent{
 	target = function(self, t) return {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_slime", trail="slimetrail"}} end,
 	tactical = { DISABLE = 2 },
 	requires_target = true,
-	getChance = function(self, t) return math.min(100, 30 + self:combatTalentMindDamage(t, 10, 70)) end,
+	getChance = function(self, t) return math.max(0, self:combatLimit(self:combatTalentMindDamage(t, 10, 70), 100, 39, 9, 86, 56)) end, -- Limit < 100%
 	getNb = function(self, t) return math.ceil(self:combatTalentLimit(t, 4, 1, 2)) end,
 	getTurns = function(self, t) return math.ceil(self:combatTalentLimit(t, 20, 2, 12)) end,
 	action = function(self, t)
@@ -121,15 +128,14 @@ newTalent{
 	require = gifts_req_high4,
 	mode = "sustained",
 	points = 5,
-	sustain_equilibrium = 20,
+	sustain_equilibrium = 15,
 	cooldown = 30,
 	on_pre_use = function(self, t)
 		local main, off = self:hasPsiblades(true, true)
 		return main and off
 	end,
 	tactical = { BUFF = 2 },
-	getNatureDamageIncrease = function(self, t) return self:getTalentLevelRaw(t) * 2 end,
-	getResistPenalty = function(self, t) return self:combatTalentLimit(t, 100, 10, 50, true) end, -- Limit < 100%
+	getResistPenalty = function(self, t) return self:combatTalentLimit(t, 100, 15, 50) end, -- Limit < 100%
 	getChance = function(self, t) return math.max(0,self:combatTalentLimit(t, 100, 14, 70)) end, -- Limit < 100%
 	freespit = function(self, t, target)
 		if game.party:hasMember(self) then
@@ -158,23 +164,20 @@ newTalent{
 			particle = self:addParticles(Particles.new("master_summoner", 1))
 		end
 		return {
-			dam = self:addTemporaryValue("inc_damage", {[DamageType.NATURE] = t.getNatureDamageIncrease(self, t)}),
 			resist = self:addTemporaryValue("resists_pen", {[DamageType.NATURE] = t.getResistPenalty(self, t)}),
 			particle = particle,
 		}
 	end,
 	deactivate = function(self, t, p)
 		self:removeParticles(p.particle)
-		self:removeTemporaryValue("inc_damage", p.dam)
 		self:removeTemporaryValue("resists_pen", p.resist)
 		return true
 	end,
 	info = function(self, t)
-		local damageinc = t.getNatureDamageIncrease(self, t)
 		local ressistpen = t.getResistPenalty(self, t)
 		local chance = t.getChance(self, t)
-		return ([[Surround yourself with nature forces, increasing all your nature damage by %d%% and ignoring %d%% nature resistance of your targets.
-		In addition any time you deal damage with a wild gift there is a %d%% chance that one of you mucus ooze will spit at the target as a free action.]])
-		:format(damageinc, ressistpen, chance)
+		return ([[Surround yourself with natural forces, ignoring %d%% nature resistance of your targets.
+		In addition, any time you deal damage with a wild gift there is a %d%% chance that one of your mucus oozes will spit at the target as a free action.]])
+		:format(ressistpen, chance)
 	end,
 }
diff --git a/game/modules/tome/data/talents/gifts/sand-drake.lua b/game/modules/tome/data/talents/gifts/sand-drake.lua
index 4cb3d2a6efd704f444fa74c9f7661b75584c199f..b1b3a6c61b732a233b4648de2a6dfb40e9059c79 100644
--- a/game/modules/tome/data/talents/gifts/sand-drake.lua
+++ b/game/modules/tome/data/talents/gifts/sand-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/slime.lua b/game/modules/tome/data/talents/gifts/slime.lua
index 0fdf00f3d3345870da28ab7e487d88e9fd7f5102..537667ea63cb63acd8f2506384100dd692225903 100644
--- a/game/modules/tome/data/talents/gifts/slime.lua
+++ b/game/modules/tome/data/talents/gifts/slime.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,22 +25,25 @@ newTalent{
 	random_ego = "attack",
 	equilibrium = 4,
 	cooldown = 5,
-	tactical = { ATTACK = { NATURE = 2} },
+	tactical = { ATTACK = { NATURE = 2}, DISABLE = 1 },
 	range = 10,
-	proj_speed = 8,
+	proj_speed = 6,
 	requires_target = true,
+	getTargetCount = function(self, t) return math.floor(self:combatTalentScale(t, 1, 5, "log")) end,
+	bouncePercent = function(self, t) return self:combatTalentLimit(t, 100, 50, 60) end, --Limit < 100%
 	action = function(self, t)
-		local tg = {type="bolt", range=self:getTalentRange(t), selffire=false, talent=t, display={particle="bolt_slime"}}
+		local tg = {type="bolt", range=self:getTalentRange(t), selffire=false, talent=t, display={particle="bolt_slime"}, name = t.name, speed = t.proj_speed}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
-		self:projectile(tg, x, y, DamageType.BOUNCE_SLIME, {nb=math.ceil(self:getTalentLevel(t)), dam=self:mindCrit(self:combatTalentMindDamage(t, 30, 290))}, {type="slime"})
+		self:projectile(tg, x, y, DamageType.BOUNCE_SLIME, {nb=t.getTargetCount(self, t), dam=self:mindCrit(self:combatTalentMindDamage(t, 30, 250)), bounce_factor=t.bouncePercent(self, t)/100}, {type="slime"})
 		game:playSoundNear(self, "talents/slime")
 		return true
 	end,
 	info = function(self, t)
-		return ([[Spit slime at your target doing %0.2f nature damage and slowing it down by 30%% for 3 turns.
-		The bolt can bounce to a nearby foe %d times.
-		The damage will increase with Mindpower]]):format(damDesc(self, DamageType.NATURE, self:combatTalentMindDamage(t, 30, 290)), math.ceil(self:getTalentLevel(t)))
+		return ([[Spit slime at your target doing %0.1f nature damage and slowing it down by 30%% for 3 turns.
+		The slime can bounce from foe to foe, hitting up to a total of %d target(s).
+		Additional targets must be within 6 tiles of each other and the slime loses %0.1f%% damage per bounce.
+		The damage will increase with your Mindpower]]):format(damDesc(self, DamageType.NATURE, self:combatTalentMindDamage(t, 30, 250)), t.getTargetCount(self, t), 100-t.bouncePercent(self, t))
 	end,
 }
 
@@ -54,16 +57,16 @@ newTalent{
 	equilibrium = 2,
 	cooldown = 10,
 	range = 10,
-	tactical = { ATTACK = { NATURE = 3 } },
+	tactical = { ATTACKAREA = { NATURE = 2 }, DISABLE = 1 },
 	radius = function(self, t) return math.floor(self:combatTalentScale(t, 1, 2.7)) end, -- yields 2 at tl=3
+	getDamage = function(self, t) return self:combatTalentMindDamage(t, 30, 500) end,
+	critPower = function(self, t) return self:combatTalentMindDamage(t, 10, 60) end,
 	requires_target = true,
 	action = function(self, t)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), friendlyfire=false}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
-
-		local dam = self:mindCrit(self:combatTalentMindDamage(t, 40, 900))
-
+		local dam = self:mindCrit(t.getDamage(self, t), 0, t.critPower(self, t)/100)
 		self:project(tg, x, y, function(px, py)
 			local target = game.level.map(px, py, Map.ACTOR)
 			if target and self:reactionToward(target) < 0 and target:canBe("poison") then
@@ -79,7 +82,9 @@ newTalent{
 		return true
 	end,
 	info = function(self, t)
-		return ([[Releases poisonous spores at an area of radius %d, infecting the foes inside with a random poison doing %0.2f nature damage over 10 turns.]]):format(self:getTalentRadius(t), damDesc(self, DamageType.NATURE, self:combatTalentMindDamage(t, 40, 900)))
+		return ([[Releases poisonous spores at an area of radius %d, infecting the foes inside with a random poison doing %0.1f Nature damage over 10 turns.
+		This attack can crit and deals %d%% additional critical damage.
+		The damage and critical bonus increase with your Mindpower.]]):format(self:getTalentRadius(t), damDesc(self, DamageType.NATURE, t.getDamage(self, t)), t.critPower(self, t))
 	end,
 }
 
@@ -96,9 +101,10 @@ newTalent{
 	requires_target = false,
 	tactical = { DEFEND = 1 },
 	getChance = function(self, t) return self:combatTalentLimit(t, 100, 7, 15) end, -- Limit < 100%
+	getDamage = function(self, t) return self:combatTalentMindDamage(t, 10, 50) end,
 	activate = function(self, t)
 		game:playSoundNear(self, "talents/slime")
-		local power = 10 + 5 * self:getTalentLevel(t)
+		local power = t.getDamage(self, t)
 		return {
 			onhit = self:addTemporaryValue("on_melee_hit", {[DamageType.ACID_DISARM]={dam=power, chance=t.getChance(self, t)}}),
 		}
@@ -108,7 +114,8 @@ newTalent{
 		return true
 	end,
 	info = function(self, t)
-		return ([[Your skin drips with acid, damaging all that hit you for %0.2f acid damage and giving a %d%% chance to disarm them for 3 turns.]]):format(damDesc(self, DamageType.ACID, self:combatTalentMindDamage(t, 10, 50)), t.getChance(self, t))
+		return ([[Your skin drips with acid, damaging all that hit you for %0.1f Acid damage with a %d%% chance to disarm them for 3 turns.
+		The damage increases with your Mindpower.]]):format(damDesc(self, DamageType.ACID, t.getDamage(self, t)), t.getChance(self, t))
 	end,
 }
 
@@ -120,7 +127,7 @@ newTalent{
 	random_ego = "utility",
 	equilibrium = 5,
 	cooldown = 20,
-	tactical = { CLOSEIN = 2 },
+	tactical = { CLOSEIN = 2, ESCAPE = 1 },
 	requires_target = true,
 	range = function(self, t)
 		return math.floor(self:combatTalentScale(t,4.5,6.5))
@@ -143,13 +150,14 @@ newTalent{
 		if not x then return nil end
 		-- Target code does not restrict the self coordinates to the range, it lets the project function do it
 		-- but we cant ...
-		local _ _, x, y = self:canProject(tg, x, y)
-		game.level.map:particleEmitter(self.x, self.y, 1, "slime")
-		self:teleportRandom(x, y, self:getTalentRadius(t))
+		local _, x, y = self:canProject(tg, x, y)
+		if not x then return nil end
+		local oldx, oldy = self.x, self.y
+		if not self:teleportRandom(x, y, self:getTalentRadius(t)) then return nil end
+		game.level.map:particleEmitter(oldx, oldy, 1, "slime")
 		game.level.map:particleEmitter(self.x, self.y, 1, "slime")
 
 		local nb = t.getNbTalents(self, t)
-
 		local list = {}
 		for tid, cd in pairs(self.talents_cd) do 
 			local tt = self:getTalentFromId(tid)
diff --git a/game/modules/tome/data/talents/gifts/storm-drake.lua b/game/modules/tome/data/talents/gifts/storm-drake.lua
index 61361ecf8e8cfb363dc9a88fe381a2b8ea2f93db..48c1e8d257e3c285324d0a11a28e386f0335cffc 100644
--- a/game/modules/tome/data/talents/gifts/storm-drake.lua
+++ b/game/modules/tome/data/talents/gifts/storm-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/summon-advanced.lua b/game/modules/tome/data/talents/gifts/summon-advanced.lua
index aeac37c428958ce31079285cd8d6c1114ab09228..42a9537008ba9d475be70120252ebd7662942d58 100644
--- a/game/modules/tome/data/talents/gifts/summon-advanced.lua
+++ b/game/modules/tome/data/talents/gifts/summon-advanced.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/summon-augmentation.lua b/game/modules/tome/data/talents/gifts/summon-augmentation.lua
index 28e6d7a1a26bc839a14463650914ef20bd84a58d..387fe85a5332037a21518e274ea7f86263d3863d 100644
--- a/game/modules/tome/data/talents/gifts/summon-augmentation.lua
+++ b/game/modules/tome/data/talents/gifts/summon-augmentation.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/summon-distance.lua b/game/modules/tome/data/talents/gifts/summon-distance.lua
index 5eef5d60c3b847853e94a4395ff1672871f6ea4b..5364b7f42f54b8c16071bb3443c71d01226b21d2 100644
--- a/game/modules/tome/data/talents/gifts/summon-distance.lua
+++ b/game/modules/tome/data/talents/gifts/summon-distance.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -474,7 +474,7 @@ newTalent{
 			display = "#", color=colors.WHITE,
 			name = "rimebark", faction = self.faction, image = "npc/immovable_plants_rimebark.png",
 			resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/immovable_plants_rimebark.png", display_h=2, display_y=-1}}},
-			desc = [[This huge treant like being is embedded with the fury of winter itself.]],
+			desc = [[This huge treant-like being is embedded with the fury of winter itself.]],
 			autolevel = "none",
 			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=1, ally_compassion=10},
 			ai_tactic = resolvers.tactic"ranged",
diff --git a/game/modules/tome/data/talents/gifts/summon-melee.lua b/game/modules/tome/data/talents/gifts/summon-melee.lua
index 3efd4f78a725fd0cd56c3a8a78b621e675cf77de..a03d25f4637490c5dd8b26c811a144e8da8dc5d0 100644
--- a/game/modules/tome/data/talents/gifts/summon-melee.lua
+++ b/game/modules/tome/data/talents/gifts/summon-melee.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/gifts/summon-utility.lua b/game/modules/tome/data/talents/gifts/summon-utility.lua
index 3b562c481cc13097867e50bac8378eb6aafb81a7..7538b20394e7bc95068b2f9fa41733fa6f9292ce 100644
--- a/game/modules/tome/data/talents/gifts/summon-utility.lua
+++ b/game/modules/tome/data/talents/gifts/summon-utility.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -121,7 +121,7 @@ newTalent{
 		}
 	end,
 	on_arrival = function(self, t, m)
-		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
+		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y, ignore_nullify_all_friendlyfire=true}
 		self:project(tg, m.x, m.y, function(px, py)
 			local target = game.level.map(px, py, Map.ACTOR)
 			if not target or self:reactionToward(target) < 0 then return end
diff --git a/game/modules/tome/data/talents/gifts/venom-drake.lua b/game/modules/tome/data/talents/gifts/venom-drake.lua
index 37bd5106da478b852bb22c4e6d43d47514a455cd..9ab9c7da345c06aebfab5d3a0dfc98599708c7b3 100644
--- a/game/modules/tome/data/talents/gifts/venom-drake.lua
+++ b/game/modules/tome/data/talents/gifts/venom-drake.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/misc/horrors.lua b/game/modules/tome/data/talents/misc/horrors.lua
index 9298b597298801c25d31ed0c20f66da6992ed4dd..18e0f9705917a85d0622860a6eb059fcce295f03 100644
--- a/game/modules/tome/data/talents/misc/horrors.lua
+++ b/game/modules/tome/data/talents/misc/horrors.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -544,7 +544,7 @@ newTalent{
 			DamageType.SLIME, {dam=t.getDamage(self, t), power=0.15, x=self.x, y=self.y},
 			1,
 			5, nil,
-			engine.Entity.new{alpha=100, display='', color_br=30, color_bg=200, color_bb=60},
+			MapEffect.new{color_br=30, color_bg=200, color_bb=60, effect_shader="shader_images/retch_effect.png"},
 			function(e)
 				e.radius = e.radius + 0.5
 				return true
@@ -573,24 +573,25 @@ newTalent{
 	range = 6,
 	tactical = { DISABLE = 1, CLOSEIN = 3 },
 	requires_target = true,
-	getDamage = function(self, t) return self:mindCrit(self:combatTalentMindDamage(t, 5, 50)) end,
+	getDamage = function(self, t) return self:combatTalentMindDamage(t, 5, 70) end,
 	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
 	action = function(self, t)
 		local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
 		local x, y = self:getTarget(tg)
 		local target = game.level.map(x, y, engine.Map.ACTOR)
 		if not x or not y or not target then return nil end
+		local crit = self:mindCrit(1)
 
 		if target:canBe("pin") and self:checkHit(self:combatMindpower(), target:combatPhysicalResist()) then
-			target:setEffect(target.EFF_GRAPPLED, t.getDuration(self, t), {src=self, power=t.getDamage(self, t)/2})
+			target:setEffect(target.EFF_GRAPPLED, t.getDuration(self, t), {src=self, power=t.getDamage(self, t)/2 * crit})
 			self:project(tg, x, y, function(px, py)
 
 				target:pull(self.x, self.y, tg.range)
 
 				if not target:attr("no_breath") and not target:attr("undead") and target:canBe("silence") then
-					target:setEffect(target.EFF_STRANGLE_HOLD, t.getDuration(self, t), {src=self, power=t.getDamage(self, t) * 1.5, damtype="SLIME"})
+					target:setEffect(target.EFF_STRANGLE_HOLD, t.getDuration(self, t), {src=self, power=t.getDamage(self, t) * crit, damtype="SLIME"})
 				else
-					target:setEffect(target.EFF_CRUSHING_HOLD, t.getDuration(self, t), {src=self, power=t.getDamage(self, t), damtype="SLIME"})
+					target:setEffect(target.EFF_CRUSHING_HOLD, t.getDuration(self, t), {src=self, power=t.getDamage(self, t) * crit, damtype="SLIME"})
 				end
 			end)
 		else
@@ -696,7 +697,7 @@ newTalent{
 		local m = false
 		local no_inven = true
 		local list = mod.class.NPC:loadList("/data/general/npcs/horror.lua")
-		if self.is_akgishil and rng.percent(10) and not self.summoned_distort then
+		if self.is_akgishil and rng.percent(3) and not self.summoned_distort then
 			m = list.DISTORTED_BLADE:clone()
 			self.summoned_distort=1
 			no_inven = false
@@ -712,7 +713,7 @@ newTalent{
 			m.summoner = self
 			m.summon_time = 1000
 			if not self.is_akgishil then
-				m.summon_time = 10
+				m.summon_time = 15
 				m.ai_real = m.ai
 				m.ai = "summoned"
 			end
@@ -720,7 +721,7 @@ newTalent{
 			if self:knowTalent(self.T_BLIGHTED_SUMMONING) then
 				m.blighted_summon_talent = self.T_RUIN
 				m:incIncStat("mag", self:getMag())
-				m.summon_time=15
+				m.summon_time=20
 			end
 			game.zone:addEntity(game.level, m, "actor", x, y)
 		end
diff --git a/game/modules/tome/data/talents/misc/inscriptions.lua b/game/modules/tome/data/talents/misc/inscriptions.lua
index d92ade3f3f69acb9f78faaf528e0e314f397f44b..d4f4874c9075684685108370140e74183ecc26ad 100644
--- a/game/modules/tome/data/talents/misc/inscriptions.lua
+++ b/game/modules/tome/data/talents/misc/inscriptions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -184,6 +184,80 @@ newInscription{
 	end,
 }
 
+-- fixedart wild variant
+newInscription{
+	name = "Infusion: Primal", image = "talents/infusion__wild.png",
+	type = {"inscriptions/infusions", 1},
+	points = 1,
+	no_energy = true,
+	tactical = {
+		DEFEND = 3,
+		CURE = function(self, t, target)
+			local nb = 0
+			local data = self:getInscriptionData(t.short_name)
+			for eff_id, p in pairs(self.tmp) do
+				local e = self.tempeffect_def[eff_id]
+				if data.what[e.type] and e.status == "detrimental" then
+					nb = nb + 1
+				end
+			end
+			return nb
+		end
+	},
+	action = function(self, t)
+		local data = self:getInscriptionData(t.short_name)
+
+		local target = self
+		local effs = {}
+		local force = {}
+		local known = false
+
+		-- Go through all temporary effects
+		for eff_id, p in pairs(target.tmp) do
+			local e = target.tempeffect_def[eff_id]
+			if data.what[e.type] and e.status == "detrimental" and e.subtype["cross tier"] then
+				force[#force+1] = {"effect", eff_id}
+			elseif data.what[e.type] and e.status == "detrimental" then
+				effs[#effs+1] = {"effect", eff_id}
+			end
+		end
+
+		-- Cross tier effects are always removed and not part of the random game, otherwise it is a huge nerf to wild infusion
+		for i = 1, #force do
+			local eff = force[i]
+			if eff[1] == "effect" then
+				target:removeEffect(eff[2])
+				known = true
+			end
+		end
+
+		for i = 1, 1 do
+			if #effs == 0 then break end
+			local eff = rng.tableRemove(effs)
+
+			if eff[1] == "effect" then
+				target:removeEffect(eff[2])
+				known = true
+			end
+		end
+		if known then
+			game.logSeen(self, "%s is cured!", self.name:capitalize())
+		end
+		self:setEffect(self.EFF_PRIMAL_ATTUNEMENT, data.dur, {power=data.power + data.inc_stat})
+		return true
+	end,
+	info = function(self, t)
+		local data = self:getInscriptionData(t.short_name)
+		local what = table.concat(table.keys(data.what), ", ")
+		return ([[Activate the infusion to cure yourself of %s effects and increase affinity for all damage by %d%% for %d turns.]]):format(what, data.power+data.inc_stat, data.dur)
+	end,
+	short_info = function(self, t)
+		local data = self:getInscriptionData(t.short_name)
+		local what = table.concat(table.keys(data.what), ", ")
+		return ([[affinity %d%%; cure %s]]):format(data.power + data.inc_stat, what)
+	end,
+}
+
 newInscription{
 	name = "Infusion: Movement",
 	type = {"inscriptions/infusions", 1},
@@ -210,6 +284,8 @@ newInscription{
 	end,
 }
 
+
+
 newInscription{
 	name = "Infusion: Sun",
 	type = {"inscriptions/infusions", 1},
@@ -298,7 +374,7 @@ newInscription{
 	info = function(self, t)
 		local data = self:getInscriptionData(t.short_name)
 		return ([[Activate the infusion to spit a bolt of poison doing %0.2f nature damage per turns for 7 turns, and reducing the target's healing received by %d%%.
-		The sudden stream of natural forces also strips you of one random detrimental magical effect.]]):format(damDesc(self, DamageType.COLD, data.power + data.inc_stat) / 7, data.heal_factor)
+		The sudden stream of natural forces also strips you of one random detrimental magical effect.]]):format(damDesc(self, DamageType.NATURE, data.power + data.inc_stat) / 7, data.heal_factor)
 	end,
 	short_info = function(self, t)
 		local data = self:getInscriptionData(t.short_name)
@@ -306,6 +382,7 @@ newInscription{
 	end,
 }
 
+-- Opportunity cost for this is HUGE, it should not hit friendly, also buffed duration
 newInscription{
 	name = "Infusion: Wild Growth",
 	type = {"inscriptions/infusions", 1},
@@ -315,7 +392,7 @@ newInscription{
 	radius = 5,
 	direct_hit = true,
 	target = function(self, t)
-		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, talent=t}
+		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, friendlyfire = false, talent=t}
 	end,
 	getDamage = function(self, t) return 10 + self:combatMindpower() * 3.6 end,
 	action = function(self, t)
@@ -480,7 +557,7 @@ newInscription{
 	end,
 	action = function(self, t)
 		local data = self:getInscriptionData(t.short_name)
-		self:setEffect(self.EFF_DAMAGE_SHIELD, 5, {power=100+3*self:getMag(), reflect=100})
+		self:setEffect(self.EFF_DAMAGE_SHIELD, 5, {power=100+5*self:getMag(), reflect=100})
 		return true
 	end,
 	info = function(self, t)
@@ -490,7 +567,7 @@ The effect will scale with your magic stat.]]):format(100+1.5*self:getMag(), 5)
 	end,
 	short_info = function(self, t)
 		local data = self:getInscriptionData(t.short_name)
-		return ([[absorb and reflect %d for %d turns]]):format(100+3*self:getMag(), 5)
+		return ([[absorb and reflect %d for %d turns]]):format(100+5*self:getMag(), 5)
 	end,
 }
 
@@ -539,6 +616,7 @@ newInscription{
 	end,
 }
 
+
 newInscription{
 	name = "Rune: Vision",
 	type = {"inscriptions/runes", 1},
diff --git a/game/modules/tome/data/talents/misc/misc.lua b/game/modules/tome/data/talents/misc/misc.lua
index baa6aaec3f4ef9870ac2385e145440ddddc5dd22..757359470338492c3812b3119ad9ffc96bdce440 100644
--- a/game/modules/tome/data/talents/misc/misc.lua
+++ b/game/modules/tome/data/talents/misc/misc.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -247,12 +247,12 @@ newTalent{
 		for i = self.x - rad, self.x + rad do for j = self.y - rad, self.y + rad do if game.level.map:isBound(i, j) then
 			local actor = game.level.map(i, j, game.level.map.ACTOR)
 			if actor and self:reactionToward(actor) < 0 and not actor:attr("hunted_difficulty_immune") then
-				actor:setEffect(actor.EFF_HUNTER_PLAYER, 6, {src=self})
+				actor:setEffect(actor.EFF_HUNTER_PLAYER, 30, {src=self})
 			end
 		end end end
 	end,
 	info = function(self, t) return ([[You are hunted!.
-		There is %d%% chances each turn that all foes in a %d radius get a glimpse of your position for 6 turns.]]):
+		There is %d%% chances each turn that all foes in a %d radius get a glimpse of your position for 30 turns.]]):
 		format(1 + self.level / 7, 10 + self.level / 5)
 	end,
 }
diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
index b1135aaace344dc55bc7e277fcf02f8962f4e797..370521a0fa935f97ebacacc6eb5bfe3168412f89 100644
--- a/game/modules/tome/data/talents/misc/npcs.lua
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -381,9 +381,11 @@ newTalent{
 				if not filter.hasxp then m.exp_worth = 0 end
 				m:resolve()
 
-				m.summoner = self
-				m.summon_time = filter.lastfor
-				m.faction = self.faction
+				if not filter.no_summoner_set then
+					m.summoner = self
+					m.summon_time = filter.lastfor
+				end
+				if not m.hard_faction then m.faction = self.faction end
 
 				if not filter.hasloot then m:forgetInven(m.INVEN_INVEN) end
 
@@ -2067,3 +2069,180 @@ newTalent{
 		format(t.getDuration(self, t), damDesc(self, DamageType.COLD, self:combatTalentSpellDamage(t, 5, 140)))
 	end,
 }
+
+
+newTalent{
+	name = "Body Shot",
+	type = {"technique/other", 1},
+	points = 5,
+	cooldown = 10,
+	stamina = 10,
+	message = "@Source@ throws a body shot.",
+	tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } },
+	requires_target = true,
+	--on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.8) + getStrikingStyle(self, dam) end,
+	getDuration = function(self, t, comb) return math.ceil(self:combatTalentScale(t, 1, 5) * (0.25 + comb/5)) end,
+	getDrain = function(self, t) return self:combatTalentScale(t, 2, 10, 0.75) * self:getCombo(combo) end,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+
+		-- breaks active grapples if the target is not grappled
+		if target:isGrappled(self) then
+			grappled = true
+		else
+			self:breakGrapples()
+		end
+
+		local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)
+
+		if hit then
+			-- try to daze
+			if target:canBe("stun") then
+				target:setEffect(target.EFF_DAZED, t.getDuration(self, t, self:getCombo(combo)), {apply_power=self:combatPhysicalpower()})
+			else
+				game.logSeen(target, "%s resists the body shot!", target.name:capitalize())
+			end
+
+			target:incStamina(- t.getDrain(self, t))
+
+		end
+
+		self:clearCombo()
+
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t) * 100
+		local drain = self:getTalentLevel(t) * 2
+		local daze = t.getDuration(self, t, 0)
+		local dazemax = t.getDuration(self, t, 5)
+		return ([[A punch to the body that deals %d%% damage, drains %d of the target's stamina per combo point, and dazes the target for %d to %d turns, depending on the amount of combo points you've accumulated.
+		The daze chance will increase with your Physical Power.
+		Using this talent removes your combo points.]])
+		:format(damage, drain, daze, dazemax)
+	end,
+}
+
+newTalent{
+	name = "Relentless Strikes",
+	type = {"technique/other", 1},
+	points = 5,
+	mode = "passive",
+	getStamina = function(self, t) return self:combatTalentScale(t, 1/4, 5/4, 0.75) end,
+	getCooldownReduction = function(self, t) return self:combatTalentLimit(t, 0.67, 0.09, 1/3) end,  -- Limit < 67%
+	info = function(self, t)
+		local stamina = t.getStamina(self, t)
+		local cooldown = t.getCooldownReduction(self, t)
+		return ([[Reduces the cooldown on all your Pugilism talents by %d%%.  Additionally, every time you earn a combo point, you will regain %0.2f stamina.
+		Note that stamina gains from combo points occur before any talent stamina costs.]])
+		:format(cooldown * 100, stamina)
+	end,
+}
+
+newTalent{
+	name = "Combo String",
+	type = {"technique/other", 1},
+	mode = "passive",
+	points = 5,
+	getDuration = function(self, t) return math.ceil(self:combatTalentScale(t, 0.3, 2.3)) end,
+	getChance = function(self, t) return self:combatLimit(self:getTalentLevel(t) * (5 + self:getCun(5, true)), 100, 0, 0, 50, 50) end, -- Limit < 100%
+	info = function(self, t)
+		local duration = t.getDuration(self, t)
+		local chance = t.getChance(self, t)
+		return ([[When gaining a combo point, you have a %d%% chance to gain an extra combo point.  Additionally, your combo points will last %d turns longer before expiring.
+		The chance of building a second combo point will improve with your Cunning.]]):
+		format(chance, duration)
+	end,
+}
+
+newTalent{
+	name = "Steady Mind",
+	type = {"technique/other", 1},
+	mode = "passive",
+	points = 5,
+	getDefense = function(self, t) return self:combatTalentStatDamage(t, "dex", 5, 35) end,
+	getMental = function(self, t) return self:combatTalentStatDamage(t, "cun", 5, 35) end,
+	info = function(self, t)
+		local defense = t.getDefense(self, t)
+		local saves = t.getMental(self, t)
+		return ([[Superior cunning and training allows you to outthink and outwit your opponents' physical and mental assaults.  Increases Defense by %d and Mental Save by %d.
+		The Defense bonus will scale with your Dexterity, and the save bonus with your Cunning.]]):
+		format(defense, saves)
+	end,
+}
+
+newTalent{
+	name = "Maim",
+	type = {"technique/other", 1},
+	points = 5,
+	random_ego = "attack",
+	cooldown = 12,
+	stamina = 10,
+	tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = 2 },
+	requires_target = true,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
+	getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 10, 100) * getUnarmedTrainingBonus(self) end,
+	getMaim = function(self, t) return self:combatTalentPhysicalDamage(t, 5, 30) end,
+	-- Learn the appropriate stance
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+
+		local grappled = false
+
+		-- breaks active grapples if the target is not grappled
+		if target:isGrappled(self) then
+			grappled = true
+		else
+			self:breakGrapples()
+		end
+
+		-- end the talent without effect if the target is to big
+		if self:grappleSizeCheck(target) then
+			return true
+		end
+
+		-- start the grapple; this will automatically hit and reapply the grapple if we're already grappling the target
+		local hit = self:startGrapple (target)
+		-- deal damage and maim if appropriate
+		if hit then
+			if grappled then
+				self:project(target, x, y, DamageType.PHYSICAL, self:physicalCrit(t.getDamage(self, t), nil, target, self:combatAttack(), target:combatDefense()))
+				target:setEffect(target.EFF_MAIMED, t.getDuration(self, t), {power=t.getMaim(self, t)})
+			else
+				self:project(target, x, y, DamageType.PHYSICAL, self:physicalCrit(t.getDamage(self, t), nil, target, self:combatAttack(), target:combatDefense()))
+			end
+		end
+
+		return true
+	end,
+	info = function(self, t)
+		local duration = t.getDuration(self, t)
+		local damage = t.getDamage(self, t)
+		local maim = t.getMaim(self, t)
+		return ([[Grapples the target and inflicts %0.2f physical damage. If the target is already grappled, the target will be maimed as well, reducing damage by %d and global speed by 30%% for %d turns.
+		The grapple effects will be based off your grapple talent, if you have it, and the damage will scale with your Physical Power.]])
+		:format(damDesc(self, DamageType.PHYSICAL, (damage)), maim, duration)
+	end,
+}
+
+newTalent{
+	name = "Bloodrage",
+	type = {"technique/other", 1},
+	points = 5,
+	mode = "passive",
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
+	on_kill = function(self, t)
+		self:setEffect(self.EFF_BLOODRAGE, t.getDuration(self, t), {max=math.floor(self:getTalentLevel(t) * 6), inc=2})
+	end,
+	info = function(self, t)
+		return ([[Each time one of your foes bites the dust, you feel a surge of power, increasing your strength by 2 up to a maximum of %d for %d turns.]]):
+		format(math.floor(self:getTalentLevel(t) * 6), t.getDuration(self, t))
+	end,
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/talents/misc/objects.lua b/game/modules/tome/data/talents/misc/objects.lua
index 6e4038a3d5668d3deaac77429af649e71b73c803..0e852182d4773567eb3124e5ecf6917e06bdf876 100644
--- a/game/modules/tome/data/talents/misc/objects.lua
+++ b/game/modules/tome/data/talents/misc/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -154,7 +154,9 @@ newTalent{
 	info = function(self, t)
 		local xs = ""
 		for w, nb in pairs(self.wards) do
-			xs = xs .. (xs ~= "" and ", " or "") .. engine.DamageType.dam_def[w].name:capitalize() .. "(" .. tostring(nb) .. ")"
+			if nb > 0 then
+				xs = xs .. (xs ~= "" and ", " or "") .. engine.DamageType.dam_def[w].name:capitalize() .. "(" .. tostring(nb) .. ")"
+			end
 		end
 		return ([[Bring a damage-type-specific ward into being. The ward will fully negate as many attacks of its element as it has charges.
 		You can activate the following wards: %s]]):format(xs)
@@ -391,7 +393,8 @@ newTalent{
 		return
 	end,
 	info = function(self, t)
-		return ([[You enter into a fighting trance, gaining 15%% resist all, losing 15 mindpower, but gaining 20 mental save. However, each turn after the fifth that this talent is active, there is a chance that you will be overcome and become confused.]])
+		return ([[You enter into a fighting trance, gaining 15%% resist all, losing 15 mindpower, but gaining 20 mental save. However, each turn after the fifth that this talent is active, there is a chance that you will be overcome and become confused.
+This does not take a turn to use.]])
 	end,
 }
 
@@ -464,3 +467,152 @@ newTalent{
 		Digging takes %d turns (based on your currently best digger available).]]):format(best.digspeed)
 	end,
 }
+
+newTalent{
+	name = "Shivgoroth Form", short_name = "SHIV_LORD", image = "talents/shivgoroth_form.png",
+	type = {"spell/objects",1},
+	points = 5,
+	random_ego = "attack",
+	cooldown = 20,
+	tactical = { BUFF = 3, ATTACKAREA = { COLD = 0.5, PHYSICAL = 0.5 }, DISABLE = { knockback = 1 } },
+	direct_hit = true,
+	range = 10,
+	no_energy = true,
+	is_spell=true,
+	requires_target = true,
+	getDuration = function(self, t) return 4 + math.ceil(self:getTalentLevel(t)) end,
+	getPower = function(self, t) return util.bound(50 + self:combatTalentSpellDamage(t, 50, 450), 0, 500) / 500 end,
+	on_pre_use = function(self, t, silent) if self:attr("is_shivgoroth") then if not silent then game.logPlayer(self, "You are already a Shivgoroth!") end return false end return true end,
+	action = function(self, t)
+		self:setEffect(self.EFF_SHIVGOROTH_FORM_LORD, t.getDuration(self, t), {power=t.getPower(self, t), lvl=self:getTalentLevelRaw(t)})
+		game:playSoundNear(self, "talents/tidalwave")
+		return true
+	end,
+	info = function(self, t)
+		local power = t.getPower(self, t)
+		local dur = t.getDuration(self, t)
+		return ([[You absorb latent cold around you, turning into an ice elemental - a shivgoroth - for %d turns.
+		While transformed, you do not need to breathe, gain access to the Ice Storm talent at level %d, gain %d%% resistance to cuts and stuns, gain %d%% cold resistance, and all cold damage heals you for %d%% of the damage done.
+		The power will increase with your Spellpower.]]):
+		format(dur, self:getTalentLevelRaw(t), power * 100, power * 100 / 2, 50 + power * 100)
+	end,
+}
+
+newTalent{
+	name = "Mental Refresh",
+	type = {"misc/objects", 1},
+	points = 5,
+	equilibrium = 20,
+	cooldown = 50,
+	range = 10,
+	tactical = { BUFF = 2 },
+	action = function(self, t)
+		local nb = 3
+		local tids = {}
+		for tid, _ in pairs(self.talents_cd) do
+			local tt = self:getTalentFromId(tid)
+			if tt.type[1]:find("^wild%-gift/") or tt.type[1]:find("psionic/") or tt.type[1]:find("cursed/") then
+				tids[#tids+1] = tid
+			end
+		end
+		for i = 1, nb do
+			if #tids == 0 then break end
+			local tid = rng.tableRemove(tids)
+			self.talents_cd[tid] = self.talents_cd[tid] - 3
+		end
+		self.changed = true
+		game:playSoundNear(self, "talents/spell_generic2")
+		return true
+	end,
+	info = function(self, t)
+		return ([[Reset up to 3 wild gift, psionic or cursed talents.]])
+	end,
+}
+
+newTalent{
+	name = "Dagger Block",
+	image = "talents/block.png",
+	type = {"technique/objects", 1},
+	cooldown = function(self, t)
+		return 8 - util.bound(self:getTalentLevelRaw(t), 1, 5)
+	end,
+	points = 5,
+	hard_cap = 5,
+	range = 1,
+	requires_target = true,
+	tactical = { ATTACK = 3, DEFEND = 3 },
+	
+	getProperties = function(self, t)
+		local p = {
+			sp = false,
+			ref = false,
+			br = false,
+			sb = true
+		}
+		return p
+	end,
+	
+	getBlockedTypes = function(self, t)
+	
+		local bt = {[DamageType.PHYSICAL]=true}
+			bt[DamageType.FIRE] = false
+			bt[DamageType.LIGHTNING] = false
+			bt[DamageType.COLD] = false
+			bt[DamageType.ACID] = false
+			bt[DamageType.NATURE] = false
+			bt[DamageType.BLIGHT] = false
+			bt[DamageType.LIGHT] = false
+			bt[DamageType.DARKNESS] = false
+			bt[DamageType.ARCANE] = false
+			bt[DamageType.MIND] = false
+			bt[DamageType.TEMPORAL] = false
+			
+		local n = 0
+		for t, _ in pairs(bt) do n = n + 1 end
+
+		if n < 1 then return "(error 2)" end
+		local e_string = ""
+		if n == 1 then
+			e_string = DamageType.dam_def[next(bt)].name
+		else
+			local list = table.keys(bt)
+			for i = 1, #list do
+				list[i] = DamageType.dam_def[list[i]].name
+			end
+			e_string = table.concat(list, ", ")
+		end
+		return bt, e_string
+		end,
+	
+	action = function(self, t)
+		local properties = t.getProperties(self, t)
+		local bt, bt_string = t.getBlockedTypes(self, t)
+		self:setEffect(self.EFF_BLOCKING, 1 + (self:knowTalent(self.T_ETERNAL_GUARD) and 1 or 0), {power = 120+self:getCun()+self:getDex(), d_types=bt, properties=properties})
+		return true
+	end,
+	info = function(self, t)
+		return ([[Raise your dagger into blocking position for one turn, reducing the damage of all physical attacks by %d. If you block all of an attack's damage, the attacker will be vulnerable to a deadly counterstrike (a normal attack will instead deal 200%% damage) for one turn and be left disarmed for 3 turns.
+		The blocking value will increase with your Dexterity and Cunning.]]):format(120 + self:getCun() + self:getDex())
+	end,
+}
+
+newTalent{
+	name = "Shieldsmaiden Aura",
+	type = {"misc/objects", 1},
+	points = 1,
+	mode = "passive",
+	cooldown = 10,
+	callbackOnHit = function(self, t, cb)
+		if not self:isTalentCoolingDown(t) then
+			self:startTalentCooldown(t)
+			cb.value=0
+			game.logPlayer(self, "Your shield protects you from the blow!")
+			return true
+		else
+		return false
+		end
+	end,
+	info = function(self, t)
+		return ([[Can block up to 1 hit per 10 turns.]])
+	end,
+}
diff --git a/game/modules/tome/data/talents/misc/races.lua b/game/modules/tome/data/talents/misc/races.lua
index 22b7ecb74e53c887c844a81792d1bbef38cb1bfd..4938e6eb7b48a129e8b8fb2219b59053c005a83c 100644
--- a/game/modules/tome/data/talents/misc/races.lua
+++ b/game/modules/tome/data/talents/misc/races.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/misc/tutorial.lua b/game/modules/tome/data/talents/misc/tutorial.lua
index 6e84ab0057073377f532390161c41790f38d4ffd..017bc29e35a3b995176f50d7fa2a749fa366bf13 100644
--- a/game/modules/tome/data/talents/misc/tutorial.lua
+++ b/game/modules/tome/data/talents/misc/tutorial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/absorption.lua b/game/modules/tome/data/talents/psionic/absorption.lua
index 01d82cd37f1c044df3f9ef34d5dc31250aa3a28f..4a9402e186906594acca6c597a407a574ea0f2fa 100644
--- a/game/modules/tome/data/talents/psionic/absorption.lua
+++ b/game/modules/tome/data/talents/psionic/absorption.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -76,7 +76,7 @@ newTalent{
 	no_energy = true,
 	tactical = { DEFEND = 2 },
 	on_pre_use = function(self, t, silent)
-		if self:isTalentActive(self.T_THERMAL_SHIELD) and self:isTalentActive(self.T_CHARGED_SHIELD) then
+		if self:isTalentActive(self.T_THERMAL_SHIELD) and self:isTalentActive(self.T_CHARGED_SHIELD) and not self:attr("psionic_shield_override") then
 			if not silent then game.logSeen(self, "You may only sustain two shields at once. Shield activation cancelled.") end
 			return false
 		end
@@ -202,7 +202,7 @@ newTalent{
 	no_energy = true,
 	tactical = { DEFEND = 2 },
 	on_pre_use = function(self, t, silent)
-		if self:isTalentActive(self.T_KINETIC_SHIELD) and self:isTalentActive(self.T_CHARGED_SHIELD) then
+		if self:isTalentActive(self.T_KINETIC_SHIELD) and self:isTalentActive(self.T_CHARGED_SHIELD) and not self:attr("psionic_shield_override") then
 			if not silent then game.logSeen(self, "You may only sustain two shields at once. Shield activation cancelled.") end
 			return false
 		end
@@ -325,7 +325,7 @@ newTalent{
 	no_energy = true,
 	tactical = { DEFEND = 2 },
 	on_pre_use = function(self, t, silent)
-		if self:isTalentActive(self.T_KINETIC_SHIELD) and self:isTalentActive(self.T_THERMAL_SHIELD) then
+		if self:isTalentActive(self.T_KINETIC_SHIELD) and self:isTalentActive(self.T_THERMAL_SHIELD) and not self:attr("psionic_shield_override") then
 			if not silent then game.logSeen(self, "You may only sustain two shields at once. Shield activation cancelled.") end
 			return false
 		end
diff --git a/game/modules/tome/data/talents/psionic/augmented-mobility.lua b/game/modules/tome/data/talents/psionic/augmented-mobility.lua
index 4f4c1a1ec68db96f41b1d22d46c0ddde0fc634d9..bd0e8b82293cff177967776cfec0a19a3e4a6e8b 100644
--- a/game/modules/tome/data/talents/psionic/augmented-mobility.lua
+++ b/game/modules/tome/data/talents/psionic/augmented-mobility.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/discharge.lua b/game/modules/tome/data/talents/psionic/discharge.lua
index e1bab892aee21a826f650940fe6d76d723393176..7548e0be70eb2419c595d72a88de1ee41bae2cc0 100644
--- a/game/modules/tome/data/talents/psionic/discharge.lua
+++ b/game/modules/tome/data/talents/psionic/discharge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -216,6 +216,6 @@ newTalent{
 		local crit_bonus = t.getCritBonus(self, t)
 		return ([[Focus your mind on a single target, diverting all offensive Discharge talent effects to it for %d turns.  While this effect is active, all Discharge talents gain %d%% critical power.
 		If the target is killed, the effect will end early.
-		The damage bonus will scale with your Mindpower.]]):format(duration, damDesc(self, DamageType.MIND, crit_bonus))
+		The damage bonus will scale with your Mindpower.]]):format(duration, crit_bonus)
 	end,
 }
\ No newline at end of file
diff --git a/game/modules/tome/data/talents/psionic/distortion.lua b/game/modules/tome/data/talents/psionic/distortion.lua
index 62a1c26ac7b471bd4e95172846a847362e910c2c..7e426453415852a5baa3d9a4ece756d1779421c7 100644
--- a/game/modules/tome/data/talents/psionic/distortion.lua
+++ b/game/modules/tome/data/talents/psionic/distortion.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,7 +28,7 @@ function DistortionCount(self)
 			distortion_count = distortion_count + lev
 		end
 	end
-	distortion_count = mod.class.interface.Combat.combatScale(distortion_count, 0, 0, 20, 20, 0.75)
+	distortion_count = mod.class.interface.Combat:combatScale(distortion_count, 0, 0, 20, 20, 0.75)
 	print("Distortion Count", distortion_count)
 	return distortion_count
 end
diff --git a/game/modules/tome/data/talents/psionic/dream-forge.lua b/game/modules/tome/data/talents/psionic/dream-forge.lua
index 6afd06c889a0f998bdabb49d0cc821f144a6d002..3e7bc50095198eab610d8bd87946001ccf13e505 100644
--- a/game/modules/tome/data/talents/psionic/dream-forge.lua
+++ b/game/modules/tome/data/talents/psionic/dream-forge.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/dream-smith.lua b/game/modules/tome/data/talents/psionic/dream-smith.lua
index f8ade13f3b2a2dbaf731e00bc4d88af4dbd09ad5..435f8e06c296affb0be20864af8227f56f0c5063 100644
--- a/game/modules/tome/data/talents/psionic/dream-smith.lua
+++ b/game/modules/tome/data/talents/psionic/dream-smith.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/dreaming.lua b/game/modules/tome/data/talents/psionic/dreaming.lua
index a530764704813cdf388282808b26dbddec16cfda..3fea87ec840d3faa1c864019315b885069d11432 100644
--- a/game/modules/tome/data/talents/psionic/dreaming.lua
+++ b/game/modules/tome/data/talents/psionic/dreaming.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/feedback.lua b/game/modules/tome/data/talents/psionic/feedback.lua
index c3300dd717b2973d870d4113ce7d463d8e3f321f..2861a41e71b34cba8fbc02984efc9f10a1fc8e2e 100644
--- a/game/modules/tome/data/talents/psionic/feedback.lua
+++ b/game/modules/tome/data/talents/psionic/feedback.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua b/game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua
index eb77a2aa79f3a6741833efc8ed26772569a67b31..596cac6e3561ad0f88662c4d81c045a48eac03f8 100644
--- a/game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua
+++ b/game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/focus.lua b/game/modules/tome/data/talents/psionic/focus.lua
index c58429f08b5b49da7348892cf3f8170f74967210..b618ae49b4c93995cb4b6452cad345296d4b0405 100644
--- a/game/modules/tome/data/talents/psionic/focus.lua
+++ b/game/modules/tome/data/talents/psionic/focus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/grip.lua b/game/modules/tome/data/talents/psionic/grip.lua
index 3b96e05fd564df1263bdc312d971328ea1246d81..15eebf6eacedcb0d2cf0addca1a904fd954a12e3 100644
--- a/game/modules/tome/data/talents/psionic/grip.lua
+++ b/game/modules/tome/data/talents/psionic/grip.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/mental-discipline.lua b/game/modules/tome/data/talents/psionic/mental-discipline.lua
index c4a818e5f650a50de79c013228a0ef68d848e5b1..f81de6f137d883c20e263c62785ee6b98eea4d94 100644
--- a/game/modules/tome/data/talents/psionic/mental-discipline.lua
+++ b/game/modules/tome/data/talents/psionic/mental-discipline.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/mentalism.lua b/game/modules/tome/data/talents/psionic/mentalism.lua
index b36d4450291724115d20b09ba915d796ec774356..cb83e99b96262eed6f302685cfbd30efb7db2f80 100644
--- a/game/modules/tome/data/talents/psionic/mentalism.lua
+++ b/game/modules/tome/data/talents/psionic/mentalism.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/nightmare.lua b/game/modules/tome/data/talents/psionic/nightmare.lua
index a4b4d804c96b696171c102e470c05f1edf0caf3c..5b6c7ad3161808d38fc03f71ba99b76efa1378df 100644
--- a/game/modules/tome/data/talents/psionic/nightmare.lua
+++ b/game/modules/tome/data/talents/psionic/nightmare.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/other.lua b/game/modules/tome/data/talents/psionic/other.lua
index 73b2232d77a3100d68033e67b40a7794a264f323..783b95641cf88559a3c1f85754e0bcecf2bf6c6d 100644
--- a/game/modules/tome/data/talents/psionic/other.lua
+++ b/game/modules/tome/data/talents/psionic/other.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/possession.lua b/game/modules/tome/data/talents/psionic/possession.lua
index 793c56cc873b305c97d8c15b655ebcdc030ecd03..8b2f92096a7a73cf77bfb72d9f2c6a55653cba3e 100644
--- a/game/modules/tome/data/talents/psionic/possession.lua
+++ b/game/modules/tome/data/talents/psionic/possession.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/projection.lua b/game/modules/tome/data/talents/psionic/projection.lua
index 2ff9e91b567f165c4b94bcf493c70f2462befdd4..aef95430609ecc5d43c9ac872ebe63acfb32a973 100644
--- a/game/modules/tome/data/talents/psionic/projection.lua
+++ b/game/modules/tome/data/talents/psionic/projection.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/psi-archery.lua b/game/modules/tome/data/talents/psionic/psi-archery.lua
index 97a245099e00bea11cb5e3031498ad81c016ff84..1aa1a5af92ca610826e35a0edbad7d43fbc5cecc 100644
--- a/game/modules/tome/data/talents/psionic/psi-archery.lua
+++ b/game/modules/tome/data/talents/psionic/psi-archery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/psi-fighting.lua b/game/modules/tome/data/talents/psionic/psi-fighting.lua
index 147110190691e090525977375738836b9281a282..9ca4beefc349e63b8a370e8077f7c4b5f6dd127c 100644
--- a/game/modules/tome/data/talents/psionic/psi-fighting.lua
+++ b/game/modules/tome/data/talents/psionic/psi-fighting.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/psionic.lua b/game/modules/tome/data/talents/psionic/psionic.lua
index d19e03e0357db8fa77458db2132601408bb9774b..cd855d9c32f9d442c8b164d663549547dae4ed93 100644
--- a/game/modules/tome/data/talents/psionic/psionic.lua
+++ b/game/modules/tome/data/talents/psionic/psionic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/psychic-assault.lua b/game/modules/tome/data/talents/psionic/psychic-assault.lua
index e2aa5cd5c1fa429765a8815639b1f87d08458dd3..d7b8908eaae49cc839734eda32a260e49f29addf 100644
--- a/game/modules/tome/data/talents/psionic/psychic-assault.lua
+++ b/game/modules/tome/data/talents/psionic/psychic-assault.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/slumber.lua b/game/modules/tome/data/talents/psionic/slumber.lua
index 9fe3fd2428ca0add1577d92ccb5c6ec351810e1f..18fc9d01914e45dddbd1b3561f38b8594241668a 100644
--- a/game/modules/tome/data/talents/psionic/slumber.lua
+++ b/game/modules/tome/data/talents/psionic/slumber.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/solipsism.lua b/game/modules/tome/data/talents/psionic/solipsism.lua
index 4fa1040c95c06b7c30c26f9eb4838694fc024d2a..581e85ace50a905ca31dd3fcd86bc9c745ed11a9 100644
--- a/game/modules/tome/data/talents/psionic/solipsism.lua
+++ b/game/modules/tome/data/talents/psionic/solipsism.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/thought-forms.lua b/game/modules/tome/data/talents/psionic/thought-forms.lua
index 12394a7fab779d785943861505a05c88eff4c23d..4aecc4f4fba6ac49018c12fcfb55ed36a2b97648 100644
--- a/game/modules/tome/data/talents/psionic/thought-forms.lua
+++ b/game/modules/tome/data/talents/psionic/thought-forms.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/trance.lua b/game/modules/tome/data/talents/psionic/trance.lua
index 80184aa195c7558a60e6e4ff6a724410816fbf94..707f226a28aa013fda1abf4c3411698e1f9bfcb5 100644
--- a/game/modules/tome/data/talents/psionic/trance.lua
+++ b/game/modules/tome/data/talents/psionic/trance.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/psionic/voracity.lua b/game/modules/tome/data/talents/psionic/voracity.lua
index afab0b3493a047ba75caa47da08d339945a2e0f2..7f853b11dbd3e7a4cd1ae50077ddd3ae95a215fb 100644
--- a/game/modules/tome/data/talents/psionic/voracity.lua
+++ b/game/modules/tome/data/talents/psionic/voracity.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/acid-alchemy.lua b/game/modules/tome/data/talents/spells/acid-alchemy.lua
new file mode 100644
index 0000000000000000000000000000000000000000..e87e53024b5033d9d8c489b14029259ca76de03f
--- /dev/null
+++ b/game/modules/tome/data/talents/spells/acid-alchemy.lua
@@ -0,0 +1,189 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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
+local Object = require "engine.Object"
+
+newTalent{
+	name = "Acid Infusion",
+	type = {"spell/acid-alchemy", 1},
+	mode = "sustained",
+	require = spells_req1,
+	sustain_mana = 30,
+	points = 5,
+	cooldown = 30,
+	tactical = { BUFF = 2 },
+	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) * 100 end,
+	activate = function(self, t)
+		cancelAlchemyInfusions(self)
+		game:playSoundNear(self, "talents/arcane")
+		local ret = {}
+		self:talentTemporaryValue(ret, "inc_damage", {[DamageType.ACID] = t.getIncrease(self, t)})
+		return ret
+	end,
+	deactivate = function(self, t, p)
+		return true
+	end,
+	info = function(self, t)
+		local daminc = t.getIncrease(self, t)
+		return ([[When you throw your alchemist bombs, you infuse them with explosive acid that can blind.
+		In addition all acid damage you do is increased by %d%%.]]):
+		format(daminc)
+	end,
+}
+
+newTalent{
+	name = "Caustic Golem",
+	type = {"spell/acid-alchemy", 2},
+	require = spells_req2,
+	mode = "passive",
+	points = 5,
+	getDuration = function(self, t) return math.floor(self:combatScale(self:combatSpellpower(0.03) * self:getTalentLevel(t), 2, 0, 10, 8)) end,
+	getChance = function(self, t) return self:combatLimit(self:combatSpellpower(0.03) * self:getTalentLevel(t), 100, 20, 0, 55, 8) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 5, 120) end,
+	applyEffect = function(self, t, golem)
+		local duration = t.getDuration(self, t)
+		local chance = t.getChance(self, t)
+		local dam = t.getDamage(self, t)
+		golem:setEffect(golem.EFF_CAUSTIC_GOLEM, duration, {src = golem, chance=chance, dam=dam})
+	end,
+	info = function(self, t)
+		local duration = t.getDuration(self, t)
+		local chance = t.getChance(self, t)
+		local dam = self.alchemy_golem and self.alchemy_golem:damDesc(engine.DamageType.ACID, t.getDamage(self, t)) or 0
+		return ([[While Acid Infusion is active, your bombs coat your golem in acid for %d turns when they hit it.
+		While coated, any melee hit agaist your golem has a %d%% chance to trigger a radius 4 cone of acid towards the attacker that does %0.1f Acid damage to all caught inside. (This can only happen once per turn.)
+		The effects increase with your talent level and with the Spellpower and damage modifiers of your golem.]]):
+		format(duration, chance, dam)
+	end,
+}
+
+newTalent{
+	name = "Caustic Mire",
+	type = {"spell/acid-alchemy",3},
+	require = spells_req3,
+	points = 5,
+	mana = 50,
+	cooldown = 30,
+	tactical = { ATTACKAREA = { ACID = 3 }, DISABLE = 2 },
+	range = 7,
+	radius = 3,
+	direct_hit = true,
+	requires_target = true,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t)}
+	end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 7, 60) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
+	getSlow = function(self, t) return self:combatTalentLimit(t, 100, 10, 40) end,
+	action = function(self, t)
+		local tg = self:getTalentTarget(t)
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		local _ _, _, _, x, y = self:canProject(tg, x, y)
+		-- Add a lasting map effect
+		game.level.map:addEffect(self,
+			x, y, t.getDuration(self, t),
+			DamageType.CAUSTIC_MIRE, {dam=self:spellCrit(t.getDamage(self, t)), dur=2, slow=t.getSlow(self, t)},
+			self:getTalentRadius(t),
+			5, nil,
+			{type="mucus"},
+			nil, self:spellFriendlyFire()
+		)
+
+		game:playSoundNear(self, "talents/slime")
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		local slow = t.getSlow(self, t)
+		local duration = t.getDuration(self, t)
+		local radius = self:getTalentRadius(t)
+		return ([[A radius %d pool of acid spawns at the target location, doing %0.1f Acid damage each turn for %d turns.
+		All creatures caught in the mire will also suffer a %d%% slowness effect.
+		The damage will increase with your Spellpower.]]):
+		format(radius, damDesc(self, DamageType.ACID, damage), duration, slow)
+	end,
+}
+
+newTalent{
+	name = "Dissolving Acid",
+	type = {"spell/acid-alchemy",4},
+	require = spells_req4,
+	points = 5,
+	mana = 45,
+	cooldown = 12,
+	refectable = true,
+	range = 10,
+	direct_hit = true,
+	tactical = { ATTACK = { ACID = 2 }, DISABLE = 2 },
+	requires_target = true,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 320) end,
+	getRemoveCount = function(self, t) return math.floor(self:combatTalentScale(t, 1, 3, "log")) end,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		local nb = t.getRemoveCount(self,t)
+		self:project(tg, x, y, function(px, py)
+			local target = game.level.map(px, py, Map.ACTOR)
+			if not target then return end
+			DamageType:get(DamageType.ACID).projector(self, px, py, DamageType.ACID, self:spellCrit(t.getDamage(self, t)))
+
+			local effs = {}
+
+			-- Go through all mental and physical effects
+			for eff_id, p in pairs(target.tmp) do
+				local e = target.tempeffect_def[eff_id]
+				if (e.type == "mental" or e.type == "physical") and e.status == "beneficial" then
+					effs[#effs+1] = {"effect", eff_id}
+				end
+			end
+
+			-- Go through all mental sustains
+			for tid, act in pairs(target.sustain_talents) do
+				local t = self:getTalentFromId(tid)
+				if act and t.is_mind then
+					effs[#effs+1] = {"talent", tid}
+				end
+			end
+
+			for i = 1, nb do
+				if #effs == 0 then break end
+				local eff = rng.tableRemove(effs)
+
+				if self:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 5) then
+					target:crossTierEffect(target.EFF_SPELLSHOCKED, self:combatSpellpower())
+					if eff[1] == "effect" then
+						target:removeEffect(eff[2])
+					else
+						target:forceUseTalent(eff[2], {ignore_energy=true})
+					end
+				end
+			end
+
+		end, nil, {type="acid"})
+		game:playSoundNear(self, "talents/acid")
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		return ([[Acid errupts all around your target, dealing %0.1f acid damage.
+		The acid attack is extremely distracting, and may remove up to %d physical or mental temporary effects or mental sustains (depending on the Spell Save of the target).
+		The damage and chance to remove effects will increase with your Spellpower.]]):format(damDesc(self, DamageType.ACID, damage), t.getRemoveCount(self, t))
+	end,
+}
diff --git a/game/modules/tome/data/talents/spells/advanced-golemancy.lua b/game/modules/tome/data/talents/spells/advanced-golemancy.lua
index 61f1f4e9a68d28c9e92363dea4e2e8b9e2e8e087..a18750a6347d4d95764413b9cf6af65acfa3a286 100644
--- a/game/modules/tome/data/talents/spells/advanced-golemancy.lua
+++ b/game/modules/tome/data/talents/spells/advanced-golemancy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
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 b90fb3e1af0eb9a3cea5cd4c33faf7f06af31fb6..6f920084d0061a00551e976029f096dba009d613 100644
--- a/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua
+++ b/game/modules/tome/data/talents/spells/advanced-necrotic-minions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/aegis.lua b/game/modules/tome/data/talents/spells/aegis.lua
index b42bbf6b14cd8affab9bdee0204c95081ff88e4a..ac1ff91ba1ff85d03fb5e2f25ab57b5a5c125590 100644
--- a/game/modules/tome/data/talents/spells/aegis.lua
+++ b/game/modules/tome/data/talents/spells/aegis.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/aether.lua b/game/modules/tome/data/talents/spells/aether.lua
index a1a4fe1ed32e499d0e10870400ed57679c0dce18..43ed942ada9c1ed739b4a1ac0a20dfc41d1b43b2 100644
--- a/game/modules/tome/data/talents/spells/aether.lua
+++ b/game/modules/tome/data/talents/spells/aether.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -71,6 +71,8 @@ newTalent{
 			combatSpellpower = function(self) return self.summoner:combatSpellpower() end,
 			rad = 3,
 			energy = {value=0, mod=16},
+			detect_power = self:combatSpellpower() / 2,
+			disarm_power = self:combatSpellpower() / 2,
 			on_added = function(self, level, x, y)
 				self.x, self.y = x, y
 				local tries = {}
diff --git a/game/modules/tome/data/talents/spells/air.lua b/game/modules/tome/data/talents/spells/air.lua
index 5065d114c521759ba49821691c6b1bfaeac611ab..b2c7e0cf8e4eaf8df2b19023982f2e9187693cdd 100644
--- a/game/modules/tome/data/talents/spells/air.lua
+++ b/game/modules/tome/data/talents/spells/air.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/animus.lua b/game/modules/tome/data/talents/spells/animus.lua
index 1a5ba1ebe1233eec8ee9d9f74a27ca98e1dc2a88..338626d00c47ad3a7fd41ff9e74d0df3b783efdb 100644
--- a/game/modules/tome/data/talents/spells/animus.lua
+++ b/game/modules/tome/data/talents/spells/animus.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/arcane.lua b/game/modules/tome/data/talents/spells/arcane.lua
index 3ef402d1981a7db89d5217aa76db4d4fd4caf43f..a7aca5e0b4f9a7f89cccb380589db8c7a0947fb8 100644
--- a/game/modules/tome/data/talents/spells/arcane.lua
+++ b/game/modules/tome/data/talents/spells/arcane.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,28 +22,30 @@ newTalent{
 	type = {"spell/arcane", 1},
 	mode = "sustained",
 	require = spells_req1,
-	sustain_mana = 50,
+	sustain_mana = 25,
 	points = 5,
 	cooldown = 30,
 	tactical = { BUFF = 2 },
 	use_only_arcane = 1,
 	getSpellpowerIncrease = function(self, t) return self:combatTalentScale(t, 5, 20, 0.75) end,
+	getArcaneResist = function(self, t) return 5 + self:combatTalentSpellDamage(t, 10, 500) / 18 end,
 	activate = function(self, t)
 		game:playSoundNear(self, "talents/arcane")
 		return {
 			power = self:addTemporaryValue("combat_spellpower", t.getSpellpowerIncrease(self, t)),
+			res = self:addTemporaryValue("resists", {[DamageType.ARCANE] = t.getArcaneResist(self, t)}),
 			particle = self:addParticles(Particles.new("arcane_power", 1)),
 		}
 	end,
 	deactivate = function(self, t, p)
 		self:removeParticles(p.particle)
 		self:removeTemporaryValue("combat_spellpower", p.power)
+		self:removeTemporaryValue("resists", p.res)
 		return true
 	end,
 	info = function(self, t)
-		local spellpowerinc = t.getSpellpowerIncrease(self, t)
-		return ([[Your mastery of magic allows you to enter a state of deep concentration, increasing your Spellpower by %d.]]):
-		format(spellpowerinc)
+		return ([[Your mastery of magic allows you to enter a state of deep concentration, increasing your Spellpower by %d and arcane resistance by %d%%.]]):
+		format(t.getSpellpowerIncrease(self, t), t.getArcaneResist(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/spells/conveyance.lua b/game/modules/tome/data/talents/spells/conveyance.lua
index 0867ca1ed800cf22c9302c39dd7afbae2ea9203b..6e7123ffdf5d9ff9e270be3c21013fa3fb182316 100644
--- a/game/modules/tome/data/talents/spells/conveyance.lua
+++ b/game/modules/tome/data/talents/spells/conveyance.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/divination.lua b/game/modules/tome/data/talents/spells/divination.lua
index 09c2f2880e7c286ec5e5d1904e318692f81899e5..faa49384015e2fbddfe80a227eb3ba1df24d6912 100644
--- a/game/modules/tome/data/talents/spells/divination.lua
+++ b/game/modules/tome/data/talents/spells/divination.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/earth.lua b/game/modules/tome/data/talents/spells/earth.lua
index b77186a744120e4e56b960e4802fdc99b0435ca4..8d4244e481c04a99e03f8b1372a368400ab1b027 100644
--- a/game/modules/tome/data/talents/spells/earth.lua
+++ b/game/modules/tome/data/talents/spells/earth.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -31,12 +31,16 @@ newTalent{
 	getArmor = function(self, t) return self:combatTalentSpellDamage(t, 10, 23) end,
 	activate = function(self, t)
 		game:playSoundNear(self, "talents/earth")
-		return {
+		local ret = {
 			armor = self:addTemporaryValue("combat_armor", t.getArmor(self, t)),
-			particle = self:addParticles(Particles.new("stone_skin", 1)),
 		}
+		if not self:addShaderAura("stone_skin", "crystalineaura", {time_factor=1500, spikeOffset=0.123123, spikeLength=0.9, spikeWidth=3, growthSpeed=2, color={0xD7/255, 0x8E/255, 0x45/255}}, "particles_images/spikes.png") then
+			ret.particle = self:addParticles(Particles.new("stone_skin", 1))
+		end
+		return ret
 	end,
 	deactivate = function(self, t, p)
+		self:removeShaderAura("stone_skin")
 		self:removeParticles(p.particle)
 		self:removeTemporaryValue("combat_armor", p.armor)
 		return true
@@ -199,7 +203,7 @@ newTalent{
 		local damage = t.getDamage(self, t)
 		return ([[Entomb yourself in a wall of stone for %d turns.
 		At level 4, it becomes targetable.
-		Any hostile creature caught in the radius will also suffer %0.2f physical dmage.
+		Any hostile creature caught in the radius will also suffer %0.2f physical damage.
 		Duration and damage will improve with your Spellpower.]]):
 		format(duration, damDesc(self, DamageType.PHYSICAL, damage))
 	end,
diff --git a/game/modules/tome/data/talents/spells/energy-alchemy.lua b/game/modules/tome/data/talents/spells/energy-alchemy.lua
new file mode 100644
index 0000000000000000000000000000000000000000..35afce927ec25ac1d54130d8b4a9c91532781425
--- /dev/null
+++ b/game/modules/tome/data/talents/spells/energy-alchemy.lua
@@ -0,0 +1,207 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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
+local Object = require "engine.Object"
+
+newTalent{
+	name = "Lightning Infusion",
+	type = {"spell/energy-alchemy", 1},
+	mode = "sustained",
+	require = spells_req_high1,
+	sustain_mana = 30,
+	points = 5,
+	cooldown = 30,
+	tactical = { BUFF = 2 },
+	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) * 100 end,
+	activate = function(self, t)
+		cancelAlchemyInfusions(self)
+		game:playSoundNear(self, "talents/arcane")
+		local ret = {}
+		self:talentTemporaryValue(ret, "inc_damage", {[DamageType.LIGHTNING] = t.getIncrease(self, t)})
+		return ret
+	end,
+	deactivate = function(self, t, p)
+		return true
+	end,
+	info = function(self, t)
+		local daminc = t.getIncrease(self, t)
+		return ([[When you throw your alchemist bombs, you infuse them with lightning damage that can daze your foes.
+		In addition all lightning damage you do is increased by %d%%.]]):
+		format(daminc)
+	end,
+}
+
+newTalent{
+	name = "Dynamic Recharge",
+	type = {"spell/energy-alchemy", 2},
+	require = spells_req_high2,
+	mode = "passive",
+	points = 5,
+	getChance = function(self, t) return math.floor(self:combatTalentLimit(t, 100, 20, 75)) end,
+	getNb = function(self, t) return self:getTalentLevel(t) <= 6 and 1 or 2 end,
+	applyEffect = function(self, t, golem)
+		local tids = table.keys(golem.talents_cd)
+		local did_something = false
+		local nb = t.getNb(self, t)
+		for _, tid in ipairs(tids) do
+			if golem.talents_cd[tid] > 0 and rng.percent(t.getChance(self, t)) then
+				golem.talents_cd[tid] = golem.talents_cd[tid] - nb
+				if golem.talents_cd[tid] <= 0 then golem.talents_cd[tid] = nil end
+				did_something = true
+			end
+		end
+		if did_something then
+			game.logSeen(golem, "%s is energized by the attack, reducing some talent cooldowns!", golem.name:capitalize())
+		end
+	end,
+	info = function(self, t)
+		return ([[While Lightning Infusion is active, your bombs energize your golem.
+		All talents on cooldown on your golem have %d%% chance to be reduced by %d.]]):
+		format(t.getChance(self, t), t.getNb(self, t))
+	end,
+}
+
+newTalent{
+	name = "Thunderclap",
+	type = {"spell/energy-alchemy",3},
+	require = spells_req_high3,
+	points = 5,
+	mana = 40,
+	cooldown = 12,
+	requires_target = true,
+	tactical = { DISABLE = { disarm = 1 }, ATTACKAREA={PHYSICAL=1, LIGHTNING=1} },
+	range = 0,
+	radius = function(self, t) return math.floor(self:combatTalentScale(t, 3, 8)) end,
+	getDuration = function(self, t) return math.floor(self:combatScale(self:combatSpellpower(0.03) * self:getTalentLevel(t), 2, 0, 7, 8)) end,
+	target = function(self, t)
+		return {type="cone", range=self:getTalentRange(t), radius=self:getTalentRadius(t), friendlyfire=false, talent=t}
+	end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 250) / 2 end,
+	action = function(self, t)
+		local ammo = self:hasAlchemistWeapon()
+		if not ammo then
+			game.logPlayer(self, "You need to ready alchemist gems in your quiver.")
+			return
+		end
+
+		local tg = self:getTalentTarget(t)
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+
+		ammo = self:removeObject(self:getInven("QUIVER"), 1)
+		if not ammo then return end
+
+		local dam = self:spellCrit(t.getDamage(self, t))
+		local affected = {}
+		self:project(tg, x, y, function(px, py)
+			local actor = game.level.map(px, py, Map.ACTOR)
+			if not actor or affected[actor] then return end
+			affected[actor] = true
+
+			DamageType:get(DamageType.PHYSICAL).projector(self, px, py, DamageType.PHYSICAL, dam)
+			DamageType:get(DamageType.LIGHTNING).projector(self, px, py, DamageType.LIGHTNING, dam)
+			if actor:canBe("disarm") then
+ 				actor:setEffect(actor.EFF_DISARMED, t.getDuration(self, t), {src=self, apply_power=self:combatSpellpower()})
+ 			end
+ 			if actor:canBe("knockback") then
+  				actor:knockback(self.x, self.y, 3)
+  				actor:crossTierEffect(actor.EFF_OFFBALANCE, self:combatSpellpower())
+  			end
+		end, dam)
+		game.level.map:particleEmitter(self.x, self.y, tg.radius, "gravity_breath", {radius=tg.radius, tx=x-self.x, ty=y-self.y, allow=core.shader.allow("distort")})
+		game:playSoundNear(self, "talents/lightning")
+		return true
+	end,
+	info = function(self, t)
+		local radius = self:getTalentRadius(t)
+		return ([[By crushing an alchemist gem you generate a thunderclap in a cone of radius %d dealing %0.2f physical damage and %0.2f lightning damage.
+		All creatures caught inside are knocked back and disarmed for %d turns.
+		The duration and damage will increase with your Spellpower.]]):format(radius, damDesc(self, DamageType.PHYSICAL, t.getDamage(self, t)), damDesc(self, DamageType.LIGHTNING, t.getDamage(self, t)), t.getDuration(self, t))
+	end,
+}
+
+newTalent{
+	name = "Living Lightning",
+	type = {"spell/energy-alchemy",4},
+	require = spells_req_high4,
+	mode = "sustained",
+	cooldown = 40,
+	sustain_mana = 100,
+	points = 5,
+	range = function(self, t) return math.ceil(self:combatTalentLimit(t, 6, 1, 3)) end,
+	tactical = { BUFF=1 },
+	getSpeed = function(self, t) return self:combatTalentScale(t, 0.05, 0.15, 0.90) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 70) end,
+	getTurn = function(self, t) return util.bound(50 + self:combatTalentSpellDamage(t, 5, 500) / 10, 50, 160) end,
+	callbackOnActBase = function(self, t)
+		local tgts = {}
+		local grids = core.fov.circle_grids(self.x, self.y, 6, true)
+		for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
+			local a = game.level.map(x, y, Map.ACTOR)
+			if a and self:reactionToward(a) < 0 then
+				tgts[#tgts+1] = a
+			end
+		end end
+
+		-- Randomly take targets
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t, selffire=self:spellFriendlyFire()}
+		for i = 1, 1 do
+			if #tgts <= 0 then break end
+			local a, id = rng.table(tgts)
+			table.remove(tgts, id)
+
+			self:project(tg, a.x, a.y, DamageType.LIGHTNING, self:spellCrit(t.getDamage(self, t)))
+			if core.shader.active() then game.level.map:particleEmitter(a.x, a.y, tg.radius, "ball_lightning_beam", {radius=1, tx=x, ty=y}, {type="lightning"})
+			else game.level.map:particleEmitter(a.x, a.y, tg.radius, "ball_lightning_beam", {radius=1, tx=x, ty=y}) end
+			game:playSoundNear(self, "talents/lightning")
+		end
+	end,
+	callbackOnAct = function(self, t)
+		local p = self:isTalentActive(t.id)
+		if not p then return end
+		if not p.last_life then p.last_life = self.life end
+		local min = self.max_life * 0.2
+		if self.life <= p.last_life - min then
+			game.logSeen(self, "#LIGHT_STEEL_BLUE#%s is energized by all the damage taken!", self.name:capitalize())
+			self.energy.value = self.energy.value + (t.getTurn(self, t) * game.energy_to_act / 100)
+		end
+		p.last_life = self.life
+	end,
+	activate = function(self, t)
+		game:playSoundNear(self, "talents/lightning")
+		local ret = {name = self.name:capitalize().."'s "..t.name}
+		self:talentTemporaryValue(ret, "movement_speed", t.getSpeed(self, t))
+		ret.last_life = self.life
+		return ret
+	end,
+	deactivate = function(self, t, p)
+		return true
+	end,
+	info = function(self, t)
+		local speed = t.getSpeed(self, t) * 100
+		local dam = t.getDamage(self, t)
+		local turn = t.getTurn(self, t)
+		local range = self:getTalentRange(t)
+		return ([[Infuse your body with lightning energy, bolstering your movement speed by +%d%%.
+		Each turn, a foe within range %d will be struck by lightning and be dealt %0.1f Lightning damage.
+		In addition, damage to your health will energize you.
+		At the start of each turn in which you have lost at least %d life (20%% of your maximum life) since your last turn, you will gain %d%% of a turn.
+		The effects increase with your Spellpower.]]):
+		format(speed, range, damDesc(self, DamageType.LIGHTNING, t.getDamage(self, t)), self.max_life * 0.2, turn)
+	end,
+}
diff --git a/game/modules/tome/data/talents/spells/enhancement.lua b/game/modules/tome/data/talents/spells/enhancement.lua
index ea7067af4d27dbd195073f3ea1191bd3bea3e403..0561239573f30ad635e60a130f2f8438694c4be7 100644
--- a/game/modules/tome/data/talents/spells/enhancement.lua
+++ b/game/modules/tome/data/talents/spells/enhancement.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/explosives.lua b/game/modules/tome/data/talents/spells/explosives.lua
index 398dc82be51f126e9cab487d3346d91f011f8fa2..d202b6452b323ce9888c961f030902e1390b4861 100644
--- a/game/modules/tome/data/talents/spells/explosives.lua
+++ b/game/modules/tome/data/talents/spells/explosives.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -31,33 +31,24 @@ newTalent{
 	target = function(self, t)
 		local ammo = self:hasAlchemistWeapon()
 		if not ammo then return end
-		-- Using friendlyfire, although this could affect escorts etc.
-		local friendlyfire = true
-		local prot = self:getTalentLevelRaw(self.T_ALCHEMIST_PROTECTION) * 20
-		if prot > 0 then
-			friendlyfire = 100 - prot
-		end
-		return {type="ball", range=self:getTalentRange(t)+(ammo and ammo.alchemist_bomb and ammo.alchemist_bomb.range or 0), radius=self:getTalentRadius(t), friendlyfire=friendlyfire, talent=t}
+		return {type="ball", range=self:getTalentRange(t)+(ammo and ammo.alchemist_bomb and ammo.alchemist_bomb.range or 0), radius=self:getTalentRadius(t), talent=t}
 	end,
 	tactical = { ATTACKAREA = function(self, t, target)
 		if self:isTalentActive(self.T_ACID_INFUSION) then return { ACID = 2 }
 		elseif self:isTalentActive(self.T_LIGHTNING_INFUSION) then return { LIGHTNING = 2 }
 		elseif self:isTalentActive(self.T_FROST_INFUSION) then return { COLD = 2 }
-		else return { FIRE = 2 }
+		elseif self:isTalentActive(self.T_FIRE_INFUSION) then return { FIRE = 2 }
+		else return { PHYSICAL = 2 }
 		end
 	end },
 	computeDamage = function(self, t, ammo)
 		local inc_dam = 0
-		local damtype = DamageType.FIRE
-		local particle = "ball_fire"
-		local acidi = self:getTalentFromId(Talents.T_ACID_INFUSION)
-		local lightningi = self:getTalentFromId(Talents.T_LIGHTNING_INFUSION)
-		local frosti = self:getTalentFromId(Talents.T_FROST_INFUSION)
-		local fireinf = self:getTalentFromId(Talents.T_FIRE_INFUSION)
-		if self:isTalentActive(self.T_ACID_INFUSION) then inc_dam = acidi.getIncrease(self,acidi); damtype = DamageType.ACID_BLIND; particle = "ball_acid"
-		elseif self:isTalentActive(self.T_LIGHTNING_INFUSION) then inc_dam = lightningi.getIncrease(self,lightningi); damtype = DamageType.LIGHTNING_DAZE; particle = "ball_lightning_beam"
-		elseif self:isTalentActive(self.T_FROST_INFUSION) then inc_dam = frosti.getIncrease(self,frosti); damtype = DamageType.ICE; particle = "ball_ice"
-		else inc_dam = fireinf.getIncrease(self,fireinf); damtype = self:knowTalent(self.T_FIRE_INFUSION) and DamageType.FIREBURN or DamageType.FIRE
+		local damtype = DamageType.PHYSICAL
+		local particle = "ball_physical"
+		if self:isTalentActive(self.T_ACID_INFUSION) then damtype = DamageType.ACID_BLIND; particle = "ball_acid"
+		elseif self:isTalentActive(self.T_LIGHTNING_INFUSION) then damtype = DamageType.LIGHTNING_DAZE; particle = "ball_lightning_beam"
+		elseif self:isTalentActive(self.T_FROST_INFUSION) then damtype = DamageType.ICE; particle = "ball_ice"
+		elseif self:isTalentActive(self.T_FIRE_INFUSION) then damtype = DamageType.FIREBURN; particle = "ball_fire"
 		end
 		inc_dam = inc_dam + (ammo.alchemist_bomb and ammo.alchemist_bomb.power or 0) / 100
 		local dam = self:combatTalentSpellDamage(t, 15, 150, ((ammo.alchemist_power or 0) + self:combatSpellpower()) / 2)
@@ -100,13 +91,26 @@ newTalent{
 		local tmp = {}
 		local grids = self:project(tg, x, y, function(tx, ty)
 			local d = dam
+			local target = game.level.map(tx, ty, Map.ACTOR)
 			-- Protect yourself
-			if tx == self.x and ty == self.y then d = dam * (1 - prot) end
+			if tx == self.x and ty == self.y then
+				d = dam * (1 - prot)
 			-- Protect the golem
-			if golem and tx == golem.x and ty == golem.y then d = dam * (1 - prot) end
-			if d == 0 then return end
+			elseif golem and tx == golem.x and ty == golem.y then
+				d = dam * (1 - prot)
+				if self:isTalentActive(self.T_FROST_INFUSION) and self:knowTalent(self.T_ICE_ARMOUR) then
+					self:callTalent(self.T_ICE_ARMOUR, "applyEffect", golem)
+				elseif self:isTalentActive(self.T_ACID_INFUSION) and self:knowTalent(self.T_CAUSTIC_GOLEM) then
+					self:callTalent(self.T_CAUSTIC_GOLEM, "applyEffect", golem)
+				elseif self:isTalentActive(self.T_LIGHTNING_INFUSION) and self:knowTalent(self.T_DYNAMIC_RECHARGE) then
+					self:callTalent(self.T_DYNAMIC_RECHARGE, "applyEffect", golem)
+				end
+			else -- reduced damage to friendly npcs (could make random chance like friendlyfire instead)
+				if target and self:reactionToward(target) > 0 then d = dam * (1 - prot) end
+			end
+			if d <= 0 then return end
 
-			local target = game.level.map(tx, ty, Map.ACTOR)
+--			local target = game.level.map(tx, ty, Map.ACTOR)
 			dam_done = dam_done + DamageType:get(damtype).projector(self, tx, ty, damtype, d, tmp)
 			if ammo.alchemist_bomb and ammo.alchemist_bomb.splash then
 				DamageType:get(DamageType[ammo.alchemist_bomb.splash.type]).projector(self, tx, ty, DamageType[ammo.alchemist_bomb.splash.type], ammo.alchemist_bomb.splash.dam)
@@ -136,7 +140,7 @@ newTalent{
 		if ammo then dam, damtype = t.computeDamage(self, t, ammo) end
 		dam = damDesc(self, damtype, dam)
 		return ([[Imbue an alchemist gem with an explosive charge of mana and throw it.
-		The gem will explode for %0.2f %s damage.
+		The gem will explode for %0.1f %s damage.
 		Each kind of gem will also provide a specific effect.
 		The damage will improve with better gems and with your Spellpower.]]):format(dam, DamageType:get(damtype).name)
 	end,
@@ -161,9 +165,9 @@ newTalent{
 		self.resists[DamageType.ACID] = self.resists[DamageType.ACID] - 3
 	end,
 	info = function(self, t)
-		return ([[Improves your resistance (and your golem's) against the elemental damage of your own bombs by %d%%, and against external elemental damage (fire, cold, lightning and acid) by %d%%.
-		At talent level 5 it also protects you against all side effects of your bombs.]]):
-		format(self:getTalentLevelRaw(t) * 20, self:getTalentLevelRaw(t) * 3)
+		return ([[Grants %d%% protection to you, your golem and other friendly creatures against the elemental damage of your own bombs, and against external elemental damage (fire, cold, lightning and acid) by %d%%.
+		At talent level 5 it also protects against all side effects of your bombs.]]):
+		format(math.min(100, self:getTalentLevelRaw(t) * 20), self:getTalentLevelRaw(t) * 3)
 	end,
 }
 
@@ -222,7 +226,7 @@ newTalent{
 	computeDamage = function(self, t, ammo)
 		local inc_dam = 0
 		local damtype = DamageType.SPELLKNOCKBACK
-		local particle = "ball_fire"
+		local particle = "ball_physical"
 		inc_dam = (ammo.alchemist_bomb and ammo.alchemist_bomb.power or 0) / 100
 		local dam = self:combatTalentSpellDamage(t, 15, 120, ((ammo.alchemist_power or 0) + self:combatSpellpower()) / 2)
 		dam = dam * (1 + inc_dam)
diff --git a/game/modules/tome/data/talents/spells/fire-alchemy.lua b/game/modules/tome/data/talents/spells/fire-alchemy.lua
index dd54f69fc0aa5f8723525c788fa910c22ca2968b..2443b851d58d186441fd8d62da80cfcd48b76aa8 100644
--- a/game/modules/tome/data/talents/spells/fire-alchemy.lua
+++ b/game/modules/tome/data/talents/spells/fire-alchemy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -19,32 +19,30 @@
 local Object = require "engine.Object"
 
 newTalent{
-	name = "Heat",
+	name = "Flame Infusion", short_name = "FIRE_INFUSION",
 	type = {"spell/fire-alchemy", 1},
+	mode = "sustained",
 	require = spells_req1,
+	sustain_mana = 30,
 	points = 5,
-	mana = 10,
-	cooldown = 5,
-	random_ego = "attack",
-	refectable = true,
-	proj_speed = 20,
-	range = 10,
-	direct_hit = true,
-	tactical = { ATTACK = { FIRE = 2 } },
-	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 620) end,
-	action = function(self, t)
-		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
-		local x, y = self:getTarget(tg)
-		if not x or not y then return nil end
-		self:project(tg, x, y, DamageType.FIREBURN, {dur=8, initial=0, dam=t.getDamage(self, t)}, {type="flame"})
-		game:playSoundNear(self, "talents/fire")
+	cooldown = 30,
+	tactical = { BUFF = 2 },
+	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) * 100 end,
+	activate = function(self, t)
+		cancelAlchemyInfusions(self)
+		game:playSoundNear(self, "talents/arcane")
+		local ret = {}
+		self:talentTemporaryValue(ret, "inc_damage", {[DamageType.FIRE] = t.getIncrease(self, t)})
+		return ret
+	end,
+	deactivate = function(self, t, p)
 		return true
 	end,
 	info = function(self, t)
-		local damage = t.getDamage(self, t)
-		return ([[Turn part of your target into fire, burning the rest for %0.2f fire damage over 8 turns.
-		The damage will increase with your Spellpower.]]):format(damDesc(self, DamageType.FIRE, damage))
+		local daminc = t.getIncrease(self, t)
+		return ([[When you throw your alchemist bombs, you infuse them with flames that burn for a few turns.
+		In addition all fire damage you do is increased by %d%%.]]):
+		format(daminc)
 	end,
 }
 
@@ -190,7 +188,7 @@ newTalent{
 		end end
 
 		-- Randomly take targets
-		local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_fire"}, friendlyblock=false}
+		local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_fire"}, friendlyblock=false, friendlyfire=false}
 		for i = 1, math.floor(self:getTalentLevel(t)) do
 			if #tgts <= 0 then break end
 			local a, id = rng.table(tgts)
diff --git a/game/modules/tome/data/talents/spells/fire.lua b/game/modules/tome/data/talents/spells/fire.lua
index 21cc0ea33df7dc1dc1157f481f6a9446a2d0c7dc..8feba588151451cb7ba93010f35d99ecfea2c580 100644
--- a/game/modules/tome/data/talents/spells/fire.lua
+++ b/game/modules/tome/data/talents/spells/fire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -119,7 +119,7 @@ newTalent{
 		local damage = t.getDamage(self, t)
 		local stunduration = t.getStunDuration(self, t)
 		local radius = self:getTalentRadius(t)
-		return ([[Conjures up a cone of flame with radius %d. Any target caught in the area will take %0.2f fire damage and be stunned for %d turns.
+		return ([[Conjures up a cone of flame with radius %d. Any targets caught in the area will suffer Burning Shock, stunning them and dealing %0.2f fire damage over %d turns.
 		The damage will increase with your Spellpower.]]):
 		format(radius, damDesc(self, DamageType.FIRE, damage), stunduration)
 	end,
diff --git a/game/modules/tome/data/talents/spells/frost-alchemy.lua b/game/modules/tome/data/talents/spells/frost-alchemy.lua
new file mode 100644
index 0000000000000000000000000000000000000000..30a0fd9f3e0e0c2897f2ac96ff8b696ae71d0659
--- /dev/null
+++ b/game/modules/tome/data/talents/spells/frost-alchemy.lua
@@ -0,0 +1,143 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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
+local Object = require "engine.Object"
+
+newTalent{
+	name = "Frost Infusion",
+	type = {"spell/frost-alchemy", 1},
+	mode = "sustained",
+	require = spells_req1,
+	sustain_mana = 30,
+	points = 5,
+	cooldown = 30,
+	tactical = { BUFF = 2 },
+	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) * 100 end,
+	activate = function(self, t)
+		cancelAlchemyInfusions(self)
+		game:playSoundNear(self, "talents/arcane")
+		local ret = {}
+		self:talentTemporaryValue(ret, "inc_damage", {[DamageType.COLD] = t.getIncrease(self, t)})
+		return ret
+	end,
+	deactivate = function(self, t, p)
+		return true
+	end,
+	info = function(self, t)
+		local daminc = t.getIncrease(self, t)
+		return ([[When you throw your alchemist bombs, you infuse them with cold damage that can freeze your foes.
+		In addition all cold damage you do is increased by %d%%.]]):
+		format(daminc)
+	end,
+}
+
+newTalent{
+	name = "Ice Armour",
+	type = {"spell/frost-alchemy", 2},
+	require = spells_req2,
+	mode = "passive",
+	points = 5,
+	getDuration = function(self, t) return math.floor(self:combatScale(self:combatSpellpower(0.03) * self:getTalentLevel(t), 2, 0, 10, 8)) end,
+	getArmor = function(self, t) return self:combatTalentSpellDamage(t, 10, 25) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 5, 70) end,
+	applyEffect = function(self, t, golem)
+		local duration = t.getDuration(self, t)
+		local dam = t.getDamage(self, t)
+		local armor = t.getArmor(self, t)
+		golem:setEffect(golem.EFF_ICE_ARMOUR, duration, {armor=armor, dam=dam})
+	end,
+	info = function(self, t)
+		local duration = t.getDuration(self, t)
+		local dam = self.alchemy_golem and self.alchemy_golem:damDesc(engine.DamageType.COLD, t.getDamage(self, t)) or 0
+		local armor = t.getArmor(self, t)
+		return ([[While Frost Infusion is active, your bombs deposit a layer of ice on your golem for %d turns when they hit it.
+		This ice provides your golem with %d additional armour, melee attacks against it deal %0.1f Cold damage to the attacker, and 50%% of its damage is converted to Cold.
+		The effects increase with your talent level and with the Spellpower and damage modifiers of your golem.]]):
+		format(duration, armor, dam)
+	end,
+}
+
+newTalent{
+	name = "Flash Freeze",
+	type = {"spell/frost-alchemy",3},
+	require = spells_req3,
+	points = 5,
+	mana = 30,
+	cooldown = 20,
+	requires_target = true,
+	tactical = { DISABLE = { stun = 1 }, ATTACKAREA = { COLD = 2 } },
+	no_energy = true,
+	range = 0,
+	getDuration = function(self, t) return math.floor(self:combatScale(self:combatSpellpower(0.03) * self:getTalentLevel(t), 2, 0, 10, 8)) end,
+	radius = function(self, t) return math.floor(self:combatTalentScale(t, 2, 6)) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 250) end,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), friendlyfire=false, talent=t}
+	end,
+	action = function(self, t)
+		local tg = self:getTalentTarget(t)
+		local grids = self:project(tg, self.x, self.y, DamageType.COLDNEVERMOVE, {dur=t.getDuration(self, t), dam=t.getDamage(self, t)})
+		game.level.map:particleEmitter(self.x, self.y, tg.radius, "ball_ice", {radius=tg.radius})
+		game:playSoundNear(self, "talents/ice")
+		return true
+	end,
+	info = function(self, t)
+		local radius = self:getTalentRadius(t)
+		return ([[Invoke a blast of cold all around you with a radius of %d, doing %0.1f Cold damage and freezing creatures to the ground for %d turns.
+		Affected creatures can still act, but cannot move.
+		The duration will increase with your Spellpower.]]):format(radius, damDesc(self, DamageType.COLD, t.getDamage(self, t)), t.getDuration(self, t))
+	end,
+}
+
+newTalent{
+	name = "Ice Core", short_name = "BODY_OF_ICE",
+	type = {"spell/frost-alchemy",4},
+	require = spells_req4,
+	mode = "sustained",
+	cooldown = 40,
+	sustain_mana = 100,
+	points = 5,
+	range = 6,
+	tactical = { BUFF=1 },
+	critResist = function(self, t) return self:combatTalentScale(t, 10, 50) end,
+	getResistance = function(self, t) return self:combatTalentSpellDamage(t, 5, 45) end,
+	getAffinity = function(self, t) return self:combatTalentLimit(t, 50, 5, 20) end, -- Limit <50%
+	activate = function(self, t)
+		game:playSoundNear(self, "talents/ice")
+		local ret = {}
+		self:addShaderAura("body_of_ice", "crystalineaura", {}, "particles_images/spikes.png")
+		ret.particle = self:addParticles(Particles.new("snowfall", 1))
+		self:talentTemporaryValue(ret, "resists", {[DamageType.PHYSICAL] = t.getResistance(self, t) * 0.6})
+		self:talentTemporaryValue(ret, "damage_affinity", {[DamageType.COLD] = t.getAffinity(self, t)})
+		self:talentTemporaryValue(ret, "ignore_direct_crits", t.critResist(self, t))
+		return ret
+	end,
+	deactivate = function(self, t, p)
+		self:removeParticles(p.particle)
+		self:removeShaderAura("body_of_ice")
+		return true
+	end,
+	info = function(self, t)
+		local resist = t.getResistance(self, t)
+		local crit = t.critResist(self, t)
+		return ([[Turn your body into pure ice, increasing your Cold damage affinity by %d%% and your physical resistance by %d%%.
+		All direct critical hits (physical, mental, spells) against you have a %d%% lower Critical multiplier (but always do at least normal damage).
+		The effects increase with your Spellpower.]]):
+		format(t.getAffinity(self, t), resist, resist * 0.6, crit)
+	end,
+}
diff --git a/game/modules/tome/data/talents/spells/golem.lua b/game/modules/tome/data/talents/spells/golem.lua
index 4321da13259e8a179b055def8a4f89bb5aab6ba8..67fe765293c575326c95b289e4120b18232fa308 100644
--- a/game/modules/tome/data/talents/spells/golem.lua
+++ b/game/modules/tome/data/talents/spells/golem.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/golemancy.lua b/game/modules/tome/data/talents/spells/golemancy.lua
index 5de0abe1c5273fbcd6dab3f0b01f062da95d74df..6a994e4387fbfd06d33de31fa04b53e9bb77f6d8 100644
--- a/game/modules/tome/data/talents/spells/golemancy.lua
+++ b/game/modules/tome/data/talents/spells/golemancy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -46,9 +46,9 @@ local function makeGolem(self)
 		canWearObjectCustom = function(self, o)
 			if o.type ~= "gem" then return end
 			if not self.summoner then return "Golem has no master" end
-			if not self.summoner:knowTalent(self.summoner.T_GEM_GOLEM) then return "Runic Golem talent required" end
+			if not self.summoner:knowTalent(self.summoner.T_GEM_GOLEM) then return "Master must know the Gem Golem talent" end
 			if not o.material_level then return "impossible to use this gem" end
-			if o.material_level > self.summoner:getTalentLevelRaw(self.summoner.T_GEM_GOLEM) then return "Runic Golem talent too low for this gem" end
+			if o.material_level > self.summoner:getTalentLevelRaw(self.summoner.T_GEM_GOLEM) then return "Master's Gem Golem talent too low for this gem" end
 		end,
 		equipdoll = "alchemist_golem",
 		infravision = 10,
diff --git a/game/modules/tome/data/talents/spells/grave.lua b/game/modules/tome/data/talents/spells/grave.lua
index 922ecb65af3e32eb74084761b69b20dbe20de24e..20f2f1c79b0a6426f41e4295886ab3ca04cbe99f 100644
--- a/game/modules/tome/data/talents/spells/grave.lua
+++ b/game/modules/tome/data/talents/spells/grave.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/ice.lua b/game/modules/tome/data/talents/spells/ice.lua
index 7b75709defd32f84a40950585bae5ee3c0391392..cdbd3e699f2cd16ad05a27936a3f721dcf10cd4e 100644
--- a/game/modules/tome/data/talents/spells/ice.lua
+++ b/game/modules/tome/data/talents/spells/ice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/infusion.lua b/game/modules/tome/data/talents/spells/infusion.lua
index 6f05aee165ef5de3f63b8b8c0fa6295609273f7d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/game/modules/tome/data/talents/spells/infusion.lua
+++ b/game/modules/tome/data/talents/spells/infusion.lua
@@ -1,134 +0,0 @@
--- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 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
-
-local function cancelInfusions(self)
-	local chants = {self.T_ACID_INFUSION, self.T_LIGHTNING_INFUSION, self.T_FROST_INFUSION}
-	for i, t in ipairs(chants) do
-		if self:isTalentActive(t) then
-			self:forceUseTalent(t, {ignore_energy=true})
-		end
-	end
-end
-
-newTalent{
-	name = "Fire Infusion",
-	type = {"spell/infusion", 1},
-	mode = "passive",
-	require = spells_req1,
-	points = 5,
-	getIncrease = function(self, t) return self:combatTalentScale(t, 0.07, 0.35) end,
-	info = function(self, t)
-		local daminc = t.getIncrease(self, t)
-		return ([[When you throw your alchemist bombs, you infuse them with explosive fire, increasing damage by %d%%, and setting foes ablaze.]]):
-		format(100 * daminc)
-	end,
-}
-
-newTalent{
-	name = "Acid Infusion",
-	type = {"spell/infusion", 2},
-	mode = "sustained",
-	require = spells_req2,
-	sustain_mana = 30,
-	points = 5,
-	cooldown = 30,
-	tactical = { BUFF = 2 },
-	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) end,
-	getConvert = function(self, t) return self:combatTalentLimit(t, 125, 15, 75, true) end, -- limit to 125%
-	activate = function(self, t)
-		cancelInfusions(self)
-		game:playSoundNear(self, "talents/arcane")
-		self.fire_convert_to = {DamageType.ACID, t.getConvert(self, t)}
-		return {
-		}
-	end,
-	deactivate = function(self, t, p)
-		self.fire_convert_to = nil
-		return true
-	end,
-	info = function(self, t)
-		local daminc = t.getIncrease(self, t)
-		local conv = t.getConvert(self, t)
-		return ([[When you throw your alchemist bombs, you infuse them with explosive acid that can blind, increasing damage by %d%%.
-		In addition all fire damage you do, from any source, is converted to %d%% acid damage (without any special effects).]]):
-		format(100 * daminc, conv)
-	end,
-}
-
-newTalent{
-	name = "Lightning Infusion",
-	type = {"spell/infusion", 3},
-	mode = "sustained",
-	require = spells_req3,
-	sustain_mana = 30,
-	points = 5,
-	cooldown = 30,
-	tactical = { BUFF = 2 },
-	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) end,
-	getConvert = function(self, t) return self:combatTalentLimit(t, 125, 15, 75, true) end, -- limit to 125%
-	activate = function(self, t)
-		cancelInfusions(self)
-		game:playSoundNear(self, "talents/arcane")
-		self.fire_convert_to = {DamageType.LIGHTNING, t.getConvert(self, t)}
-		return {
-		}
-	end,
-	deactivate = function(self, t, p)
-		self.fire_convert_to = nil
-		return true
-	end,
-	info = function(self, t)
-		local daminc = t.getIncrease(self, t)
-		local conv = t.getConvert(self, t)
-		return ([[When you throw your alchemist bombs, you infuse them with lightning that can daze, increasing damage by %d%%.
-		In addition all fire damage you do, from any source, is converted to %d%% lightning damage (without any special effects).]]):
-		format(100 * daminc, conv)
-	end,
-}
-
-newTalent{
-	name = "Frost Infusion",
-	type = {"spell/infusion", 4},
-	mode = "sustained",
-	require = spells_req4,
-	sustain_mana = 30,
-	points = 5,
-	cooldown = 30,
-	tactical = { BUFF = 2 },
-	getIncrease = function(self, t) return self:combatTalentScale(t, 0.05, 0.25) end,
-	getConvert = function(self, t) return self:combatTalentLimit(t, 125, 15, 75, true) end, -- limit to 125%
-	activate = function(self, t)
-		cancelInfusions(self)
-		game:playSoundNear(self, "talents/arcane")
-		self.fire_convert_to = {DamageType.COLD, t.getConvert(self, t)}
-		return {
-		}
-	end,
-	deactivate = function(self, t, p)
-		self.fire_convert_to = nil
-		return true
-	end,
-	info = function(self, t)
-		local daminc = t.getIncrease(self, t)
-		local conv = t.getConvert(self, t)
-		return ([[When you throw your alchemist bombs, you infuse them with frost that can freeze, increasing damage by %d%%.
-		In addition all fire damage you do, from any source, is converted to %d%% cold damage (without any special effects).]]):
-		format(100 * daminc, conv)
-	end,
-}
diff --git a/game/modules/tome/data/talents/spells/meta.lua b/game/modules/tome/data/talents/spells/meta.lua
index 5c3acab336757cfcd22251360526fbd8c05785d7..47f147f7d2e4d105190d8ad315f442d8358cff3d 100644
--- a/game/modules/tome/data/talents/spells/meta.lua
+++ b/game/modules/tome/data/talents/spells/meta.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/necrosis.lua b/game/modules/tome/data/talents/spells/necrosis.lua
index 55b05f8c0cf4a30ee3adcc21fce744268bbf522f..5a7a16760da9328125cf1000ff441a7d5e26e7d8 100644
--- a/game/modules/tome/data/talents/spells/necrosis.lua
+++ b/game/modules/tome/data/talents/spells/necrosis.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/necrotic-minions.lua b/game/modules/tome/data/talents/spells/necrotic-minions.lua
index eb8e2a6acfd0220efd9d63ad4e09b76103c523b0..0132e40b224d7b6ea7b3d920603d4951c2d1e1a5 100644
--- a/game/modules/tome/data/talents/spells/necrotic-minions.lua
+++ b/game/modules/tome/data/talents/spells/necrotic-minions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/nightfall.lua b/game/modules/tome/data/talents/spells/nightfall.lua
index 5f2f33117b224a1cf3151e69f3c0ced8c978b88a..4e2107fbc32009a2debede8795cbb68acf20f543 100644
--- a/game/modules/tome/data/talents/spells/nightfall.lua
+++ b/game/modules/tome/data/talents/spells/nightfall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/phantasm.lua b/game/modules/tome/data/talents/spells/phantasm.lua
index 082a66908f0759cf46af37ba1ad8247bd69099ae..70eabb04cfdd84d4cb1dec46cd8b760d0f92bb6f 100644
--- a/game/modules/tome/data/talents/spells/phantasm.lua
+++ b/game/modules/tome/data/talents/spells/phantasm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/shades.lua b/game/modules/tome/data/talents/spells/shades.lua
index cc0843c528ddc0e90596d79e2afcc9146c0006e5..cd3017492ecb47bdaa847a0279f476227d9d7e35 100644
--- a/game/modules/tome/data/talents/spells/shades.lua
+++ b/game/modules/tome/data/talents/spells/shades.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -197,7 +197,7 @@ newTalent{
 			ai_target = {actor=nil},
 			ai = "summoned", ai_real = "tactical",
 			name = "Forgery of Haze ("..self.name..")",
-			desc = [[A dark shadowy shape whose form resembles you.]],
+			desc = [[A dark shadowy shape whose form resembles yours.]],
 		})
 		m:removeAllMOs()
 		m.make_escort = nil
diff --git a/game/modules/tome/data/talents/spells/spells.lua b/game/modules/tome/data/talents/spells/spells.lua
index ee62cb3d83200096e063cd78c153332aa7101473..dfacde99af45d9d111c9b8d0474254259d237ecb 100644
--- a/game/modules/tome/data/talents/spells/spells.lua
+++ b/game/modules/tome/data/talents/spells/spells.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -46,7 +46,11 @@ newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=tru
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/golemancy-base", name = "golemancy", hide = true, description = "Learn to craft and upgrade your golem." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/golemancy", name = "golemancy", description = "Learn to craft and upgrade your golem." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/advanced-golemancy", name = "advanced-golemancy", min_lev = 10, description = "Advanced golem operations." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/war-alchemy", name = "fire alchemy", description = "Alchemical spells designed to wage war." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/fire-alchemy", name = "fire alchemy", description = "Alchemical control over fire." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/acid-alchemy", name = "acid alchemy", description = "Alchemical control over acid." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/frost-alchemy", name = "frost alchemy", description = "Alchemical control over frost." }
+newTalentType{ allow_random=true, no_silence=true, is_spell=true, mana_regen=true, type="spell/energy-alchemy", name = "energy alchemy", min_lev = 10, description = "Alchemical control over lightning energies." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="spell/stone-alchemy-base", name = "stone alchemy", hide = true, description = "Manipulate gems, and imbue their powers into other objects." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="spell/stone-alchemy", name = "stone alchemy", generic = true, description = "Alchemical control over stone and gems." }
 newTalentType{ allow_random=true, no_silence=true, is_spell=true, type="spell/staff-combat", name = "staff combat", generic = true, description = "Harness the power of magical staves." }
@@ -235,6 +239,15 @@ function necroEssenceDead(self, checkonly)
 end
 -------------------------------------------
 
+function cancelAlchemyInfusions(self)
+	local chants = {self.T_FIRE_INFUSION, self.T_FROST_INFUSION, self.T_ACID_INFUSION, self.T_LIGHTNING_INFUSION}
+	for i, t in ipairs(chants) do
+		if self:isTalentActive(t) then
+			self:forceUseTalent(t, {ignore_energy=true})
+		end
+	end
+end
+
 
 load("/data/talents/spells/arcane.lua")
 load("/data/talents/spells/aether.lua")
@@ -255,11 +268,14 @@ load("/data/talents/spells/phantasm.lua")
 load("/data/talents/spells/enhancement.lua")
 
 load("/data/talents/spells/explosives.lua")
-load("/data/talents/spells/infusion.lua")
 load("/data/talents/spells/golemancy.lua")
 load("/data/talents/spells/advanced-golemancy.lua")
 load("/data/talents/spells/staff-combat.lua")
+load("/data/talents/spells/war-alchemy.lua")
 load("/data/talents/spells/fire-alchemy.lua")
+load("/data/talents/spells/frost-alchemy.lua")
+load("/data/talents/spells/acid-alchemy.lua")
+load("/data/talents/spells/energy-alchemy.lua")
 load("/data/talents/spells/stone-alchemy.lua")
 load("/data/talents/spells/golem.lua")
 
diff --git a/game/modules/tome/data/talents/spells/staff-combat.lua b/game/modules/tome/data/talents/spells/staff-combat.lua
index 1f149980d771d1ca9be887b5a837fef7dd52d57d..99eee9cb1510802c927504b5c1768f12a04b1d3f 100644
--- a/game/modules/tome/data/talents/spells/staff-combat.lua
+++ b/game/modules/tome/data/talents/spells/staff-combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -65,7 +65,7 @@ newTalent{
 		if not x or not y then return nil end
 
 		-- Compute damage
-		local dam = self:combatDamage(combat)
+		local dam = self:combatDamage(combat, {mag=0.2})
 		local damrange = self:combatDamageRange(combat)
 		dam = rng.range(dam, dam * damrange)
 		dam = self:spellCrit(dam)
@@ -80,7 +80,8 @@ newTalent{
 		local damagemod = t.getDamageMod(self, t)
 		return ([[Channel raw mana through your staff, projecting a bolt of your staff's damage type, doing %d%% staff damage.
 		The bolt will only hurt hostile targets, and pass safely through friendly ones.
-		This attack always has a 100%% chance to hit, and ignores the target's Armour.]]):
+		This attack always has a 100%% chance to hit, and ignores the target's Armour.
+		When projecting a bolt with your staff its damage modifier is increased by 20%%.]]):
 		format(damagemod * 100)
 	end,
 }
@@ -159,9 +160,9 @@ newTalent{
 		local x, y, target = self:getTarget(tg)
 		if not x or not y or not target then return nil end
 		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
-		if self:getTalentLevel(t) >= 5 then self.combat_atk = self.combat_atk + 1000 end
+		if self:getTalentLevel(t) >= 5 then self.turn_procs.auto_melee_hit = true end
 		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, t.getDamage(self, t))
-		if self:getTalentLevel(t) >= 5 then self.combat_atk = self.combat_atk - 1000 end
+		if self:getTalentLevel(t) >= 5 then self.turn_procs.auto_melee_hit = nil end
 		
 		-- Try to stun !
 		if hit then
diff --git a/game/modules/tome/data/talents/spells/stone-alchemy.lua b/game/modules/tome/data/talents/spells/stone-alchemy.lua
index 6a77581976a28c9b5c8fac926a0424d11e4c2219..1cb6dece418309445efbfa107b7311a4b76298dc 100644
--- a/game/modules/tome/data/talents/spells/stone-alchemy.lua
+++ b/game/modules/tome/data/talents/spells/stone-alchemy.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/stone.lua b/game/modules/tome/data/talents/spells/stone.lua
index 0bca1840552e39e8428384f43e53ebf1bd90f6ff..4ce71cfb221101febc611f1eaa8510ca2a01a4d7 100644
--- a/game/modules/tome/data/talents/spells/stone.lua
+++ b/game/modules/tome/data/talents/spells/stone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/storm.lua b/game/modules/tome/data/talents/spells/storm.lua
index 99c802c9f4a937a5af4881bcc9769041226fda65..ce6020b1403b1bbbdee115bdb1217c51a790b866 100644
--- a/game/modules/tome/data/talents/spells/storm.lua
+++ b/game/modules/tome/data/talents/spells/storm.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/temporal.lua b/game/modules/tome/data/talents/spells/temporal.lua
index 52e484305e08d0bc3a111076b8ee1bbb972b3243..cfee5f3a6b266d6602721947358396fb73be3ad4 100644
--- a/game/modules/tome/data/talents/spells/temporal.lua
+++ b/game/modules/tome/data/talents/spells/temporal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/spells/war-alchemy.lua b/game/modules/tome/data/talents/spells/war-alchemy.lua
new file mode 100644
index 0000000000000000000000000000000000000000..70d775490ff2661012f9dc444eb0e845a2a00023
--- /dev/null
+++ b/game/modules/tome/data/talents/spells/war-alchemy.lua
@@ -0,0 +1,48 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011, 2012, 2013 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
+
+newTalent{
+	name = "Heat",
+	type = {"spell/war-alchemy", 1},
+	require = spells_req1,
+	points = 5,
+	mana = 10,
+	cooldown = 5,
+	random_ego = "attack",
+	refectable = true,
+	proj_speed = 20,
+	range = 10,
+	direct_hit = true,
+	tactical = { ATTACK = { FIRE = 2 } },
+	requires_target = true,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 620) end,
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t), talent=t}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, DamageType.FIREBURN, {dur=8, initial=0, dam=t.getDamage(self, t)}, {type="flame"})
+		game:playSoundNear(self, "talents/fire")
+		return true
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t)
+		return ([[Turn part of your target into fire, burning the rest for %0.2f fire damage over 8 turns.
+		The damage will increase with your Spellpower.]]):format(damDesc(self, DamageType.FIRE, damage))
+	end,
+}
diff --git a/game/modules/tome/data/talents/spells/water.lua b/game/modules/tome/data/talents/spells/water.lua
index 1178c4c58eabd8f1e961183e30f2e5e0152437d0..1b3c08dedf96c3cb48432b3e1869fb6ebd8e4c0d 100644
--- a/game/modules/tome/data/talents/spells/water.lua
+++ b/game/modules/tome/data/talents/spells/water.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -156,6 +156,7 @@ newTalent{
 	requires_target = true,
 	getDuration = function(self, t) return 4 + math.ceil(self:getTalentLevel(t)) end,
 	getPower = function(self, t) return util.bound(50 + self:combatTalentSpellDamage(t, 50, 450), 0, 500) / 500 end,
+	on_pre_use = function(self, t, silent) if self:attr("is_shivgoroth") then if not silent then game.logPlayer(self, "You are already a Shivgoroth!") end return false end return true end,
 	action = function(self, t)
 		self:setEffect(self.EFF_SHIVGOROTH_FORM, t.getDuration(self, t), {power=t.getPower(self, t), lvl=self:getTalentLevelRaw(t)})
 		game:playSoundNear(self, "talents/tidalwave")
diff --git a/game/modules/tome/data/talents/spells/wildfire.lua b/game/modules/tome/data/talents/spells/wildfire.lua
index e3322bb8985c5a8a443b4676c793ba5e63b0b084..f966ec1ef7fd7b50ea2f2a3fdc6e20f9767feecc 100644
--- a/game/modules/tome/data/talents/spells/wildfire.lua
+++ b/game/modules/tome/data/talents/spells/wildfire.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/2h-assault.lua b/game/modules/tome/data/talents/techniques/2h-assault.lua
new file mode 100644
index 0000000000000000000000000000000000000000..ad3aa62edf02495e204b6f60cd5bf7e1baf61d64
--- /dev/null
+++ b/game/modules/tome/data/talents/techniques/2h-assault.lua
@@ -0,0 +1,188 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+
+newTalent{
+	name = "Stunning Blow", short_name = "STUNNING_BLOW_ASSAULT", image = "talents/stunning_blow.png",
+	type = {"technique/2hweapon-assault", 1},
+	require = techs_req1,
+	points = 5,
+	cooldown = 6,
+	stamina = 8,
+	tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } },
+	requires_target = true,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
+	action = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then return nil end
+
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, self:combatTalentWeaponDamage(t, 1, 1.5))
+
+		-- Try to stun !
+		if hit then
+			if target:canBe("stun") then
+				target:setEffect(target.EFF_STUNNED, t.getDuration(self, t), {apply_power=self:combatPhysicalpower()})
+			else
+				game.logSeen(target, "%s resists the stunning blow!", target.name:capitalize())
+			end
+		end
+
+		return true
+	end,
+	info = function(self, t)
+		return ([[Hits the target with your weapon, doing %d%% damage. If the attack hits, the target is stunned for %d turns.
+		The stun chance increases with your Physical Power.]])
+		:format(100 * self:combatTalentWeaponDamage(t, 1, 1.5), t.getDuration(self, t))
+	end,
+}
+
+newTalent{
+	name = "Fearless Cleave",
+	type = {"technique/2hweapon-assault", 2},
+	require = techs_req2,
+	points = 5,
+	cooldown = 0,
+	stamina = 16,
+	no_energy = false,
+	tactical = { ATTACK = { weapon = 2 }, CLOSEIN = 0.5 },
+	requires_target = true,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	action = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then return nil end
+
+		local tg = {type="hit", range=self:getTalentRange(t), simple_dir_request=true}
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+		local dir = util.getDir(x, y, self.x, self.y) or 6
+		local moved = 0.75
+		if self:canMove(x, y) then
+			self:move(x, y)
+			moved = 1
+		end
+
+		local fx, fy = util.coordAddDir(self.x, self.y, dir)
+		local lx, ly = util.coordAddDir(self.x, self.y, util.dirSides(dir, self.x, self.y).left)
+		local rx, ry = util.coordAddDir(self.x, self.y, util.dirSides(dir, self.x, self.y).right)
+		local target, lt, rt = game.level.map(fx, fy, Map.ACTOR), game.level.map(lx, ly, Map.ACTOR), game.level.map(rx, ry, Map.ACTOR)
+
+		if target then self:attackTargetWith(target, weapon.combat, nil, self:combatTalentWeaponDamage(t, 0.9, 2) * moved) end
+		if lt then     self:attackTargetWith(lt, weapon.combat, nil, self:combatTalentWeaponDamage(t, 0.9, 2) * moved) end
+		if rt then     self:attackTargetWith(rt, weapon.combat, nil, self:combatTalentWeaponDamage(t, 0.9, 2) * moved) end
+
+		return true
+	end,
+	info = function(self, t)
+		return ([[Take a step toward your foes using the momentum to cleave all creatures in a 3 wide arc in front of you for %d%% weapon damage.
+		If you failed to move the damage is instead %d%%.]])
+		:format(100 * self:combatTalentWeaponDamage(t, 0.9, 2), 100 * self:combatTalentWeaponDamage(t, 0.9, 2) * 0.75)
+	end,
+}
+
+newTalent{
+	name = "Death Dance", short_name = "DEATH_DANCE_ASSAULT", image = "talents/death_dance.png",
+	type = {"technique/2hweapon-assault", 3},
+	require = techs_req3,
+	points = 5,
+	cooldown = 10,
+	stamina = 30,
+	tactical = { ATTACKAREA = { weapon = 3 } },
+	range = 0,
+	radius = 1,
+	requires_target = true,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)}
+	end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	getBleed = function(self, t) return self:combatTalentScale(t, 0.5, 1.5) end,
+	action = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then
+			game.logPlayer(self, "You cannot use Death Dance without a two-handed weapon!")
+			return nil
+		end
+
+		local scale = nil
+		if self:getTalentLevel(t) >= 3 then
+			scale = t.getBleed(self, t)
+		end
+
+		local tg = self:getTalentTarget(t)
+		self:project(tg, self.x, self.y, function(px, py, tg, self)
+			local target = game.level.map(px, py, Map.ACTOR)
+			if target and target ~= self then
+				local oldlife = target.life
+				self:attackTargetWith(target, weapon.combat, nil, self:combatTalentWeaponDamage(t, 1.4, 2.1))
+				local life_diff = oldlife - target.life
+				if life_diff > 0 and target:canBe('cut') and scale then
+					target:setEffect(target.EFF_CUT, 5, {power=life_diff * scale / 5, src=self, apply_power=self:combatPhysicalpower()})
+				end
+			end
+		end)
+
+		self:addParticles(Particles.new("meleestorm", 1, {}))
+
+		return true
+	end,
+	info = function(self, t)
+		return ([[Spin around, extending your weapon and damaging all targets around you for %d%% weapon damage.
+		At level 3 all damage done will also make the targets bleed for an additional %d%% damage over 5 turns]]):format(100 * self:combatTalentWeaponDamage(t, 1.4, 2.1), t.getBleed(self, t) * 100)
+	end,
+}
+
+newTalent{
+	name = "Execution",
+	type = {"technique/2hweapon-assault", 4},
+	require = techs_req4,
+	points = 5,
+	cooldown = 8,
+	stamina = 25,
+	requires_target = true,
+	tactical = { ATTACK = { weapon = 1 } },
+	getPower = function(self, t) return self:combatTalentScale(t, 1.6, 4.3) end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	action = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then return nil end
+
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+
+		local perc = 1 - (target.life / target.max_life)
+		local power = t.getPower()
+
+		self.turn_procs.auto_phys_crit = true
+		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, power * perc * 100)
+		self.turn_procs.auto_phys_crit = nil
+		return true
+	end,
+	info = function(self, t)
+		return ([[Tries to perform a killing blow. For each missing %% of life of your target you deal %0.2f%% more weapon damage (I.E: at 30%% remaining life you would deal %0.2f%% weapon damage).
+		The blow is an automatic critical hit.]]):
+		format(t.getPower(self, t), t.getPower(self, t) * 70)
+	end,
+}
diff --git a/game/modules/tome/data/talents/techniques/2hweapon.lua b/game/modules/tome/data/talents/techniques/2hweapon.lua
index 1eb37151a0323a06a3efbd26b42f0b4d67c92362..ffd254f91361b71a5835e6b0910b8fc6c45516c6 100644
--- a/game/modules/tome/data/talents/techniques/2hweapon.lua
+++ b/game/modules/tome/data/talents/techniques/2hweapon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -175,15 +175,14 @@ newTalent{
 		if self:getTalentLevel(t) >= 4 then
 			self.combat_dam = self.combat_dam + inc
 		end
-		self.combat_physcrit = self.combat_physcrit + 100
-
+		self.turn_procs.auto_phys_crit = true
 		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, self:combatTalentWeaponDamage(t, 0.8, 1.3))
 
 		if self:getTalentLevel(t) >= 4 then
 			self.combat_dam = self.combat_dam - inc
 			self:incStamina(-self.stamina / 2)
 		end
-		self.combat_physcrit = self.combat_physcrit - 100
+		self.turn_procs.auto_phys_crit = nil
 
 		-- Try to insta-kill
 		if hit then
@@ -261,6 +260,7 @@ newTalent{
 	requires_target = true,
 	tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } },
 	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	getShatter = function(self, t) return self:combatTalentLimit(t, 100, 10, 85) end,
 	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 5, 9)) end,
 	getArmorReduc = function(self, t) return self:combatTalentScale(t, 5, 25, 0.75) end,
 	action = function(self, t)
@@ -279,14 +279,37 @@ newTalent{
 		-- Try to Sunder !
 		if hit then
 			target:setEffect(target.EFF_SUNDER_ARMOUR, t.getDuration(self, t), {power=t.getArmorReduc(self,t), apply_power=self:combatPhysicalpower()})
+
+			if rng.percent(t.getShatter(self, t)) then
+				local effs = {}
+
+				-- Go through all shield effects
+				for eff_id, p in pairs(target.tmp) do
+					local e = target.tempeffect_def[eff_id]
+					if e.status == "beneficial" and e.subtype and e.subtype.shield then
+						effs[#effs+1] = {"effect", eff_id}
+					end
+				end
+
+				for i = 1, 1 do
+					if #effs == 0 then break end
+					local eff = rng.tableRemove(effs)
+
+					if eff[1] == "effect" then
+						game.logSeen(self, "#CRIMSON#%s shatters %s shield!", self.name:capitalize(), target.name)
+						target:removeEffect(eff[2])
+					end
+				end
+			end
 		end
 
 		return true
 	end,
 	info = function(self, t)
-		return ([[Hits the target with your weapon, doing %d%% damage. If the attack hits, the target's Armour is reduced by %d for %d turns.
+		return ([[Hits the target with your weapon, doing %d%% damage. If the attack hits, the target's armour and saves are reduced by %d for %d turns.
+		Also if the target is protected by a temporary damage shield there is %d%% chance to shatter it.
 		Armor reduction chance increases with your Physical Power.]])
-		:format( 100 * self:combatTalentWeaponDamage(t, 1, 1.5),t.getArmorReduc(self, t), t.getDuration(self, t))
+		:format(100 * self:combatTalentWeaponDamage(t, 1, 1.5),t.getArmorReduc(self, t), t.getDuration(self, t), t.getShatter(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/techniques/archery.lua b/game/modules/tome/data/talents/techniques/archery.lua
index 644cec9403d9e63a6bb37724acc2a7f4b1bceb77..b8bed8a249192ea93cee7fcc85211893ff7da4d2 100644
--- a/game/modules/tome/data/talents/techniques/archery.lua
+++ b/game/modules/tome/data/talents/techniques/archery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,6 +25,7 @@ newTalent{
 	hide = true,
 	innate = true,
 	points = 1,
+	cooldown = 0,
 	range = archery_range,
 	message = "@Source@ shoots!",
 	requires_target = true,
diff --git a/game/modules/tome/data/talents/techniques/battle-tactics.lua b/game/modules/tome/data/talents/techniques/battle-tactics.lua
index ac7d417aa4b29f45e32741ff54b81b42a3a6eed6..2a30bcc56dea31921054295be6a517c0d7dfe970 100644
--- a/game/modules/tome/data/talents/techniques/battle-tactics.lua
+++ b/game/modules/tome/data/talents/techniques/battle-tactics.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/bloodthirst.lua b/game/modules/tome/data/talents/techniques/bloodthirst.lua
index e6f57eb39be6f05243e40fc20f27d2ce7a5878bf..48903d9fea21e7167d0be05fd8743c64941fe757 100644
--- a/game/modules/tome/data/talents/techniques/bloodthirst.lua
+++ b/game/modules/tome/data/talents/techniques/bloodthirst.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -17,37 +17,12 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-
 newTalent{
-	name = "Bloodbath",
+	name = "Mortal Terror",
 	type = {"technique/bloodthirst", 1},
 	require = techs_req_high1,
 	points = 5,
 	mode = "passive",
-	getHealth = function(self,t) return self:combatTalentLimit(t, 50, 2, 10)  end,  -- Limit max health increase to <+50%
-	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
-	getRegen = function (self, t) return self:combatTalentScale(t, 1.7, 5) end,
-	getMax = function(self, t) return 5*self:combatTalentScale(t, 1.7, 5) end,
-	-- called by _M:attackTargetWith in mod.class.interface.Combat.lua
-	do_bloodbath = function(self, t)
-		self:setEffect(self.EFF_BLOODBATH, t.getDuration(self, t), {regen=t.getRegen(self, t), max=t.getMax(self, t), hp=t.getHealth(self,t)})
-	end,
-	info = function(self, t)
-		local regen = t.getRegen(self, t)
-		local max_regen = t.getMax(self, t)
-		local max_health = t.getHealth(self,t)
-		return ([[Delight in spilling the blood of your foes.  After scoring a critical hit, your maximum hit points will be increased by %d%%, your life regeneration by %0.2f per turn, and your stamina regeneration by %0.2f per turn for %d turns.
-		The life and stamina regeneration will stack up to five times, for a maximum of %0.2f and %0.2f each turn, respectively.]]):
-		format(t.getHealth(self, t), regen, regen/5, t.getDuration(self, t),max_regen, max_regen/5)
-	end,
-}
-
-newTalent{
-	name = "Mortal Terror",
-	type = {"technique/bloodthirst", 2},
-	require = techs_req_high2,
-	points = 5,
-	mode = "passive",
 	threshold = function(self,t) return self:combatTalentLimit(t, 10, 45, 25) end, -- Limit >10%
 	getCrit = function(self, t) return self:combatTalentScale(t, 2.8, 14) end,
 	do_terror = function(self, t, target, dam)
@@ -77,18 +52,42 @@ newTalent{
 }
 
 newTalent{
-	name = "Bloodrage",
-	type = {"technique/bloodthirst", 3},
-	require = techs_req_high3,
+	name = "Bloodbath",
+	type = {"technique/bloodthirst", 2},
+	require = techs_req_high2,
 	points = 5,
 	mode = "passive",
+	getHealth = function(self,t) return self:combatTalentLimit(t, 50, 2, 10)  end,  -- Limit max health increase to <+50%
 	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 6, 10)) end,
-	on_kill = function(self, t)
-		self:setEffect(self.EFF_BLOODRAGE, t.getDuration(self, t), {max=math.floor(self:getTalentLevel(t) * 6), inc=2})
+	getRegen = function (self, t) return self:combatTalentScale(t, 1.7, 5) end,
+	getMax = function(self, t) return 5*self:combatTalentScale(t, 1.7, 5) end,
+	-- called by _M:attackTargetWith in mod.class.interface.Combat.lua
+	do_bloodbath = function(self, t)
+		self:setEffect(self.EFF_BLOODBATH, t.getDuration(self, t), {regen=t.getRegen(self, t), max=t.getMax(self, t), hp=t.getHealth(self,t)})
+	end,
+	info = function(self, t)
+		local regen = t.getRegen(self, t)
+		local max_regen = t.getMax(self, t)
+		local max_health = t.getHealth(self,t)
+		return ([[Delight in spilling the blood of your foes.  After scoring a critical hit, your maximum hit points will be increased by %d%%, your life regeneration by %0.2f per turn, and your stamina regeneration by %0.2f per turn for %d turns.
+		The life and stamina regeneration will stack up to five times, for a maximum of %0.2f and %0.2f each turn, respectively.]]):
+		format(t.getHealth(self, t), regen, regen/5, t.getDuration(self, t),max_regen, max_regen/5)
 	end,
+}
+
+newTalent{
+	name = "Bloody Butcher",
+	type = {"technique/bloodthirst", 3},
+	require = techs_req_high3,
+	points = 5,
+	mode = "passive",
+	getDam = function(self, t) return self:combatScale(self:getStr(7, true) * self:getTalentLevel(t), 5, 0, 40, 35) end,
+	getResist = function(self,t) return self:combatTalentLimit(t, 50, 10, 40) end,
 	info = function(self, t)
-		return ([[Each time one of your foes bites the dust, you feel a surge of power, increasing your strength by 2 up to a maximum of %d for %d turns.]]):
-		format(math.floor(self:getTalentLevel(t) * 6), t.getDuration(self, t))
+		return ([[You delight in the inflicting of wounds, providing %d physical power.
+		In addition when you make a creature bleed its physical damage resistance is reduced by %d%% (but never below 0%%).
+		Physical power depends on your Strength stat.]]):
+		format(t.getDam(self, t), t.getResist(self, t))
 	end,
 }
 
@@ -108,7 +107,8 @@ newTalent{
 	end,
 	info = function(self, t)
 		return ([[You enter a battle frenzy for %d turns. During that time, you can not use items, healing has no effect, and your health cannot drop below 1.
-		At the end of the frenzy, you regain %d%% of your health per foe slain during the frenzy.]]):
+		At the end of the frenzy, you regain %d%% of your health per foe slain during the frenzy.
+		While Unstoppable is active, Berserker Rage critical bonus is disabled as you loose the thrill of the risk of death.]]):
 		format(t.getDuration(self, t), t.getHealPercent(self,t))
 	end,
 }
diff --git a/game/modules/tome/data/talents/techniques/bow.lua b/game/modules/tome/data/talents/techniques/bow.lua
index f8758349254f0d96c9558c961a51e76d64a93553..229f5a56bdbf0ffbe34675beea3698e52d378be2 100644
--- a/game/modules/tome/data/talents/techniques/bow.lua
+++ b/game/modules/tome/data/talents/techniques/bow.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/combat-techniques.lua b/game/modules/tome/data/talents/techniques/combat-techniques.lua
index 236a54850112acee8d70e7884ae19c3de7787e65..0e0bc5eb163a43d3d6151cbe5cf438befea64701 100644
--- a/game/modules/tome/data/talents/techniques/combat-techniques.lua
+++ b/game/modules/tome/data/talents/techniques/combat-techniques.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/combat-training.lua b/game/modules/tome/data/talents/techniques/combat-training.lua
index aa9711cc22bbd3475fe08f5f1eca41e7aea1866f..d45993ff3d6f3d1e0c42ea5729071bd98c72d348 100644
--- a/game/modules/tome/data/talents/techniques/combat-training.lua
+++ b/game/modules/tome/data/talents/techniques/combat-training.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/conditioning.lua b/game/modules/tome/data/talents/techniques/conditioning.lua
index bfe67f5ecd7e81af3103b1c006d543b0f57e54bd..571f7caad333623b5022aae9c61831c0b2be1b80 100644
--- a/game/modules/tome/data/talents/techniques/conditioning.lua
+++ b/game/modules/tome/data/talents/techniques/conditioning.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -42,9 +42,53 @@ newTalent{
 }
 
 newTalent{
-	name = "Daunting Presence",
+	name = "Unflinching Resolve",
 	type = {"technique/conditioning", 2},
 	require = techs_con_req2,
+	mode = "passive",
+	points = 5,
+	getChance = function(self, t) return self:combatStatLimit("con", 1, .28, .745)*self:combatTalentLimit(t,100, 28,74.8) end, -- Limit < 100%
+	do_unflinching_resolve = function(self, t)
+		local effs = {}
+		-- Go through all spell effects
+		for eff_id, p in pairs(self.tmp) do
+			local e = self.tempeffect_def[eff_id]
+			if e.status == "detrimental" then
+				if e.subtype.stun then 
+					effs[#effs+1] = {"effect", eff_id}
+				elseif e.subtype.blind and self:getTalentLevel(t) >=2 then
+					effs[#effs+1] = {"effect", eff_id}
+				elseif e.subtype.confusion and self:getTalentLevel(t) >=3 then
+					effs[#effs+1] = {"effect", eff_id}
+				elseif e.subtype.pin and self:getTalentLevel(t) >=4 then
+					effs[#effs+1] = {"effect", eff_id}
+				elseif e.subtype.slow and self:getTalentLevel(t) >=5 then
+					effs[#effs+1] = {"effect", eff_id}
+				end
+			end
+		end
+		
+		if #effs > 0 then
+			local eff = rng.tableRemove(effs)
+			if eff[1] == "effect" and rng.percent(t.getChance(self, t)) then
+				self:removeEffect(eff[2])
+				game.logSeen(self, "%s has recovered!", self.name:capitalize())
+			end
+		end
+	end,
+	info = function(self, t)
+		local chance = t.getChance(self, t)
+		return ([[You've learned to recover quickly from effects that would disable you. Each turn, you have a %d%% chance to recover from a single stun effect.
+		At talent level 2 you may also recover from blindness, at level 3 confusion, level 4 pins, and level 5 slows. 
+		Only one effect may be recovered from each turn, and the chance to recover from an effect scales with your Constitution.]]):
+		format(chance)
+	end,
+}
+
+newTalent{
+	name = "Daunting Presence",
+	type = {"technique/conditioning", 3},
+	require = techs_con_req3,
 	points = 5,
 	mode = "sustained",
 	sustain_stamina = 20,
@@ -89,50 +133,6 @@ newTalent{
 	end,
 }
 
-newTalent{
-	name = "Unflinching Resolve",
-	type = {"technique/conditioning", 3},
-	require = techs_con_req3,
-	mode = "passive",
-	points = 5,
-	getChance = function(self, t) return self:combatStatLimit("con", 1, .28, .745)*self:combatTalentLimit(t,100, 28,74.8) end, -- Limit < 100%
-	do_unflinching_resolve = function(self, t)
-		local effs = {}
-		-- Go through all spell effects
-		for eff_id, p in pairs(self.tmp) do
-			local e = self.tempeffect_def[eff_id]
-			if e.status == "detrimental" then
-				if e.subtype.stun then 
-					effs[#effs+1] = {"effect", eff_id}
-				elseif e.subtype.blind and self:getTalentLevel(t) >=2 then
-					effs[#effs+1] = {"effect", eff_id}
-				elseif e.subtype.confusion and self:getTalentLevel(t) >=3 then
-					effs[#effs+1] = {"effect", eff_id}
-				elseif e.subtype.pin and self:getTalentLevel(t) >=4 then
-					effs[#effs+1] = {"effect", eff_id}
-				elseif e.subtype.slow and self:getTalentLevel(t) >=5 then
-					effs[#effs+1] = {"effect", eff_id}
-				end
-			end
-		end
-		
-		if #effs > 0 then
-			local eff = rng.tableRemove(effs)
-			if eff[1] == "effect" and rng.percent(t.getChance(self, t)) then
-				self:removeEffect(eff[2])
-				game.logSeen(self, "%s has recovered!", self.name:capitalize())
-			end
-		end
-	end,
-	info = function(self, t)
-		local chance = t.getChance(self, t)
-		return ([[You've learned to recover quickly from effects that would disable you. Each turn, you have a %d%% chance to recover from a single stun effect.
-		At talent level 2 you may also recover from blindness, at level 3 confusion, level 4 pins, and level 5 slows. 
-		Only one effect may be recovered from each turn, and the chance to recover from an effect scales with your Constitution.]]):
-		format(chance)
-	end,
-}
-
 newTalent{
 	name = "Adrenaline Surge", -- no stamina cost; it's main purpose is to give the player an alternative means of using stamina based talents
 	type = {"technique/conditioning", 4},
diff --git a/game/modules/tome/data/talents/techniques/dualweapon.lua b/game/modules/tome/data/talents/techniques/dualweapon.lua
index fad1d29f4043affaba81619b4db896d55f8478e2..1855901237754ad9d70f4fe8ffeb91efca14af6f 100644
--- a/game/modules/tome/data/talents/techniques/dualweapon.lua
+++ b/game/modules/tome/data/talents/techniques/dualweapon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/excellence.lua b/game/modules/tome/data/talents/techniques/excellence.lua
index 971620b8a6ace948fd33fc70d2186320588665c6..efd45bb71ac10ada6289d6a6298bb9b970a2402c 100644
--- a/game/modules/tome/data/talents/techniques/excellence.lua
+++ b/game/modules/tome/data/talents/techniques/excellence.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/field-control.lua b/game/modules/tome/data/talents/techniques/field-control.lua
index 2bf0caad87f14d862305aff6f4f023224b28d144..15b594fe0c0002667155cea07d035a8543870b97 100644
--- a/game/modules/tome/data/talents/techniques/field-control.lua
+++ b/game/modules/tome/data/talents/techniques/field-control.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/finishing-moves.lua b/game/modules/tome/data/talents/techniques/finishing-moves.lua
index 27eca6f7c71113f18ef8971ea4d87f93f98bb2a6..6d4995058b1560a97c86a6426f62d1f3e9353cf6 100644
--- a/game/modules/tome/data/talents/techniques/finishing-moves.lua
+++ b/game/modules/tome/data/talents/techniques/finishing-moves.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newTalent{
 	requires_target = true,
 	--on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end,
 	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.8) + getStrikingStyle(self, dam) end,
-	getDuration = function(self, t, comb) return math.ceil(self:combatTalentScale(t, 1, 5) * (0.25 + comb/5)) end,
+	getDuration = function(self, t, comb) return 2 + math.ceil(self:combatTalentScale(t, 1, 5) * (0.25 + comb/5)) end,
 	action = function(self, t)
 		local tg = {type="hit", range=self:getTalentRange(t)}
 		local x, y, target = self:getTarget(tg)
@@ -81,9 +81,9 @@ newTalent{
 	tactical = { ATTACK = { weapon = 2 }, },
 	requires_target = true,
 	--on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.1, 0.8) + getStrikingStyle(self, dam) end,
-	getAreaDamage = function(self, t) return self:combatTalentStatDamage(t, "str", 10, 300) * (1 + getStrikingStyle(self, dam)) end,
-	radius = function(self, t) return math.floor(self:combatTalentScale(t, 1.25, 2.25)) end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.6, 1.5) + getStrikingStyle(self, dam) end,
+	getAreaDamage = function(self, t) return self:combatTalentStatDamage(t, "str", 20, 600) * (1 + getStrikingStyle(self, dam)) end,
+	radius = function(self, t) return (1 + self:getCombo(combo) ) end,
 	action = function(self, t)
 		local tg = {type="hit", range=self:getTalentRange(t)}
 		local x, y, target = self:getTarget(tg)
@@ -101,7 +101,8 @@ newTalent{
 
 		if hit then
 			local tg = {type="ball", range=1, radius=self:getTalentRadius(t), selffire=false, talent=t}
-			local damage = t.getAreaDamage(self, t) * (0.25 + (self:getCombo(combo) /5))
+			local damage = self:physicalCrit(t.getAreaDamage(self, t) * (0.25 + (self:getCombo(combo) /5)), nil, target, self:combatAttack(), target:combatDefense())
+			--local damage = self:physicalCrit(t.getAreaDamage(self, t) * (0.25 + (self:getCombo(combo) /5)))
 			self:project(tg, x, y, DamageType.PHYSICAL, damage)
 			game.level.map:particleEmitter(x, y, tg.radius, "ball_earth", {radius=tg.radius})
 			game:playSoundNear(self, "talents/breath")
@@ -117,67 +118,73 @@ newTalent{
 		local areamax = t.getAreaDamage(self, t) * 1.25
 		local radius = self:getTalentRadius(t)
 		return ([[A powerful concussive punch that deals %d%% weapon damage to your target.  If the punch hits, all targets in a radius of %d will take %0.2f to %0.2f damage, depending on the amount of combo points you've accumulated.
-		The area damage will scale with your Strength, and the radius will increase by 1 for every four talent levels.
+		The area damage will scale with your Strength, and the radius will increase by 1 per combo point.
 		Using this talent removes your combo points.]])
 		:format(damage, radius, damDesc(self, DamageType.PHYSICAL, area), damDesc(self, DamageType.PHYSICAL, areamax))
 	end,
 }
 
 newTalent{
-	name = "Body Shot",
+	name = "Butterfly Kick",
 	type = {"technique/finishing-moves", 3},
 	require = techs_dex_req3,
 	points = 5,
 	random_ego = "attack",
-	cooldown = 10,
+	cooldown = function(self, t)
+		return self:combatTalentScale(t, 30, 10)
+	end,
 	stamina = 10,
-	message = "@Source@ throws a body shot.",
-	tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } },
+	range = function(self, t)
+		return (2 + self:getCombo(combo) ) or 1
+	end,
+	radius = function(self, t)
+		return 1
+	end,
+	getDamage = function(self, t)
+		return self:combatTalentWeaponDamage(t, 1, 1.5) + getStrikingStyle(self, dam) 
+	end,
+	getBonusDamage = function(self, t) return (self:getCombo(combo)/10) or 0 end, 
 	requires_target = true,
-	--on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.8) + getStrikingStyle(self, dam) end,
-	getDuration = function(self, t, comb) return math.ceil(self:combatTalentScale(t, 1, 5) * (0.25 + comb/5)) end,
-	getDrain = function(self, t) return self:combatTalentScale(t, 2, 10, 0.75) * self:getCombo(combo) end,
+	no_npc_use = true, -- I mark this by default if I don't understand how the AI might use something, which is always
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)}
+	end,
 	action = function(self, t)
-		local tg = {type="hit", range=self:getTalentRange(t)}
+		if not (self:getCombo(combo) > 0) then return end -- abort if we have no CP, this is to make it base 2+requires CP because base 1 autotargets in melee range
+		local tg = self:getTalentTarget(t)
 		local x, y, target = self:getTarget(tg)
-		if not x or not y or not target then return nil end
-		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+		if not x or not y then return nil end
+		local _ _, x, y = self:canProject(tg, x, y)
 
-		-- breaks active grapples if the target is not grappled
-		if target:isGrappled(self) then
-			grappled = true
-		else
-			self:breakGrapples()
+		if game.level.map(x, y, Map.ACTOR) then
+			x, y = util.findFreeGrid(x, y, 1, true, {[Map.ACTOR]=true})
+			if not x then return end
 		end
 
-		local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)
-
-		if hit then
-			-- try to daze
-			if target:canBe("stun") then
-				target:setEffect(target.EFF_DAZED, t.getDuration(self, t, self:getCombo(combo)), {apply_power=self:combatPhysicalpower()})
-			else
-				game.logSeen(target, "%s resists the body shot!", target.name:capitalize())
-			end
-
-			target:incStamina(- t.getDrain(self, t))
+		if game.level.map:checkAllEntities(x, y, "block_move") then return end
 
+		local ox, oy = self.x, self.y
+		self:move(x, y, true)
+		if config.settings.tome.smooth_move > 0 then
+			self:resetMoveAnim()
+			self:setMoveAnim(ox, oy, 8, 5)
 		end
 
-		self:clearCombo()
+		self:project(tg, self.x, self.y, function(px, py, tg, self)
+			local target = game.level.map(px, py, Map.ACTOR)
+			if target and target ~= self then
+				local totalDamage = t.getDamage(self, t) * (1 + t.getBonusDamage(self, t) )
+				
 
+				local hit = self:attackTarget(target, nil, totalDamage, true)
+			end
+		end)
+		
+		self:clearCombo()
 		return true
 	end,
 	info = function(self, t)
-		local damage = t.getDamage(self, t) * 100
-		local drain = self:getTalentLevel(t) * 2
-		local daze = t.getDuration(self, t, 0)
-		local dazemax = t.getDuration(self, t, 5)
-		return ([[A punch to the body that deals %d%% damage, drains %d of the target's stamina per combo point, and dazes the target for %d to %d turns, depending on the amount of combo points you've accumulated.
-		The daze chance will increase with your Physical Power.
-		Using this talent removes your combo points.]])
-		:format(damage, drain, daze, dazemax)
+		return ([[You spin into a flying leap and deliver a powerful kick dealing %d%% weapon damage to all enemies in a radius of 1 as you land.  The range will increase by 1 per combo point and total damage will increase by 10%% per combo point.  You must have at least 1 CP to use this talent.]]):format(t.getDamage(self, t)*100)	
 	end,
 }
 
@@ -193,8 +200,8 @@ newTalent{
 	tactical = { ATTACK = { weapon = 2 } },
 	requires_target = true,
 	--on_pre_use = function(self, t, silent) if not self:hasEffect(self.EFF_COMBO) then if not silent then game.logPlayer(self, "You must have a combo going to use this ability.") end return false end return true end,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.4, 2.1) + getStrikingStyle(self, dam) end,
-	getBonusDamage = function(self, t) return self:getCombo(combo)/10 end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1, 2.8) + getStrikingStyle(self, dam) end, 
+	getBonusDamage = function(self, t) return self:getCombo(combo)/5 end, -- shift more of the damage to CP
 	getStamina = function(self, t, comb)
 		return self:combatLimit((self:getTalentLevel(t) + comb), 0.5, 0, 0, 0.2, 10) * self.max_stamina
 	end, -- Limit 50% stamina gain
@@ -211,7 +218,7 @@ newTalent{
 			self:breakGrapples()
 		end
 
-		local damage = t.getDamage(self, t) + (t.getBonusDamage(self, t) or 0)
+		local damage = t.getDamage(self, t) * (1 + (t.getBonusDamage(self, t) or 0))
 
 		local hit = self:attackTarget(target, nil, damage, true)
 
@@ -237,12 +244,12 @@ newTalent{
 	end,
 	info = function(self, t)
 		local damage = t.getDamage(self, t) * 100
+		local maxDamage = damage * 2
 		local stamina = t.getStamina(self, t, 0)/self.max_stamina*100
 		local staminamax = t.getStamina(self, t, 5)/self.max_stamina*100
-		return ([[A vicious finishing strike that deals %d%% damage + 10%% damage per combo point you have.  If the target ends up with low enough life (<20%%), it might be instantly killed.
+		return ([[A vicious finishing strike that deals %d%% damage increased by 20%% per combo point you have up to a max of %d%%.  If the target ends up with low enough life (<20%%), it might be instantly killed.
 		Killing a target with Haymaker will instantly restore %d%% to %d%% of your maximum stamina, depending on the amount of combo points you've accumulated.
 		Using this talent removes your combo points.]])
-		:format(damage, stamina, staminamax)
+		:format(damage, maxDamage, stamina, staminamax)
 	end,
 }
-
diff --git a/game/modules/tome/data/talents/techniques/grappling.lua b/game/modules/tome/data/talents/techniques/grappling.lua
index 242a9d12ad86fe71a817b0c63a6cbde22e3efcc8..b82f8719e6c1424bfad56ec932e7903ff6aafa12 100644
--- a/game/modules/tome/data/talents/techniques/grappling.lua
+++ b/game/modules/tome/data/talents/techniques/grappling.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -16,7 +16,7 @@
 --
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
-
+-- Obsolete but undeleted incase something uses it 
 newTalent{
 	name = "Grappling Stance",
 	type = {"technique/unarmed-other", 1},
@@ -62,20 +62,11 @@ newTalent{
 	stamina = 5,
 	tactical = { ATTACK = 2, DISABLE = 2 },
 	requires_target = true,
-	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 5, 8)) end,
-	getPower = function(self, t) return self:combatTalentPhysicalDamage(t, 5, 25) end,
-	getDrain = function(self, t) return 6 - math.max(1, self:getTalentLevelRaw(t) or 0) end,
-	-- Learn the appropriate stance
-	on_learn = function(self, t)
-		if not self:knowTalent(self.T_GRAPPLING_STANCE) then
-			self:learnTalent(self.T_GRAPPLING_STANCE, true, nil, {no_unlearn=true})
-		end
-	end,
-	on_unlearn = function(self, t)
-		if not self:knowTalent(t) then
-			self:unlearnTalent(self.T_GRAPPLING_STANCE)
-		end
-	end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
+	getPower = function(self, t) return self:combatTalentPhysicalDamage(t, 20, 60) end,
+	getDrain = function(self, t) return 6 end,
+	getSharePct = function(self, t) return math.min(0.35, self:combatTalentScale(t, 0.05, 0.25)) end,
+	getDamage = function(self, t) return 1 end,
 	action = function(self, t)
 
 		local tg = {type="hit", range=self:getTalentRange(t)}
@@ -85,11 +76,6 @@ newTalent{
 
 		local grappled = false
 
-		-- force stance change
-		if target and not self:isTalentActive(self.T_GRAPPLING_STANCE) then
-			self:forceUseTalent(self.T_GRAPPLING_STANCE, {ignore_energy=true, ignore_cd = true})
-		end
-
 		-- breaks active grapples if the target is not grappled
 		if target:isGrappled(self) then
 			grappled = true
@@ -103,196 +89,219 @@ newTalent{
 		end
 
 		-- start the grapple; this will automatically hit and reapply the grapple if we're already grappling the target
-		local hit = self:startGrapple(target)
-
-		local duration = t.getDuration(self, t)
-
-		-- do crushing hold or strangle if we're already grappling the target
-		if hit and self:knowTalent(self.T_CRUSHING_HOLD) then
-			local t = self:getTalentFromId(self.T_CRUSHING_HOLD)
-			if grappled and not target:attr("no_breath") and not target:attr("undead") and target:canBe("silence") then
-				target:setEffect(target.EFF_STRANGLE_HOLD, duration, {src=self, power=t.getDamage(self, t) * 1.5})
-			else
-				target:setEffect(target.EFF_CRUSHING_HOLD, duration, {src=self, power=t.getDamage(self, t)})
-			end
-		end
-
+		local hit self:attackTarget(target, nil, t.getDamage(self, t), true)
+		local hit2 = self:startGrapple(target)
+		
 		return true
 	end,
 	info = function(self, t)
 		local duration = t.getDuration(self, t)
 		local power = t.getPower(self, t)
 		local drain = t.getDrain(self, t)
-		return ([[Grapples a target up to one size category larger then yourself for %d turns. A grappled opponent will be unable to move, and its Accuracy and Defense will be reduced by %d.  Any movement from the target or you will break the grapple.  Maintaining a grapple drains %d stamina per turn.
-		You may only grapple a single target at a time, and using any targeted unarmed talent on a target that you're not grappling will break the grapple.
-		The grapple Accuracy and Defense reduction, as well as the grapple success chance, will scale with your Physical Power.
-		Performing this action will switch your stance to Grappling Stance.]])
-		:format(duration, power, drain)
+		local share = t.getSharePct(self, t)*100
+		local damage = t.getDamage(self, t)*100
+		return ([[Make a melee attack for %d%% damage and then attempt to grapple a target up to one size category larger then yourself for %d turns. A grappled opponent will be unable to move, take %d damage each turn, and %d%% of the damage you receive from any source will be redirected to them.  Any movement from the target or you will break the grapple.  Maintaining a grapple drains %d stamina per turn.
+		You may only grapple a single target at a time, and using any targeted unarmed talent on a target that you're not grappling will break the grapple.]])
+		:format(damage, duration, power, share, drain)
 	end,
 }
 
+-- I tried to keep this relatively consistent with the existing Grappling code structure, but it wound up pretty awkward as a result
 newTalent{
-	name = "Maim",
+	name = "Crushing Hold",
 	type = {"technique/grappling", 2},
 	require = techs_req2,
+	mode = "passive",
 	points = 5,
-	random_ego = "attack",
-	cooldown = 12,
-	stamina = 10,
-	tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = 2 },
+	tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = { silence = 2 } },
 	requires_target = true,
-	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
-	getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 10, 100) * getUnarmedTrainingBonus(self) end,
-	getMaim = function(self, t) return self:combatTalentPhysicalDamage(t, 5, 30) end,
-	-- Learn the appropriate stance
-	action = function(self, t)
-
-		local tg = {type="hit", range=self:getTalentRange(t)}
-		local x, y, target = self:getTarget(tg)
-		if not x or not y or not target then return nil end
-		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
-
-		local grappled = false
-
-		-- breaks active grapples if the target is not grappled
-		if target:isGrappled(self) then
-			grappled = true
+	getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 5, 50) * getUnarmedTrainingBonus(self) end, -- this function shouldn't be used any more but I left it in to be safe, Clinch now handles the damage 
+	getSlow = function(self, t)
+		if self:getTalentLevel(self.T_CRUSHING_HOLD) >= 5 then
+			return self:combatTalentPhysicalDamage(t, 0.05, 0.65)
 		else
-			self:breakGrapples()
+			return 0
 		end
-
-		-- end the talent without effect if the target is to big
-		if self:grappleSizeCheck(target) then
-			return true
-		end
-
-		-- start the grapple; this will automatically hit and reapply the grapple if we're already grappling the target
-		local hit = self:startGrapple (target)
-		-- deal damage and maim if appropriate
-		if hit then
-			if grappled then
-				self:project(target, x, y, DamageType.PHYSICAL, self:physicalCrit(t.getDamage(self, t), nil, target, self:combatAttack(), target:combatDefense()))
-				target:setEffect(target.EFF_MAIMED, t.getDuration(self, t), {power=t.getMaim(self, t)})
-			else
-				self:project(target, x, y, DamageType.PHYSICAL, self:physicalCrit(t.getDamage(self, t), nil, target, self:combatAttack(), target:combatDefense()))
-			end
+	end,
+	getDamageReduction = function(self, t)
+		return self:combatTalentPhysicalDamage(t, 1, 15)
+	end,
+	getSilence = function(self, t) -- this is a silence without an immunity check by design, if concerned about NPC use this is the talent to block
+		if self:getTalentLevel(self.T_CRUSHING_HOLD) >= 3 then
+			return 1
+		else
+			return 0
 		end
-
-		return true
 	end,
-	info = function(self, t)
-		local duration = t.getDuration(self, t)
-		local damage = t.getDamage(self, t)
-		local maim = t.getMaim(self, t)
-		return ([[Grapples the target and inflicts %0.2f physical damage.  If the target is already grappled, the target will be maimed as well, reducing damage by %d and global speed by 30%% for %d turns.
-		The grapple effects will be based off your grapple talent, if you have it, and the damage will scale with your Physical Power.]])
-		:format(damDesc(self, DamageType.PHYSICAL, (damage)), maim, duration)
+	getBonusEffects = function(self, t) -- used by startGrapple in Combat.lua, essentially merges these properties and the Clinch bonuses
+		return {silence = t.getSilence(self, t), slow = t.getSlow(self, t), reduce = t.getDamageReduction(self, t)}	
 	end,
-}
-
-newTalent{
-	name = "Crushing Hold",
-	type = {"technique/grappling", 3},
-	require = techs_req3,
-	mode = "passive",
-	points = 5,
-	tactical = { ATTACK = { PHYSICAL = 2 }, DISABLE = { silence = 2 } },
-	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentPhysicalDamage(t, 5, 50) * getUnarmedTrainingBonus(self) end,
 	info = function(self, t)
-		local damage = t.getDamage(self, t)
-		return ([[Your clinch talent now starts a crushing hold that deals %0.2f physical damage each turn.  If the target is already grappled, the hold will instead become a stranglehold, silencing the target and inflicting %0.2f physical damage each turn.
-		Undead, targets immune to silence, and creatures that do not breathe are immune to the strangle effect, and will only be affected by the crushing hold.
-		The damage will scale with your Physical Power.]])
-		:format(damDesc(self, DamageType.PHYSICAL, (damage)), damDesc(self, DamageType.PHYSICAL, (damage * 1.5)))
+		local reduction = t.getDamageReduction(self, t)
+		local slow = t.getSlow(self, t)
+		
+		return ([[Enhances your grapples with additional effects.  All additional effects will apply to every grapple with no additional save or resist check.
+		#RED#Talent Level 1:  Reduces base weapon damage by %d
+		Talent Level 3:  Silences
+		Talent Level 5:  Reduces global action speed by %d%%]])
+		:format(reduction, slow*100)
 	end,
 }
 
 newTalent{
 	name = "Take Down",
-	type = {"technique/grappling", 4},
-	require = techs_req4,
+	type = {"technique/grappling", 3},
+	require = techs_req3,
 	points = 5,
 	random_ego = "attack",
-	cooldown = 24,
-	stamina = 12,
-	tactical = { ATTACK = { PHYSICAL = 1, stun = 1}, DISABLE = { stun = 2 }, CLOSEIN = 2 },
+	cooldown = 10,
+	stamina = 15,
+	tactical = { ATTACK = { PHYSICAL = 1}, CLOSEIN = 2 },
 	requires_target = true,
 	range = function(self, t) return math.floor(self:combatTalentScale(t, 2.3, 3.7)) end,
 	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 3, 7)) end,
 	getTakeDown = function(self, t) return self:combatTalentPhysicalDamage(t, 10, 100) * getUnarmedTrainingBonus(self) end,
-	getSlam = function(self, t) return self:combatTalentPhysicalDamage(t, 15, 150) * getUnarmedTrainingBonus(self) end,
-	-- Learn the appropriate stance
+	getSlam = function(self, t) return self:combatTalentPhysicalDamage(t, 10, 400) * getUnarmedTrainingBonus(self) end,
+	getDamage = function(self, t)
+		return self:combatTalentWeaponDamage(t, .1, 1)
+	end,
 	action = function(self, t)
-		local tg = {type="hit", range=self:getTalentRange(t)}
-		local x, y, target = self:getTarget(tg)
-		if not x or not y or not target then return nil end
-		if core.fov.distance(self.x, self.y, x, y) > self:getTalentRange(t) then return nil end
 
-		local grappled = false
+		-- if the target is grappled then do an attack+AoE project
+		if self:hasEffect(self.EFF_GRAPPLING) then
+			local target = self:hasEffect(self.EFF_GRAPPLING)["trgt"]
+			local tg = {type="ball", range=1, radius=5, selffire=false}
 
-		-- do the rush
-		local block_actor = function(_, bx, by) return game.level.map:checkEntity(bx, by, Map.TERRAIN, "block_move", self) end
-		local l = self:lineFOV(x, y, block_actor)
-		local lx, ly, is_corner_blocked = l:step()
-		local tx, ty = self.x, self.y
-		while lx and ly do
-			if is_corner_blocked or game.level.map:checkAllEntities(lx, ly, "block_move", self) then break end
-			tx, ty = lx, ly
-			lx, ly, is_corner_blocked = l:step()
-		end
+			local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)
+			local slam = self:physicalCrit(t.getSlam(self, t), nil, target, self:combatAttack(), target:combatDefense())
+			self:project(tg, self.x, self.y, DamageType.PHYSICAL, slam, {type="bones"})
+			
+			self:breakGrapples()
+					
+			return true
+		else
+			local tg = {type="hit", range=self:getTalentRange(t)}
+			local x, y, target = self:getTarget(tg)
+			if not x or not y or not target then return nil end
+			if core.fov.distance(self.x, self.y, x, y) > self:getTalentRange(t) then return nil end
+		
 
-		local ox, oy = self.x, self.y
-		self:move(tx, ty, true)
-		if config.settings.tome.smooth_move > 0 then
-			self:resetMoveAnim()
-			self:setMoveAnim(ox, oy, 8, 5)
-		end
+			local grappled = false
 
-		-- breaks active grapples if the target is not grappled
-		if target:isGrappled(self) then
-			grappled = true
-		else
-			self:breakGrapples()
-		end
+			-- do the rush
+			local block_actor = function(_, bx, by) return game.level.map:checkEntity(bx, by, Map.TERRAIN, "block_move", self) end
+			local l = self:lineFOV(x, y, block_actor)
+			local lx, ly, is_corner_blocked = l:step()
+			local tx, ty = self.x, self.y
+			while lx and ly do
+				if is_corner_blocked or game.level.map:checkAllEntities(lx, ly, "block_move", self) then break end
+				tx, ty = lx, ly
+				lx, ly, is_corner_blocked = l:step()
+			end
 
-		if core.fov.distance(self.x, self.y, x, y) == 1 then
-			-- end the talent without effect if the target is to big
-			if self:grappleSizeCheck(target) then
-				return true
+			local ox, oy = self.x, self.y
+			self:move(tx, ty, true)
+			if config.settings.tome.smooth_move > 0 then
+				self:resetMoveAnim()
+				self:setMoveAnim(ox, oy, 8, 5)
 			end
 
-			-- start the grapple; this will automatically hit and reapply the grapple if we're already grappling the target
-			local hit = self:startGrapple (target)
-			-- takedown or slam as appropriate
-			if hit then
-				if grappled then
-					self:project(target, x, y, DamageType.PHYSICAL, self:physicalCrit(t.getSlam(self, t), nil, target, self:combatAttack(), target:combatDefense()))
-					if target:canBe("stun") then
-						target:setEffect(target.EFF_STUNNED, t.getDuration(self, t), {apply_power=self:combatPhysicalpower()})
-					else
-						game.logSeen(target, "%s resists the stun!", target.name:capitalize())
-					end
-				else
-					self:project(target, x, y, DamageType.PHYSICAL, self:physicalCrit(t.getTakeDown(self, t), nil, target, self:combatAttack(), target:combatDefense()))
-					if target:canBe("stun") then
-						target:setEffect(target.EFF_DAZED, t.getDuration(self, t), {apply_power=self:combatPhysicalpower()})
-					else
-						game.logSeen(target, "%s resists the daze!", target.name:capitalize())
-					end
+			-- breaks active grapples if the target is not grappled
+			if target:isGrappled(self) then
+				grappled = true
+			else
+				self:breakGrapples()
+			end
+
+			if core.fov.distance(self.x, self.y, x, y) == 1 then
+				-- end the talent without effect if the target is to big
+				if self:grappleSizeCheck(target) then
+					return true
 				end
+
+				-- start the grapple; this will automatically hit and reapply the grapple if we're already grappling the target
+				local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)	
+				local hit2 = self:startGrapple (target)
+				
 			end
-		end
 
-		return true
+			return true
+			end
 	end,
 	info = function(self, t)
-		local duration = t.getDuration(self, t)
-		local takedown = t.getTakeDown(self, t)
+		local takedown = t.getDamage(self, t)*100
 		local slam = t.getSlam(self, t)
-		return ([[Rushes forward and attempts to take the target to the ground, starting a grapple, inflicting %0.2f physical damage, and dazing the target for %d turns.  If you're already grappling the target you'll instead slam them into the ground for %0.2f physical damage and potentially stun them for %d turns.
+		return ([[Rushes forward and attempts to take the target to the ground, making a melee attack for %d%% damage then attempting to grapple them. If you're already grappling the target you'll instead slam them into the ground creating a radius 5 shockwave for %d physical damage and breaking your grapple.
 		The grapple effects and duration will be based off your grapple talent, if you have it, and the damage will scale with your Physical Power.]])
-		:format(damDesc(self, DamageType.PHYSICAL, (takedown)), duration, damDesc(self, DamageType.PHYSICAL, (slam)), duration)
+		:format(damDesc(self, DamageType.PHYSICAL, (takedown)), damDesc(self, DamageType.PHYSICAL, (slam)))
 	end,
 }
 
+newTalent{
+	name = "Hurricane Throw",
+	type = {"technique/grappling", 4},
+	require = techs_str_req4,
+	points = 5,
+	random_ego = "attack",
+	requires_target = true,
+	cooldown = function(self, t)
+		return 8
+	end,
+	stamina = 20,
+	range = function(self, t)
+		return 8
+	end,
+	radius = function(self, t)
+		return 1
+	end,
+	getDamage = function(self, t)
+		return self:combatTalentWeaponDamage(t, 1, 3.5) -- no interaction with Striking Stance so we make the base damage higher to compensate
+	end,
+	target = function(self, t)
+		return {type="ball", range=self:getTalentRange(t), selffire=false, radius=self:getTalentRadius(t)}
+	end,
+	action = function(self, t)
+	
+		if self:hasEffect(self.EFF_GRAPPLING) then
+			local grappled = self:hasEffect(self.EFF_GRAPPLING)["trgt"]
+			
+			local tg = self:getTalentTarget(t)
+			local x, y, target = self:getTarget(tg)
+			if not x or not y then return nil end
+			local _ _, x, y = self:canProject(tg, x, y)
+			
+			-- if the target square is an actor, find a free grid around it instead
+			if game.level.map(x, y, Map.ACTOR) then
+				x, y = util.findFreeGrid(x, y, 1, true, {[Map.ACTOR]=true})
+				if not x then return end
+			end
+
+			if game.level.map:checkAllEntities(x, y, "block_move") then return end
+
+			local ox, oy = grappled.x, grappled.y
+			grappled:move(x, y, true)
+			if config.settings.tome.smooth_move > 0 then
+				grappled:resetMoveAnim()
+				grappled:setMoveAnim(ox, oy, 8, 5)
+			end
+			
+			-- pick all targets around the landing point and do a melee attack
+			self:project(tg, grappled.x, grappled.y, function(px, py, tg, self)
+				local target = game.level.map(px, py, Map.ACTOR)
+				if target and target ~= self then
+				
+					local hit = self:attackTarget(target, nil, t.getDamage(self, t), true)
+					self:breakGrapples()
+				end
+			end)
+			return true
+
+		else
+			-- only usable if you have something Grappled
+			return false
+		end
+	end,
+	info = function(self, t)
+		return ([[In a mighty show of strength you whirl your grappled victim around and throw them into the air causing %d%% damage to them and any nearby enemies they collide with on landing.]]):format(t.getDamage(self, t)*100)	
+	end,
+}
diff --git a/game/modules/tome/data/talents/techniques/magical-combat.lua b/game/modules/tome/data/talents/techniques/magical-combat.lua
index 28800db0f6eeecfba9def5864c44696316edf593..8c98bd91d1ebd977506cc46067365566cfb7d13f 100644
--- a/game/modules/tome/data/talents/techniques/magical-combat.lua
+++ b/game/modules/tome/data/talents/techniques/magical-combat.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/mobility.lua b/game/modules/tome/data/talents/techniques/mobility.lua
index 41f20b7103e0f3e16563b8b2ccb87381d645adfa..617809a1fa669a728ed134c41d0310c29332145c 100644
--- a/game/modules/tome/data/talents/techniques/mobility.lua
+++ b/game/modules/tome/data/talents/techniques/mobility.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/pugilism.lua b/game/modules/tome/data/talents/techniques/pugilism.lua
index dc9dcdea0c0435e4e7a697496311f3b688be25b4..ff2448cab9ac69675219f921a14f7624ddbc8d66 100644
--- a/game/modules/tome/data/talents/techniques/pugilism.lua
+++ b/game/modules/tome/data/talents/techniques/pugilism.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -39,23 +39,26 @@ newTalent{
 	no_unlearn_last = true,
 	getAttack = function(self, t) return self:getDex(25, true) end,
 	getDamage = function(self, t) return self:combatStatScale("dex", 5, 50) end,
+	getFlatReduction = function(self, t) return self:combatStatLimit("str", 20, 1, 12) end, -- limit because high flat reduction can fuck melee players
 	activate = function(self, t)
 		cancelStances(self)
 		local ret = {
 			atk = self:addTemporaryValue("combat_atk", t.getAttack(self, t)),
+			flat = self:addTemporaryValue("flat_damage_armor", {all = t.getFlatReduction(self, t)})
 		}
 		return ret
 	end,
 	deactivate = function(self, t, p)
 		self:removeTemporaryValue("combat_atk", p.atk)
+		self:removeTemporaryValue("flat_damage_armor", p.flat)
 		return true
 	end,
 	info = function(self, t)
 		local attack = t.getAttack(self, t)
 		local damage = t.getDamage(self, t)
-		return ([[Increases your Accuracy by %d, and the damage multiplier of your striking talents (Pugilism and Finishing Moves) by %d%%.
-		The bonuses will scale with your Dexterity.]]):
-		format(attack, damage)
+		return ([[Increases your Accuracy by %d, the damage multiplier of your striking talents (Pugilism and Finishing Moves) by %d%%, and reduces all damage taken by %d.
+		The offensive bonuses scale with your Dexterity and the damage reduction with your Strength.]]):
+		format(attack, damage, t.getFlatReduction(self, t))
 	end,
 }
 
@@ -65,11 +68,12 @@ newTalent{
 	require = techs_dex_req1,
 	points = 5,
 	random_ego = "attack",
-	cooldown = function(self, t) return math.ceil(3 * getRelentless(self, cd)) end,
+	--cooldown = function(self, t) return math.ceil(3 * getRelentless(self, cd)) end,
+	cooldown = 3,
 	message = "@Source@ throws two quick punches.",
 	tactical = { ATTACK = { weapon = 2 } },
 	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.1, 0.8) + getStrikingStyle(self, dam) end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.5, 0.8) + getStrikingStyle(self, dam) end,
 	-- Learn the appropriate stance
 	on_learn = function(self, t)
 		if not self:knowTalent(self.T_STRIKING_STANCE) then
@@ -134,33 +138,18 @@ newTalent{
 	end,
 }
 
+
+
 newTalent{
-	name = "Relentless Strikes",
+	 name = "Spinning Backhand",
 	type = {"technique/pugilism", 2},
 	require = techs_dex_req2,
 	points = 5,
-	random_ego = "utility",
-	mode = "passive",
-	getStamina = function(self, t) return self:combatTalentScale(t, 1/4, 5/4, 0.75) end,
-	getCooldownReduction = function(self, t) return self:combatTalentLimit(t, 0.67, 0.09, 1/3) end,  -- Limit < 67%
-	info = function(self, t)
-		local stamina = t.getStamina(self, t)
-		local cooldown = t.getCooldownReduction(self, t)
-		return ([[Reduces the cooldown on all your Pugilism talents by %d%%.  Additionally, every time you earn a combo point, you will regain %0.2f stamina.
-		Note that stamina gains from combo points occur before any talent stamina costs.]])
-		:format(cooldown * 100, stamina)
-	end,
-}
-
-newTalent{
-	name = "Spinning Backhand",
-	type = {"technique/pugilism", 3},
-	require = techs_dex_req3,
-	points = 5,
 	random_ego = "attack",
-	cooldown = function(self, t) return math.ceil(12 * getRelentless(self, cd)) end,
+	--cooldown = function(self, t) return math.ceil(12 * getRelentless(self, cd)) end,
+	cooldown = 8,
 	stamina = 12,
-	range = function(self, t) return math.ceil(self:combatTalentScale(t, 2.2, 4.3)) end,
+	range = function(self, t) return math.ceil(2 + self:combatTalentScale(t, 2.2, 4.3)) end, -- being able to use this over rush without massive investment is much more fun
 	chargeBonus = function(self, t, dist) return self:combatScale(dist, 0.15, 1, 0.50, 5) end,
 	message = "@Source@ lashes out with a spinning backhand.",
 	tactical = { ATTACKAREA = { weapon = 2 }, CLOSEIN = 1 },
@@ -254,18 +243,74 @@ newTalent{
 	end,
 }
 
+-- If kick, normal attack+small kick effect?
+newTalent{
+	name = "Axe Kick", 
+	type = {"technique/pugilism", 3},
+	require = techs_dex_req3,
+	points = 5,
+	stamina = 20,
+	random_ego = "attack",
+	cooldown = function(self, t)
+		return 20
+	end,
+	getDuration = function(self, t)
+		--return self:combatTalentScale(t, 1, 3)
+		return self:combatTalentLimit(t, 5, 1, 4)
+	end,
+	message = "@Source@ raises their leg and snaps it downward in a devastating axe kick.",
+	tactical = { ATTACK = { weapon = 2 } },
+	requires_target = true,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 2) + getStrikingStyle(self, dam) end, -- low damage scaling, investment gets the extra CP
+	action = function(self, t)
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+
+		-- breaks active grapples if the target is not grappled
+		if target:isGrappled(self) then
+			grappled = true
+		else
+			self:breakGrapples()
+		end
+
+		local hit1 = false
+		
+		hit1 = self:attackTarget(target, nil, t.getDamage(self, t), true)
+
+		if hit1 and target:canBe("confusion") then
+			target:setEffect(target.EFF_DELIRIOUS_CONCUSSION, t.getDuration(self, t), {})
+		end
+		
+		-- build combo points
+		if hit1 then
+			self:buildCombo()
+			self:buildCombo()
+		end
+		return true
+
+	end,
+	info = function(self, t)
+		local damage = t.getDamage(self, t) * 100
+		return ([[Deliver a devastating axe kick dealing %d%% damage.  If the blow connects your target is brain damaged, causing all talents to fail for %d turns and earning 2 combo points.]])
+		:format(damage, t.getDuration(self, t))
+	end,
+}
+
 newTalent{
 	name = "Flurry of Fists",
 	type = {"technique/pugilism", 4},
 	require = techs_dex_req4,
 	points = 5,
 	random_ego = "attack",
-	cooldown = function(self, t) return math.ceil(24 * getRelentless(self, cd)) end,
+	--cooldown = function(self, t) return math.ceil(24 * getRelentless(self, cd)) end,
+	cooldown = 16,
 	stamina = 15,
 	message = "@Source@ lashes out with a flurry of fists.",
 	tactical = { ATTACK = { weapon = 2 } },
 	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.4, 1.1) + getStrikingStyle(self, dam) end,
+	getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.4, 0.8) + getStrikingStyle(self, dam) end,
 	action = function(self, t)
 		local tg = {type="hit", range=self:getTalentRange(t)}
 		local x, y, target = self:getTarget(tg)
@@ -317,4 +362,3 @@ newTalent{
 		:format(damage)
 	end,
 }
-
diff --git a/game/modules/tome/data/talents/techniques/sling.lua b/game/modules/tome/data/talents/techniques/sling.lua
index c617fee78dd89ea9fa6da0869d8812475fef0724..37bc5751a6f73dd4b0de7fca748ae267bbc6652b 100644
--- a/game/modules/tome/data/talents/techniques/sling.lua
+++ b/game/modules/tome/data/talents/techniques/sling.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/strength-of-the-berserker.lua b/game/modules/tome/data/talents/techniques/strength-of-the-berserker.lua
new file mode 100644
index 0000000000000000000000000000000000000000..b20bfe5c747128924db2a41a8ca0e7e8af2f023c
--- /dev/null
+++ b/game/modules/tome/data/talents/techniques/strength-of-the-berserker.lua
@@ -0,0 +1,225 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009 - 2014 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
+
+newTalent{
+	name = "Warshout", short_name = "WARSHOUT_BERSERKER", image = "talents/warshout.png",
+	type = {"technique/strength-of-the-berserker",1},
+	require = techs_req1,
+	points = 5,
+	message = function(self) if self.subtype == "rodent" then return "@Source@ uses Warsqueak." else return "@Source@ uses Warshout." end end ,
+	stamina = 30,
+	cooldown = 18,
+	tactical = { ATTACKAREA = { confusion = 1 }, DISABLE = { confusion = 3 } },
+	range = 0,
+	radius = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end,
+	requires_target = true,
+	target = function(self, t)
+		return {type="cone", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false}
+	end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	action = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then return nil end
+
+		local tg = self:getTalentTarget(t)
+		local x, y = self:getTarget(tg)
+		if not x or not y then return nil end
+		self:project(tg, x, y, DamageType.CONFUSION, {
+			dur=t.getDuration(self, t),
+			dam=50+self:getTalentLevelRaw(t)*10,
+			power_check=function() return self:combatPhysicalpower() end,
+			resist_check=self.combatPhysicalResist,
+		})
+		game.level.map:particleEmitter(self.x, self.y, tg.radius, "directional_shout", {life=8, size=3, tx=x-self.x, ty=y-self.y, distorion_factor=0.1, radius=self:getTalentRadius(t), nb_circles=8, rm=0.8, rM=1, gm=0.4, gM=0.6, bm=0.1, bM=0.2, am=1, aM=1})
+		if core.shader.allow("distort") then game.level.map:particleEmitter(self.x, self.y, tg.radius, "gravity_breath", {life=8, radius=tg.radius, tx=x-self.x, ty=y-self.y, allow=true}) end
+		return true
+	end,
+	info = function(self, t)
+		return ([[Shout your warcry in a frontal cone of radius %d. Any targets caught inside will be confused for %d turns.]]):
+		format(self:getTalentRadius(t), t.getDuration(self, t))
+	end,
+}
+
+newTalent{
+	name = "Berserker Rage", image = "talents/berserker.png",
+	type = {"technique/strength-of-the-berserker", 2},
+	require = techs_req2,
+	points = 5,
+	mode = "sustained",
+	cooldown = 10,
+	no_energy = true,
+	sustain_stamina = 20,
+	no_npc_use = true, -- sad but the AI wouldnt use this well at all
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	getDam = function(self, t) return self:combatScale(self:getStr(7, true) * self:getTalentLevel(t), 5, 0, 40, 35)end,
+	getAtk = function(self, t) return self:combatScale(self:getDex(7, true) * self:getTalentLevel(t), 5, 0, 40, 35) end ,
+	getImmune = function(self, t) return self:combatTalentLimit(t, 1, 0.17, 0.5) end,
+	hasFoes = function(self)
+		for i = 1, #self.fov.actors_dist do
+			act = self.fov.actors_dist[i]
+			if act and self:reactionToward(act) < 0 and self:canSee(act) then return true end
+		end
+		return false
+	end,
+	callbackOnActBase = function(self, t)
+		if t.hasFoes(self) then
+			local v = (self.max_life * 0.02)
+			if v >= self.life then v = 0 end
+			self.life = self.life - v
+		end
+	end,
+	callbackOnAct = function(self, t)
+		local p = self.sustain_talents[t.id]
+		if t.hasFoes(self) then
+			t.enable(self, t, p)
+		else
+			t.disable(self, t, p)
+		end
+	end,
+	enable = function(self, t, p)
+		if not self:hasEffect(self.EFF_UNSTOPPABLE) then self:setEffect(self.EFF_BERSERKER_RAGE, 1, {power=(1 - (self.life / self.max_life)) * 100 * 0.5})
+		else self:removeEffect(self.EFF_BERSERKER_RAGE, true, true)
+		end
+		if p.enabled then return end
+		p.enabled = true
+		p.stun = self:addTemporaryValue("stun_immune", t.getImmune(self, t))
+		p.pin = self:addTemporaryValue("pin_immune", t.getImmune(self, t))
+		p.dam = self:addTemporaryValue("combat_dam", t.getDam(self, t))
+		p.atk = self:addTemporaryValue("combat_atk", t.getAtk(self, t))
+		self:logCombat(self, "#Source#'s rage awakens!")
+	end,
+	disable = function(self, t, p)
+		if p.enabled then
+			self:logCombat(self, "#Source#'s rage subsides!")
+			self:removeEffect(self.EFF_BERSERKER_RAGE, true, true)
+			self:removeTemporaryValue("stun_immune", p.stun)
+			self:removeTemporaryValue("pin_immune", p.pin)
+			self:removeTemporaryValue("combat_atk", p.atk)
+			self:removeTemporaryValue("combat_dam", p.dam)
+		end
+		p.enabled = false
+	end,
+	activate = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then return nil end
+
+		local p = {}
+		if t.hasFoes(self) then t.enable(self, t, p) end
+		return p
+	end,
+	deactivate = function(self, t, p)
+		t.disable(self, t, p)
+		return true
+	end,
+	info = function(self, t)
+		return ([[You enter an aggressive battle rage, increasing Accuracy by %d and Physical Power by %d and making you nearly unstoppable, granting %d%% stun and pinning resistance.
+		Sustaining this rage takes its toll on your body, decreasing your life by 2%% each turn, but for every 1%% of life missing you gain 0.5%% critical hit chance.
+		Even when sustained, this talent is only active when foes are in sight.
+		The Accuracy bonus increases with your Dexterity, and the Physical Power bonus with your Strength.]]):
+		format( t.getAtk(self, t), t.getDam(self, t), t.getImmune(self, t)*100)
+	end,
+}
+
+newTalent{
+	name = "Shattering Blow", image = "talents/sunder_armour.png",
+	type = {"technique/strength-of-the-berserker", 3},
+	require = techs_req3,
+	points = 5,
+	cooldown = function(self, t) return self:combatTalentLimit(t, 5, 15, 8) end,
+	stamina = 12,
+	requires_target = true,
+	tactical = { ATTACK = { weapon = 2 }, DISABLE = { stun = 2 } },
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	getShatter = function(self, t) return self:combatTalentLimit(t, 100, 10, 85) end,
+	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 5, 9)) end,
+	getArmorReduc = function(self, t) return self:combatTalentScale(t, 5, 25, 0.75) end,
+	action = function(self, t)
+		local weapon = self:hasTwoHandedWeapon()
+		if not weapon then return nil end
+
+		local tg = {type="hit", range=self:getTalentRange(t)}
+		local x, y, target = self:getTarget(tg)
+		if not x or not y or not target then return nil end
+		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
+		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, self:combatTalentWeaponDamage(t, 1, 1.5))
+
+		-- Try to Sunder !
+		if hit then
+			target:setEffect(target.EFF_SUNDER_ARMOUR, t.getDuration(self, t), {power=t.getArmorReduc(self,t), apply_power=self:combatPhysicalpower()})
+
+			if rng.percent(t.getShatter(self, t)) then
+				local effs = {}
+
+				-- Go through all shield effects
+				for eff_id, p in pairs(target.tmp) do
+					local e = target.tempeffect_def[eff_id]
+					if e.status == "beneficial" and e.subtype and e.subtype.shield then
+						effs[#effs+1] = {"effect", eff_id}
+					end
+				end
+
+				for i = 1, 1 do
+					if #effs == 0 then break end
+					local eff = rng.tableRemove(effs)
+
+					if eff[1] == "effect" then
+						game.logSeen(self, "#CRIMSON#%s shatters %s shield!", self.name:capitalize(), target.name)
+						target:removeEffect(eff[2])
+					end
+				end
+			end
+		end
+
+		return true
+	end,
+	info = function(self, t)
+		return ([[Hits the target with your weapon, doing %d%% damage. If the attack hits, the target's armour and saves are reduced by %d for %d turns.
+		Also if the target is protected by a temporary damage shield there is %d%% chance to shatter it.
+		Armor reduction chance increases with your Physical Power.]])
+		:format(100 * self:combatTalentWeaponDamage(t, 0.8, 1.4), t.getArmorReduc(self, t), t.getDuration(self, t), t.getShatter(self, t))
+	end,
+}
+
+newTalent{
+	name = "Relentless Fury",
+	type = {"technique/strength-of-the-berserker", 4},
+	require = techs_req4,
+	points = 5,
+	cooldown = 25,
+	stamina = 0,
+	range = 10,
+	requires_target = true,
+	tactical = { CLOSEIN = 2, STAMINA = 2, BUFF = 2 },
+	getDur = function(self, t) return math.floor(self:combatTalentLimit(t, 19, 4, 8)) end,
+	getStamina = function(self, t) return self:combatStatScale("con", 4, 25) end,
+	getSpeed = function(self, t) return self:combatTalentLimit(t, 70, 10, 30) end,
+	on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() or self:getStamina() > self:getMaxStamina() * 0.3 then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
+	action = function(self, t)
+		self:setEffect(self.EFF_RELENTLESS_FURY, t.getDur(self, t), {stamina=t.getStamina(self, t), speed=t.getSpeed(self, t)})
+		return true
+	end,
+	info = function(self, t)
+		return ([[Search your inner strength for a surge of power.
+		For %d turns you gain %d stamina per turn and %d%% movement and attack speed.
+		Only usable at 30%% or lower stamina.
+		Stamina regeneration is based on your Constitution stat.]]):
+		format(t.getDur(self, t), t.getStamina(self, t), t.getSpeed(self, t))
+	end,
+}
diff --git a/game/modules/tome/data/talents/techniques/superiority.lua b/game/modules/tome/data/talents/techniques/superiority.lua
index 8529d729167e01fea7aea4f4bf0d32216cc2c04e..331bf1784cdf15340d45a1a88117ffec8d63e598 100644
--- a/game/modules/tome/data/talents/techniques/superiority.lua
+++ b/game/modules/tome/data/talents/techniques/superiority.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,17 +25,19 @@ newTalent{
 	points = 5,
 	random_ego = "attack",
 	cooldown = 40,
-	stamina = 60,
+	stamina = 50,
 	no_energy = true,
 	tactical = { DEFEND = 2 },
+	critResist = function(self, t) return self:combatTalentScale(t, 8, 20, 0.75) end,
 	getResist = function(self, t) return self:combatTalentScale(t, 15, 35) end,
 	action = function(self, t)
-		self:setEffect(self.EFF_JUGGERNAUT, 20, {power=t.getResist(self, t)})
+		self:setEffect(self.EFF_JUGGERNAUT, 20, {power=t.getResist(self, t), crits=t.critResist(self, t)})
 		return true
 	end,
 	info = function(self, t)
 		return ([[Concentrate on the battle, ignoring some of the damage you take.
-		Improves physical damage reduction by %d%% for 20 turns.]]):format(t.getResist(self,t))
+		Improves physical damage reduction by %d%% and provides %d%% chances to shrug off critical damage for 20 turns.]]):
+		format(t.getResist(self,t), t.critResist(self, t))
 	end,
 }
 
@@ -45,14 +47,15 @@ newTalent{
 	require = techs_req_high2,
 	points = 5,
 	mode = "sustained",
-	cooldown = 20,
-	sustain_stamina = 50,
+	cooldown = 10,
+	no_energy = true,
+	sustain_stamina = 10,
 	tactical = { BUFF = 2 },
 	range = function(self,t) return math.floor(self:combatTalentLimit(t, 10, 1, 5)) end, -- Limit KB range to <10
 	activate = function(self, t)
 		return {
 			onslaught = self:addTemporaryValue("onslaught", t.range(self,t)), 
-			stamina = self:addTemporaryValue("stamina_regen", -4),
+			stamina = self:addTemporaryValue("stamina_regen", -1),
 		}
 	end,
 
@@ -63,7 +66,7 @@ newTalent{
 	end,
 	info = function(self, t)
 		return ([[Take an offensive stance. As you walk through your foes, you knock them all back in an frontal arc (up to %d grids).
-		This consumes stamina rapidly (-4 stamina/turn).]]):
+		This consumes stamina rapidly (-1 stamina/turn).]]):
 		format(t.range(self, t))
 	end,
 }
@@ -124,7 +127,7 @@ newTalent{
 	end,
 	info = function(self, t)
 		return ([[Put all of your strength into your weapon blows, creating shockwaves that deal %d%% Physical weapon damage to all nearby targets.  Only one shockwave will be created per action, and the primary target does not take extra damage.
-		Each shattering impact will drain 15 stamina.]]):
+		Each shattering impact will drain 8 stamina.]]):
 		format(100*t.weaponDam(self, t))
 	end,
 }
diff --git a/game/modules/tome/data/talents/techniques/techniques.lua b/game/modules/tome/data/talents/techniques/techniques.lua
index 320997178a90e9f5fa7fef39da5152b50bd1087b..907ef2e01a46466ec6f2368bb51c50565b160194 100644
--- a/game/modules/tome/data/talents/techniques/techniques.lua
+++ b/game/modules/tome/data/talents/techniques/techniques.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,6 +18,8 @@
 -- darkgod@te4.org
 
 -- Physical combat
+newTalentType{ allow_random=true, type="technique/2hweapon-assault", name = "two-handed assault", description = "Specialized two-handed techniques." }
+newTalentType{ allow_random=true, type="technique/strength-of-the-berserker", name = "berserker's strength", description = "Fear nothing!" }
 newTalentType{ allow_random=true, type="technique/2hweapon-offense", name = "two-handed weapons", description = "Specialized two-handed techniques." }
 newTalentType{ allow_random=true, type="technique/2hweapon-cripple", name = "two-handed maiming", description = "Specialized two-handed techniques." }
 newTalentType{ allow_random=true, type="technique/shield-offense", name = "shield offense", description = "Specialized weapon and shield techniques." }
@@ -47,7 +49,7 @@ newTalentType{ is_unarmed=true, allow_random=true, type="technique/pugilism", na
 newTalentType{ is_unarmed=true, allow_random=true, type="technique/finishing-moves", name = "finishing moves", description = "Finishing moves that use combo points and may not be practiced in massive armor or while a weapon or shield is equipped." }
 newTalentType{ is_unarmed=true, allow_random=true, type="technique/grappling", name = "grappling", description = "Grappling techniques that may not be practiced in massive armor or while a weapon or shield is equipped." }
 newTalentType{ is_unarmed=true, allow_random=true, type="technique/unarmed-discipline", name = "unarmed discipline", description = "Advanced unarmed techniques including kicks and throw that may not be practiced in massive armor or while a weapon or shield is equipped." }
-newTalentType{ is_unarmed=true, allow_random=true, type="technique/unarmed-training", name = "unarmed training", description = "Teaches various martial arts techniques that may not be practiced in massive armor or while a weapon or shield is equipped." }
+newTalentType{ is_unarmed=true, allow_random=true, generic = true, type="technique/unarmed-training", name = "unarmed training", description = "Teaches various martial arts techniques that may not be practiced in massive armor or while a weapon or shield is equipped." }
 newTalentType{ allow_random=true, type="technique/conditioning", name = "conditioning", generic = true, description = "Physical conditioning." }
 
 newTalentType{ is_unarmed=true, type="technique/unarmed-other", name = "unarmed other", generic = true, description = "Base martial arts attack and stances." }
@@ -243,6 +245,8 @@ cancelStances = function(self)
 end
 
 load("/data/talents/techniques/2hweapon.lua")
+load("/data/talents/techniques/2h-assault.lua")
+load("/data/talents/techniques/strength-of-the-berserker.lua")
 load("/data/talents/techniques/dualweapon.lua")
 load("/data/talents/techniques/weaponshield.lua")
 load("/data/talents/techniques/superiority.lua")
diff --git a/game/modules/tome/data/talents/techniques/thuggery.lua b/game/modules/tome/data/talents/techniques/thuggery.lua
index 11f3d385cbb44672084e81d14607b5e7258cad76..b7ba3ce062545a0eadd99769ae282e22ceb97e09 100644
--- a/game/modules/tome/data/talents/techniques/thuggery.lua
+++ b/game/modules/tome/data/talents/techniques/thuggery.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
index 02c2fbf9b65f2858c7d669f8561483862c29547c..43ff0c24af1fea885d0fc6699b22ca46221732e6 100644
--- a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
+++ b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -34,7 +34,7 @@ newTalent{
 		if not x or not y or not target then return nil end
 		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
 
-		local hit = target:checkHit(self:combatAttack(), target:combatDefense(), 0, 95) and self:checkEvasion(target)
+		local hit = target:checkHit(self:combatAttack(), target:combatDefense(), 0, 95) and not self:checkEvasion(target)
 		-- Try to knockback !
 		if hit then
 			local can = function(target)
diff --git a/game/modules/tome/data/talents/techniques/unarmed-training.lua b/game/modules/tome/data/talents/techniques/unarmed-training.lua
index 7526a6702fe467f1617234179b1c40c6591380d2..a22b788ff74359003150932d55bf69a6db00689e 100644
--- a/game/modules/tome/data/talents/techniques/unarmed-training.lua
+++ b/game/modules/tome/data/talents/techniques/unarmed-training.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -60,8 +60,9 @@ newTalent{
 	points = 5,
 	require = { stat = { cun=function(level) return 12 + level * 6 end }, },
 	mode = "passive",
-	getDamage = function(self, t) return self:getTalentLevel(t) * 10 end,
-	getPercentInc = function(self, t) return math.sqrt(self:getTalentLevel(t) / 5) / 2 end,
+	--getDamage = function(self, t) return self:getTalentLevel(t) * 10 end,
+	getDamage = function(self, t) return self:combatTalentScale(t, 10, 30, 0.25) end,
+	getPercentInc = function(self, t) return math.sqrt(self:getTalentLevel(t) / 5) / 4 end,
 	info = function(self, t)
 		local damage = t.getDamage(self, t)
 		local inc = t.getPercentInc(self, t)
@@ -72,20 +73,30 @@ newTalent{
 }
 
 newTalent{
-	name = "Steady Mind",
+	name = "Unified Body",
 	type = {"technique/unarmed-training", 2},
-	mode = "passive",
-	points = 5,
 	require = techs_cun_req2,
-	getDefense = function(self, t) return self:combatTalentStatDamage(t, "dex", 5, 35) end,
-	getMental = function(self, t) return self:combatTalentStatDamage(t, "cun", 5, 35) end,
-	info = function(self, t)
-		local defense = t.getDefense(self, t)
-		local saves = t.getMental(self, t)
-		return ([[Superior cunning and training allows you to outthink and outwit your opponents' physical and mental assaults.  Increases Defense by %d and Mental Save by %d.
-		The Defense bonus will scale with your Dexterity, and the save bonus with your Cunning.]]):
-		format(defense, saves)
+	mode = "sustained",
+	points = 5,
+	--sustain_stamina = 50,
+	cooldown = 18,
+	tactical = { BUFF = 2 },
+	getStr = function(self, t) return math.ceil(self:combatTalentScale(t, 1.5, 7.5, 0.75) + self:combatTalentStatDamage(t, "cun", 2, 10)) end,
+	getCon = function(self, t) return math.ceil(self:combatTalentScale(t, 1.5, 7.5, 0.75) + self:combatTalentStatDamage(t, "dex", 5, 20)) end,
+	activate = function(self, t)
+		return {
+			stat1 = self:addTemporaryValue("inc_stats", {[self.STAT_CON] = t.getCon(self, t)}),
+			stat2 = self:addTemporaryValue("inc_stats", {[self.STAT_STR] = t.getStr(self, t)}),	
+		}
 	end,
+	deactivate = function(self, t, p)
+		self:removeTemporaryValue("inc_stats", p.stat1)
+		self:removeTemporaryValue("inc_stats", p.stat2)
+		return true
+	end,
+	info = function(self, t)
+		return ([[Your mastery of unarmed combat unifies your body.  Increases your Strength by %d based on Cunning and your Constitution by %d based on Dexterity.]]):format(t.getStr(self, t), t.getCon(self, t))
+	end
 }
 
 newTalent{
@@ -106,18 +117,41 @@ newTalent{
 }
 
 newTalent{
-	name = "Combo String",
+	name = "Reflex Defense",
 	type = {"technique/unarmed-training", 4},
-	require = techs_cun_req4,
-	mode = "passive",
+	require = techs_cun_req4, -- bit icky since this is clearly dex, but whatever, cun turns defense special *handwave*
 	points = 5,
-	getDuration = function(self, t) return math.ceil(self:combatTalentScale(t, 0.3, 2.3)) end,
-	getChance = function(self, t) return self:combatLimit(self:getTalentLevel(t) * (5 + self:getCun(5, true)), 100, 0, 0, 50, 50) end, -- Limit < 100%
+	mode = "sustained",
+	cooldown = 10,
+	no_energy = true, -- annoying when sustains take energy without a good reason
+	tactical = { BUFF = 2 },
+	getDefensePct = function(self, t)
+		return self:combatTalentLimit(t, 1, 0.05, 0.9) -- ugly, fix later
+	end,
+	getDamageReduction = function(self, t) 
+		return t.getDefensePct(self, t) * self:combatDefense() / 100
+	end,
+	getDamagePct = function(self, t)
+		return 0.2
+	end,
+	activate = function(self, t)
+		
+		return {}
+	end,
+	deactivate = function(self, t, p)
+		return true
+	end,
+	callbackOnHit = function(self, t, cb)
+		if ( cb.value > (t.getDamagePct(self, t) * self.max_life) ) then
+			local damageReduction = cb.value * t.getDamageReduction(self, t)
+			cb.value = cb.value - damageReduction
+			game.logPlayer(self, "#GREEN#You twist your body in complex ways mitigating the blow by " .. math.ceil(damageReduction) .. ".")
+		end
+		return cb.value
+	end, 
 	info = function(self, t)
-		local duration = t.getDuration(self, t)
-		local chance = t.getChance(self, t)
-		return ([[When gaining a combo point, you have a %d%% chance to gain an extra combo point.  Additionally, your combo points will last %d turns longer before expiring.
-		The chance of building a second combo point will improve with your Cunning.]]):
-		format(chance, duration)
+		return ([[Your understanding of physiology allows you to apply your reflexes in new ways.  Whenever you receive damage greater than %d%% of your maximum life you reduce that damage by %d%% based on your defense.]]):
+		format(t.getDamagePct(self, t)*100, t.getDamageReduction(self, t)*100 )
 	end,
 }
+
diff --git a/game/modules/tome/data/talents/techniques/warcries.lua b/game/modules/tome/data/talents/techniques/warcries.lua
index e712f4b38bed6a730cf0a7992f43eb13e406c023..b8e83f6a957e7fad5e28c14e907267da561d963b 100644
--- a/game/modules/tome/data/talents/techniques/warcries.lua
+++ b/game/modules/tome/data/talents/techniques/warcries.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -23,7 +23,6 @@ newTalent{
 	type = {"technique/warcries", 1},
 	require = techs_req_high1,
 	points = 5,
-	random_ego = "attack",
 	cooldown = 7,
 	stamina = 20,
 	range = 0,
@@ -39,11 +38,22 @@ newTalent{
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.PHYSICAL, t.getdamage(self,t))
+		if self:getTalentLevel(t) >= 5 then
+			self:project(tg, x, y, function(px, py)
+				local proj = game.level.map(px, py, Map.PROJECTILE)
+				if not proj then return end
+				proj:terminate(x, y)
+				game.level:removeEntity(proj, true)
+				proj.dead = true
+				self:logCombat(proj, "#Source# shatters '#Target#'.")
+			end)
+		end
 		game.level.map:particleEmitter(self.x, self.y, self:getTalentRadius(t), "directional_shout", {life=8, size=2, tx=x-self.x, ty=y-self.y, distorion_factor=0.1, radius=self:getTalentRadius(t), nb_circles=8, rm=0.8, rM=1, gm=0.8, gM=1, bm=0.1, bM=0.2, am=0.6, aM=0.8})
 		return true
 	end,
 	info = function(self, t)
 		return ([[Release a powerful shout, doing %0.2f physical damage in a radius %d cone in front of you.
+		At level 5 the shout is so strong it shatters all incomming projectiles caught inside.
 		The damage increases with your Strength.]])
 		:format(damDesc(self, DamageType.PHYSICAL, t.getdamage(self,t)), t.radius(self,t))
 	end,
@@ -54,8 +64,8 @@ newTalent{
 	type = {"technique/warcries", 2},
 	require = techs_req_high2,
 	points = 5,
-	random_ego = "utility",
 	cooldown = 50,
+	no_energy = true,
 	tactical = { STAMINA = 2 },
 	getRestore = function(self, t) return self:combatTalentLimit(t, 100, 27, 55) end,
 	action = function(self, t)
@@ -73,18 +83,19 @@ newTalent{
 	type = {"technique/warcries", 3},
 	require = techs_req_high3,
 	points = 5,
-	random_ego = "defensive",
 	cooldown = 30,
-	stamina = 40,
+	stamina = 5,
 	tactical = { DEFEND = 2, BUFF = 1 },
 	getdur = function(self,t) return math.floor(self:combatTalentLimit(t, 30, 7, 15)) end, -- Limit to < 30
-	getPower = function(self, t) return self:combatTalentLimit(t, 50, 11, 15) end, -- Limit to < 50%
+	getPower = function(self, t) return self:combatTalentLimit(t, 50, 11, 25) end, -- Limit to < 50%
 	action = function(self, t)
 		self:setEffect(self.EFF_BATTLE_SHOUT, t.getdur(self,t), {power=t.getPower(self, t)})
 		return true
 	end,
 	info = function(self, t)
-		return ([[Boost your life and stamina by %0.1f%% for %d turns by bellowing your battle shout. When the effect ends, the additional life and stamina will be lost.]]):format(t.getPower(self, t), t.getdur(self, t))
+		return ([[Boost your life and stamina by %0.1f%% for %d turns by bellowing your battle shout.
+		When the effect ends, the additional life and stamina will be lost.]]):
+		format(t.getPower(self, t), t.getdur(self, t))
 	end,
 }
 
@@ -93,7 +104,6 @@ newTalent{
 	type = {"technique/warcries", 4},
 	require = techs_req_high4,
 	points = 5,
-	random_ego = "attack",
 	cooldown = 30,
 	stamina = 40,
 	range = 0,
@@ -117,6 +127,7 @@ newTalent{
 	end,
 	info = function(self, t)
 		return ([[Your battle cry shatters the will of your foes within a radius of %d, lowering their Defense by %d for 7 turns, making them easier to hit.
+		All evasion and concealment bonuses are also disabled.
 		The chance to hit increases with your Physical Power.]]):
 		format(self:getTalentRadius(t), 7 * self:getTalentLevel(t))
 	end,
diff --git a/game/modules/tome/data/talents/techniques/weaponshield.lua b/game/modules/tome/data/talents/techniques/weaponshield.lua
index 7b009d5bb09d4544717e05d790c17069e6a03e4c..57198ec94c2c061b5ca9d2df383754dc1f130f51 100644
--- a/game/modules/tome/data/talents/techniques/weaponshield.lua
+++ b/game/modules/tome/data/talents/techniques/weaponshield.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -165,10 +165,10 @@ newTalent{
 
 		-- Second & third attack with weapon
 		if hit then
-			self.combat_physcrit = self.combat_physcrit + 1000
+			self.turn_procs.auto_phys_crit = true
 			self:attackTarget(target, nil, self:combatTalentWeaponDamage(t, 1, 1.5), true)
 			self:attackTarget(target, nil, self:combatTalentWeaponDamage(t, 1, 1.5), true)
-			self.combat_physcrit = self.combat_physcrit - 1000
+			self.turn_procs.auto_phys_crit = nil
 		end
 
 		return true
diff --git a/game/modules/tome/data/talents/uber/const.lua b/game/modules/tome/data/talents/uber/const.lua
index d5dc4102f7f8d8022ea328e4c978317e3b548703..0589a718464b33607ef9a71a2c6398d3269eff77 100644
--- a/game/modules/tome/data/talents/uber/const.lua
+++ b/game/modules/tome/data/talents/uber/const.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -44,7 +44,7 @@ uberTalent{
 		-- Add a lasting map effect
 		game.level.map:addEffect(self,
 			self.x, self.y, 4,
-			DamageType.WAVE, {dam={dam=100 + self:getCon() * 3, healfactor=0.5}, x=self.x, y=self.y, st=DamageType.DRAINLIFE, power=50 + self:getCon() * 2},
+			DamageType.BLOODSPRING, {dam={dam=100 + self:getCon() * 3, healfactor=0.5}, x=self.x, y=self.y, st=DamageType.DRAINLIFE, power=50 + self:getCon() * 2},
 			1,
 			5, nil,
 			engine.Entity.new{alpha=100, display='', color_br=200, color_bg=60, color_bb=20},
diff --git a/game/modules/tome/data/talents/uber/cun.lua b/game/modules/tome/data/talents/uber/cun.lua
index 06c7f80d92a2109193ea0a1a10ebb2854a9f09cd..5fd94ddd6e491ea2fa2c55fa1ff9ecc31ba74b94 100644
--- a/game/modules/tome/data/talents/uber/cun.lua
+++ b/game/modules/tome/data/talents/uber/cun.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/uber/dex.lua b/game/modules/tome/data/talents/uber/dex.lua
index 2ae67060e97c15bd88c696d3736865e62df28dbe..e007fce9174db8e79090175ce142bc45f35708eb 100644
--- a/game/modules/tome/data/talents/uber/dex.lua
+++ b/game/modules/tome/data/talents/uber/dex.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/uber/mag.lua b/game/modules/tome/data/talents/uber/mag.lua
index 8caeb766c346f25aa47abfbb5c6ef35e318a4ef5..7ad5e773c05bcb7e351b690d3b7907b1828dfe58 100644
--- a/game/modules/tome/data/talents/uber/mag.lua
+++ b/game/modules/tome/data/talents/uber/mag.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -282,6 +282,7 @@ uberTalent{
 	trigger = function(self, t, value)
 		self:startTalentCooldown(t)
 
+		if self.player then world:gainAchievement("AVOID_DEATH", self) end
 		self:setEffect(self.EFF_CAUTERIZE, 8, {dam=value/10})
 		return true
 	end,
diff --git a/game/modules/tome/data/talents/uber/str.lua b/game/modules/tome/data/talents/uber/str.lua
index c697c783dbc205bd3f7c81195bfdaa388a72bee6..9202a4d4ea53731099366587c49b59d102c9e3d1 100644
--- a/game/modules/tome/data/talents/uber/str.lua
+++ b/game/modules/tome/data/talents/uber/str.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/uber/uber.lua b/game/modules/tome/data/talents/uber/uber.lua
index 47081f2e9ad3c18c9ab7810319d4f851e9d8c432..adcab0515655a574a85a7f0e1b09ed8c3177d55e 100644
--- a/game/modules/tome/data/talents/uber/uber.lua
+++ b/game/modules/tome/data/talents/uber/uber.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/uber/wil.lua b/game/modules/tome/data/talents/uber/wil.lua
index 379ca8096bf8571799b1f93e16c5132d58c752d2..b020ce5d0062b3b80b7d1b9b5754a3bcf9c222b3 100644
--- a/game/modules/tome/data/talents/uber/wil.lua
+++ b/game/modules/tome/data/talents/uber/wil.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/undeads/ghoul.lua b/game/modules/tome/data/talents/undeads/ghoul.lua
index 231e1c33c10329d5eff00d2cc18771a3f236d429..c47715b2bb06adf6278b3e224488a25f9a8a4cec 100644
--- a/game/modules/tome/data/talents/undeads/ghoul.lua
+++ b/game/modules/tome/data/talents/undeads/ghoul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -101,7 +101,7 @@ newTalent{
 			DamageType.RETCH, dam,
 			radius,
 			5, nil,
-			engine.Entity.new{alpha=100, display='', color_br=30, color_bg=180, color_bb=60},
+			MapEffect.new{color_br=30, color_bg=180, color_bb=60, effect_shader="shader_images/retch_effect.png"},
 			nil, self:spellFriendlyFire()
 		)
 		game:playSoundNear(self, "talents/cloud")
diff --git a/game/modules/tome/data/talents/undeads/skeleton.lua b/game/modules/tome/data/talents/undeads/skeleton.lua
index c979f206f3b3218f8bf175b2f623461f3a231ce5..598e8c75c63d9bbafb831d0c48f46aafd582a7e7 100644
--- a/game/modules/tome/data/talents/undeads/skeleton.lua
+++ b/game/modules/tome/data/talents/undeads/skeleton.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/talents/undeads/undeads.lua b/game/modules/tome/data/talents/undeads/undeads.lua
index 2ce060673764e0c8821c59a44483ef1c4d47ce4c..15ee33ad9a2279a752108bb88a75c8c86bc032d2 100644
--- a/game/modules/tome/data/talents/undeads/undeads.lua
+++ b/game/modules/tome/data/talents/undeads/undeads.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-archmage.lua b/game/modules/tome/data/texts/intro-archmage.lua
index a8d11cf5438b05e7f45159189a14fbdd4ab59d3f..30ffa79d5251564e5bcd45d682d01595b9c0d3c0 100644
--- a/game/modules/tome/data/texts/intro-archmage.lua
+++ b/game/modules/tome/data/texts/intro-archmage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-arena.lua b/game/modules/tome/data/texts/intro-arena.lua
index 7c6f88b0a35b7f103e023c77072ba8a30368999e..11a5b52d4556c62412bbf4d4454f3591b6b93f93 100644
--- a/game/modules/tome/data/texts/intro-arena.lua
+++ b/game/modules/tome/data/texts/intro-arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-chronomancer.lua b/game/modules/tome/data/texts/intro-chronomancer.lua
index 610a4a897a390ed76bdbc04da01f719f4bf6be01..4a2bd0f1a52a0040b67ed91acaec569e91431321 100644
--- a/game/modules/tome/data/texts/intro-chronomancer.lua
+++ b/game/modules/tome/data/texts/intro-chronomancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-cornac.lua b/game/modules/tome/data/texts/intro-cornac.lua
index 11130531a02de4f9edbb17b67d524e8d98cbbe86..3114f0873ded502715aa10eee88ba08776338496 100644
--- a/game/modules/tome/data/texts/intro-cornac.lua
+++ b/game/modules/tome/data/texts/intro-cornac.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-dwarf.lua b/game/modules/tome/data/texts/intro-dwarf.lua
index 7e535f344b0436e5a0fb69f58b6db466b13bac8a..e2871108fd5bc8de22742e332dc6b5831518bcff 100644
--- a/game/modules/tome/data/texts/intro-dwarf.lua
+++ b/game/modules/tome/data/texts/intro-dwarf.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-ghoul.lua b/game/modules/tome/data/texts/intro-ghoul.lua
index 89d9e4e93ec777d0b95eb909b09cd8791504030c..cb44af53514940938ce6a5ca639f9b75457f43ee 100644
--- a/game/modules/tome/data/texts/intro-ghoul.lua
+++ b/game/modules/tome/data/texts/intro-ghoul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-halfling.lua b/game/modules/tome/data/texts/intro-halfling.lua
index ddb58455f9a363a2f63fb3c8b60c13a0b43a6788..fd367c021617f62877444ef0a09abd9845455db6 100644
--- a/game/modules/tome/data/texts/intro-halfling.lua
+++ b/game/modules/tome/data/texts/intro-halfling.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-higher.lua b/game/modules/tome/data/texts/intro-higher.lua
index 0e21c32ce3c592fc0c0448ace107aba983440f52..41f259be4a65b8e674331d3895ea53d5b208b91c 100644
--- a/game/modules/tome/data/texts/intro-higher.lua
+++ b/game/modules/tome/data/texts/intro-higher.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-infinite-dungeon.lua b/game/modules/tome/data/texts/intro-infinite-dungeon.lua
index 100096f1924068ab6d6447e2ce54abb280268875..c9e049e22165c4d6d3a1f0f79e1859cfdda9f46b 100644
--- a/game/modules/tome/data/texts/intro-infinite-dungeon.lua
+++ b/game/modules/tome/data/texts/intro-infinite-dungeon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-orc.lua b/game/modules/tome/data/texts/intro-orc.lua
index 18bf5425c302af0ab30ec09398ff09cb69566c10..9147295f558e08341014f34b2eb4a02d4ab1c58c 100644
--- a/game/modules/tome/data/texts/intro-orc.lua
+++ b/game/modules/tome/data/texts/intro-orc.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-shalore.lua b/game/modules/tome/data/texts/intro-shalore.lua
index f0065f070e24cf7298791a51a2c1fea421b44a70..ce553f7c7ed12f7caba2fb0bcaed2432c68cafdf 100644
--- a/game/modules/tome/data/texts/intro-shalore.lua
+++ b/game/modules/tome/data/texts/intro-shalore.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-skeleton.lua b/game/modules/tome/data/texts/intro-skeleton.lua
index 07adefd1029ce0ab3944ab385832393f96ba86de..4fb27a91b33dc1f5561ecb8927ef05c3579dd562 100644
--- a/game/modules/tome/data/texts/intro-skeleton.lua
+++ b/game/modules/tome/data/texts/intro-skeleton.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-sunwall.lua b/game/modules/tome/data/texts/intro-sunwall.lua
index 1d4a23b7700c312ff41b0ec3dd5e72a5d46d3dc5..8d601b07a779069d6bb36f390c385f60671eba9d 100644
--- a/game/modules/tome/data/texts/intro-sunwall.lua
+++ b/game/modules/tome/data/texts/intro-sunwall.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-thalore.lua b/game/modules/tome/data/texts/intro-thalore.lua
index 57ddd48c1279182ed77bcb2df672f80053d53955..2cc4dd4b864a99182f267c5f49de011c41f16baf 100644
--- a/game/modules/tome/data/texts/intro-thalore.lua
+++ b/game/modules/tome/data/texts/intro-thalore.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-tutorial-combat-stats.lua b/game/modules/tome/data/texts/intro-tutorial-combat-stats.lua
index c8e17e91e663fe359d362c31383f1161f9f14b4f..9c6db8ee20d7064f766051dee8044744329d5da3 100644
--- a/game/modules/tome/data/texts/intro-tutorial-combat-stats.lua
+++ b/game/modules/tome/data/texts/intro-tutorial-combat-stats.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-tutorial.lua b/game/modules/tome/data/texts/intro-tutorial.lua
index ab351bad5d3f6694f36400885d61b4d11e75ade6..c5c9c3baacf40645e2ebfee366d20a61e938296c 100644
--- a/game/modules/tome/data/texts/intro-tutorial.lua
+++ b/game/modules/tome/data/texts/intro-tutorial.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/intro-yeek.lua b/game/modules/tome/data/texts/intro-yeek.lua
index ee54b1078638833fa7662c8dc4eace9518597e7c..ae05f18765b5e0df2099cdb85fb4e403d03a0a30 100644
--- a/game/modules/tome/data/texts/intro-yeek.lua
+++ b/game/modules/tome/data/texts/intro-yeek.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/message-last-hope.lua b/game/modules/tome/data/texts/message-last-hope.lua
index 4202c0639a480ee7b26841872ae0a80d40dd95d0..a4ce6997cc6501d0e8ddaa44691e2949de50daa1 100644
--- a/game/modules/tome/data/texts/message-last-hope.lua
+++ b/game/modules/tome/data/texts/message-last-hope.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/combat-stats-intro.lua b/game/modules/tome/data/texts/tutorial/combat-stats-intro.lua
index 3669d760f6e71d5fd6c399001cdfafea216c58dd..e1e7a13b332cc56fac14813507befa6be36364ec 100644
--- a/game/modules/tome/data/texts/tutorial/combat-stats-intro.lua
+++ b/game/modules/tome/data/texts/tutorial/combat-stats-intro.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/done.lua b/game/modules/tome/data/texts/tutorial/done.lua
index 21c5a49bf6bdd432d62647e6f37e8c16708a46e1..ca08651651bcc93c425313fa63f3f2a419970a30 100644
--- a/game/modules/tome/data/texts/tutorial/done.lua
+++ b/game/modules/tome/data/texts/tutorial/done.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/levelup.lua b/game/modules/tome/data/texts/tutorial/levelup.lua
index dff376869adf7e493665a165f7e21e9b61feef57..b0f8510e7fa8774d51ffcb5d39f5f7f819a599f9 100644
--- a/game/modules/tome/data/texts/tutorial/levelup.lua
+++ b/game/modules/tome/data/texts/tutorial/levelup.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/melee.lua b/game/modules/tome/data/texts/tutorial/melee.lua
index 961f01befa7494ea7a429d745c89a07145234849..7e4e072e187cd3cb6b6d1f1bbf9ce1ce674f1703 100644
--- a/game/modules/tome/data/texts/tutorial/melee.lua
+++ b/game/modules/tome/data/texts/tutorial/melee.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/move.lua b/game/modules/tome/data/texts/tutorial/move.lua
index e6a181f513eda8ffad10e46b5228d210258e9f4d..eb184a368d683d90b0f494cc3db038571849481b 100644
--- a/game/modules/tome/data/texts/tutorial/move.lua
+++ b/game/modules/tome/data/texts/tutorial/move.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/objects.lua b/game/modules/tome/data/texts/tutorial/objects.lua
index 26ea2eb3423b0587d11a467b889ad7ca2b0ecbc1..6dac57e611a229916d8423ac25956ba558735fca 100644
--- a/game/modules/tome/data/texts/tutorial/objects.lua
+++ b/game/modules/tome/data/texts/tutorial/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/quests.lua b/game/modules/tome/data/texts/tutorial/quests.lua
index 4ea63aa8bcf2410c47fb6c4556f8843ece559cc9..3d006767cd3833994ebf4a79d22cbb5da61e1ebc 100644
--- a/game/modules/tome/data/texts/tutorial/quests.lua
+++ b/game/modules/tome/data/texts/tutorial/quests.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/ranged.lua b/game/modules/tome/data/texts/tutorial/ranged.lua
index 612e9983c10971a8ab5afe83a8f3394819c1f5fa..0a0b528075bd8d5ac00d5874129842d5cbb62703 100644
--- a/game/modules/tome/data/texts/tutorial/ranged.lua
+++ b/game/modules/tome/data/texts/tutorial/ranged.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc0.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc0.lua
index ae52615abd594cd69eccc0873ca1d3890e04385d..8d03c8526405ed225a28c78db45a25be6c9c6bee 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc0.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc0.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc1.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc1.lua
index bbfca55fff52819faa9e4ceb0c5acc33d0a7e584..cfbee8eb3b24904b796ce40cb330843ae0b942f8 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc10.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc10.lua
index edb7cff64a1782bc578347e67ecab843cc36cb55..7ee9372424a83f8a54eaab575844822c11a58f19 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc10.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc10.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc11.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc11.lua
index 325412c84905d67ddbb1104ea1fcf34e615d37c0..897c5ae963dffd5618545cbd7d1d02132420d557 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc11.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc11.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc2.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc2.lua
index 79d5f3ed5f543271d16915919d0566cacb0436b2..b282a24d7241a22ee9cf4631d46280736e7f0077 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc2.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc3.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc3.lua
index 9962863a81f74fc2fb3213aa2b4d31c5412a4880..759d4bf8def81cd80535b3feb5c9cd5cee2ededb 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc3.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc4.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc4.lua
index 220e31f31049048184ba0b94a80e7750fdc2aa3b..170dd9327549a079f37e226a62c4824769f4c772 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc4.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc5.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc5.lua
index 5610bb234519aac4af81d6ee19f649fc36006d77..afbea4be5114b24892d0154649c3a8d9a51fd3a5 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc5.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc6.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc6.lua
index 245ea9cd1bac996cce528c9851376f56a2a729c0..81badf1a28ab3efadbf75ee53b2d438126b88c0d 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc6.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc7.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc7.lua
index c94e906279a2fc979dd3eb5a568c750d3ff29b61..66d3657fe44332cdba0cd04c832e96b8215ece66 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc7.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc8.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc8.lua
index 1824a1cc8bfe2741cbd2463d135dfbf4554f35da..ab92c2df510050dbf5b444112f5bc0d30bba4d5c 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc8.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-calc/calc9.lua b/game/modules/tome/data/texts/tutorial/stats-calc/calc9.lua
index 9c92b4c20cc0936a931ac61cc257f6c345f3d939..292d615c4cd8c46deb79c179d07b95643fd7f19c 100644
--- a/game/modules/tome/data/texts/tutorial/stats-calc/calc9.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-calc/calc9.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/informed1.lua b/game/modules/tome/data/texts/tutorial/stats-scale/informed1.lua
index 11f6d3e829fe905065bce6c3f2511fa56ed84468..beaf528d7e51beee7195b26f5cb97d47418b41bb 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/informed1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/informed1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale1.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale1.lua
index 8f6fec0554b0cc881dcffe29ae80be88a11341f2..3116db3f32409173193320bcb12baec6319d64ac 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale10.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale10.lua
index c23f1d86fc5aa2072306d54ae0085b17d63e8bc1..743a0f801937fe27ee62a12baf31e543af7f583b 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale10.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale10.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale11.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale11.lua
index e87d9e44d5ee42363b873f9b2ea5ee4debce8357..914b958b5da948637114b658f956170618e0bd18 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale11.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale11.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale12.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale12.lua
index 24158a604113fab82b55bf72c8b555a02e572c9f..5d977450a4c88b9770eca47eff1afa170d353695 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale12.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale12.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale2.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale2.lua
index 200c640749e73c08df198940447be07e18b22f0f..f610e42f2984e28089f10cca995d6ff431861cc3 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale2.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale3.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale3.lua
index 5d350938c5b274664924400142a8afcd77d9b80a..68880e77860deba227dbad94a6f7df6b5cb1c950 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale3.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale4.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale4.lua
index f32e1c99bcef428e134194db62270606977b6736..c8db2ea465d70fc3c3046e6f9458d4dd4116e24c 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale4.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale5.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale5.lua
index b65e5133dfea7a41c57a60a1b8ed52404c370d55..a56fc93aa475abb4474092cafc84526d85d26cf8 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale5.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale6.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale6.lua
index 41c47ee3be765c73b9926a55a59130e8c56a7a6a..ee6c58dc42270d0fc09ac3a2c62e02153956a264 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale6.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale7.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale7.lua
index a8b3a4e08ebb6bce1e3cbf728028163695e26486..bc06d9a6bb7b3ff7c5292f7178f5689d5c445290 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale7.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale8.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale8.lua
index 487c496f401786ba52b4d817406f6381faab38b1..83bd17a97a0f9a1d3a05df5a342d1587825bb691 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale8.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-scale/scale9.lua b/game/modules/tome/data/texts/tutorial/stats-scale/scale9.lua
index b62f7889be888438fa09bf6cf6a33b21f2eaa42e..b46b3953b220fb63aa03a51bb69bed78857b2b31 100644
--- a/game/modules/tome/data/texts/tutorial/stats-scale/scale9.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-scale/scale9.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier0.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier0.lua
index e7081f29196b8d0566b53f7b439ce9dc8645286c..868b69204bdac78047ef707a40004e0172ccecb9 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier0.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier0.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier1.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier1.lua
index 91d6e5f6c13644e3b34f5ec5f432ee22e66f7eb5..2229e904af72301b6bf5108390200882a964c1a0 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier10.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier10.lua
index cb39fdd5cf15fbd0592ba7f2898dd7b0fe817302..76c74893813dde569208c2b5f8e2f8a43ca26651 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier10.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier10.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier11.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier11.lua
index 9ecf78b0fc727cf154d741c807aa0556311857cb..d0fbd43b967c5cae50dc3718a3869f1b4768139f 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier11.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier11.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier12.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier12.lua
index 68c0fef795554f4f7e4ff958dd091b76e719fc97..0c9dcfba61a2e36b3a3171bac2c59e387eda5941 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier12.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier12.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier2.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier2.lua
index 80138aad7d70466488aa338a4959a672ce63d7a1..7c19dd937ec36f76761e4b3eddcca0da877d0b42 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier2.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier3.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier3.lua
index 6857f1725524bac9dbcc099444272346e97c98bd..6bbed3fdae433169249812a3406a4ed8682c7cdc 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier3.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier4.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier4.lua
index 837ef9db0c1beacfbd4eca8c280b847ba2aa5cc5..686bf6e8a4f015e260b7e71b7d706d4e3f7fec09 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier4.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier5.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier5.lua
index e649394c49b995e05c4bfb1d88e80f05255ba5e7..1a41a8ff80e4a4cac1a8a68fd2bb38595125686c 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier5.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier6.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier6.lua
index 8084b0430d641889f7661d8fbaec02378138c453..bfcaa26a9faa4162e67021009c9b0062f0aa6ef4 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier6.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier7.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier7.lua
index 17e82f8b8c0ae1082c199afdef9bcb23c1f66360..d5e9f7db30431c3f5bf766afeb4d033c4bae6ddd 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier7.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier8.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier8.lua
index 60780533a1115c2801172c4e97aadf6828e7e2ad..95f828c9acf78f5581ed7fd1d149c6afa5cedbf0 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier8.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-tier/tier9.lua b/game/modules/tome/data/texts/tutorial/stats-tier/tier9.lua
index f77ebcacb620f56a61695310d42c27dffdc34b11..d4a465859431dee804e76a049389769d257a5bcc 100644
--- a/game/modules/tome/data/texts/tutorial/stats-tier/tier9.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-tier/tier9.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed0.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed0.lua
index 31a3682ddb0aded23d87f4e38ae4fc109b155095..0e9858d88248a32586ffc69e4aa3f967be49c5e3 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed0.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed0.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed1.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed1.lua
index 7e82c0ea3cb1b67ca290790b3165846c1431c7c2..918468fdda2c0f83209d729c708d967b6bd1a272 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed2.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed2.lua
index 6916d601c4c7d696de39e5275ec1c9f2875d9219..9ecd8763d8cddcc4aa2c894872b1adec8e5542eb 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed2.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed3.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed3.lua
index 2067c0cedec0408f58063b1442f4c0ed5293a177..72a7e7b21fcb2c0007d608bb9490ecbd5c60f0ce 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed3.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed4.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed4.lua
index f6367e0681dafd1ed7d038e0b79a865fcece2fb6..7cd961bbb2ea09fba6600733c2a0dd2bcaeef97d 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed4.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed5.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed5.lua
index a00088432791e178de9355303c9251495715a0fa..0f5a8ca5654df23af3d55f9f557bd8bc9c778d6b 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed5.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed6.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed6.lua
index 999e357a6b62747616709459ad632c8c2efdb9d0..0105f1fcee81594e056d8767781871e184725e03 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed6.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed7.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed7.lua
index 8bad97033192f3a8acd7953e7a44adf2cb72335c..966c9159bafca86011931fa6e813d25b6e94290c 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed7.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats-timed/timed8.lua b/game/modules/tome/data/texts/tutorial/stats-timed/timed8.lua
index a5eea58683c256cabf6f28884e6b5b046540e397..e9c99972fdbf58d3102e52db7f007b22ec671348 100644
--- a/game/modules/tome/data/texts/tutorial/stats-timed/timed8.lua
+++ b/game/modules/tome/data/texts/tutorial/stats-timed/timed8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/mechintro.lua b/game/modules/tome/data/texts/tutorial/stats/mechintro.lua
index 1e5c81e76d9e95a5cb3bccaf5ea061c227e951c8..796a30f393cebd6420fa5edbb0ffd84f22613f80 100644
--- a/game/modules/tome/data/texts/tutorial/stats/mechintro.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/mechintro.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats1.lua b/game/modules/tome/data/texts/tutorial/stats/stats1.lua
index 54e4bef690efb880596a854a1579fd2e75374e60..a6c3119b279fd948ea93f65502968a6fca79df57 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats2.lua b/game/modules/tome/data/texts/tutorial/stats/stats2.lua
index 9e78770217d5dddeb6806e91af520d3972a06f74..15590c7ec81f196dbe3de16c84ce2c6ab6d16770 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats2.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats3.lua b/game/modules/tome/data/texts/tutorial/stats/stats3.lua
index 57690e017c6ffcd635c0cbeb0c1719167b08182a..0bd108733bd5ecdec88312ab01ed150f9d2104e9 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats3.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats3.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats4.lua b/game/modules/tome/data/texts/tutorial/stats/stats4.lua
index 6ef2f1b55b9be0901ea8d18373bd0341f1d04258..5eb8cbf7fbf939e659ad5948dfcafee46051c731 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats4.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats4.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats5.lua b/game/modules/tome/data/texts/tutorial/stats/stats5.lua
index 9fbf924062ed1085e0f9379d2f08b4cb8cede0a4..4263aab42d5904cf62b106c2ee779023b6b2fc27 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats5.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats5.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats6.lua b/game/modules/tome/data/texts/tutorial/stats/stats6.lua
index 8dd47ec078fd4498bf7975c0e4fe05c218971a18..1c24d8823a5170fa1173a00a84e7945e0e2c146c 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats6.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats6.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats7.1.lua b/game/modules/tome/data/texts/tutorial/stats/stats7.1.lua
index dfb12592456d54ec6d122362ccd1cc51ec881d3d..979fc380f366ef257454e8008f9201a9cf3b1762 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats7.1.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats7.1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats7.lua b/game/modules/tome/data/texts/tutorial/stats/stats7.lua
index f3b0011a30497332ab4ff73e02b2a6a991ce3a11..83aaa0f0695304c1571073dbc98020d315a7f2f0 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats7.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats7.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats8.lua b/game/modules/tome/data/texts/tutorial/stats/stats8.lua
index 4b05491c8725b46e077e11f6263fc5e135f40798..1f5fbf78bd2d94354ce40f44f661cfe06f1d01ae 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats8.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats8.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/stats/stats9.lua b/game/modules/tome/data/texts/tutorial/stats/stats9.lua
index d577773bd1e5380c5276c288a0a72d473c054f33..2fc73e20b3b8535de09f516b52425082717b8593 100644
--- a/game/modules/tome/data/texts/tutorial/stats/stats9.lua
+++ b/game/modules/tome/data/texts/tutorial/stats/stats9.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/tactics1.lua b/game/modules/tome/data/texts/tutorial/tactics1.lua
index 7b65e6f08bf91c5e6fa9e799b0426cbcd5251f3c..5e5fb51f8b3fe0e557b49b66ae409f1c1c8ad13a 100644
--- a/game/modules/tome/data/texts/tutorial/tactics1.lua
+++ b/game/modules/tome/data/texts/tutorial/tactics1.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/tactics2.lua b/game/modules/tome/data/texts/tutorial/tactics2.lua
index 11f233f76782ae72f987103b2d57e7aa80d59821..b4197241875863567c9cd9a51660cadcb60d47ce 100644
--- a/game/modules/tome/data/texts/tutorial/tactics2.lua
+++ b/game/modules/tome/data/texts/tutorial/tactics2.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/tutorial/talents.lua b/game/modules/tome/data/texts/tutorial/talents.lua
index ef6793651b1b1299379066ac5601891ecc8ae57f..92d277c7ecde70674240e6a3f709ad14e2a1adf6 100644
--- a/game/modules/tome/data/texts/tutorial/talents.lua
+++ b/game/modules/tome/data/texts/tutorial/talents.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -24,7 +24,7 @@ if not game.player.tutored_levels then
 end
 
 return [[You now possess the Shield Pummel and Shield Wall talents.
-Talents show up in the lower right part of the screen with their assigned hotkey.
+Talents show up in the lower left part of the screen with their assigned hotkey.
 You can right-click on a talent to remove it from the list, or you can add talents by pressing 'M' to get the talents list and then pressing a hotkey.
 Hotkeys by default are the 1 to 0 keys, and can also be assigned to items.
 
diff --git a/game/modules/tome/data/texts/tutorial/terrain.lua b/game/modules/tome/data/texts/tutorial/terrain.lua
index f09507a64dda7dfb08407c9456e1bd490340ffc8..e9da3c21a6ef459416ec2957b57c49f75475fe8e 100644
--- a/game/modules/tome/data/texts/tutorial/terrain.lua
+++ b/game/modules/tome/data/texts/tutorial/terrain.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-adventurer.lua b/game/modules/tome/data/texts/unlock-adventurer.lua
index 80e67c8c4ea2eef6ec5f4b1b5b676341238aea7f..c126768e9e99c49dc09ef76b78108539bc3e7ce1 100644
--- a/game/modules/tome/data/texts/unlock-adventurer.lua
+++ b/game/modules/tome/data/texts/unlock-adventurer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-afflicted_cursed.lua b/game/modules/tome/data/texts/unlock-afflicted_cursed.lua
index bf6c496b906136431e8304438a2ba901b0cc8afb..076bf9a71feb2ed7758121477081e8e6201eb162 100644
--- a/game/modules/tome/data/texts/unlock-afflicted_cursed.lua
+++ b/game/modules/tome/data/texts/unlock-afflicted_cursed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-afflicted_doomed.lua b/game/modules/tome/data/texts/unlock-afflicted_doomed.lua
index af138f3e1e6d48a140313d48bd8e5a7c49558645..b973d7a65226aa35bafaa01d1b9a41b7f8e082a3 100644
--- a/game/modules/tome/data/texts/unlock-afflicted_doomed.lua
+++ b/game/modules/tome/data/texts/unlock-afflicted_doomed.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-birth_transmo_chest.lua b/game/modules/tome/data/texts/unlock-birth_transmo_chest.lua
index 02d6d06f8cdaaaeb3f7abdf0a2f4b30579062ad5..a8054fff8ab63f9d1c1a368883e555cfb7472365 100644
--- a/game/modules/tome/data/texts/unlock-birth_transmo_chest.lua
+++ b/game/modules/tome/data/texts/unlock-birth_transmo_chest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-birth_zigur_sacrifice.lua b/game/modules/tome/data/texts/unlock-birth_zigur_sacrifice.lua
index ddb8182c59b1087656fa8fbf77c136549a902359..b16321e54258855e4806491fcebc6a29164ec279 100644
--- a/game/modules/tome/data/texts/unlock-birth_zigur_sacrifice.lua
+++ b/game/modules/tome/data/texts/unlock-birth_zigur_sacrifice.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-campaign_arena.lua b/game/modules/tome/data/texts/unlock-campaign_arena.lua
index 69dce6cc4d63402de8d53495378d13a2872b26dc..fa8d2da04566320ed34f226b2c3f51573fab4254 100644
--- a/game/modules/tome/data/texts/unlock-campaign_arena.lua
+++ b/game/modules/tome/data/texts/unlock-campaign_arena.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-campaign_infinite_dungeon.lua b/game/modules/tome/data/texts/unlock-campaign_infinite_dungeon.lua
index 89a021fa23705c73005b06c342f95897769f2b5f..752c1f360ffd9b48839850b00ceed82e3dd469ba 100644
--- a/game/modules/tome/data/texts/unlock-campaign_infinite_dungeon.lua
+++ b/game/modules/tome/data/texts/unlock-campaign_infinite_dungeon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-chronomancer_paradox_mage.lua b/game/modules/tome/data/texts/unlock-chronomancer_paradox_mage.lua
index b3bcfabb2f34d49571c4f9d9383bc2bd928c88d7..00efd40fd99ea40a39f16b64d93dd387e3158a05 100644
--- a/game/modules/tome/data/texts/unlock-chronomancer_paradox_mage.lua
+++ b/game/modules/tome/data/texts/unlock-chronomancer_paradox_mage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-chronomancer_temporal_warden.lua b/game/modules/tome/data/texts/unlock-chronomancer_temporal_warden.lua
index bd3669d79ce4eebbdbfe7b5af85afbf0b5cc8ff8..ad235e28dd3efa2f3b5f08e164f502bb002acfa4 100644
--- a/game/modules/tome/data/texts/unlock-chronomancer_temporal_warden.lua
+++ b/game/modules/tome/data/texts/unlock-chronomancer_temporal_warden.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-corrupter_corruptor.lua b/game/modules/tome/data/texts/unlock-corrupter_corruptor.lua
index 2d5104201369966d8c06a486f3d5473998d8bfdd..4507a1cd335859944c48f63bb62a636e1d8493a7 100644
--- a/game/modules/tome/data/texts/unlock-corrupter_corruptor.lua
+++ b/game/modules/tome/data/texts/unlock-corrupter_corruptor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-corrupter_reaver.lua b/game/modules/tome/data/texts/unlock-corrupter_reaver.lua
index c0e5d3722be5d4f997dcb46f990556fa6165662f..80089dbfff8b5345749cfa0297177175ee90b1c8 100644
--- a/game/modules/tome/data/texts/unlock-corrupter_reaver.lua
+++ b/game/modules/tome/data/texts/unlock-corrupter_reaver.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-cosmetic_class_alchemist_drolem.lua b/game/modules/tome/data/texts/unlock-cosmetic_class_alchemist_drolem.lua
index 604419d7c80f316c5af7e5eb173b0d003be878a6..a2f9cf6fe7479dadb3c9c190366fdebe66fce4f6 100644
--- a/game/modules/tome/data/texts/unlock-cosmetic_class_alchemist_drolem.lua
+++ b/game/modules/tome/data/texts/unlock-cosmetic_class_alchemist_drolem.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-cosmetic_race_dwarf_female_beard.lua b/game/modules/tome/data/texts/unlock-cosmetic_race_dwarf_female_beard.lua
index 818d102f99291ecd74301a9f3c27bd9cff990358..18a18b01f3fa0d56135bccbccf947716724f2f26 100644
--- a/game/modules/tome/data/texts/unlock-cosmetic_race_dwarf_female_beard.lua
+++ b/game/modules/tome/data/texts/unlock-cosmetic_race_dwarf_female_beard.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-cosmetic_race_human_redhead.lua b/game/modules/tome/data/texts/unlock-cosmetic_race_human_redhead.lua
index 075331a308a9374dc2a0722d4fc4a40b9f91b912..26bf7997ce12febbe741a5a5b23b084355e9602c 100644
--- a/game/modules/tome/data/texts/unlock-cosmetic_race_human_redhead.lua
+++ b/game/modules/tome/data/texts/unlock-cosmetic_race_human_redhead.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-difficulty_insane.lua b/game/modules/tome/data/texts/unlock-difficulty_insane.lua
index 746d77d476c4118033b9fee9c190ce4015439e65..f7897566f44b68140931f2843211e1f99f25e779 100644
--- a/game/modules/tome/data/texts/unlock-difficulty_insane.lua
+++ b/game/modules/tome/data/texts/unlock-difficulty_insane.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -26,6 +26,7 @@ But no! If nightmare mode couldn't bring you down, Insane mode will!
 Insane features:#YELLOW#
 - All zone levels increased by 120% + 5
 - All creature talent levels increased by 100%
+- Bosses will have randomly selected talents
 - Player rank is normal instead of elite
 - Player can earn Insane version of achievements if also playing in Roguelike permadeath mode.
 
diff --git a/game/modules/tome/data/texts/unlock-difficulty_madness.lua b/game/modules/tome/data/texts/unlock-difficulty_madness.lua
index 063dc1433ddd09b890a07876e630f4b734e78810..b6d2bfdb2d75f9f7fd9c1baddb32e0cbbbf040c9 100644
--- a/game/modules/tome/data/texts/unlock-difficulty_madness.lua
+++ b/game/modules/tome/data/texts/unlock-difficulty_madness.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,6 +27,7 @@ Madness features:#YELLOW#
 - All zone levels increased by 150% + 10
 - All creature talent levels increased by 170%
 - Rare creatures are far more frequent and random bosses start to appear
+- Bosses will have randomly selected talents
 - Player is being hunted! Randomly all foes in a radius will get a feeling of where she/he is
 - Player rank is normal instead of elite
 - Player can earn Madness version of achievements if also playing in Roguelike or Adventure permadeath mode.
diff --git a/game/modules/tome/data/texts/unlock-divine_anorithil.lua b/game/modules/tome/data/texts/unlock-divine_anorithil.lua
index 51e75e6429570f14b2bd26a16d78c656d9ac76c9..1e3a1a366b139aa385a9440600c8d79a92d39dbc 100644
--- a/game/modules/tome/data/texts/unlock-divine_anorithil.lua
+++ b/game/modules/tome/data/texts/unlock-divine_anorithil.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua b/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua
index 4cef9a197b21daadc6297d54b79580698b720eed..baa260825c495f06a158a86902893c9407402714 100644
--- a/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua
+++ b/game/modules/tome/data/texts/unlock-divine_sun_paladin.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-mage.lua b/game/modules/tome/data/texts/unlock-mage.lua
index 0a7676fd53cec02cfd0bf17acdcaafd1151383c5..e2571ddee6baa14749bcb9717763b5ccf5fd01bf 100644
--- a/game/modules/tome/data/texts/unlock-mage.lua
+++ b/game/modules/tome/data/texts/unlock-mage.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-mage_cryomancer.lua b/game/modules/tome/data/texts/unlock-mage_cryomancer.lua
index 70657d5a9097d4220f3c906212de9990398e2c96..28d938c89ae6c9e9c2a66d6c4bf59a33b0c5c8fd 100644
--- a/game/modules/tome/data/texts/unlock-mage_cryomancer.lua
+++ b/game/modules/tome/data/texts/unlock-mage_cryomancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-mage_geomancer.lua b/game/modules/tome/data/texts/unlock-mage_geomancer.lua
index 4b6ddb6c837da5853cfe76df15a56ee885a88c8d..44540f4c7280d8d90641cd4ffb76fa4e56a97850 100644
--- a/game/modules/tome/data/texts/unlock-mage_geomancer.lua
+++ b/game/modules/tome/data/texts/unlock-mage_geomancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-mage_necromancer.lua b/game/modules/tome/data/texts/unlock-mage_necromancer.lua
index cfdb2845f1714d9d699d398dedcb04866c423620..59fd2430b5bd0ef5abb0293a71098606501b8548 100644
--- a/game/modules/tome/data/texts/unlock-mage_necromancer.lua
+++ b/game/modules/tome/data/texts/unlock-mage_necromancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-mage_pyromancer.lua b/game/modules/tome/data/texts/unlock-mage_pyromancer.lua
index 5b69ac40338229ba257418462c3982fea30a905a..0cc30773c523f15f14268ea1252a32a58e49f853 100644
--- a/game/modules/tome/data/texts/unlock-mage_pyromancer.lua
+++ b/game/modules/tome/data/texts/unlock-mage_pyromancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-mage_tempest.lua b/game/modules/tome/data/texts/unlock-mage_tempest.lua
index cbcd0e884145c0c35704168356689e6004c41d00..34ca7a09d535492f777bf6c5804c5a14fbeba90a 100644
--- a/game/modules/tome/data/texts/unlock-mage_tempest.lua
+++ b/game/modules/tome/data/texts/unlock-mage_tempest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-psionic_mindslayer.lua b/game/modules/tome/data/texts/unlock-psionic_mindslayer.lua
index 00fac9d9dc455de6d8651ffacf3a7f1ecd0284d8..64a222bc2b5304eccf94ef3f596527257175bcb2 100644
--- a/game/modules/tome/data/texts/unlock-psionic_mindslayer.lua
+++ b/game/modules/tome/data/texts/unlock-psionic_mindslayer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-psionic_solipsist.lua b/game/modules/tome/data/texts/unlock-psionic_solipsist.lua
index 3fbc82f5a7bad1acfc096e177a00841372aebc4c..8fe1d961b5dbec843cb2719155c9aea78a807391 100644
--- a/game/modules/tome/data/texts/unlock-psionic_solipsist.lua
+++ b/game/modules/tome/data/texts/unlock-psionic_solipsist.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-rogue_marauder.lua b/game/modules/tome/data/texts/unlock-rogue_marauder.lua
index 911211163816167b70dc17d4be7892cb37a38ecc..517cb21fb9ae127f4413b1846618dacfa5afc7a3 100644
--- a/game/modules/tome/data/texts/unlock-rogue_marauder.lua
+++ b/game/modules/tome/data/texts/unlock-rogue_marauder.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-rogue_poisons.lua b/game/modules/tome/data/texts/unlock-rogue_poisons.lua
index 8d376133944cd8e1d91b00251e59e36578fab2e1..586263b686c1a82e8caa4d738be628e0a5011e77 100644
--- a/game/modules/tome/data/texts/unlock-rogue_poisons.lua
+++ b/game/modules/tome/data/texts/unlock-rogue_poisons.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-undead_ghoul.lua b/game/modules/tome/data/texts/unlock-undead_ghoul.lua
index 20221477b68e7b4820c3fe0acb0708d2bdeeaf3c..d0fba83c2cd37a798a657aa5e9f7d6b8d5a81d97 100644
--- a/game/modules/tome/data/texts/unlock-undead_ghoul.lua
+++ b/game/modules/tome/data/texts/unlock-undead_ghoul.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-undead_skeleton.lua b/game/modules/tome/data/texts/unlock-undead_skeleton.lua
index 170535819337391b5ae188a7c10e13045bf28b51..c3661f946b84c951d587051ddda2e286cebac117 100644
--- a/game/modules/tome/data/texts/unlock-undead_skeleton.lua
+++ b/game/modules/tome/data/texts/unlock-undead_skeleton.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-warrior_brawler.lua b/game/modules/tome/data/texts/unlock-warrior_brawler.lua
index cbaaec670454164901ce19350201637267b24b2c..86b8c105ab2defa68d7d6979b0de73cb785a1429 100644
--- a/game/modules/tome/data/texts/unlock-warrior_brawler.lua
+++ b/game/modules/tome/data/texts/unlock-warrior_brawler.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-wilder_oozemancer.lua b/game/modules/tome/data/texts/unlock-wilder_oozemancer.lua
index 9ac91391e9f1c770d961d10ef50972505f32d4b3..7dbbbefd0dafdd76aca3f503fec823ad91f31ed5 100644
--- a/game/modules/tome/data/texts/unlock-wilder_oozemancer.lua
+++ b/game/modules/tome/data/texts/unlock-wilder_oozemancer.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-wilder_summoner.lua b/game/modules/tome/data/texts/unlock-wilder_summoner.lua
index b1df6fee195feb069b5ed833434afb32f83060f6..ff847d5024dc7aa9c6546e1a3abc713ef993233d 100644
--- a/game/modules/tome/data/texts/unlock-wilder_summoner.lua
+++ b/game/modules/tome/data/texts/unlock-wilder_summoner.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-wilder_wyrmic.lua b/game/modules/tome/data/texts/unlock-wilder_wyrmic.lua
index 041a3fb677e0e83543508ac8f610e07e0915cf30..99376b9068dbcbd8d91dc9e5f14b8b41493320cd 100644
--- a/game/modules/tome/data/texts/unlock-wilder_wyrmic.lua
+++ b/game/modules/tome/data/texts/unlock-wilder_wyrmic.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/texts/unlock-yeek.lua b/game/modules/tome/data/texts/unlock-yeek.lua
index 47a3a0b4aafdae33b5e116064ecf70984425be88..32b5aa88cd4a0a03c4e8ec295aa1087a09b168ea 100644
--- a/game/modules/tome/data/texts/unlock-yeek.lua
+++ b/game/modules/tome/data/texts/unlock-yeek.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -21,7 +21,7 @@ return "New Race: #LIGHT_GREEN#Yeek",
 [[
 Yeeks are a mysterious race of small humanoids native to the tropical island of Rel.
 Their body is covered with white fur and their disproportionate heads give them a ridiculous look, yet they are a cunning and willful race.
-Although they are now nearly unheard of in Maj'Eyal, they spent many centuries as secret slaves to the halfling nation of Nargol.
+Although they are now nearly unheard of in Maj'Eyal, they spent many centuries as secret slaves to the Halfling nation of Nargol.
 They gained their freedom during the Age of Pyre and have since then followed 'The Way' - a unity of minds enforced by their powerful psionics.
 
 You have helped a Yeek Wayist and can now create a new character with the #LIGHT_GREEN#Yeek race#WHITE#.
diff --git a/game/modules/tome/data/texts/win.lua b/game/modules/tome/data/texts/win.lua
index 9e95675fa10ceb0ffbeb9d66e641297465bd1949..4b4f65351d14dcba2abbac1a60af23f89cdbcb58 100644
--- a/game/modules/tome/data/texts/win.lua
+++ b/game/modules/tome/data/texts/win.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/3x3/base.lua b/game/modules/tome/data/tilesets/3x3/base.lua
index 7077b92775bb66fec64be5d35fec6a3c7aab0e49..08d52ab06944ed7fe1c30968b3a394cfe8f60e13 100644
--- a/game/modules/tome/data/tilesets/3x3/base.lua
+++ b/game/modules/tome/data/tilesets/3x3/base.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/3x3/tunnel.lua b/game/modules/tome/data/tilesets/3x3/tunnel.lua
index 678942cd785afdb36db371535deff923cacbe4de..f3d7ad8ded47427de67f069f94434b3430451314 100644
--- a/game/modules/tome/data/tilesets/3x3/tunnel.lua
+++ b/game/modules/tome/data/tilesets/3x3/tunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/3x3/windy_tunnel.lua b/game/modules/tome/data/tilesets/3x3/windy_tunnel.lua
index 65371b81f5bab7637e48580786ca8cfe2f967663..ffb821b426b341169931bf6e54771a739c5fa4a6 100644
--- a/game/modules/tome/data/tilesets/3x3/windy_tunnel.lua
+++ b/game/modules/tome/data/tilesets/3x3/windy_tunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/5x5/base.lua b/game/modules/tome/data/tilesets/5x5/base.lua
index 7624122e78d26cfe0d455ffd55ec7f709f90d1e4..78b719efd0998e1db1458791deefdba5e30947d7 100644
--- a/game/modules/tome/data/tilesets/5x5/base.lua
+++ b/game/modules/tome/data/tilesets/5x5/base.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/5x5/basic_rooms.lua b/game/modules/tome/data/tilesets/5x5/basic_rooms.lua
index b2a256ea367cbcf95377c1d3d947473400dbc50d..d62f09dfa6a4b003fdc387df8962bb410186b092 100644
--- a/game/modules/tome/data/tilesets/5x5/basic_rooms.lua
+++ b/game/modules/tome/data/tilesets/5x5/basic_rooms.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/5x5/crypt.lua b/game/modules/tome/data/tilesets/5x5/crypt.lua
index e784c5b3741d02b8bf416fb7406ca803487362cd..438430606b02de2cbb134c851dc24444ad4b3150 100644
--- a/game/modules/tome/data/tilesets/5x5/crypt.lua
+++ b/game/modules/tome/data/tilesets/5x5/crypt.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/5x5/tunnel.lua b/game/modules/tome/data/tilesets/5x5/tunnel.lua
index b9a23bc357d036b6febe41a0f3c09c9cb6d75620..97147d2533b5c974c5d9cbe640701a27e3408388 100644
--- a/game/modules/tome/data/tilesets/5x5/tunnel.lua
+++ b/game/modules/tome/data/tilesets/5x5/tunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/5x5/windy_tunnel.lua b/game/modules/tome/data/tilesets/5x5/windy_tunnel.lua
index bbc15eaac2ffb0ba8bf44d694618345ed8161dd5..0a95f35a4b02b8a227a957d885bc4873e45df801 100644
--- a/game/modules/tome/data/tilesets/5x5/windy_tunnel.lua
+++ b/game/modules/tome/data/tilesets/5x5/windy_tunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/7x7/base.lua b/game/modules/tome/data/tilesets/7x7/base.lua
index 22bb104f4645d12befa36650e02096a98bfd2a63..16c6d3de58e143a86c38cd88d6f5b8fc866198bb 100644
--- a/game/modules/tome/data/tilesets/7x7/base.lua
+++ b/game/modules/tome/data/tilesets/7x7/base.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/tilesets/7x7/tunnel.lua b/game/modules/tome/data/tilesets/7x7/tunnel.lua
index eaecfd76e8034fd8dad98a07cd4db624d051782c..cb83d37f2850dfde29387373752846b8452e0eee 100644
--- a/game/modules/tome/data/tilesets/7x7/tunnel.lua
+++ b/game/modules/tome/data/tilesets/7x7/tunnel.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index e7cab69531b239167681a5a74503b8bbfbd45df3..d80e1414a229cb27c4a532401661d41ceb7cdd7e 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/timed_effects/floor.lua b/game/modules/tome/data/timed_effects/floor.lua
index a580c81cf6e4fd57d30b91966477e4ad0255f47e..1fe47509503078510340d6b026b5b170b8cc4f23 100644
--- a/game/modules/tome/data/timed_effects/floor.lua
+++ b/game/modules/tome/data/timed_effects/floor.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua
index def955e80d53952817faaf969240f5927e6572af..8241a0677284878aa87d4c0d6e2851615f8955a9 100644
--- a/game/modules/tome/data/timed_effects/magical.lua
+++ b/game/modules/tome/data/timed_effects/magical.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -1019,7 +1019,7 @@ newEffect{
 	desc = "Providence",
 	long_desc = function(self, eff) return ("The target is under protection and its life regeneration is boosted by %d."):format(eff.power) end,
 	type = "magical",
-	subtype = { light=true },
+	subtype = { light=true, shield=true },
 	status = "beneficial",
 	parameters = {},
 	on_timeout = function(self, eff)
@@ -1348,7 +1348,7 @@ newEffect{
 	desc = "Bone Shield",
 	long_desc = function(self, eff) return ("Any attacks doing more than %d%% of your life is reduced to %d%%."):format(eff.power, eff.power) end,
 	type = "magical",
-	subtype = { arcane=true },
+	subtype = { arcane=true, shield=true },
 	status = "beneficial",
 	parameters = { power=30 },
 	on_gain = function(self, err) return "#Target# protected by flying bones.", "+Bone Shield" end,
@@ -2244,6 +2244,7 @@ newEffect{
 		self:effectTemporaryValue(eff, "no_breath", 1)
 		self:effectTemporaryValue(eff, "cut_immune", eff.power)
 		self:effectTemporaryValue(eff, "stun_immune", eff.power)
+		self:effectTemporaryValue(eff, "is_shivgoroth", 1)
 
 		if self.hotkey and self.isHotkeyBound then
 			local pos = self:isHotkeyBound("talent", self.T_SHIVGOROTH_FORM)
@@ -2278,6 +2279,58 @@ newEffect{
 	end,
 }
 
+--Duplicate for Frost Lord's Chain
+newEffect{
+	name = "SHIVGOROTH_FORM_LORD", image = "talents/shivgoroth_form.png",
+	desc = "Shivgoroth Form",
+	long_desc = function(self, eff) return ("The target assumes the form of a shivgoroth."):format() end,
+	type = "magical",
+	subtype = { ice=true },
+	status = "beneficial",
+	parameters = {},
+	on_gain = function(self, err) return "#Target# turns into a shivgoroth!", "+Shivgoroth Form" end,
+	on_lose = function(self, err) return "#Target# is no longer transformed.", "-Shivgoroth Form" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "damage_affinity", {[DamageType.COLD]=50 + 100 * eff.power})
+		self:effectTemporaryValue(eff, "resists", {[DamageType.COLD]=100 * eff.power / 2})
+		self:effectTemporaryValue(eff, "no_breath", 1)
+		self:effectTemporaryValue(eff, "cut_immune", eff.power)
+		self:effectTemporaryValue(eff, "stun_immune", eff.power)
+		self:effectTemporaryValue(eff, "is_shivgoroth", 1)
+
+		if self.hotkey and self.isHotkeyBound then
+			local pos = self:isHotkeyBound("talent", self.T_SHIV_LORD)
+			if pos then
+				self.hotkey[pos] = {"talent", self.T_ICE_STORM}
+			end
+		end
+
+		local ohk = self.hotkey
+		self.hotkey = nil -- Prevent assigning hotkey, we just did
+		self:learnTalent(self.T_ICE_STORM, true, eff.lvl, {no_unlearn=true})
+		self.hotkey = ohk
+
+		self.replace_display = mod.class.Actor.new{
+			image="invis.png", add_mos = {{image = "npc/elemental_ice_greater_shivgoroth.png", display_y = -1, display_h = 2}},
+		}
+		self:removeAllMOs()
+		game.level.map:updateMap(self.x, self.y)
+	end,
+	deactivate = function(self, eff)
+		if self.hotkey and self.isHotkeyBound then
+			local pos = self:isHotkeyBound("talent", self.T_ICE_STORM)
+			if pos then
+				self.hotkey[pos] = {"talent", self.T_SHIV_LORD}
+			end
+		end
+
+		self:unlearnTalent(self.T_ICE_STORM, eff.lvl, nil, {no_unlearn=true})
+		self.replace_display = nil
+		self:removeAllMOs()
+		game.level.map:updateMap(self.x, self.y)
+	end,
+}
+
 newEffect{
 	name = "KEEPER_OF_REALITY", image = "effects/continuum_destabilization.png",
 	desc = "Keepers of Reality Rally Call",
@@ -2345,3 +2398,244 @@ newEffect{
 		self:removeShaderAura("essence_of_the_dead")
 	end,
 }
+
+newEffect{
+	name = "ICE_ARMOUR", image = "talents/ice_armour.png",
+	desc = "Ice Armour",
+	long_desc = function(self, eff) return ("The target is covered in a layer of ice. Its armour is increased by %d, it deals %0.1f Cold damage to attackers that hit in melee, and 50%% of its damage is converted to cold."):format(eff.armor, self:damDesc(DamageType.COLD, eff.dam)) end,
+	type = "magical",
+	subtype = { cold=true, armour=true, },
+	status = "beneficial",
+	parameters = {armor=10, dam=10},
+	on_gain = function(self, err) return "#Target# is covered in icy armor!" end,
+	on_lose = function(self, err) return "#Target#'s ice coating crumbles away." end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "combat_armor", eff.armor)
+		self:effectTemporaryValue(eff, "on_melee_hit", {[DamageType.COLD]=eff.dam})
+		self:effectTemporaryValue(eff, "all_damage_convert", DamageType.COLD)
+		self:effectTemporaryValue(eff, "all_damage_convert_percent", 50)
+		self:addShaderAura("ice_armour", "crystalineaura", {}, "particles_images/spikes.png")
+		eff.particle = self:addParticles(Particles.new("snowfall", 1))
+	end,
+	deactivate = function(self, eff)
+		self:removeShaderAura("ice_armour")
+		self:removeParticles(eff.particle)
+	end,
+}
+
+newEffect{
+	name = "CAUSTIC_GOLEM", image = "talents/caustic_golem.png",
+	desc = "Caustic Golem",
+	long_desc = function(self, eff) return ("The target is coated with acid. When struck in melee, it has a %d%% chance to spray a cone of acid towards the attacker doing %0.1f damage."):format(eff.chance, self:damDesc(DamageType.ACID, eff.dam)) end,
+	type = "magical",
+	subtype = { acid=true, coating=true, },
+	status = "beneficial",
+	parameters = {chance=10, dam=10},
+	on_gain = function(self, err) return "#Target# is coated in acid!" end,
+	on_lose = function(self, err) return "#Target#'s acid coating is diluted." end,
+	callbackOnMeleeHit = function(self, eff, src)
+		if self.turn_procs.caustic_golem then return end
+		if not rng.percent(eff.chance) then return end
+		self.turn_procs.caustic_golem = true
+
+		self:project({type="cone", cone_angle=25, range=0, radius=4}, src.x, src.y, DamageType.ACID, eff.dam)
+		game.level.map:particleEmitter(self.x, self.y, 4, "breath_acid", {radius=4, tx=src.x-self.x, ty=src.y-self.y, spread=20})
+	end,
+}
+
+newEffect{
+	name = "SUN_VENGEANCE", image = "talents/sun_vengeance.png",
+	desc = "Sun's Vengeance",
+	long_desc = function(self, eff) return ("The target is filled with the Sun's fury, next Sun Beam will be instant cast."):format() end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "beneficial",
+	parameters = {},
+	on_gain = function(self, err) return "#Target# is filled with the Sun's fury!", "+Sun's Vengeance" end,
+	on_lose = function(self, err) return "#Target#'s solar fury subsides.", "-Sun's Vengeance" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "amplify_sun_beam", 25)
+	end
+}
+
+newEffect{
+	name = "PATH_OF_THE_SUN", image = "talents/path_of_the_sun.png",
+	desc = "Path of the Sun",
+	long_desc = function(self, eff) return ("The target is able to instantly travel alongside Sun Paths."):format() end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "beneficial",
+	parameters = {},
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "walk_sun_path", 1)
+	end
+}
+
+newEffect{
+	name = "SUNCLOAK", image = "talents/suncloak.png",
+	desc = "Suncloak",
+	long_desc = function(self, eff) return ("The target is filled with the Sun's fury, next Sun Beam will be instant cast."):format() end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "beneficial",
+	parameters = {},
+	on_gain = function(self, err) return "#Target# is filled with the Sun's fury!", "+Sun's Vengeance" end,
+	on_lose = function(self, err) return "#Target#'s solar fury subsides.", "-Sun's Vengeance" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "resists", {all=eff.resists})
+		self:effectTemporaryValue(eff, "reduce_detrimental_status_effects_time", eff.reduce)
+		eff.particle = self:addParticles(Particles.new("suncloak", 1))
+	end,
+	deactivate = function(self, eff)
+		self:removeParticles(eff.particle)
+	end,
+}
+
+newEffect{
+	name = "ABSORPTION_STRIKE", image = "talents/absorption_strike.png",
+	desc = "Absorption Strike",
+	long_desc = function(self, eff) return ("The target's light has been drained, reducing light resistance by %d%%."):format(eff.power) end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "detrimental",
+	parameters = { power = 10 },
+	on_gain = function(self, err) return "#Target# is drained from light!", "+Absorption Strike" end,
+	on_lose = function(self, err) return "#Target#'s light is back.", "-Absorption Strike" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "resists", {[DamageType.LIGHT]=-eff.power})
+	end,
+}
+
+newEffect{
+	name = "MARK_OF_LIGHT", image = "talents/mark_of_light.png",
+	desc = "Mark of Light",
+	long_desc = function(self, eff) return ("The creature that marked the target with light will be healed for all melee attacks against it by %d%%."):format(eff.power) end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "detrimental",
+	parameters = { power = 10 },
+	on_gain = function(self, err) return "#Target# is marked by light!", "+Mark of Light" end,
+	on_lose = function(self, err) return "#Target#'s mark disappears.", "-Mark of Light" end,
+	callbackOnMeleeHit = function(self, eff, src, dam)
+		if eff.src == src then
+			src:heal(dam * eff.power / 100, self)
+			if core.shader.active(4) then
+				eff.src:addParticles(Particles.new("shader_shield_temp", 1, {toback=true, size_factor=1.5, y=-0.3, img="healcelestial", life=25}, {type="healing", time_factor=2000, beamsCount=20, noup=2.0, beamColor1={0xd8/255, 0xff/255, 0x21/255, 1}, beamColor2={0xf7/255, 0xff/255, 0x9e/255, 1}, circleDescendSpeed=3}))
+				eff.src:addParticles(Particles.new("shader_shield_temp", 1, {toback=false,size_factor=1.5, y=-0.3, img="healcelestial", life=25}, {type="healing", time_factor=2000, beamsCount=20, noup=1.0, beamColor1={0xd8/255, 0xff/255, 0x21/255, 1}, beamColor2={0xf7/255, 0xff/255, 0x9e/255, 1}, circleDescendSpeed=3}))
+			end
+		end
+	end,
+}
+
+newEffect{
+	name = "RIGHTEOUS_STRENGTH", image = "talents/righteous_strength.png",
+	desc = "Righteous Strength",
+	long_desc = function(self, eff) return ("Increase light and physical damage by %d%%."):format(eff.power) end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "beneficial",
+	parameters = { power = 10 },
+	on_gain = function(self, err) return "#Target# shines with light!", "+Righteous Strength" end,
+	on_lose = function(self, err) return "#Target# stops shining.", "-Righteous Strength" end,
+	charges = function(self, eff) return eff.charges end,
+	on_merge = function(self, old_eff, new_eff)
+		new_eff.charges = math.min(old_eff.charges + 1, 3)
+		new_eff.power = math.min(new_eff.power + old_eff.power, new_eff.max_power)
+		self:removeTemporaryValue("inc_damage", old_eff.tmpid)
+		new_eff.tmpid = self:addTemporaryValue("inc_damage", {[DamageType.PHYSICAL] = new_eff.power, [DamageType.LIGHT] = new_eff.power})
+		return new_eff
+	end,
+	activate = function(self, eff)
+		eff.charges = 1
+		eff.tmpid = self:addTemporaryValue("inc_damage", {[DamageType.PHYSICAL] = eff.power, [DamageType.LIGHT] = eff.power})
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("inc_damage", eff.tmpid)
+	end,
+}
+
+newEffect{
+	name = "LIGHTBURN", image = "talents/righteous_strength.png",
+	desc = "Lightburn",
+	long_desc = function(self, eff) return ("The creature is burnt by light, dealing %0.2f light damage each turn and reducing armour by %d."):format(eff.dam, eff.armor) end,
+	type = "magical",
+	subtype = { sun=true, },
+	status = "detrimental",
+	parameters = { armor = 10, dam = 10 },
+	on_gain = function(self, err) return "#Target# burns with light!", "+Lightburn" end,
+	on_lose = function(self, err) return "#Target# stops burning.", "-Lightburn" end,
+	on_merge = function(self, old_eff, new_eff)
+		-- Merge the flames!
+		local olddam = old_eff.dam * old_eff.dur
+		local newdam = new_eff.dam * new_eff.dur
+		local dur = math.ceil((old_eff.dur + new_eff.dur) / 2)
+		old_eff.dur = dur
+		old_eff.dam = (olddam + newdam) / dur
+		return old_eff
+	end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "combat_armor", -eff.armor)
+	end,
+	on_timeout = function(self, eff)
+		DamageType:get(DamageType.LIGHT).projector(eff.src, self.x, self.y, DamageType.LIGHT, eff.dam)
+	end,
+}
+
+newEffect{
+	name = "ILLUMINATION",
+	desc = "Illumination ", image = "talents/illumination.png",
+	long_desc = function(self, eff) return ("The target glows in the light, reducing its stealth and invisibility power by %d, defense by %d and looses all evasion bonus from being unseen."):format(eff.power, eff.def) end,
+	type = "physical",
+	subtype = { sun=true },
+	status = "detrimental",
+	parameters = { power=20, def=20 },
+	on_gain = function(self, err) return nil, "+Illumination" end,
+	on_lose = function(self, err) return nil, "-Illumination" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "inc_stealth", -eff.power)
+		if self:attr("invisible") then self:effectTemporaryValue(eff, "invisible", -eff.power) end
+		self:effectTemporaryValue(eff, "combat_def", -eff.def)
+		self:effectTemporaryValue(eff, "blind_fighted", 1)
+	end,
+}
+
+newEffect{
+	name = "LIGHT_BURST",
+	desc = "Light Burst ", image = "talents/light_burst.png",
+	long_desc = function(self, eff) return ("The is invigorated when dealing damage with Searing Sight."):format() end,
+	type = "physical",
+	subtype = { sun=true },
+	status = "beneficial",
+	parameters = { max=1 },
+	on_gain = function(self, err) return nil, "+Light Burst" end,
+	on_lose = function(self, err) return nil, "-Light Burst" end,
+}
+
+newEffect{
+	name = "LIGHT_BURST_SPEED",
+	desc = "Light Burst Speed ", image = "effects/light_burst_speed.png",
+	long_desc = function(self, eff) return ("The is invigorated from Searing Sight, increasing movement speed by %d%%."):format(eff.charges * 10) end,
+	type = "physical",
+	subtype = { sun=true },
+	status = "beneficial",
+	parameters = {},
+	charges = function(self, eff) return eff.charges end,
+	on_gain = function(self, err) return nil, "+Light Burst Speed" end,
+	on_lose = function(self, err) return nil, "-Light Burst Speed" end,
+	on_merge = function(self, old_eff, new_eff)
+		local p = self:hasEffect(self.EFF_LIGHT_BURST)
+		if not p then p = {max=1} end
+
+		new_eff.charges = math.min(old_eff.charges + 1, p.max)
+		self:removeTemporaryValue("movement_speed", old_eff.tmpid)
+		new_eff.tmpid = self:addTemporaryValue("movement_speed", new_eff.charges * 0.1)
+		return new_eff
+	end,
+	activate = function(self, eff)
+		eff.charges = 1
+		eff.tmpid = self:addTemporaryValue("movement_speed", eff.charges * 0.1)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("movement_speed", eff.tmpid)
+	end,
+}
diff --git a/game/modules/tome/data/timed_effects/mental.lua b/game/modules/tome/data/timed_effects/mental.lua
index fdbcdf894509b875ed5db30ae2dfbe9b99a609fd..843bb1a581e3b21ac4df13a7d3c79f00a00fe0bd 100644
--- a/game/modules/tome/data/timed_effects/mental.lua
+++ b/game/modules/tome/data/timed_effects/mental.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -159,9 +159,7 @@ newEffect{
 newEffect{
 	name = "BATTLE_SHOUT", image = "talents/battle_shout.png",
 	desc = "Battle Shout",
-	
 	long_desc = function(self, eff) return ("Increases maximum life and stamina by %d%%. When the effect ends, the extra life and stamina will be lost."):format(eff.power) end,
-	
 	type = "mental",
 	subtype = { morale=true },
 	status = "beneficial",
@@ -194,10 +192,9 @@ newEffect{
 	on_gain = function(self, err) return "#Target#'s will is shattered.", "+Battle Cry" end,
 	on_lose = function(self, err) return "#Target# regains some of its will.", "-Battle Cry" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("combat_def", -eff.power)
-	end,
-	deactivate = function(self, eff)
-		self:removeTemporaryValue("combat_def", eff.tmpid)
+		self:effectTemporaryValue("combat_def", -eff.power)
+		self:effectTemporaryValue("no_evasion", 1)
+		self:effectTemporaryValue("blind_fighted", 1)
 	end,
 }
 
@@ -279,7 +276,7 @@ newEffect{
 		local tids = {}
 		for tid, lev in pairs(self.talents) do
 			local t = self:getTalentFromId(tid)
-			if t and not self.talents_cd[tid] and t.mode == "activated" and not t.innate and t.no_energy ~= true then tids[#tids+1] = t end
+			if t and not self.talents_cd[tid] and t.mode == "activated" and not t.innate and util.getval(t.no_energy, self, t) ~= true then tids[#tids+1] = t end
 		end
 		for i = 1, 4 do
 			local t = rng.tableRemove(tids)
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 4fec274ee4a0c1e9b3111bb324e3024540c63496..7c0cbcdb954c5f46b3d5d665192c8397551e5e91 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,6 +25,41 @@ local Map = require "engine.Map"
 local Level = require "engine.Level"
 local Combat = require "mod.class.interface.Combat"
 
+-- Design:  Temporary immobility in exchange for a large stat buff.
+newEffect{
+	name = "TREE_OF_LIFE", image = "shockbolt/object/artifact/tree_of_life.png",
+	desc = "You have taken root!",
+	long_desc = function(self, eff) return "You have taken root becoming one with nature.  Or at least the ground.  Your health, armor, and armor hardiness are improved but you cannot move." end,
+	type = "other",
+	subtype = { nature=true },
+	--status = "detrimental",
+	parameters = {},
+	on_gain = function(self, err) return "#LIGHT_BLUE##Target# takes root.", "+Pinned" end,
+	on_lose = function(self, err) return "#LIGHT_BLUE##Target# is no longer a badass tree.", "-Pinned" end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "never_move", 1)
+		self:effectTemporaryValue(eff, "max_life", 300)
+		self:effectTemporaryValue(eff, "combat_armor", 20)
+		self:effectTemporaryValue(eff, "combat_armor_hardiness", 20)
+		
+		self.replace_display = mod.class.Actor.new{
+			image="invis.png", 
+			add_mos = {{image = "npc/giant_treant_wrathroot.png", 
+			display_y = -1, 
+			display_h = 2}},
+        }
+		
+		self:removeAllMOs()
+		game.level.map:updateMap(self.x, self.y)
+
+	end,
+	deactivate = function(self, eff)
+		self.replace_display = nil
+		self:removeAllMOs()
+		game.level.map:updateMap(self.x, self.y)
+	end,
+}
+
 newEffect{
 	name = "INFUSION_COOLDOWN", image = "effects/infusion_cooldown.png",
 	desc = "Infusion Saturation",
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index 8a643823e9d6c4d500481b0f36dceb95358ec0c7..2d464a3b04aaeaf5e4364d15a46569b983effd7f 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -24,6 +24,27 @@ local Chat = require "engine.Chat"
 local Map = require "engine.Map"
 local Level = require "engine.Level"
 
+
+newEffect{
+	name = "DELIRIOUS_CONCUSSION", image = "talents/slippery_moss.png",
+	desc = "Concussion",
+	long_desc = function(self, eff) return ("The target can't think straight, causing their actions to fail."):format() end,
+	type = "physical",
+	subtype = { mental=true },
+	status = "detrimental",
+	parameters = {},
+	on_gain = function(self, err) return "#Target#'s brain isn't quite working right!", "+Concussion" end,
+	on_lose = function(self, err) return "#Target# regains their concentration.", "-Concussion" end,
+	activate = function(self, eff)
+		eff.tmpid = self:addTemporaryValue("talent_fail_chance", 100)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("talent_fail_chance", eff.tmpid)
+	end,
+}
+
+
+
 newEffect{
 	name = "CUT", image = "effects/cut.png",
 	desc = "Bleeding",
@@ -43,6 +64,13 @@ newEffect{
 		old_eff.power = (olddam + newdam) / dur
 		return old_eff
 	end,
+	activate = function(self, eff)
+		if eff.src:knowTalent(self.T_BLOODY_BUTCHER) then
+			local t = eff.src:getTalentFromId(eff.src.T_BLOODY_BUTCHER)
+			local resist = math.min(t.getResist(eff.src, t), math.max(0, self:combatGetResist(DamageType.PHYSICAL)))
+			self:effectTemporaryValue(eff, "resists", {[DamageType.PHYSICAL] = -resist})
+		end
+	end,
 	on_timeout = function(self, eff)
 		DamageType:get(DamageType.PHYSICAL).projector(eff.src or self, self.x, self.y, DamageType.PHYSICAL, eff.power)
 	end,
@@ -182,6 +210,7 @@ newEffect{
 	end,
 }
 
+
 newEffect{
 	name = "CRIPPLING_POISON", image = "talents/crippling_poison.png",
 	desc = "Crippling Poison",
@@ -297,7 +326,7 @@ newEffect{
 		local tids = {}
 		for tid, lev in pairs(self.talents) do
 			local t = self:getTalentFromId(tid)
-			if t and not self.talents_cd[tid] and t.mode == "activated" and not t.innate and t.no_energy ~= true then tids[#tids+1] = t end
+			if t and not self.talents_cd[tid] and t.mode == "activated" and not t.innate and util.getval(t.no_energy, self, t) ~= true then tids[#tids+1] = t end
 		end
 		for i = 1, 4 do
 			local t = rng.tableRemove(tids)
@@ -333,7 +362,7 @@ newEffect{
 		local tids = {}
 		for tid, lev in pairs(self.talents) do
 			local t = self:getTalentFromId(tid)
-			if t and not self.talents_cd[tid] and t.mode == "activated" and not t.innate and t.no_energy ~= true then tids[#tids+1] = t end
+			if t and not self.talents_cd[tid] and t.mode == "activated" and not t.innate and util.getval(t.no_energy, self, t) ~= true then tids[#tids+1] = t end
 		end
 		for i = 1, 4 do
 			local t = rng.tableRemove(tids)
@@ -684,6 +713,25 @@ newEffect{
 	end,
 }
 
+-- artifact wild infusion
+newEffect{
+	name = "PRIMAL_ATTUNEMENT", image = "talents/infusion__wild.png",
+	desc = "Primal Attunement",
+	long_desc = function(self, eff) return ("The target is attuned to the wild, increasing all damage affinity by %d%%."):format(eff.power) end,
+	type = "physical",
+	subtype = { nature=true },
+	status = "beneficial",
+	parameters = { power=20 },
+	on_gain = function(self, err) return "#Target# attunes to the wild.", "+Primal" end,
+	on_lose = function(self, err) return "#Target# is no longer one with nature.", "-Primal" end,
+	activate = function(self, eff)
+		eff.pid = self:addTemporaryValue("damage_affinity", {all=eff.power})
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("damage_affinity", eff.pid)
+	end,
+}
+
 newEffect{
 	name = "PURGE_BLIGHT", image = "talents/infusion__wild.png",
 	desc = "Purge Blight",
@@ -752,16 +800,16 @@ newEffect{
 newEffect{
 	name = "SUNDER_ARMOUR", image = "talents/sunder_armour.png",
 	desc = "Sunder Armour",
-	long_desc = function(self, eff) return ("The target's armour is broken, reducing it by %d."):format(eff.power) end,
+	long_desc = function(self, eff) return ("The target's armour and saves are broken, reducing them by %d."):format(eff.power) end,
 	type = "physical",
 	subtype = { sunder=true },
 	status = "detrimental",
 	parameters = { power=10 },
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("combat_armor", -eff.power)
-	end,
-	deactivate = function(self, eff)
-		self:removeTemporaryValue("combat_armor", eff.tmpid)
+		self:effectTemporaryValue(eff, "combat_armor", -eff.power)
+		self:effectTemporaryValue(eff, "combat_physresist", -eff.power)
+		self:effectTemporaryValue(eff, "combat_spellresist", -eff.power)
+		self:effectTemporaryValue(eff, "combat_mentalresist", -eff.power)
 	end,
 }
 
@@ -914,6 +962,28 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "HUNTER_SPEED", image = "talents/infusion__movement.png",
+	desc = "Hunter",
+	long_desc = function(self, eff) return ("You are searching for a new target. 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",
+	parameters = {power=1000},
+	on_gain = function(self, err) return "#Target# prepares for the next kill!.", "+Hunter" end,
+	on_lose = function(self, err) return "#Target# slows down.", "-Hunter" end,
+	activate = function(self, eff)
+		eff.tmpid = self:addTemporaryValue("wild_speed", 1)
+		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("movement_speed", eff.moveid)
+	end,
+}
+
 newEffect{
 	name = "STEP_UP", image = "talents/step_up.png",
 	desc = "Step Up",
@@ -1023,54 +1093,67 @@ newEffect{
 newEffect{
 	name = "GRAPPLING", image = "talents/clinch.png",
 	desc = "Grappling",
-	long_desc = function(self, eff) return ("The target is engaged in a grapple.  Any movement will break the effect as will some unarmed talents."):format() end,
+	long_desc = function(self, eff) return ("Engaged in a grapple draining %d stamina per turn and redirecting %d%% of damage taken to %s.  Any movement will break the effect as will some unarmed talents."):format(eff.drain, eff.sharePct*100, eff.trgt.name or "unknown") end,
 	type = "physical",
 	subtype = { grapple=true, },
 	status = "beneficial",
-	parameters = {},
+	parameters = {trgt, sharePct = 0.1, drain = 0},
 	on_gain = function(self, err) return "#Target# is engaged in a grapple!", "+Grappling" end,
 	on_lose = function(self, err) return "#Target# has released the hold.", "-Grappling" end,
 	on_timeout = function(self, eff)
 		local p = eff.trgt:hasEffect(eff.trgt.EFF_GRAPPLED)
-		local drain = 6 - (self:getTalentLevelRaw(self.T_CLINCH) or 0)
 		if not p or p.src ~= self or core.fov.distance(self.x, self.y, eff.trgt.x, eff.trgt.y) > 1 or eff.trgt.dead or not game.level:hasEntity(eff.trgt) then
 			self:removeEffect(self.EFF_GRAPPLING)
 		else
-			self:incStamina(-drain)
+			self:incStamina(-eff.drain)
 		end
 	end,
 	activate = function(self, eff)
 	end,
 	deactivate = function(self, eff)
 	end,
+	callbackOnHit = function(self, eff, cb, src)
+		if not src then return cb.value end
+		local share = cb.value * eff.sharePct
+		
+		-- deal the redirected damage as physical because I don't know how to preserve the damage type in a callback
+		DamageType:get(DamageType.PHYSICAL).projector(self or eff.src, eff.trgt.x, eff.trgt.y, DamageType.PHYSICAL, share)
+		
+		return cb.value - share
+	end,
 }
 
 newEffect{
 	name = "GRAPPLED", image = "talents/grab.png",
 	desc = "Grappled",
-	long_desc = function(self, eff) return ("The target is grappled, unable to move, and has its defense and attack reduced by %d."):format(eff.power) end,
+	long_desc = function(self, eff) return ("The target is grappled, unable to move, and limited in its offensive capabilities.\n#RED#Silenced\nPinned\n%s\n%s\n%s"):format("Damage reduced by " .. eff.reduce, "Slowed by " .. eff.slow, "Damage per turn " .. math.ceil(eff.power) ) end,
 	type = "physical",
 	subtype = { grapple=true, pin=true },
 	status = "detrimental",
-	parameters = {},
+	parameters = {silence = 0, slow = 0, reduce = 1, power = 1},
 	remove_on_clone = true,
 	on_gain = function(self, err) return "#Target# is grappled!", "+Grappled" end,
 	on_lose = function(self, err) return "#Target# is free from the grapple.", "-Grappled" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("never_move", 1)
-		eff.def = self:addTemporaryValue("combat_def", -eff.power)
-		eff.atk = self:addTemporaryValue("combat_atk", -eff.power)
+		self:effectTemporaryValue(eff, "never_move", 1)
+		self:effectTemporaryValue(eff, "combat_dam", -eff.reduce)
+		if (eff.silence > 0) then
+			self:effectTemporaryValue(eff, "silence", 1)
+		end
+		if (eff.slow > 0) then
+			self:effectTemporaryValue(eff, "global_speed_add", -eff.slow)
+		end
 	end,
 	on_timeout = function(self, eff)
 		if not self.x or not eff.src or not eff.src.x or core.fov.distance(self.x, self.y, eff.src.x, eff.src.y) > 1 or eff.src.dead or not game.level:hasEntity(eff.src) then
 			self:removeEffect(self.EFF_GRAPPLED)
+		else
+			DamageType:get(DamageType.PHYSICAL).projector(eff.src or self, self.x, self.y, DamageType.PHYSICAL, eff.power)
 		end
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("combat_atk", eff.atk)
-		self:removeTemporaryValue("combat_def", eff.def)
-		self:removeTemporaryValue("never_move", eff.tmpid)
-	end,
+
+	end, 
 }
 
 newEffect{
@@ -1796,7 +1879,7 @@ newEffect{
 			game:delayedLogMessage(self, src, "block_heal", "#CRIMSON##Source# heals from blocking with %s shield!", string.his_her(self))
 		end
 		if eff.properties.ref and src.life then DamageType.defaultProjector(src, src.x, src.y, type, blocked, tmp, true) end
-		if (self:knowTalent(self.T_RIPOSTE) or amt == 0) and src.life then src:setEffect(src.EFF_COUNTERSTRIKE, (1 + dur_inc) * (src.global_speed or 1), {power=eff.power, no_ct_effect=true, src=self, crit_inc=crit_inc, nb=nb}) end -- specify duration here to avoid stacking for high speed attackers
+		if (self:knowTalent(self.T_RIPOSTE) or amt == 0) and src.life then src:setEffect(src.EFF_COUNTERSTRIKE, (1 + dur_inc) * (src.global_speed or 1), {power=eff.power, no_ct_effect=true, src=self, crit_inc=crit_inc, nb=nb}) if eff.properties.sb then if src:canBe("disarm") then src:setEffect(src.EFF_DISARMED, 3, {apply_power=self:combatPhysicalpower()}) else game.logSeen(target, "%s resists the disarming attempt!", src.name:capitalize()) end end end-- specify duration here to avoid stacking for high speed attackers
 		return amt
 	end,
 	activate = function(self, eff)
@@ -1969,7 +2052,7 @@ newEffect{
 newEffect{
 	name = "DISABLE", image = "talents/cripple.png",
 	desc = "Disable",
-	long_desc = function(self, eff) return ("The target is disabled, reducing movement speed by %d%% and physical power by %d."):format(eff.speed * 100, eff.atk) end,
+	long_desc = function(self, eff) return ("The target is disabled, reducing movement speed by %d%% and accuracy by %d."):format(eff.speed * 100, eff.atk) end,
 	type = "physical",
 	subtype = { wound=true },
 	status = "detrimental",
@@ -2121,41 +2204,79 @@ newEffect{
 	type = "physical",
 	subtype = { mucus=true },
 	status = "beneficial",
-	parameters = { },
+	parameters = {},
 	on_gain = function(self, err) return nil, "+Mucus" end,
 	on_lose = function(self, err) return nil, "-Mucus" end,
 	on_timeout = function(self, eff)
-		self:callTalent(self.T_MUCUS, nil, self.x, self.y, self:getTalentLevel(self.T_MUCUS) >=4 and 1 or 0)
+		self:callTalent(self.T_MUCUS, nil, self.x, self.y, self:getTalentLevel(self.T_MUCUS) >=4 and 1 or 0, eff)
 	end,
 }
 
 newEffect{
 	name = "CORROSIVE_NATURE", image = "talents/corrosive_nature.png",
 	desc = "Corrosive Nature",
-	long_desc = function(self, eff) return ("Acid resistance decreased by %d%%."):format(eff.power) end,
+	long_desc = function(self, eff) return ("Acid damage increased by %d%%."):format(eff.power) end,
 	type = "physical",
 	subtype = { nature=true, acid=true },
-	status = "detrimental",
-	parameters = { power=10 },
-	on_gain = function(self, err) return "#Target# is vulnerable to acid.", "+Corrosive Nature" end,
-	on_lose = function(self, err) return "#Target# is less vulnerable to acid.", "-Corrosive Nature" end,
+	status = "beneficial",
+	parameters = { power=1, bonus_level=1},
+	charges = function(self, eff) return math.round(eff.power) end,
+	on_gain = function(self, err) return "#Target#'s acid damage is more potent.", "+Corrosive Nature" end,
+	on_lose = function(self, err) return "#Target#'s acid damage is no longer so potent.", "-Corrosive Nature" end,
+	on_merge = function(self, eff, new_eff)
+		if game.turn < eff.last_update + 10 then return eff end -- update once a turn
+		local t = self:getTalentFromId(self.T_CORROSIVE_NATURE)
+		eff.dur = t.getDuration(self, t)
+		if eff.bonus_level >=5 then return eff end
+		game.logSeen(self, "%s's corrosive nature intensifies!",self.name:capitalize())
+		eff.last_update = game.turn
+		eff.bonus_level = eff.bonus_level + 1
+		eff.power = t.getAcidDamage(self, t, eff.bonus_level)
+		self:removeTemporaryValue("inc_damage", eff.dam_id)
+		eff.dam_id = self:addTemporaryValue("inc_damage", {[DamageType.ACID]=eff.power})
+		return eff
+	end,
 	activate = function(self, eff)
-		self:effectTemporaryValue(eff, "resists", {[DamageType.ACID]=-eff.power})
+		eff.power = self:callTalent(self.T_CORROSIVE_NATURE, "getAcidDamage")
+		eff.dam_id = self:addTemporaryValue("inc_damage", {[DamageType.ACID]=eff.power})
+		eff.last_update = game.turn
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("inc_damage", eff.dam_id)
 	end,
 }
 
 newEffect{
 	name = "NATURAL_ACID", image = "talents/natural_acid.png",
 	desc = "Natural Acid",
-	long_desc = function(self, eff) return ("Nature resistance decreased by %d%%."):format(eff.power) end,
+	long_desc = function(self, eff) return ("Nature damage increased by %d%%."):format(eff.power) end,
 	type = "physical",
 	subtype = { nature=true, acid=true },
-	status = "detrimental",
-	parameters = { power=10 },
-	on_gain = function(self, err) return "#Target# is vulnerable to nature.", "+Natural Acid" end,
-	on_lose = function(self, err) return "#Target# is less vulnerable to nature.", "-Nature Acid" end,
+	status = "beneficial",
+	parameters = { power=1, bonus_level=1},
+	charges = function(self, eff) return math.round(eff.power) end,
+	on_gain = function(self, err) return "#Target#'s nature damage is more potent.", "+Natural Acid" end,
+	on_lose = function(self, err) return "#Target#'s nature damage is no longer so potent.", "-Nature Acid" end,
+	on_merge = function(self, eff, new_eff)
+		if game.turn < eff.last_update + 10 then return eff end -- update once a turn
+		local t = self:getTalentFromId(self.T_NATURAL_ACID)
+		eff.dur = t.getDuration(self, t)
+		if eff.bonus_level >=5 then return eff end
+		game.logSeen(self, "%s's natural acid becomes more concentrated!",self.name:capitalize())
+		eff.last_update = game.turn
+		eff.bonus_level = eff.bonus_level + 1
+		eff.power = t.getNatureDamage(self, t, eff.bonus_level)
+		self:removeTemporaryValue("inc_damage", eff.dam_id)
+		eff.dam_id = self:addTemporaryValue("inc_damage", {[DamageType.NATURE]=eff.power})
+		return eff
+	end,
 	activate = function(self, eff)
-		self:effectTemporaryValue(eff, "resists", {[DamageType.NATURE]=-eff.power})
+		eff.power = self:callTalent(self.T_NATURAL_ACID, "getNatureDamage")
+		eff.dam_id = self:addTemporaryValue("inc_damage", {[DamageType.NATURE]=eff.power})
+		eff.last_update = game.turn
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("inc_damage", eff.dam_id)
 	end,
 }
 
@@ -2197,7 +2318,7 @@ newEffect{
 newEffect{
 	name = "JUGGERNAUT", image = "talents/juggernaut.png",
 	desc = "Juggernaut",
-	long_desc = function(self, eff) return ("Reduces physical damage received by %d%%."):format(eff.power) end,
+	long_desc = function(self, eff) return ("Reduces physical damage received by %d%% and provides %d%% chances to ignore critial hits."):format(eff.power, eff.crits) end,
 	type = "physical",
 	subtype = { superiority=true },
 	status = "beneficial",
@@ -2206,10 +2327,57 @@ newEffect{
 	on_lose = function(self, err) return "#Target#'s skin returns to normal.", "-Juggernaut" end,
 	activate = function(self, eff)
 		eff.particle = self:addParticles(Particles.new("stone_skin", 1, {density=4}))
-		eff.tmpid = self:addTemporaryValue("resists", {[DamageType.PHYSICAL]=eff.power})
+		self:effectTemporaryValue(eff, "resists", {[DamageType.PHYSICAL]=eff.power})
+		self:effectTemporaryValue(eff, "ignore_direct_crits", eff.crits)
 	end,
 	deactivate = function(self, eff)
 		self:removeParticles(eff.particle)
-		self:removeTemporaryValue("resists", eff.tmpid)
+	end,
+}
+
+newEffect{
+	name = "NATURE_REPLENISHMENT", image = "talents/meditation.png",
+	desc = "Natural Replenishment",
+	long_desc = function(self, eff) return ("The target has been directly exposed to arcane energies and has responded by reasserting it's connection to nature, restoring %0.1f Equilibrium per turn."):format(eff.power) end,
+	type = "physical",
+	subtype = { nature=true },
+	status = "beneficial",
+	parameters = {power=1},
+	on_gain = function(self, err) return ("#Target# defiantly reasserts %s connection to nature!"):format(string.his_her(self)), "+Nature Replenishment" end,
+	on_lose = function(self, err) return "#Target# stops restoring Equilibrium.", "-Nature Replenishment" end,
+	on_timeout = function(self, eff)
+		self:incEquilibrium(-eff.power)
+	end,
+}
+
+
+newEffect{
+	name = "BERSERKER_RAGE", image = "talents/berserker.png",
+	desc = "Berserker Rage",
+	long_desc = function(self, eff) return ("Increases critical hit chance by %d%%."):format(eff.power) end,
+	type = "physical",
+	subtype = { tactic=true },
+	status = "beneficial",
+	decrease = 0, no_remove = true,
+	parameters = {power=1},
+	charges = function(self, eff) return ("%0.1f%%"):format(eff.power) end,
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "combat_physcrit", eff.power)
+	end,
+}
+
+
+newEffect{
+	name = "RELENTLESS_FURY", image = "talents/relentless_fury.png",
+	desc = "Relentless Fury",
+	long_desc = function(self, eff) return ("Increases stamina regeneration by %d, movement and attack speed by %d%%."):format(eff.stamina, eff.speed) end,
+	type = "physical",
+	subtype = { tactic=true },
+	status = "beneficial",
+	parameters = {stamina=1, speed=10},
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "stamina_regen", eff.stamina)
+		self:effectTemporaryValue(eff, "movement_speed", eff.speed/100)
+		self:effectTemporaryValue(eff, "combat_physspeed", eff.speed/100)
 	end,
 }
diff --git a/game/modules/tome/data/wda/eyal.lua b/game/modules/tome/data/wda/eyal.lua
index c019c67e2317fdbea5928db816fca9ea46972c0b..372e1ba495c8f2af2aad50ac63f4c91d319a4487 100644
--- a/game/modules/tome/data/wda/eyal.lua
+++ b/game/modules/tome/data/wda/eyal.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/abashed-expanse/grids.lua b/game/modules/tome/data/zones/abashed-expanse/grids.lua
index c834ba28d608d0e9b451e19aba3cb6edb51428b8..223828cf154e05ddfb5a9c66cef582daea30575d 100644
--- a/game/modules/tome/data/zones/abashed-expanse/grids.lua
+++ b/game/modules/tome/data/zones/abashed-expanse/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/abashed-expanse/npcs.lua b/game/modules/tome/data/zones/abashed-expanse/npcs.lua
index daf2b8ebff9bd25e5059ad39d1cd2e8fdd1d29d5..c675886e069f62f6c3760fbbadd703c8b93ce7ea 100644
--- a/game/modules/tome/data/zones/abashed-expanse/npcs.lua
+++ b/game/modules/tome/data/zones/abashed-expanse/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -34,7 +34,7 @@ newEntity{ base="BASE_NPC_LOSGOROTH", define_as = "SPACIAL_DISTURBANCE",
 	color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png"},
 	resolvers.generic(function(e) if engine.Map.tiles.nicer_tiles then e:addParticles(engine.Particles.new("wormhole", 1, {image="shockbolt/npc/elemental_losgoroth_space_disturbance", speed=1})) end end),
-	desc = [[A hole in the fabric of space, it seems to be the source of the expanse unstability.]],
+	desc = [[A hole in the fabric of space, it seems to be the source of the expanse instability.]],
 	killer_message = "and folded out of existence",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 150, life_rating = 10, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/abashed-expanse/objects.lua b/game/modules/tome/data/zones/abashed-expanse/objects.lua
index 4bd50f7744a8a94f3c52316466234f308d80da7d..86032254d4a7533078310ec46c961974b8dd7c9f 100644
--- a/game/modules/tome/data/zones/abashed-expanse/objects.lua
+++ b/game/modules/tome/data/zones/abashed-expanse/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{ base = "BASE_LITE", define_as = "VOID_STAR",
 	color = colors.GREY,
 	encumber = 1,
 	rarity = false,
-	desc = [[It looks like a very tiny star - deep black - and yet it somehow shines.]],
+	desc = [[It looks like a very tiny star -- deep black -- and yet it somehow shines.]],
 	cost = 120,
 	material_level = 2,
 
diff --git a/game/modules/tome/data/zones/abashed-expanse/traps.lua b/game/modules/tome/data/zones/abashed-expanse/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/abashed-expanse/traps.lua
+++ b/game/modules/tome/data/zones/abashed-expanse/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/abashed-expanse/zone.lua b/game/modules/tome/data/zones/abashed-expanse/zone.lua
index 32053fd0aed1fe2938374c21927be9f59ed83b61..3ee9efbef7ca204ade3a090e12bb0fd518ca49e8 100644
--- a/game/modules/tome/data/zones/abashed-expanse/zone.lua
+++ b/game/modules/tome/data/zones/abashed-expanse/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -43,7 +43,7 @@ return {
 			no_tunnels = true,
 			rooms = {"space_tree_pod"},
 			['.'] = "FLOATING_ROCKS",
-			['T'] = {"BURNT_TREE1","BURNT_TREE2","BURNT_TREE3","BURNT_TREE4","BURNT_TREE5","BURNT_TREE6","BURNT_TREE7","BURNT_TREE8","BURNT_TREE9","BURNT_TREE10","BURNT_TREE11","BURNT_TREE12","BURNT_TREE13","BURNT_TREE14","BURNT_TREE15","BURNT_TREE16","BURNT_TREE17","BURNT_TREE18","BURNT_TREE19","BURNT_TREE20",},
+			['T'] = "BURNT_TREE",
 			['#'] = "OUTERSPACE",
 			wormhole = "WORMHOLE",
 			door = "GRASS",
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/events.lua b/game/modules/tome/data/zones/ancient-elven-ruins/events.lua
index 634c33b3eac80f82f126c4c5008413d4355023d6..b1603a660df06cf2c290c6a81ee9a0194d847bfe 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/events.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/grids.lua b/game/modules/tome/data/zones/ancient-elven-ruins/grids.lua
index efb73a89c8729383aa76a41be96da3b727b4dc1a..049816b7ebccd29a4a9dce95a4f1859474684a2a 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/grids.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua b/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua
index 71c2f6a1c27a271cc802c42d2734afd1547ab0e9..a47adda81f0eb98c060b0cf358305aae5e0d4730 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -110,7 +110,7 @@ newEntity{ base = "BASE_NPC_MUMMY",
 newEntity{ base = "BASE_NPC_MUMMY",
 	allow_infinite_dungeon = true,
 	name = "animated mummy wrappings", color=colors.SLATE, display='[', image="object/mummy_wrappings.png",
-	desc = [[An animated set of mummy wrappings, without a corpse inside... It seems like it cannot move.]],
+	desc = [[An animated set of mummy wrappings, without a corpse inside; it seems like it cannot move.]],
 	level_range = {7, nil}, exp_worth = 1,
 	rarity = 4,
 	max_life = resolvers.rngavg(20,40), life_rating=4,
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/objects.lua b/game/modules/tome/data/zones/ancient-elven-ruins/objects.lua
index 0251964bc5679f0d3a9093a13affdfce0324a7d7..8ad09e32d772ee38a37dbd78680e09e8b8786457 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/objects.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -24,7 +24,7 @@ for i = 1, 3 do
 newEntity{ base = "BASE_LORE",
 	define_as = "NOTE"..i,
 	name = "ancient papyrus scroll", lore="ancient-elven-ruins-note-"..i,
-	desc = [[This seems to be the recalls of the last days of a great Shaloren mage]],
+	desc = [[This seems to be an account of the last days of a great Shaloren mage.]],
 	rarity = false,
 }
 end
@@ -37,7 +37,7 @@ newEntity{ base = "BASE_MUMMY_WRAPPING", define_as = "BINDINGS_ETERNAL_NIGHT",
 	unique = true,
 	name = "Bindings of Eternal Night", image = "object/artifact/bindings_of_eternal_night.png",
 	unided_name = "blackened, slithering mummy wrappings",
-	desc = [[Woven through with fel magics of undeath, these bindings suck the light and life out of everything they touch. Any who don them will find themselves suspended in a nightmarish limbo between life and death.]],
+	desc = [[Woven through with fell magics of undeath, these bindings suck the light and life out of everything they touch. Any who don them will find themselves suspended in a nightmarish limbo between life and death.]],
 	color = colors.DARK_GREY,
 	level_range = {1, 50},
 	rarity = 20,
@@ -78,7 +78,7 @@ newEntity{ base = "BASE_LEATHER_CAP", define_as = "CROWN_ETERNAL_NIGHT",
 	unique = true,
 	name = "Crown of Eternal Night", image = "object/artifact/crown_of_eternal_night.png",
 	unided_name = "blackened crown",
-	desc = [[This crown looks useless, yet you can feel it woven with fell magics of undeath. Maybe it has a use.]],
+	desc = [[This crown looks useless, yet you can feel it is woven with fell magics of undeath. Maybe it has a use.]],
 	color = colors.DARK_GREY,
 	level_range = {1, 50},
 	cost = 100,
@@ -106,10 +106,10 @@ newEntity{ base = "BASE_LEATHER_CAP", define_as = "CROWN_ETERNAL_NIGHT",
 		self:specialSetAdd({"wielder","inc_damage"}, {[engine.DamageType.DARKNESS]=20})
 		self:specialSetAdd({"wielder","talents_types_mastery"}, {["cunning/stealth"] = 0.1,})
 		self.use_talent = { id = "T_RETCH", level = 2, power = 47 }
-		game.logSeen(who, "#ANTIQUE_WHITE#The Crown of Eternal Night seems to react with the Bindings, you feel tremounduous dark power.")
+		game.logSeen(who, "#ANTIQUE_WHITE#The Crown of Eternal Night seems to react with the Bindings, you feel tremendous dark power.")
 	end,
 	on_set_broken = function(self, who)
-		game.logPlayer(who, "#ANTIQUE_WHITE#The powerful darkness aura you felt vanes away.")
+		game.logPlayer(who, "#ANTIQUE_WHITE#The powerful darkness aura you felt wanes away.")
 		self.use_talent = nil
 	end,
 }
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/traps.lua b/game/modules/tome/data/zones/ancient-elven-ruins/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/traps.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ancient-elven-ruins/zone.lua b/game/modules/tome/data/zones/ancient-elven-ruins/zone.lua
index 562d820481caba0d0cf861ffd94b178c2ceba983..3af0a20c50d6c7ba9f9a679f0cf6a1f4e480492f 100644
--- a/game/modules/tome/data/zones/ancient-elven-ruins/zone.lua
+++ b/game/modules/tome/data/zones/ancient-elven-ruins/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ardhungol/events.lua b/game/modules/tome/data/zones/ardhungol/events.lua
index 1c29ed0c50cdb35acb190103fa7125e9a29a34e6..8f050c766fd5327cb4675109321d76f95154388c 100644
--- a/game/modules/tome/data/zones/ardhungol/events.lua
+++ b/game/modules/tome/data/zones/ardhungol/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ardhungol/grids.lua b/game/modules/tome/data/zones/ardhungol/grids.lua
index ebf6a6d63c095bb3ba4fe0a982600502c4c26bf9..b03591d1c2e38838eb3a5f32c1eca4a0228ab8f8 100644
--- a/game/modules/tome/data/zones/ardhungol/grids.lua
+++ b/game/modules/tome/data/zones/ardhungol/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -20,3 +20,33 @@
 load("/data/general/grids/basic.lua")
 load("/data/general/grids/cave.lua")
 load("/data/general/grids/water.lua")
+
+newEntity{ base="CAVEFLOOR", define_as = "WORMHOLE", nice_tiler = false,
+	name = "unstable wormhole",
+	display = '*', color = colors.GREY,
+	force_clone = true,
+	damage_project = function(self, src, x, y, type, dam)
+		local source_talent = src.__projecting_for and src.__projecting_for.project_type and (src.__projecting_for.project_type.talent_id or src.__projecting_for.project_type.talent) and src.getTalentFromId and src:getTalentFromId(src.__projecting_for.project_type.talent or src.__projecting_for.project_type.talent_id)
+		if _G.type(dam) == "table" and _G.type(dam.dam) == "number" then dam = dam.dam end
+		if dam and source_talent and source_talent.is_spell and rng.percent(dam / 3) and not game.__tmp_ardhungol_projecting then
+			local a = game.level.map(x, y, engine.Map.ACTOR)
+			if a then
+				game.logSeen(src, "#VIOLET#The wormhole absorbs the energy of the spell and teleports %s away!", a.name)
+				a:teleportRandom(x, y, 20)
+			else
+				game.logSeen({x=x,y=y}, "#VIOLET#The wormhole absorbs the energy of the spell and explodes in a burst of nullmagic!")
+				local DT = engine.DamageType
+
+				local grids = core.fov.circle_grids(x, y, 2, true)
+				game.__tmp_ardhungol_projecting = true -- OMFG this is fugly :/
+				for x, yy in pairs(grids) do for y, _ in pairs(yy) do
+					DT:get(DT.MANABURN).projector(self, x, y, DT.MANABURN, util.bound(dam / 2, 1, 200))					
+				end end
+				game.__tmp_ardhungol_projecting = nil
+
+				game.level.map:particleEmitter(x, y, 2, "generic_sploom", {rm=150, rM=180, gm=20, gM=60, bm=180, bM=200, am=80, aM=150, radius=2, basenb=120})
+			end
+		end
+	end,
+	resolvers.generic(function(e) e:addParticles(engine.Particles.new("wormhole", 1, {})) end),
+}
diff --git a/game/modules/tome/data/zones/ardhungol/npcs.lua b/game/modules/tome/data/zones/ardhungol/npcs.lua
index 9a3fe2a66a9ea8b014892cb7bee2bafcd364a0d8..4811ec76e7d4765c7973fdd543dbbfd0133882ef 100644
--- a/game/modules/tome/data/zones/ardhungol/npcs.lua
+++ b/game/modules/tome/data/zones/ardhungol/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{ define_as = "UNGOLE", base = "BASE_NPC_SPIDER",
 	allow_infinite_dungeon = true,
 	name = "Ungolë", color=colors.VIOLET, unique = true,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/spiderkin_spider_ungole.png", display_h=2, display_y=-1}}},
-	desc = [[A huge spider, shrouded in darkness, with red glowing eyes darting at you. She looks hungry.]],
+	desc = [[A huge spider, shrouded in darkness, her red glowing eyes darting to fix on you. She looks hungry.]],
 	killer_message = "and devoured alongside a Sun Paladin",
 	level_range = {30, nil}, exp_worth = 2,
 	female = 1,
diff --git a/game/modules/tome/data/zones/ardhungol/objects.lua b/game/modules/tome/data/zones/ardhungol/objects.lua
index a0b087a6192e9bbf0637f0cb473796c7fde535cd..0eda256c9a9895d14877218b54a037caad5f4c28 100644
--- a/game/modules/tome/data/zones/ardhungol/objects.lua
+++ b/game/modules/tome/data/zones/ardhungol/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -20,6 +20,16 @@
 load("/data/general/objects/objects-far-east.lua")
 load("/data/general/objects/lore/sunwall.lua")
 
+for i = 1, 3 do
+newEntity{ base = "BASE_LORE",
+	define_as = "NOTE"..i,
+	name = "diary page", lore="ardhungol-"..i,
+	desc = [[A page of a diary.]],
+	rarity = false,
+	encumberance = 0,
+}
+end
+
 newEntity{ base = "BASE_ROD",
 	power_source = {nature=true},
 	define_as = "ROD_SPYDRIC_POISON",
diff --git a/game/modules/tome/data/zones/ardhungol/traps.lua b/game/modules/tome/data/zones/ardhungol/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/ardhungol/traps.lua
+++ b/game/modules/tome/data/zones/ardhungol/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ardhungol/zone.lua b/game/modules/tome/data/zones/ardhungol/zone.lua
index 95401ad8586b6a3fcd92c126e50b6171971e03ab..cc5b594f511aa6292737a72e82af57fe14a43791 100644
--- a/game/modules/tome/data/zones/ardhungol/zone.lua
+++ b/game/modules/tome/data/zones/ardhungol/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -39,7 +39,7 @@ return {
 			class = "engine.generator.map.Cavern",
 			zoom = 16,
 			min_floor = 1100,
-			floor = "CAVEFLOOR",
+			floor = function() if rng.percent(96) then return "CAVEFLOOR" else return "WORMHOLE" end end,
 			wall = "CAVEWALL",
 			up = "CAVE_LADDER_UP",
 			down = "CAVE_LADDER_DOWN",
@@ -71,6 +71,9 @@ return {
 	},
 
 	post_process = function(level)
+		-- Place a lore note on each level
+		game:placeRandomLoreObject("NOTE"..level.level)
+
 		game.state:makeAmbientSounds(level, {
 			dungeon2={ chance=250, volume_mod=1, pitch=1, random_pos={rad=10}, files={"ambient/dungeon/dungeon1","ambient/dungeon/dungeon2","ambient/dungeon/dungeon3","ambient/dungeon/dungeon4","ambient/dungeon/dungeon5"}},
 		})
diff --git a/game/modules/tome/data/zones/arena-unlock/grids.lua b/game/modules/tome/data/zones/arena-unlock/grids.lua
index f35f72d19a7c81863481923b6b9c8f77ed3698b1..67c6d117c978f2401550faa2fd8b17344c497036 100644
--- a/game/modules/tome/data/zones/arena-unlock/grids.lua
+++ b/game/modules/tome/data/zones/arena-unlock/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena-unlock/npcs.lua b/game/modules/tome/data/zones/arena-unlock/npcs.lua
index 8e5e2153950a2895af6e7c10da354c4a83550139..aa6a4655ebd37547f5860721c30f015a08af4b6a 100644
--- a/game/modules/tome/data/zones/arena-unlock/npcs.lua
+++ b/game/modules/tome/data/zones/arena-unlock/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -87,7 +87,7 @@ newEntity{ name = "halfling slinger",
 	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.]],
+	desc = [[A Halfling slinger. He seems adept at combat.]],
 	level_range = {6, 20}, exp_worth = 1,
 	rarity = false,
 	max_life = resolvers.rngavg(100,110),
@@ -139,7 +139,7 @@ newEntity{ name = "arcane blade",
 	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.]],
+	desc = [[A Human Arcane Blade. His body shows multiple scars from battle.]],
 	level_range = {6, 21}, exp_worth = 2,
 	rarity = false,
 	max_life = resolvers.rngavg(100,130),
diff --git a/game/modules/tome/data/zones/arena-unlock/objects.lua b/game/modules/tome/data/zones/arena-unlock/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/arena-unlock/objects.lua
+++ b/game/modules/tome/data/zones/arena-unlock/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena-unlock/traps.lua b/game/modules/tome/data/zones/arena-unlock/traps.lua
index d83f2725939596c6f6e8d50bb13dffb85c0ec4a9..1697f82d9b8819575415bbb6fd47e9561d7d87dd 100644
--- a/game/modules/tome/data/zones/arena-unlock/traps.lua
+++ b/game/modules/tome/data/zones/arena-unlock/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena-unlock/zone.lua b/game/modules/tome/data/zones/arena-unlock/zone.lua
index da2d38b8fd074aedddda44be3518cef55fe7b9eb..fb3fd51c22652f5fa86539e4c410a11451e99f4a 100644
--- a/game/modules/tome/data/zones/arena-unlock/zone.lua
+++ b/game/modules/tome/data/zones/arena-unlock/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena/grids.lua b/game/modules/tome/data/zones/arena/grids.lua
index 1663da9fac71bceae39b191ac4634a841fad049a..f176b402ece1d72abd22b39e2cec41324530fcf6 100644
--- a/game/modules/tome/data/zones/arena/grids.lua
+++ b/game/modules/tome/data/zones/arena/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena/npcs.lua b/game/modules/tome/data/zones/arena/npcs.lua
index 9bad95c1e7c813648fd9ed024feee0484479ae1f..a8503c2b97dcb65f2ae989a1df5172fded4f8661 100644
--- a/game/modules/tome/data/zones/arena/npcs.lua
+++ b/game/modules/tome/data/zones/arena/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -66,7 +66,7 @@ newEntity{ name = "skeletal rat",
 	base = "BASE_NPC_RODENT",
 	define_as = "SKELERAT",
 	type = "undead",
-	desc = [[The diminutive skeleton of a giant rat, charged with evil energies. Nobody understands the usefulness of undead rodents until several of them come after you]],
+	desc = [[The diminutive skeleton of a giant rat, charged with evil energies. Nobody understands the usefulness of undead rodents until several of them come after you.]],
 	color = colors.GOLD,
 	level_range = {3, 4},
 	exp_worth = 2,
@@ -375,7 +375,7 @@ newEntity{ name = "Fryjia Loren",
 	type = "humanoid", subtype = "human",
 	display = "@",
 	color=colors.VIOLET,
-	desc = [[A young girl with skin pale as snow. She is small, but deadly in battle, unleashing a constant barrage of ice shards in battle.]],
+	desc = [[A young girl with skin pale as snow. She is small, but deadly in battle, unleashing a constant barrage of ice shards.]],
 	level_range = {12, nil}, exp_worth = 3,
 	rank = 4, unique = true,
 	size_category = 2,
@@ -480,7 +480,7 @@ newEntity{ name = "Valfren Loren",
 	display = "@",
 	color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_human_valfred_loren.png", display_h=2, display_y=-1}}},
-	desc = [[A massive armor with a massive axe containing a massively cursed person. He is cursed to fight eternally.]],
+	desc = [[A massive suit of armor with a massive axe containing a massively cursed person. He is cursed to fight eternally.]],
 	level_range = {16, nil}, exp_worth = 3,
 	rank = 4, unique = true,
 	size_category = 4,
@@ -525,7 +525,7 @@ newEntity{ name = "Rej Arkatis",
 	display = "@",
 	color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_human_rej_arkatis.png", display_h=2, display_y=-1}}},
-	desc = [[A cornac fighter of respectable talent. He emerged from nowhere and became the true master of fighting.]],
+	desc = [[A Cornac fighter of respectable talent. He emerged from nowhere and became the true master of fighting.]],
 	level_range = {1, nil}, exp_worth = 3,
 	rank = 5, unique = true, lite = -5,
 	size_category = 3,
@@ -663,7 +663,7 @@ newEntity{ name = "blood mage",
 	life_rating = 4,
 
 	stats = { str = 7, dex = 11, cun = 1, mag = 11, con = 6 },
-	desc = [[A man dressed in black robes. You feel weak as you hear their ominous chanting.]],
+	desc = [[A man dressed in black robes. You feel weak as you hear his ominous chanting.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = 40,
@@ -744,7 +744,7 @@ newEntity{ name = "trickster",
 	life_rating = 8,
 	lite = -1,
 	stats = { str = 15, dex = 28, cun = 28, mag = 1, con = 7 },
-	desc = [[Stealthy ranged fighters trying to achieve victory with trickery. Be careful or they will shot your heart!]],
+	desc = [[Stealthy ranged fighters trying to achieve victory with trickery. Be careful or they will shoot your heart!]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = 60,
@@ -1061,7 +1061,7 @@ newEntity{ name = "star crusader",
 	life_rating = 10,
 
 	stats = { str=25, dex=25, mag=25, con=8, wil=25 },
-	desc = [[Warriors from afar. They wield the power of light, and a mean sword. Darkness too.]],
+	desc = [[Warriors from afar. They wield the power of light, and a mean sword. Darkness, too.]],
 	level_range = {20, nil}, exp_worth = 2,
 	rarity = 10,
 	max_life = 150,
diff --git a/game/modules/tome/data/zones/arena/objects.lua b/game/modules/tome/data/zones/arena/objects.lua
index cd7172ffe9b0b29f2fc627eec6fe34114c719359..5740caaa51dfc20e199b1159d48deb849d91f608 100644
--- a/game/modules/tome/data/zones/arena/objects.lua
+++ b/game/modules/tome/data/zones/arena/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena/traps.lua b/game/modules/tome/data/zones/arena/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/arena/traps.lua
+++ b/game/modules/tome/data/zones/arena/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/arena/zone.lua b/game/modules/tome/data/zones/arena/zone.lua
index 98e2efa34e9c4e23a78f88a59672ef90a1c41b06..ad08795f885c345e7f6e71a0031ed9e88b6c5b61 100644
--- a/game/modules/tome/data/zones/arena/zone.lua
+++ b/game/modules/tome/data/zones/arena/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/blighted-ruins/events.lua b/game/modules/tome/data/zones/blighted-ruins/events.lua
index 5097d39a89adfba59e526fb6d29304fe1fa0b8ed..5a56e6910ddbb2947aef769499a1dd73edf848b0 100644
--- a/game/modules/tome/data/zones/blighted-ruins/events.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/blighted-ruins/grids.lua b/game/modules/tome/data/zones/blighted-ruins/grids.lua
index ba4ebeab329ff8dcb542acc60b4f794df411cd70..c63d0093c9ab77c4783493660ff72fc5d0895865 100644
--- a/game/modules/tome/data/zones/blighted-ruins/grids.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/blighted-ruins/npcs.lua b/game/modules/tome/data/zones/blighted-ruins/npcs.lua
index 06268b8d460f4aa1a011fc9c02937176aa0bf6f4..c4307a3e3f0e6557e044d53c6aeca12735fe2f05 100644
--- a/game/modules/tome/data/zones/blighted-ruins/npcs.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{
 	type = "humanoid", subtype = "human",
 	display = "p", color=colors.DARK_GREY,
 	name = "Necromancer", color=colors.DARK_GREY,
-	desc = [[A Human dressed in black robes. He mumbles is a harsh tongue. He seems to think you are his slave.]],
+	desc = [[A Human dressed in black robes. He mumbles in a harsh tongue. He seems to think you are his slave.]],
 	level_range = {1, nil}, exp_worth = 1,
 
 	combat = { dam=resolvers.rngavg(5,12), atk=2, apr=6, physspeed=2 },
diff --git a/game/modules/tome/data/zones/blighted-ruins/objects.lua b/game/modules/tome/data/zones/blighted-ruins/objects.lua
index a4ad6ba1df1247bba4ec39534100d52419162716..951bbd32a2ccad7d3a063352e4031777d5b1682e 100644
--- a/game/modules/tome/data/zones/blighted-ruins/objects.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{ define_as = "CLOAK_DECEPTION",
 	name = "Cloak of Deception",
 	display = ")", color=colors.DARK_GREY,
 	encumber = 1,
-	desc = [[A black cloak, with subtle illusion enchantments woven in its very fabric.]],
+	desc = [[A black cloak, with subtle illusion enchantments woven into its very fabric.]],
 
 	wielder = {
 		combat_spellpower = 5,
diff --git a/game/modules/tome/data/zones/blighted-ruins/traps.lua b/game/modules/tome/data/zones/blighted-ruins/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/blighted-ruins/traps.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/blighted-ruins/zone.lua b/game/modules/tome/data/zones/blighted-ruins/zone.lua
index 9c4b2fbfd52063f9046d948e7f5b9572dca6b18d..76b889f005c520ed4067f195a713e23a57ec36e5 100644
--- a/game/modules/tome/data/zones/blighted-ruins/zone.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/briagh-lair/grids.lua b/game/modules/tome/data/zones/briagh-lair/grids.lua
index 73c22660bce2c8a79d314b0266241db25cb4ee6b..6b69856f884287a3d5dcd32590dd0a9e06d0b204 100644
--- a/game/modules/tome/data/zones/briagh-lair/grids.lua
+++ b/game/modules/tome/data/zones/briagh-lair/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/briagh-lair/npcs.lua b/game/modules/tome/data/zones/briagh-lair/npcs.lua
index 194e6de6756f1c84de74dbc36775646be1a37f5b..1427229433b85aba45141ad4001a332fbd78ebed 100644
--- a/game/modules/tome/data/zones/briagh-lair/npcs.lua
+++ b/game/modules/tome/data/zones/briagh-lair/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{ define_as = "BRIAGH",
 	name = "Briagh, Great Sand Wyrm",
 	display = "D", color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/dragon_sand_briagh__great_sand_wyrm.png", display_h=2, display_y=-1}}},
-	desc = [[A towering sand-drake stands before you. This wingless worm is mighty and could easily crush you.]],
+	desc = [[A towering sand drake stands before you. This wingless worm is mighty and could easily crush you.]],
 	level_range = {35, nil}, exp_worth = 2,
 	max_life = 350, life_rating = 29, fixed_rating = true,
 	max_mana = 900, mana_regen=100,
diff --git a/game/modules/tome/data/zones/briagh-lair/objects.lua b/game/modules/tome/data/zones/briagh-lair/objects.lua
index aa08dad8b41ef3b6cc11ea49eb170972816622e1..278c1710268e3b77b18a3a443aaf775435cde711 100644
--- a/game/modules/tome/data/zones/briagh-lair/objects.lua
+++ b/game/modules/tome/data/zones/briagh-lair/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/briagh-lair/traps.lua b/game/modules/tome/data/zones/briagh-lair/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/briagh-lair/traps.lua
+++ b/game/modules/tome/data/zones/briagh-lair/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/briagh-lair/zone.lua b/game/modules/tome/data/zones/briagh-lair/zone.lua
index 7d09d0832396f02a28d96cf3542cb2ea8f7fcf78..6186f7ae9078060fe42330a895a95c86c28d96a5 100644
--- a/game/modules/tome/data/zones/briagh-lair/zone.lua
+++ b/game/modules/tome/data/zones/briagh-lair/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/charred-scar/grids.lua b/game/modules/tome/data/zones/charred-scar/grids.lua
index 4843e55fbfb2c53eccd91610b7c335c951e80195..c210fd243619717fdf805bac1f00824e94542e37 100644
--- a/game/modules/tome/data/zones/charred-scar/grids.lua
+++ b/game/modules/tome/data/zones/charred-scar/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/charred-scar/npcs.lua b/game/modules/tome/data/zones/charred-scar/npcs.lua
index 598159157b85a8e530cfa597a8e3c75a41839a29..53482f9ad181a2ae179f3f4da123b78e404737d0 100644
--- a/game/modules/tome/data/zones/charred-scar/npcs.lua
+++ b/game/modules/tome/data/zones/charred-scar/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/charred-scar/objects.lua b/game/modules/tome/data/zones/charred-scar/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/charred-scar/objects.lua
+++ b/game/modules/tome/data/zones/charred-scar/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/charred-scar/traps.lua b/game/modules/tome/data/zones/charred-scar/traps.lua
index d83f2725939596c6f6e8d50bb13dffb85c0ec4a9..1697f82d9b8819575415bbb6fd47e9561d7d87dd 100644
--- a/game/modules/tome/data/zones/charred-scar/traps.lua
+++ b/game/modules/tome/data/zones/charred-scar/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/charred-scar/zone.lua b/game/modules/tome/data/zones/charred-scar/zone.lua
index 1fcb44c62a09ffd3c0afb0b4de1f85935b2d8fd1..12c43111a2c084932362d29b6efbf59c0144b7b6 100644
--- a/game/modules/tome/data/zones/charred-scar/zone.lua
+++ b/game/modules/tome/data/zones/charred-scar/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/crypt-kryl-feijan/events.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/events.lua
index ebd66ff0e39c0dc405817d50b80ad8274f8c24cf..fece8d6d9e6d5fe000ba907e816d061746edb99b 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/events.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/crypt-kryl-feijan/grids.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/grids.lua
index 01df3471fa4541afc125f7876980f3153a36fcc2..fb09e723881db53901a87272e274fcc3ca2c2863 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/grids.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
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 23a3519f11baed204ae2d376456152090fede552..22f572ccc08e6de708dc98862feb687841d022ab 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -83,7 +83,7 @@ newEntity{ define_as = "MELINDA",
 	display = "@", color=colors.LIGHT_BLUE,
 	image = "terrain/woman_naked_altar.png",
 	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.]],
+	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_complex", ai_state = { ai_target="target_player", talent_in=4, },
 	stats = { str=8, dex=7, mag=8, con=12 },
diff --git a/game/modules/tome/data/zones/crypt-kryl-feijan/objects.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/objects.lua
index 4bf9e46e884ce40c0280b70e8fcfe1b9603daf2e..e369451e970237a00505c0097e730884e6a2e44a 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/objects.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/crypt-kryl-feijan/traps.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/traps.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/crypt-kryl-feijan/zone.lua b/game/modules/tome/data/zones/crypt-kryl-feijan/zone.lua
index b1c43c3df0fd070d19cc8ec6afd429e13e2c930d..80fc0c8f6c8b0ecd0a1ec13fd88121110ab303ed 100644
--- a/game/modules/tome/data/zones/crypt-kryl-feijan/zone.lua
+++ b/game/modules/tome/data/zones/crypt-kryl-feijan/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/daikara/events.lua b/game/modules/tome/data/zones/daikara/events.lua
index 89b7fa4c73a769e394c6dd8af62a603b636facde..88f2dc568f9745f9429c997261a5663c05936e96 100644
--- a/game/modules/tome/data/zones/daikara/events.lua
+++ b/game/modules/tome/data/zones/daikara/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/daikara/grids.lua b/game/modules/tome/data/zones/daikara/grids.lua
index e5cf60a3ccf1e76651c5d6b7254ac15f785fb06c..cc048dfeffa9b5f7632360387001371f4ca10cf0 100644
--- a/game/modules/tome/data/zones/daikara/grids.lua
+++ b/game/modules/tome/data/zones/daikara/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,7 +28,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads somewhere ..]],
+	desc = [[The rift leads... somewhere.]],
 	change_level = 1, change_zone = "temporal-rift",
 	change_level_check = function() -- Forbid going back
 		if not game.player:hasQuest("temporal-rift") then
diff --git a/game/modules/tome/data/zones/daikara/npcs.lua b/game/modules/tome/data/zones/daikara/npcs.lua
index 6a589204bc5b4852cdcf7ae2aeaa2dbd538378e0..e15da476c0af277be0376a714425aa50e8de941b 100644
--- a/game/modules/tome/data/zones/daikara/npcs.lua
+++ b/game/modules/tome/data/zones/daikara/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -141,7 +141,7 @@ newEntity{ base="BASE_NPC_ORC_GRUSHNAK", define_as = "MASSOK",
 	allow_infinite_dungeon = true,
 	name = "Massok the Dragonslayer", color=colors.VIOLET, unique = true,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_orc_massok_the_dragonslayer.png", display_h=2, display_y=-1}}},
-	desc = [[A huge and heavily-scarred orc with a gigantic sword. His helm is fashioned from a dragon skull.]],
+	desc = [[A huge and heavily-scarred orc with a gigantic sword. His helm is fashioned from a dragon's skull.]],
 	level_range = {45, nil}, exp_worth = 3,
 	rank = 4,
 	max_life = 500, life_rating = 25, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/daikara/objects.lua b/game/modules/tome/data/zones/daikara/objects.lua
index edddfa6098b62969c342665ecb1e3b41d6ef15bb..a07466076575f56bc7a4689108d9b8657498a136 100644
--- a/game/modules/tome/data/zones/daikara/objects.lua
+++ b/game/modules/tome/data/zones/daikara/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/daikara/traps.lua b/game/modules/tome/data/zones/daikara/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/daikara/traps.lua
+++ b/game/modules/tome/data/zones/daikara/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/daikara/zone.lua b/game/modules/tome/data/zones/daikara/zone.lua
index c2e1ce126762796fb74644366e48ae448a9a6e12..1c350d05bfe2d1db8c89bfa7b22a69ce676a22c2 100644
--- a/game/modules/tome/data/zones/daikara/zone.lua
+++ b/game/modules/tome/data/zones/daikara/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/deep-bellow/events.lua b/game/modules/tome/data/zones/deep-bellow/events.lua
index f8543dcbc25a49e1030062d3963ce6540fdde206..e61a462ec66ee659f3328c2da349be6aaa2aaf34 100644
--- a/game/modules/tome/data/zones/deep-bellow/events.lua
+++ b/game/modules/tome/data/zones/deep-bellow/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/deep-bellow/grids.lua b/game/modules/tome/data/zones/deep-bellow/grids.lua
index 4c4aae1ee4a7274d0d2c71ee794bd4d79bd27e40..34c8120a1606d6c50881ca66e9e11106750a1b45 100644
--- a/game/modules/tome/data/zones/deep-bellow/grids.lua
+++ b/game/modules/tome/data/zones/deep-bellow/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/deep-bellow/npcs.lua b/game/modules/tome/data/zones/deep-bellow/npcs.lua
index 07938b5ff0a0e079fb0cbebcab545d4f26b9461b..4d25d90fa8ecc67489d1fda9a91b4a9764695215 100644
--- a/game/modules/tome/data/zones/deep-bellow/npcs.lua
+++ b/game/modules/tome/data/zones/deep-bellow/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/deep-bellow/objects.lua b/game/modules/tome/data/zones/deep-bellow/objects.lua
index 3dcefb5f1f993df581ac680442708c891989420d..9feb7008cc1a254308f692c6d1fce578b4de5e3f 100644
--- a/game/modules/tome/data/zones/deep-bellow/objects.lua
+++ b/game/modules/tome/data/zones/deep-bellow/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/deep-bellow/traps.lua b/game/modules/tome/data/zones/deep-bellow/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/deep-bellow/traps.lua
+++ b/game/modules/tome/data/zones/deep-bellow/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/deep-bellow/zone.lua b/game/modules/tome/data/zones/deep-bellow/zone.lua
index 1fc5eefb80fb867f3b3ab1b868ee22bdaad62896..b2636260f177c392a173a94cc67ad3472bba3057 100644
--- a/game/modules/tome/data/zones/deep-bellow/zone.lua
+++ b/game/modules/tome/data/zones/deep-bellow/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane-spell/grids.lua b/game/modules/tome/data/zones/demon-plane-spell/grids.lua
index f800e740f0a6c3de3e1d69c7a38a087a969beb49..a0ded4193f416c0c1b2644c1dbe4222b2da6b214 100644
--- a/game/modules/tome/data/zones/demon-plane-spell/grids.lua
+++ b/game/modules/tome/data/zones/demon-plane-spell/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane-spell/npcs.lua b/game/modules/tome/data/zones/demon-plane-spell/npcs.lua
index 4ce09f0e82a277e8ef75e3ad560dc9adeb370dd3..0554bf2949ea47ebd97193eccc978cfea0b5940a 100644
--- a/game/modules/tome/data/zones/demon-plane-spell/npcs.lua
+++ b/game/modules/tome/data/zones/demon-plane-spell/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane-spell/objects.lua b/game/modules/tome/data/zones/demon-plane-spell/objects.lua
index 41163a5c5b9694292a10e484a12ffa8989c1174a..ca01a5f5b7ce055220a9bec29de1dbe90343891b 100644
--- a/game/modules/tome/data/zones/demon-plane-spell/objects.lua
+++ b/game/modules/tome/data/zones/demon-plane-spell/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane-spell/traps.lua b/game/modules/tome/data/zones/demon-plane-spell/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/demon-plane-spell/traps.lua
+++ b/game/modules/tome/data/zones/demon-plane-spell/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane-spell/zone.lua b/game/modules/tome/data/zones/demon-plane-spell/zone.lua
index cbdd638527115e01df563f20c779c70bfdebf0c4..c3ad315044371ca4eb1fde8165ebbcd4515e51b0 100644
--- a/game/modules/tome/data/zones/demon-plane-spell/zone.lua
+++ b/game/modules/tome/data/zones/demon-plane-spell/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane/grids.lua b/game/modules/tome/data/zones/demon-plane/grids.lua
index 77c6808e982876e201e4faa5d8db28d2e4f80648..0651cda0a8e6df5852bde248cb89fac758eccb98 100644
--- a/game/modules/tome/data/zones/demon-plane/grids.lua
+++ b/game/modules/tome/data/zones/demon-plane/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[This portal seems to be connected with Maj'Eyal, you could probably use it to go back.]],
+	desc = [[This portal seems to be connected with Maj'Eyal; you could probably use it to go back.]],
 
 	on_move = function(self, x, y, who)
 		if who == game.player then
diff --git a/game/modules/tome/data/zones/demon-plane/npcs.lua b/game/modules/tome/data/zones/demon-plane/npcs.lua
index 3c35c64dfe64afbc2e87020d5d379af2cb17b368..61d9cd13be1306e3df8666fed0b4012039da53c0 100644
--- a/game/modules/tome/data/zones/demon-plane/npcs.lua
+++ b/game/modules/tome/data/zones/demon-plane/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane/objects.lua b/game/modules/tome/data/zones/demon-plane/objects.lua
index 979a7ed512a8baa04566f0ded59203b8be5ec024..8485ee9948f182e6f38df5349523389c355d25a7 100644
--- a/game/modules/tome/data/zones/demon-plane/objects.lua
+++ b/game/modules/tome/data/zones/demon-plane/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane/traps.lua b/game/modules/tome/data/zones/demon-plane/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/demon-plane/traps.lua
+++ b/game/modules/tome/data/zones/demon-plane/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/demon-plane/zone.lua b/game/modules/tome/data/zones/demon-plane/zone.lua
index cf431e81fba12bcffda1cbca7c48675b56df3913..159b74ab4ae138d9b36fd439b619088a26626e45 100644
--- a/game/modules/tome/data/zones/demon-plane/zone.lua
+++ b/game/modules/tome/data/zones/demon-plane/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell-ambush/grids.lua b/game/modules/tome/data/zones/dreadfell-ambush/grids.lua
index 3fb79febf33b037b2b1402a9664f2c0858960812..7f2d1c02f2b186be8765321f5ff6262b09b4d46e 100644
--- a/game/modules/tome/data/zones/dreadfell-ambush/grids.lua
+++ b/game/modules/tome/data/zones/dreadfell-ambush/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell-ambush/npcs.lua b/game/modules/tome/data/zones/dreadfell-ambush/npcs.lua
index e4402d31d93bb0e4736488a7ff7de64896dd2f7c..c0fd94e3642405a3b7b08436c18c46a9f647b9b9 100644
--- a/game/modules/tome/data/zones/dreadfell-ambush/npcs.lua
+++ b/game/modules/tome/data/zones/dreadfell-ambush/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell-ambush/objects.lua b/game/modules/tome/data/zones/dreadfell-ambush/objects.lua
index 4482986d57a0d80e778fcf1cda1fa903a11d4cee..bd79eef76293252fb58d4a14a5f5d7c218d877a6 100644
--- a/game/modules/tome/data/zones/dreadfell-ambush/objects.lua
+++ b/game/modules/tome/data/zones/dreadfell-ambush/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,7 +22,7 @@ load("/data/general/objects/objects-maj-eyal.lua")
 newEntity{ base = "BASE_LORE",
 	define_as = "UKRUK_NOTE",
 	name = "hastily written log", lore="ukruk-log",
-	desc = [[A paper scrap, left by Ukurk.]],
+	desc = [[A paper scrap, left by Ukruk.]],
 	rarity = false,
 	encumberance = 0,
 }
diff --git a/game/modules/tome/data/zones/dreadfell-ambush/traps.lua b/game/modules/tome/data/zones/dreadfell-ambush/traps.lua
index a24acffb9687666588e3bcb023c251d1df2670b1..127fc82ac06e9b7ceefaa06cd708f14d9494885b 100644
--- a/game/modules/tome/data/zones/dreadfell-ambush/traps.lua
+++ b/game/modules/tome/data/zones/dreadfell-ambush/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell-ambush/zone.lua b/game/modules/tome/data/zones/dreadfell-ambush/zone.lua
index 72710c4511ac08dff5e5544466db95f803d18cdc..a2094b9cc9a9d4f38747ae530cfc2767a2542037 100644
--- a/game/modules/tome/data/zones/dreadfell-ambush/zone.lua
+++ b/game/modules/tome/data/zones/dreadfell-ambush/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell/events.lua b/game/modules/tome/data/zones/dreadfell/events.lua
index 2c8377462ea39ec05db86cf45a516c1b1962596c..45cd3ef78e9065ca39dd785c3a2714f050d15f9f 100644
--- a/game/modules/tome/data/zones/dreadfell/events.lua
+++ b/game/modules/tome/data/zones/dreadfell/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell/grids.lua b/game/modules/tome/data/zones/dreadfell/grids.lua
index 97b9002c6a23f7800b004d2ddeaf83c4306fc1b8..ef1994479ad0093e028f381bdf00631fa1837bfc 100644
--- a/game/modules/tome/data/zones/dreadfell/grids.lua
+++ b/game/modules/tome/data/zones/dreadfell/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell/npcs.lua b/game/modules/tome/data/zones/dreadfell/npcs.lua
index 34e3c97eb0d105ad0d36a48a7ff5bb24049bdda3..97eb4a55a8f83662c0c7f8179d118d0c1ec8f6b8 100644
--- a/game/modules/tome/data/zones/dreadfell/npcs.lua
+++ b/game/modules/tome/data/zones/dreadfell/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell/objects.lua b/game/modules/tome/data/zones/dreadfell/objects.lua
index ef81e998f35c520989ce3d974802c90b5dbb3cfb..75b7d8eb8fe3abe5a2cc64999d3060099312471a 100644
--- a/game/modules/tome/data/zones/dreadfell/objects.lua
+++ b/game/modules/tome/data/zones/dreadfell/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell/traps.lua b/game/modules/tome/data/zones/dreadfell/traps.lua
index 6d4137ad4a6e33c5306fccdde4b059986d4df3ef..8bc818c5afbdb1d7dd3f7348b3845559f3bd1095 100644
--- a/game/modules/tome/data/zones/dreadfell/traps.lua
+++ b/game/modules/tome/data/zones/dreadfell/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreadfell/zone.lua b/game/modules/tome/data/zones/dreadfell/zone.lua
index 6ec37c182de77e12d9d01f2615b5008d9db562cc..d2715e350511d563d4fc84b1703a11d17dddcc88 100644
--- a/game/modules/tome/data/zones/dreadfell/zone.lua
+++ b/game/modules/tome/data/zones/dreadfell/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreams/grids.lua b/game/modules/tome/data/zones/dreams/grids.lua
index c35a8f8c714e8f16595664f7bf47826a373203ad..e4edb9f0a6b4ce9b8e22392318fffcdaf8bb8b36 100644
--- a/game/modules/tome/data/zones/dreams/grids.lua
+++ b/game/modules/tome/data/zones/dreams/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreams/npcs.lua b/game/modules/tome/data/zones/dreams/npcs.lua
index 87b22ae370501541710e0b1ad7837438f12e5ed0..6a813d43867652c1b1135ceec9c69be0e497a885 100644
--- a/game/modules/tome/data/zones/dreams/npcs.lua
+++ b/game/modules/tome/data/zones/dreams/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreams/objects.lua b/game/modules/tome/data/zones/dreams/objects.lua
index a24acffb9687666588e3bcb023c251d1df2670b1..127fc82ac06e9b7ceefaa06cd708f14d9494885b 100644
--- a/game/modules/tome/data/zones/dreams/objects.lua
+++ b/game/modules/tome/data/zones/dreams/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreams/traps.lua b/game/modules/tome/data/zones/dreams/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/dreams/traps.lua
+++ b/game/modules/tome/data/zones/dreams/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreams/zone.lua b/game/modules/tome/data/zones/dreams/zone.lua
index 0d02a42d3d5559599cf2a1880cc27f33d76e22f1..5c1cade8f828be4b049cf1e53aacd17df0383829 100644
--- a/game/modules/tome/data/zones/dreams/zone.lua
+++ b/game/modules/tome/data/zones/dreams/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreamscape-talent/grids.lua b/game/modules/tome/data/zones/dreamscape-talent/grids.lua
index c28bf241bf1a7e11b4aac90f2d31650f144601c2..4a3e3f42391037076494d1f27f75f0e5c1e4fe58 100644
--- a/game/modules/tome/data/zones/dreamscape-talent/grids.lua
+++ b/game/modules/tome/data/zones/dreamscape-talent/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreamscape-talent/npcs.lua b/game/modules/tome/data/zones/dreamscape-talent/npcs.lua
index 4ce09f0e82a277e8ef75e3ad560dc9adeb370dd3..0554bf2949ea47ebd97193eccc978cfea0b5940a 100644
--- a/game/modules/tome/data/zones/dreamscape-talent/npcs.lua
+++ b/game/modules/tome/data/zones/dreamscape-talent/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreamscape-talent/objects.lua b/game/modules/tome/data/zones/dreamscape-talent/objects.lua
index 41163a5c5b9694292a10e484a12ffa8989c1174a..ca01a5f5b7ce055220a9bec29de1dbe90343891b 100644
--- a/game/modules/tome/data/zones/dreamscape-talent/objects.lua
+++ b/game/modules/tome/data/zones/dreamscape-talent/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreamscape-talent/traps.lua b/game/modules/tome/data/zones/dreamscape-talent/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/dreamscape-talent/traps.lua
+++ b/game/modules/tome/data/zones/dreamscape-talent/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/dreamscape-talent/zone.lua b/game/modules/tome/data/zones/dreamscape-talent/zone.lua
index b56e8eceef2002031de0606273d11714b277e8ad..2e814efede9258763ab2246e7c2462d84f2c0a4e 100644
--- a/game/modules/tome/data/zones/dreamscape-talent/zone.lua
+++ b/game/modules/tome/data/zones/dreamscape-talent/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eidolon-plane/grids.lua b/game/modules/tome/data/zones/eidolon-plane/grids.lua
index e93537b960c7755778f055786221543d8a1bf235..f5e774066b564ba75c5f0950dc05e783463ff2c6 100644
--- a/game/modules/tome/data/zones/eidolon-plane/grids.lua
+++ b/game/modules/tome/data/zones/eidolon-plane/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eidolon-plane/npcs.lua b/game/modules/tome/data/zones/eidolon-plane/npcs.lua
index bde3c6231980be29c028f70799b6247f7a3df8f3..3a7de212522bda4e5cf1686eb3af7b951dd78cbd 100644
--- a/game/modules/tome/data/zones/eidolon-plane/npcs.lua
+++ b/game/modules/tome/data/zones/eidolon-plane/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eidolon-plane/objects.lua b/game/modules/tome/data/zones/eidolon-plane/objects.lua
index 41163a5c5b9694292a10e484a12ffa8989c1174a..ca01a5f5b7ce055220a9bec29de1dbe90343891b 100644
--- a/game/modules/tome/data/zones/eidolon-plane/objects.lua
+++ b/game/modules/tome/data/zones/eidolon-plane/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eidolon-plane/traps.lua b/game/modules/tome/data/zones/eidolon-plane/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/eidolon-plane/traps.lua
+++ b/game/modules/tome/data/zones/eidolon-plane/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eidolon-plane/zone.lua b/game/modules/tome/data/zones/eidolon-plane/zone.lua
index 313d41200a3ae4623d875f0a49a84c59c36640be..a5b104be11cf1473c6a9c533f510a13b28f50721 100644
--- a/game/modules/tome/data/zones/eidolon-plane/zone.lua
+++ b/game/modules/tome/data/zones/eidolon-plane/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eruan/events.lua b/game/modules/tome/data/zones/eruan/events.lua
index 6f48a0607ce14032ab1c77c12649de0db36b1fc1..4b92eff913fce841beee698937abf69fcb522255 100644
--- a/game/modules/tome/data/zones/eruan/events.lua
+++ b/game/modules/tome/data/zones/eruan/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eruan/grids.lua b/game/modules/tome/data/zones/eruan/grids.lua
index c7420f6edaf7e6a3009fb4f343a63e81a7ce067d..9db8bd48a10444cf23bcae8aa8f6ef58a876a91a 100644
--- a/game/modules/tome/data/zones/eruan/grids.lua
+++ b/game/modules/tome/data/zones/eruan/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eruan/npcs.lua b/game/modules/tome/data/zones/eruan/npcs.lua
index d10865e1af11c958a3bbed10ad0b960fbf6f7dbe..12be728eb0389dd704b8c9e2b53e230ebc1b6512 100644
--- a/game/modules/tome/data/zones/eruan/npcs.lua
+++ b/game/modules/tome/data/zones/eruan/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eruan/objects.lua b/game/modules/tome/data/zones/eruan/objects.lua
index ee3a50b5fe39d4c8adc5dc088f2c0154e7a7cad2..9fe9032b7c6ce77be1db6d07bad27d63aa5bfa04 100644
--- a/game/modules/tome/data/zones/eruan/objects.lua
+++ b/game/modules/tome/data/zones/eruan/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eruan/traps.lua b/game/modules/tome/data/zones/eruan/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/eruan/traps.lua
+++ b/game/modules/tome/data/zones/eruan/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/eruan/zone.lua b/game/modules/tome/data/zones/eruan/zone.lua
index 847f6cb52c5a679824fd7f534bde16fdc86d58ab..d888d92e370017ec088cbf4eb8976f688c081f8f 100644
--- a/game/modules/tome/data/zones/eruan/zone.lua
+++ b/game/modules/tome/data/zones/eruan/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/flooded-cave/grids.lua b/game/modules/tome/data/zones/flooded-cave/grids.lua
index d0641146e646e26d0b70224c234fb4f905717550..c5d67c900b212f27b771efa43945345272d8ca94 100644
--- a/game/modules/tome/data/zones/flooded-cave/grids.lua
+++ b/game/modules/tome/data/zones/flooded-cave/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/flooded-cave/npcs.lua b/game/modules/tome/data/zones/flooded-cave/npcs.lua
index f3c8c4ac13cf691021e1477d59c966d742553b7f..2ce767edb5143982c11b953f901ffe7ffcd11c3f 100644
--- a/game/modules/tome/data/zones/flooded-cave/npcs.lua
+++ b/game/modules/tome/data/zones/flooded-cave/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/flooded-cave/objects.lua b/game/modules/tome/data/zones/flooded-cave/objects.lua
index 448a4ecff019dcd3a61df0183d75a0fd8ff272de..54ca920df8f99659ad5f49215cddfaf6d7587b84 100644
--- a/game/modules/tome/data/zones/flooded-cave/objects.lua
+++ b/game/modules/tome/data/zones/flooded-cave/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/flooded-cave/traps.lua b/game/modules/tome/data/zones/flooded-cave/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/flooded-cave/traps.lua
+++ b/game/modules/tome/data/zones/flooded-cave/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/flooded-cave/zone.lua b/game/modules/tome/data/zones/flooded-cave/zone.lua
index ee11dfd349e98bc79237fd5560af596f526212a7..8efdc6cf406d35bf9a984c83fc76b62c2eb36461 100644
--- a/game/modules/tome/data/zones/flooded-cave/zone.lua
+++ b/game/modules/tome/data/zones/flooded-cave/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gladium/grids.lua b/game/modules/tome/data/zones/gladium/grids.lua
index 783e2734c1d26c1e3a43d917e4a65d5b25fad005..b7f84463451ee112792d569085d29e31e9e6effa 100644
--- a/game/modules/tome/data/zones/gladium/grids.lua
+++ b/game/modules/tome/data/zones/gladium/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gladium/npcs.lua b/game/modules/tome/data/zones/gladium/npcs.lua
index 31d77de9646b897494e8d88952dd6f6cf883cb4b..7ed5c3bb0a5111d68ae6a59ecd9d5f6fee94ef6f 100644
--- a/game/modules/tome/data/zones/gladium/npcs.lua
+++ b/game/modules/tome/data/zones/gladium/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gladium/objects.lua b/game/modules/tome/data/zones/gladium/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/gladium/objects.lua
+++ b/game/modules/tome/data/zones/gladium/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gladium/traps.lua b/game/modules/tome/data/zones/gladium/traps.lua
index 02f32361a395c0d5716087b09a38d3fe13e0b8e7..ffc0dced3f63d81e4594309c3e3cff4b0018f429 100644
--- a/game/modules/tome/data/zones/gladium/traps.lua
+++ b/game/modules/tome/data/zones/gladium/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gladium/zone.lua b/game/modules/tome/data/zones/gladium/zone.lua
index 1e6cbb37ace339670efa7ccea1180577f214d6fb..64b70ef7f1a86030072ca3d243e298d16450016e 100644
--- a/game/modules/tome/data/zones/gladium/zone.lua
+++ b/game/modules/tome/data/zones/gladium/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/golem-graveyard/events.lua b/game/modules/tome/data/zones/golem-graveyard/events.lua
index c80ca73ef76cc9d24017ab0fd08a9b6a16b1c443..6c9067930ae95a6eaf6cdab5984a8f032438f8ed 100644
--- a/game/modules/tome/data/zones/golem-graveyard/events.lua
+++ b/game/modules/tome/data/zones/golem-graveyard/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/golem-graveyard/grids.lua b/game/modules/tome/data/zones/golem-graveyard/grids.lua
index 3d171bfd9b2e925b3d519bb84ac5a4f174e3dda4..dcc95d728c2384ee886c6851444206f7cce45e08 100644
--- a/game/modules/tome/data/zones/golem-graveyard/grids.lua
+++ b/game/modules/tome/data/zones/golem-graveyard/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,9 +28,9 @@ newEntity{base="HARDWALL", define_as = "ATAMATHON_BROKEN",
 	resolvers.nice_tile{image="terrain/grass.png", add_displays = {class.new{z=18,image="npc/construct_golem_athamathon_the_giant_golem.png", display_y=-1, display_h=2}}},
 	name = "the remains of Atamathon",
 	show_tooltip = true,
-	desc = [[This giant golem was constructed by the halflings during the Pyre Wars to fight the orcs, but was felled by Garkul the Devourer.
-Its body is made of marble, its joints of solid voratun, and its eyes of purest ruby. One of its eyes seems to be missing. At over 40 feet high it towers above you.
-Someone foolish has tried to reconstruct it, but it seems like it misses an eye to be completed.]],
+	desc = [[This giant golem was constructed by the Halflings during the Pyre Wars to fight the orcs, but was felled by Garkul the Devourer.
+Its body is made of marble, its joints of solid voratun, and its sole eye of purest ruby; the other one seems to be missing. At over 40 feet tall, it towers above you.
+Someone foolish has tried to reconstruct it, but was unable to complete the task; the golem needs another eye to be complete.]],
 	dig = false,
 	block_move = function(self, x, y, e, act, couldpass)
 		if e and e.player and act then
diff --git a/game/modules/tome/data/zones/golem-graveyard/npcs.lua b/game/modules/tome/data/zones/golem-graveyard/npcs.lua
index bc18b5529a93bc71d26b04a6d01272972b84e007..04d3cf36b6dce997312601a9d71aadcd76d83d21 100644
--- a/game/modules/tome/data/zones/golem-graveyard/npcs.lua
+++ b/game/modules/tome/data/zones/golem-graveyard/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{ define_as = "ATAMATHON", base = "BASE_NPC_CONSTRUCT",
 	name = "Atamathon the Giant Golem", image = "npc/atamathon.png",
 	color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/construct_golem_athamathon_the_giant_golem.png", display_h=2, display_y=-1}}},
-	desc = [[This giant golem was constructed by the halflings during the Pyre Wars to fight the orcs, but was felled by Garkul the Devourer. Someone foolish has tried to reconstruct it, but has lost control of it, and now it rampages in search of its original creators, who are long dead. Its body is made of marble, its joints of solid voratun, and its eyes of purest ruby. At over 40 feet high it towers above you, and its crimson orbs seem to glow with rage.]],
+	desc = [[This giant golem was constructed by the Halflings during the Pyre Wars to fight the orcs, but was felled by Garkul the Devourer. Someone foolish has tried to reconstruct it, but has lost control of it, and now it rampages in search of its original creators, who are long dead. Its body is made of marble, its joints of solid voratun, and its eyes of purest ruby. At over 40 feet tall, it towers above you, and its crimson orbs seem to glow with rage.]],
 	level_range = {70, nil}, exp_worth = 2,
 	max_life = 350, life_rating = 40, fixed_rating = true,
 	life_regen = 0,
diff --git a/game/modules/tome/data/zones/golem-graveyard/objects.lua b/game/modules/tome/data/zones/golem-graveyard/objects.lua
index 226cb89c47f9ce05d2a91f7663c6f06b4246e1e1..a90791cc79e803e7b9eb291db5e0ab8e70705ab3 100644
--- a/game/modules/tome/data/zones/golem-graveyard/objects.lua
+++ b/game/modules/tome/data/zones/golem-graveyard/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -23,8 +23,8 @@ newEntity{ base = "BASE_GEM",
 	define_as = "ATAMATHON_RUBY_EYE",
 	subtype = "red",
 	name = "Atamathon's Ruby Eye", color=colors.VIOLET, quest=true, unique=true, identified=true, image="object/artifact/atamathons_lost_ruby_eye.png",
-	desc = [[One of the ruby eyes of the legendary giant golem: Atamathon.
-It is said it was made by the halflings during the Age of Pyre as a weapon against the orcs. Even though it was destroyed it managed to deal a crippling blow by killing their leader, Garkul the Devourer.]],
+	desc = [[One of the ruby eyes of the legendary giant golem Atamathon.
+It is said it was made by the halflings during the Age of Pyre as a weapon against the orcs. Even though it was destroyed, it managed to deal a crippling blow by killing their leader, Garkul the Devourer.]],
 	material_level = 5,
 	cost = 100,
 	wielder = {
diff --git a/game/modules/tome/data/zones/golem-graveyard/traps.lua b/game/modules/tome/data/zones/golem-graveyard/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/golem-graveyard/traps.lua
+++ b/game/modules/tome/data/zones/golem-graveyard/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/golem-graveyard/zone.lua b/game/modules/tome/data/zones/golem-graveyard/zone.lua
index e61185e2f3d8edbb0423e67991cc073440d352cf..3dae6914b6a74946d7cd67dd3b5a1524f5785f1c 100644
--- a/game/modules/tome/data/zones/golem-graveyard/zone.lua
+++ b/game/modules/tome/data/zones/golem-graveyard/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gorbat-pride/events.lua b/game/modules/tome/data/zones/gorbat-pride/events.lua
index 150ab3c6d85bd3564919ec2e6f2ba0cc1c6e8f44..cba1f11a59f11aec9ac30516df7fe3ffa2b3f6b3 100644
--- a/game/modules/tome/data/zones/gorbat-pride/events.lua
+++ b/game/modules/tome/data/zones/gorbat-pride/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gorbat-pride/grids.lua b/game/modules/tome/data/zones/gorbat-pride/grids.lua
index 392ea78a933d0226e9bbd83d3245d5c226f4064c..cbca2dbabab43c62f4aa9b001956544ba9c1195b 100644
--- a/game/modules/tome/data/zones/gorbat-pride/grids.lua
+++ b/game/modules/tome/data/zones/gorbat-pride/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gorbat-pride/npcs.lua b/game/modules/tome/data/zones/gorbat-pride/npcs.lua
index b547e445390a16ba423b4a71bc0f7e99a5eab8c5..8a2d74fb594057c41a6f8108db9f07e25701a010 100644
--- a/game/modules/tome/data/zones/gorbat-pride/npcs.lua
+++ b/game/modules/tome/data/zones/gorbat-pride/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gorbat-pride/objects.lua b/game/modules/tome/data/zones/gorbat-pride/objects.lua
index 62f393f47f5e040632fc178a5049bf01c6a5024d..76fd8541dd2813118233626b4dd332cbc57fe83d 100644
--- a/game/modules/tome/data/zones/gorbat-pride/objects.lua
+++ b/game/modules/tome/data/zones/gorbat-pride/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/gorbat-pride/zone.lua b/game/modules/tome/data/zones/gorbat-pride/zone.lua
index c2cb259a1b048e93175bc37b5976fac0cfda9a82..ea3341b07153ec137234863947d7db738fdf30ef 100644
--- a/game/modules/tome/data/zones/gorbat-pride/zone.lua
+++ b/game/modules/tome/data/zones/gorbat-pride/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/grushnak-pride/events.lua b/game/modules/tome/data/zones/grushnak-pride/events.lua
index 6f23120ec7907d39c473d34b8cdb469cd712ae80..7869c84623c9304d7f9bd4d586e38285c526fc19 100644
--- a/game/modules/tome/data/zones/grushnak-pride/events.lua
+++ b/game/modules/tome/data/zones/grushnak-pride/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/grushnak-pride/grids.lua b/game/modules/tome/data/zones/grushnak-pride/grids.lua
index 610013e394fb8b4982f0ab7721513c3d709136dd..7af8a2f2152c9874fd7f1146abb5ed4b41590681 100644
--- a/game/modules/tome/data/zones/grushnak-pride/grids.lua
+++ b/game/modules/tome/data/zones/grushnak-pride/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/grushnak-pride/npcs.lua b/game/modules/tome/data/zones/grushnak-pride/npcs.lua
index 273481fe2b0114f06c101760bc844d36f0ced6c8..7381f1c9ed19de73655fc8f8e0347aa8095d87f1 100644
--- a/game/modules/tome/data/zones/grushnak-pride/npcs.lua
+++ b/game/modules/tome/data/zones/grushnak-pride/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/grushnak-pride/objects.lua b/game/modules/tome/data/zones/grushnak-pride/objects.lua
index d18787469ccddc203462c00c0ec107a91447ce44..a446efd810e8dc2e4f5e6bd7d29a308f12c5eabf 100644
--- a/game/modules/tome/data/zones/grushnak-pride/objects.lua
+++ b/game/modules/tome/data/zones/grushnak-pride/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/grushnak-pride/zone.lua b/game/modules/tome/data/zones/grushnak-pride/zone.lua
index ffe09905cf169d7cdf8bd12eb21b8a39c1c2489a..89e208e1b6be3f948e4681d89cdad1afb4fcaab5 100644
--- a/game/modules/tome/data/zones/grushnak-pride/zone.lua
+++ b/game/modules/tome/data/zones/grushnak-pride/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/halfling-ruins/events.lua b/game/modules/tome/data/zones/halfling-ruins/events.lua
index d57ef9ca4107bcc0f4a8e8b375d7f4f4d4afb87f..1f6942f13029996c630e4fef78aaf233e5a0209d 100644
--- a/game/modules/tome/data/zones/halfling-ruins/events.lua
+++ b/game/modules/tome/data/zones/halfling-ruins/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/halfling-ruins/grids.lua b/game/modules/tome/data/zones/halfling-ruins/grids.lua
index 1726f52678587fdc9b9d7695e788ae0e6ba646a6..e57ee0ee2a897b5fe18da210921243d77fc009c6 100644
--- a/game/modules/tome/data/zones/halfling-ruins/grids.lua
+++ b/game/modules/tome/data/zones/halfling-ruins/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/halfling-ruins/npcs.lua b/game/modules/tome/data/zones/halfling-ruins/npcs.lua
index 5c170cfce3e060a2aff744d8d0648743860b881f..b65b2cca15c14f44bb7ffcb43cd39841b8e9c714 100644
--- a/game/modules/tome/data/zones/halfling-ruins/npcs.lua
+++ b/game/modules/tome/data/zones/halfling-ruins/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/halfling-ruins/objects.lua b/game/modules/tome/data/zones/halfling-ruins/objects.lua
index 9be52aa9d7aea3c5775981a538293487da0a50ba..4ebc6e9789168438f0cc80b0c240d5b5ffc5dbfa 100644
--- a/game/modules/tome/data/zones/halfling-ruins/objects.lua
+++ b/game/modules/tome/data/zones/halfling-ruins/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -23,7 +23,7 @@ for i = 1, 4 do
 newEntity{ base = "BASE_LORE",
 	define_as = "NOTE"..i,
 	name = "research log of halfling mage Hompalan", lore="halfling-research-note-"..i,
-	desc = [[A very research note, nearly unreadable.]],
+	desc = [[A very faded research note, nearly unreadable.]],
 	rarity = false,
 	encumberance = 0,
 }
@@ -34,7 +34,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
 	unique = true,
 	name = "Yeek-fur Robe", color = colors.WHITE, image = "object/artifact/yeek_fur_robe.png",
 	unided_name = "sleek fur robe",
-	desc = [[A beautifully soft robe of fine white fur. It looks designed for a halfling noble, with glorious sapphires sewn across the hems. But entrancing as it is you can't help but feel a little queasy wearing it.]],
+	desc = [[A beautifully soft robe of fine white fur. It looks designed for a halfling noble, with glorious sapphires sewn across the hems. But entrancing as it is, you can't help but feel a little queasy wearing it.]],
 	level_range = {12, 22},
 	rarity = 20,
 	cost = 250,
diff --git a/game/modules/tome/data/zones/halfling-ruins/traps.lua b/game/modules/tome/data/zones/halfling-ruins/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/halfling-ruins/traps.lua
+++ b/game/modules/tome/data/zones/halfling-ruins/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/halfling-ruins/zone.lua b/game/modules/tome/data/zones/halfling-ruins/zone.lua
index 392e4fd0348c0e06edd469808458aae1c043d44a..2858c35e9a529abae6d3913aaa188d2535974c9f 100644
--- a/game/modules/tome/data/zones/halfling-ruins/zone.lua
+++ b/game/modules/tome/data/zones/halfling-ruins/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/heart-gloom/events.lua b/game/modules/tome/data/zones/heart-gloom/events.lua
index f8543dcbc25a49e1030062d3963ce6540fdde206..e61a462ec66ee659f3328c2da349be6aaa2aaf34 100644
--- a/game/modules/tome/data/zones/heart-gloom/events.lua
+++ b/game/modules/tome/data/zones/heart-gloom/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/heart-gloom/grids.lua b/game/modules/tome/data/zones/heart-gloom/grids.lua
index 3a09c7a1d643a245ee5c2b2008866044ced30908..535345003b571729b290574220d945a7b4fb1cc0 100644
--- a/game/modules/tome/data/zones/heart-gloom/grids.lua
+++ b/game/modules/tome/data/zones/heart-gloom/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/heart-gloom/npcs.lua b/game/modules/tome/data/zones/heart-gloom/npcs.lua
index 2aeaac0f4059e5f790d2ad6c6ffbaac627393c74..2e6b49d70b1e5f65f450dbf0593b409464a1e6ca 100644
--- a/game/modules/tome/data/zones/heart-gloom/npcs.lua
+++ b/game/modules/tome/data/zones/heart-gloom/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -60,7 +60,7 @@ newEntity{ base="BASE_NPC_CANINE", define_as = "WITHERING_THING",
 	unique = true,
 	name = "The Withering Thing", tint=colors.PURPLE,
 	color=colors.VIOLET,
-	desc = [[This deformed beast might have been a wolf before, but now it is just.. terrible.]],
+	desc = [[This deformed beast might have been a wolf before, but now it is just... terrible.]],
 	killer_message = "and corrupted into a pile of writhing worms",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 100, life_rating = 15, fixed_rating = true,
@@ -101,7 +101,7 @@ newEntity{ define_as = "DREAMING_ONE",
 	unique = true,
 	name = "The Dreaming One", tint=colors.PURPLE,
 	color=colors.VIOLET, image = "npc/seed_of_dreams.png",
-	desc = [[This strange globe of blue light seems to be alive and asleep. Nothing about it moves yet you can feel the crushing power of its dreams assaulting your mind.]],
+	desc = [[This strange globe of blue light seems to be alive and asleep. Nothing about it moves, yet you can feel the crushing power of its dreams assaulting your mind.]],
 	killer_message = "and absorbed into nightmares forever",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 70, life_rating = 10, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/heart-gloom/objects.lua b/game/modules/tome/data/zones/heart-gloom/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/heart-gloom/objects.lua
+++ b/game/modules/tome/data/zones/heart-gloom/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/heart-gloom/traps.lua b/game/modules/tome/data/zones/heart-gloom/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/heart-gloom/traps.lua
+++ b/game/modules/tome/data/zones/heart-gloom/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/heart-gloom/zone.lua b/game/modules/tome/data/zones/heart-gloom/zone.lua
index 39d3d8b002f2ccbb882301e4802f87ea7c56368c..50e549b9b05c861b6a335498713b02b56c10c01e 100644
--- a/game/modules/tome/data/zones/heart-gloom/zone.lua
+++ b/game/modules/tome/data/zones/heart-gloom/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/high-peak/grids.lua b/game/modules/tome/data/zones/high-peak/grids.lua
index 74bf64ca7a78e4cf2049959f5a8b869d879883cf..b94dc387f3b6663c901cb79d2997a6e683b6b0af 100644
--- a/game/modules/tome/data/zones/high-peak/grids.lua
+++ b/game/modules/tome/data/zones/high-peak/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -188,7 +188,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[This portal seems to connect to an other part of this level.]],
+	desc = [[This portal seems to connect to another part of this level.]],
 	change_level_check = function() game.bignews:say(60, "#GOLD#This portal looks like it reacts only to the Orb of Many Ways.") return true end,
 	change_level = 1,
 	orb_portal = {
diff --git a/game/modules/tome/data/zones/high-peak/npcs.lua b/game/modules/tome/data/zones/high-peak/npcs.lua
index e6eebeddd73fd4a5f47f8054760208eb88acfbc9..a771c3e5ecc77382943ce5d73a3b3b81eb5cda80 100644
--- a/game/modules/tome/data/zones/high-peak/npcs.lua
+++ b/game/modules/tome/data/zones/high-peak/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/high-peak/objects.lua b/game/modules/tome/data/zones/high-peak/objects.lua
index ad07e21e928cc57bb2db4222b715d58e614e626a..2b9c16d1c9abff05978287403c570b1ed54c9224 100644
--- a/game/modules/tome/data/zones/high-peak/objects.lua
+++ b/game/modules/tome/data/zones/high-peak/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -31,7 +31,7 @@ newEntity{ define_as = "STAFF_ABSORPTION_AWAKENED", base="BASE_STAFF",
 	display = "\\", color=colors.VIOLET, image = "object/artifact/staff_absorption.png",
 	encumber = 7,
 	plot=true,
-	desc = [[Carved with runes of power, this staff seems to have been made long ago. Yet it bears no signs of tarnishment.
+	desc = [[Carved with runes of power, this staff seems to have been made long ago, yet it bears no signs of tarnish.
 Light around it seems to dim and you can feel its tremendous power simply by touching it.
 The Sorcerers seem to have awakened its power.
 #{italic}#"And lo they came to Amakthel himself, and thousands were killed in the assault on his throne, and three of the Godslayers were broken beneath his feet. But Falion with his dying breath pierced the great god on his knee with the icy sword Arkil, and seeing his opportunity Caldizar, leader of the Godslayers, advanced with the Staff of Absorption and struck a terrifying blow against Amakthel. So fell the greatest of the gods by the hands of his own children, and his face was forced into the dust."#{normal}#]],
@@ -111,7 +111,7 @@ newEntity{ define_as = "PEARL_LIFE_DEATH",
 	display = "*", color=colors.WHITE, image = "object/artifact/pearl_of_life.png",
 	encumber = 2,
 	plot=true,
-	desc = [[A pearl, three times a normal sized one, that glitters in infinite colours, with slight patterns ever shifting away.]],
+	desc = [[A pearl, three times the size of a normal pearl, that glitters in infinite colours, with slight patterns ever shifting away.]],
 
 	carrier = {
 		lite = 1,
diff --git a/game/modules/tome/data/zones/high-peak/traps.lua b/game/modules/tome/data/zones/high-peak/traps.lua
index 6d4137ad4a6e33c5306fccdde4b059986d4df3ef..8bc818c5afbdb1d7dd3f7348b3845559f3bd1095 100644
--- a/game/modules/tome/data/zones/high-peak/traps.lua
+++ b/game/modules/tome/data/zones/high-peak/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/high-peak/zone.lua b/game/modules/tome/data/zones/high-peak/zone.lua
index e1ada0cf6c3183c78e9d68756a5125b44591bfcc..1e6f413d35e45adf4652f6282f8509fa35cdb420 100644
--- a/game/modules/tome/data/zones/high-peak/zone.lua
+++ b/game/modules/tome/data/zones/high-peak/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/illusory-castle/grids.lua b/game/modules/tome/data/zones/illusory-castle/grids.lua
index 1764696b341610ab5282e1f23baae568ff36db9d..32ba2fa723e6695054a9e707f722d96ddc096dff 100644
--- a/game/modules/tome/data/zones/illusory-castle/grids.lua
+++ b/game/modules/tome/data/zones/illusory-castle/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/illusory-castle/npcs.lua b/game/modules/tome/data/zones/illusory-castle/npcs.lua
index ff8890cf4c836151efe17ec1caa2fc5b0a8f57d2..e1dea76a95456d89c2e48442edc7a27d3efc701c 100644
--- a/game/modules/tome/data/zones/illusory-castle/npcs.lua
+++ b/game/modules/tome/data/zones/illusory-castle/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/illusory-castle/objects.lua b/game/modules/tome/data/zones/illusory-castle/objects.lua
index 1e95167379666b0f9aab13b88ed48e6b7874f0f7..dcc8d8f6947127f2f228ac10eee9b59c7c14763b 100644
--- a/game/modules/tome/data/zones/illusory-castle/objects.lua
+++ b/game/modules/tome/data/zones/illusory-castle/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/illusory-castle/traps.lua b/game/modules/tome/data/zones/illusory-castle/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/illusory-castle/traps.lua
+++ b/game/modules/tome/data/zones/illusory-castle/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/illusory-castle/zone.lua b/game/modules/tome/data/zones/illusory-castle/zone.lua
index 0c39f70ff9038cd83a1abf63bf077388f6664d87..87aedd83881188c925252542d9da5f419567b375 100644
--- a/game/modules/tome/data/zones/illusory-castle/zone.lua
+++ b/game/modules/tome/data/zones/illusory-castle/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/infinite-dungeon/events.lua b/game/modules/tome/data/zones/infinite-dungeon/events.lua
index 2e47da7fa44ae995a43812f05263ddec0f5c5bff..40c622f98026df56f90852f5953aaff8ed4eb67f 100644
--- a/game/modules/tome/data/zones/infinite-dungeon/events.lua
+++ b/game/modules/tome/data/zones/infinite-dungeon/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/infinite-dungeon/grids.lua b/game/modules/tome/data/zones/infinite-dungeon/grids.lua
index 20931b869757a02abbf91008c722cb887c042bb2..be98c0ec4fe25f27a942fcd45f9a3c661bc03ff9 100644
--- a/game/modules/tome/data/zones/infinite-dungeon/grids.lua
+++ b/game/modules/tome/data/zones/infinite-dungeon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/infinite-dungeon/npcs.lua b/game/modules/tome/data/zones/infinite-dungeon/npcs.lua
index 345fd35d88b40016b329d18b0a75177b4a5d2f7c..5594a7e8576bda280d953c0075f38640f08e0daa 100644
--- a/game/modules/tome/data/zones/infinite-dungeon/npcs.lua
+++ b/game/modules/tome/data/zones/infinite-dungeon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/infinite-dungeon/objects.lua b/game/modules/tome/data/zones/infinite-dungeon/objects.lua
index 44999c6d31ce665f50820b961783b5d61e2cb609..d06ff8d6784200f01a431857a4f017910427747a 100644
--- a/game/modules/tome/data/zones/infinite-dungeon/objects.lua
+++ b/game/modules/tome/data/zones/infinite-dungeon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -17,7 +17,8 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-load("/data/general/objects/objects.lua")
+load("/data/general/objects/objects-maj-eyal.lua")
+load("/data/general/objects/objects-far-east.lua")
 
 newEntity{
 	power_source = {technique=true},
diff --git a/game/modules/tome/data/zones/infinite-dungeon/traps.lua b/game/modules/tome/data/zones/infinite-dungeon/traps.lua
index f83938ee8e700737a4ba9687fec1c3c5c6d2ff33..2219791b895c169b687a62e432a9da541e9fe3b0 100644
--- a/game/modules/tome/data/zones/infinite-dungeon/traps.lua
+++ b/game/modules/tome/data/zones/infinite-dungeon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/infinite-dungeon/zone.lua b/game/modules/tome/data/zones/infinite-dungeon/zone.lua
index 87d99a43adfffdaa3ee1888d786bb4ef5d18a948..4dfcd65c0996644aa962e991eb57ae20ec6597eb 100644
--- a/game/modules/tome/data/zones/infinite-dungeon/zone.lua
+++ b/game/modules/tome/data/zones/infinite-dungeon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/keepsake-meadow/grids.lua b/game/modules/tome/data/zones/keepsake-meadow/grids.lua
index ad275a0a0113c54f3190f7da38ff8015cc51d5ca..8bcbf2702b4400e750a241dbedf08cf6d3e28b23 100644
--- a/game/modules/tome/data/zones/keepsake-meadow/grids.lua
+++ b/game/modules/tome/data/zones/keepsake-meadow/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/keepsake-meadow/npcs.lua b/game/modules/tome/data/zones/keepsake-meadow/npcs.lua
index df4220b6911a61c09bbf5263fb4335f63ecf3973..e765e776e6d4054a5f4c5e37057d712d89fe2f47 100644
--- a/game/modules/tome/data/zones/keepsake-meadow/npcs.lua
+++ b/game/modules/tome/data/zones/keepsake-meadow/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/keepsake-meadow/objects.lua b/game/modules/tome/data/zones/keepsake-meadow/objects.lua
index 2c3c9a45acb02a133cd4d412c4dee87c805ff518..5d5f83d7e6874774c1cd9394390159052c82f420 100644
--- a/game/modules/tome/data/zones/keepsake-meadow/objects.lua
+++ b/game/modules/tome/data/zones/keepsake-meadow/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -137,7 +137,7 @@ newEntity{
 	material_level = 1,
 	encumber = 5,
 	not_in_stores = true,
-	desc = [[This was the book that gave power to Kyless and eventually lead to his doom. The book has a simple appearance: bound in leather with no markings on the cover. All of the pages are blank.]],
+	desc = [[This was the book that gave power to Kyless and eventually led to his doom. The book is simple in appearance, bound in leather with no markings on the cover. All of the pages are blank.]],
 }
 
 
diff --git a/game/modules/tome/data/zones/keepsake-meadow/traps.lua b/game/modules/tome/data/zones/keepsake-meadow/traps.lua
index 470302ed7e29b25bd69a7574ae003077a6657cd7..8ca1152390ac821e4e0f2d0c5ea2b88d481b6e86 100644
--- a/game/modules/tome/data/zones/keepsake-meadow/traps.lua
+++ b/game/modules/tome/data/zones/keepsake-meadow/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/lake-nur/grids.lua b/game/modules/tome/data/zones/lake-nur/grids.lua
index ad933b5b22383efc9fbcc78a0e693f28e745ea78..bca20125b0bc4611a1b028fd54179231364b2f6b 100644
--- a/game/modules/tome/data/zones/lake-nur/grids.lua
+++ b/game/modules/tome/data/zones/lake-nur/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/lake-nur/npcs.lua b/game/modules/tome/data/zones/lake-nur/npcs.lua
index 9faed03704c262c1028a2cf5da49da248d3278dc..a9596bcbd66fd4f2d1eba7b56c4d35b5134e6b28 100644
--- a/game/modules/tome/data/zones/lake-nur/npcs.lua
+++ b/game/modules/tome/data/zones/lake-nur/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/lake-nur/objects.lua b/game/modules/tome/data/zones/lake-nur/objects.lua
index b59815ee86c9ab18da6c0f74d044dd1658a380a2..c30d0c58be6cdaf24f22683792344a4760cf65a4 100644
--- a/game/modules/tome/data/zones/lake-nur/objects.lua
+++ b/game/modules/tome/data/zones/lake-nur/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/lake-nur/traps.lua b/game/modules/tome/data/zones/lake-nur/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/lake-nur/traps.lua
+++ b/game/modules/tome/data/zones/lake-nur/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/lake-nur/zone.lua b/game/modules/tome/data/zones/lake-nur/zone.lua
index c48f1c491955d5dd72702e0c0be723df9303cbda..e04d0f12654ac3d9203d2390f99714a57a60fa62 100644
--- a/game/modules/tome/data/zones/lake-nur/zone.lua
+++ b/game/modules/tome/data/zones/lake-nur/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/last-hope-graveyard/grids.lua b/game/modules/tome/data/zones/last-hope-graveyard/grids.lua
index 02977a92c6c08112fad1fb387d4329d8f8f74f26..a0c841812c368bf8074eb93dd408e11c83a0824e 100644
--- a/game/modules/tome/data/zones/last-hope-graveyard/grids.lua
+++ b/game/modules/tome/data/zones/last-hope-graveyard/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/last-hope-graveyard/npcs.lua b/game/modules/tome/data/zones/last-hope-graveyard/npcs.lua
index 7292a40c5343d4068a2361e10a6af93c7c250016..a66e5fef1f59e614c865e3eec0697189dc94f226 100644
--- a/game/modules/tome/data/zones/last-hope-graveyard/npcs.lua
+++ b/game/modules/tome/data/zones/last-hope-graveyard/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/last-hope-graveyard/objects.lua b/game/modules/tome/data/zones/last-hope-graveyard/objects.lua
index 2cb05879bf48efd8262a66af458b5870dec65e93..206bfbf79f7066360b22565cb3edc9a7a64e38dc 100644
--- a/game/modules/tome/data/zones/last-hope-graveyard/objects.lua
+++ b/game/modules/tome/data/zones/last-hope-graveyard/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/last-hope-graveyard/traps.lua b/game/modules/tome/data/zones/last-hope-graveyard/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/last-hope-graveyard/traps.lua
+++ b/game/modules/tome/data/zones/last-hope-graveyard/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/last-hope-graveyard/zone.lua b/game/modules/tome/data/zones/last-hope-graveyard/zone.lua
index f06f4e8d48dff0d3585d2c5f8674958c25f832b6..b504cc3bc8f96cf75ae43184877af85d2134b572 100644
--- a/game/modules/tome/data/zones/last-hope-graveyard/zone.lua
+++ b/game/modules/tome/data/zones/last-hope-graveyard/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/mark-spellblaze/events.lua b/game/modules/tome/data/zones/mark-spellblaze/events.lua
index 503a59606c4e831e2a205cb3f576ecce713e1d31..e8de7673e1a16b322265e8573aabed52b5f9e1bd 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/events.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/mark-spellblaze/grids.lua b/game/modules/tome/data/zones/mark-spellblaze/grids.lua
index 2f71efa9142421d1f8a0445facda72a0357c6744..2e28b4f320e1d82efa239736c42078138a95c4a9 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/grids.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/mark-spellblaze/npcs.lua b/game/modules/tome/data/zones/mark-spellblaze/npcs.lua
index 1df4d0d253b41ada29b5d34762c0d95121b0d2da..9f08358737135cc40a84d1656d135abb5744f5dc 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/npcs.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ local Talents = require("engine.interface.ActorTalents")
 newEntity{ base = "BASE_NPC_ELVEN_CASTER", define_as = "GRAND_CORRUPTOR",
 	allow_infinite_dungeon = true,
 	name = "Grand Corruptor", color=colors.VIOLET, unique = true,
-	desc = [[An elven corruptor, drawn to these blighted lands.]],
+	desc = [[An Elven corruptor, drawn to these blighted lands.]],
 	level_range = {25, nil}, exp_worth = 0.3,
 	rank = 4,
 	max_vim = 800,
diff --git a/game/modules/tome/data/zones/mark-spellblaze/objects.lua b/game/modules/tome/data/zones/mark-spellblaze/objects.lua
index 5b62532b5780d0338e7ee51c053496c4ef4a4a9d..2e3d45de9eea4b0decda288454d018d0f4400a8a 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/objects.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/mark-spellblaze/traps.lua b/game/modules/tome/data/zones/mark-spellblaze/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/traps.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/mark-spellblaze/zone.lua b/game/modules/tome/data/zones/mark-spellblaze/zone.lua
index 179317d2462d3da6fb82cd1ed8d3c3e21c49ebc6..f1a6bd5508e5055477c1ea84f154c83304b5c6fb 100644
--- a/game/modules/tome/data/zones/mark-spellblaze/zone.lua
+++ b/game/modules/tome/data/zones/mark-spellblaze/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -41,7 +41,7 @@ return {
 			sqrt_percent = 45,
 			noise = "fbm_perlin",
 			floor = "BURNT_GROUND",
-			wall = {"BURNT_TREE1","BURNT_TREE2","BURNT_TREE3","BURNT_TREE4","BURNT_TREE5","BURNT_TREE6","BURNT_TREE7","BURNT_TREE8","BURNT_TREE9","BURNT_TREE10","BURNT_TREE11","BURNT_TREE12","BURNT_TREE13","BURNT_TREE14","BURNT_TREE15","BURNT_TREE16","BURNT_TREE17","BURNT_TREE18","BURNT_TREE19","BURNT_TREE20",},
+			wall = "BURNT_TREE",
 			up = "BURNT_UP4",
 			down = "BURNT_DOWN6",
 			do_ponds =  {
diff --git a/game/modules/tome/data/zones/maze/events.lua b/game/modules/tome/data/zones/maze/events.lua
index aa67988da4b4e0fe9612e50178c3e588506c0473..be91b4375015d2da30ad39da6fb230d454b3701c 100644
--- a/game/modules/tome/data/zones/maze/events.lua
+++ b/game/modules/tome/data/zones/maze/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/maze/grids.lua b/game/modules/tome/data/zones/maze/grids.lua
index c94e7e75155210b39c1b9004d58525e33d9813ef..04e35966a82175cea6fffc6c300f66b4eb452d45 100644
--- a/game/modules/tome/data/zones/maze/grids.lua
+++ b/game/modules/tome/data/zones/maze/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/maze/npcs.lua b/game/modules/tome/data/zones/maze/npcs.lua
index 0a22c1f54885d398779c33ed08d8ce8f81181b93..72cf140c32746643f2c1b253615bbde96efe5ed0 100644
--- a/game/modules/tome/data/zones/maze/npcs.lua
+++ b/game/modules/tome/data/zones/maze/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/maze/objects.lua b/game/modules/tome/data/zones/maze/objects.lua
index b1d2ffb26249649b5f40d1a248bdc0db62b0e2ed..6d7649c93109d7118d8bd13365e4e099b63e63fc 100644
--- a/game/modules/tome/data/zones/maze/objects.lua
+++ b/game/modules/tome/data/zones/maze/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/maze/traps.lua b/game/modules/tome/data/zones/maze/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/maze/traps.lua
+++ b/game/modules/tome/data/zones/maze/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/maze/zone.lua b/game/modules/tome/data/zones/maze/zone.lua
index 118f3bfd75c93901102c335a41d8f98e75bef2a3..dc86e2a8b6796ded52b3b55d8eda2181d8c0ee79 100644
--- a/game/modules/tome/data/zones/maze/zone.lua
+++ b/game/modules/tome/data/zones/maze/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/murgol-lair/grids.lua b/game/modules/tome/data/zones/murgol-lair/grids.lua
index d0641146e646e26d0b70224c234fb4f905717550..c5d67c900b212f27b771efa43945345272d8ca94 100644
--- a/game/modules/tome/data/zones/murgol-lair/grids.lua
+++ b/game/modules/tome/data/zones/murgol-lair/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/murgol-lair/npcs.lua b/game/modules/tome/data/zones/murgol-lair/npcs.lua
index 6ec32fad8a1e7d0f9018d5dd22fab8dcd0ea6cc6..29b0d64a1c20546a84b098f58db4600f8c336596 100644
--- a/game/modules/tome/data/zones/murgol-lair/npcs.lua
+++ b/game/modules/tome/data/zones/murgol-lair/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -155,7 +155,7 @@ newEntity{ base="BASE_NPC_NAGA", define_as = "NASHVA",
 	name = "Lady Nashva the Streambender",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_naga_lady_zoisla_the_tidebringer.png", display_h=2, display_y=-1}}},
 	color=colors.VIOLET, female = true,
-	desc = [[Water circles slowly on the ground around this naga's tail. Her dark tail is coiled tight, making her look short, but her calm and confident stare assure you that she will not be easily overcome. As the water begins to rise around her the air starts to simmer, and you feel her dark eyes are penetrating into you deeper than is comfortable.]],
+	desc = [[Water circles slowly on the ground around this naga's tail. Her dark tail is coiled tight, making her look short, but her calm and confident stare assure you that she will not be easily overcome. As the water begins to rise around her the air starts to shimmer, and you feel her dark eyes are penetrating into you deeper than is comfortable.]],
 	killer_message = "and brought back to Vargh for experimentations",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 150, life_rating = 15, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/murgol-lair/objects.lua b/game/modules/tome/data/zones/murgol-lair/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/murgol-lair/objects.lua
+++ b/game/modules/tome/data/zones/murgol-lair/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/murgol-lair/traps.lua b/game/modules/tome/data/zones/murgol-lair/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/murgol-lair/traps.lua
+++ b/game/modules/tome/data/zones/murgol-lair/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/murgol-lair/zone.lua b/game/modules/tome/data/zones/murgol-lair/zone.lua
index 3aa85986375809d6ab634646523197c5b768d9aa..23b569e9bd999964ebc8052a8d7fd9e2ae2472ea 100644
--- a/game/modules/tome/data/zones/murgol-lair/zone.lua
+++ b/game/modules/tome/data/zones/murgol-lair/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/norgos-lair/events.lua b/game/modules/tome/data/zones/norgos-lair/events.lua
index da5bbbd64684cad46032246c11fe206230e67da9..45ccc0afc4f7cf7958d3cefa218c3d5864b9d370 100644
--- a/game/modules/tome/data/zones/norgos-lair/events.lua
+++ b/game/modules/tome/data/zones/norgos-lair/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/norgos-lair/grids.lua b/game/modules/tome/data/zones/norgos-lair/grids.lua
index 8cb5b8395cfe8391f6033d5c873847ed9283ca98..5130c156f909f738ecf3a8605dc0632dd4487839 100644
--- a/game/modules/tome/data/zones/norgos-lair/grids.lua
+++ b/game/modules/tome/data/zones/norgos-lair/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/norgos-lair/npcs.lua b/game/modules/tome/data/zones/norgos-lair/npcs.lua
index eca26eaea6ca40f6fb844332fcaa6e943cf75d51..4e6db0fa5ba39346fd97eae8152bba19b8410f50 100644
--- a/game/modules/tome/data/zones/norgos-lair/npcs.lua
+++ b/game/modules/tome/data/zones/norgos-lair/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -51,8 +51,8 @@ else
 		name = "Norgos, the Frozen",
 		display = "q", color=colors.VIOLET,
 		resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/animal_bear_norgos_the_frozen.png", display_h=2, display_y=-1}}},
-		desc = [[This ancient bear long guarded the western side of the forest, but as of late he started growing mad, attacking even the thaloren.
-It seems to have fallen prey to the shivgoroth invading the area. Dead and frozen it seems like a statue, animated by the elementals.]],
+		desc = [[This ancient bear long guarded the western side of the forest, but as of late he started growing mad, attacking even the Thaloren.
+It seems to have fallen prey to the shivgoroth invading the area. Dead and frozen, it seems like a statue, animated by the elementals.]],
 		killer_message = "and was turned into icicles",
 		level_range = {7, nil}, exp_worth = 2,
 		max_life = 200, life_rating = 17, fixed_rating = true, life_regen = 0,
@@ -96,7 +96,7 @@ newEntity{ base="BASE_NPC_BEAR", define_as = "NORGOS",
 	name = "Norgos, the Guardian",
 	display = "q", color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/animal_bear_norgos_the_guardian.png", display_h=2, display_y=-1}}},
-	desc = [[This ancient bear long guarded the western side of the forest, but as of late he started growing mad, attacking even the thaloren.]],
+	desc = [[This ancient bear long guarded the western side of the forest, but as of late he started growing mad, attacking even the Thaloren.]],
 	killer_message = "and was feasted upon by wolves",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 200, life_rating = 17, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/norgos-lair/objects.lua b/game/modules/tome/data/zones/norgos-lair/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/norgos-lair/objects.lua
+++ b/game/modules/tome/data/zones/norgos-lair/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/norgos-lair/traps.lua b/game/modules/tome/data/zones/norgos-lair/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/norgos-lair/traps.lua
+++ b/game/modules/tome/data/zones/norgos-lair/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/norgos-lair/zone.lua b/game/modules/tome/data/zones/norgos-lair/zone.lua
index 7e2d7f584ed3727d6caa05bd84a076bece76bdc6..0a5d864cea1688533e13e398fec90bf6f1a498c5 100644
--- a/game/modules/tome/data/zones/norgos-lair/zone.lua
+++ b/game/modules/tome/data/zones/norgos-lair/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/noxious-caldera/events.lua b/game/modules/tome/data/zones/noxious-caldera/events.lua
index 1e0ea6e91334550d51953f796ac06be39e8b4bdf..0cf5e9cce47711e2a2f5fe983edd968d53ddb6ea 100644
--- a/game/modules/tome/data/zones/noxious-caldera/events.lua
+++ b/game/modules/tome/data/zones/noxious-caldera/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/noxious-caldera/grids.lua b/game/modules/tome/data/zones/noxious-caldera/grids.lua
index 3325ca1c4bf5198386b25316e3c51d365ed614f1..08c795e24e06065887722076fcbd620592920a11 100644
--- a/game/modules/tome/data/zones/noxious-caldera/grids.lua
+++ b/game/modules/tome/data/zones/noxious-caldera/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/noxious-caldera/npcs.lua b/game/modules/tome/data/zones/noxious-caldera/npcs.lua
index dd9b9d417718d3b496a07911a0fd1b224a497371..8acf232ec6c7834766786d6cd177006ad1e958e8 100644
--- a/game/modules/tome/data/zones/noxious-caldera/npcs.lua
+++ b/game/modules/tome/data/zones/noxious-caldera/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -39,7 +39,7 @@ newEntity{ define_as = "MINDWORM",
 	type = "humanoid", subtype = "thalore", unique = true,
 	name = "Mindworm",
 	display = "p", color=colors.VIOLET,
-	desc = [[This tall thalore eyes are lost in the distance, you can feel that he barely sees you.]],
+	desc = [[This tall Thalore's eyes are lost in the distance; you can sense that he barely sees you.]],
 	killer_message = "and mind-probed",
 	level_range = {25, nil}, exp_worth = 2,
 	max_life = 100, life_rating = 10, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/noxious-caldera/objects.lua b/game/modules/tome/data/zones/noxious-caldera/objects.lua
index 8ee3e81d835b19606565fb4f4591b38083a6f685..5c3507d81d6a6e59e4f740b48ae8412cb9d0f5db 100644
--- a/game/modules/tome/data/zones/noxious-caldera/objects.lua
+++ b/game/modules/tome/data/zones/noxious-caldera/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/noxious-caldera/traps.lua b/game/modules/tome/data/zones/noxious-caldera/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/noxious-caldera/traps.lua
+++ b/game/modules/tome/data/zones/noxious-caldera/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/noxious-caldera/zone.lua b/game/modules/tome/data/zones/noxious-caldera/zone.lua
index b4b3039fadb7780f95e7c34091ec40321ae400e5..86520c7d19d786d08a01e7b4f422c4739882d1a1 100644
--- a/game/modules/tome/data/zones/noxious-caldera/zone.lua
+++ b/game/modules/tome/data/zones/noxious-caldera/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/old-forest/events.lua b/game/modules/tome/data/zones/old-forest/events.lua
index 11b517713e7c620fb6e3edc6640b712af36e0bd0..f50c222877ae1a3232afe29c2d8d3fe7b483d17d 100644
--- a/game/modules/tome/data/zones/old-forest/events.lua
+++ b/game/modules/tome/data/zones/old-forest/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/old-forest/grids.lua b/game/modules/tome/data/zones/old-forest/grids.lua
index 102479e25eeb171dfd83e62d071e16eb6698ad4e..a3ee268cb2ff654c18a3769a5c47687f2bf26bf5 100644
--- a/game/modules/tome/data/zones/old-forest/grids.lua
+++ b/game/modules/tome/data/zones/old-forest/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/old-forest/npcs.lua b/game/modules/tome/data/zones/old-forest/npcs.lua
index b3354b5abf4385eb26f49c067656b9b0a68bbc6d..fe74a7ac76c6f4bdfb1c5cf476e6399fea1f3ada 100644
--- a/game/modules/tome/data/zones/old-forest/npcs.lua
+++ b/game/modules/tome/data/zones/old-forest/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/old-forest/objects.lua b/game/modules/tome/data/zones/old-forest/objects.lua
index 8a76dccca3f8824766268362083da95d116453d3..ea7cbccd90a0f025e24f460da1e53dc5db3aa6b7 100644
--- a/game/modules/tome/data/zones/old-forest/objects.lua
+++ b/game/modules/tome/data/zones/old-forest/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/old-forest/traps.lua b/game/modules/tome/data/zones/old-forest/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/old-forest/traps.lua
+++ b/game/modules/tome/data/zones/old-forest/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/old-forest/zone.lua b/game/modules/tome/data/zones/old-forest/zone.lua
index bb8948f3fbd9a742ed34e49dd3c4013e622f95be..6f4f393a7119bc4019a91d2e24b6a2bd0f2d78c3 100644
--- a/game/modules/tome/data/zones/old-forest/zone.lua
+++ b/game/modules/tome/data/zones/old-forest/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/orc-breeding-pit/events.lua b/game/modules/tome/data/zones/orc-breeding-pit/events.lua
index ef177620f734ba380572754d69b23da95c75b336..0dbb90549d75107ada9ee0f1601655a314d75795 100644
--- a/game/modules/tome/data/zones/orc-breeding-pit/events.lua
+++ b/game/modules/tome/data/zones/orc-breeding-pit/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/orc-breeding-pit/grids.lua b/game/modules/tome/data/zones/orc-breeding-pit/grids.lua
index 1a270efb82d0b08bcbbb319f636e98937c380b6d..d10eb8eb2207bea54dbd9b24b3b0abac3eac33c4 100644
--- a/game/modules/tome/data/zones/orc-breeding-pit/grids.lua
+++ b/game/modules/tome/data/zones/orc-breeding-pit/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua b/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua
index 59b620c60f451003d635b2d11ebed7a0e66faf6f..95ae9c4af0ed805d42a90b702f4f7ca2ef2034c6 100644
--- a/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua
+++ b/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -50,10 +50,11 @@ newEntity{
 
 newEntity{ base = "BASE_NPC_ORC_SUMMON",
 	name = "orc baby", color=colors.GREEN,
-	desc = [[Crawling on all fours, this green-skinned creature is far from cute, with vicious little sharp teeth and nails, and mucusy slime still sticking to its skin.]],
+	desc = [[Crawling on all fours, this green-skinned creature is far from cute, with vicious little sharp teeth and nails, and slime still sticking to its skin.]],
 	level_range = {25, nil}, exp_worth = 0,
 	resolvers.generic(function(e) if rng.percent(50) then e.female = true end end),
 	rarity = 3,
+	faction = "neutral", hard_faction = "neutral",
 	max_life = resolvers.rngavg(30,50), life_rating = 4,
 	rank = 2,
 	movement_speed = 0.7,
@@ -68,6 +69,7 @@ newEntity{ base = "BASE_NPC_ORC",
 	resolvers.generic(function(e) if rng.percent(50) then e.female = true end end),
 	level_range = {25, nil}, exp_worth = 0,
 	rarity = 3,
+	faction = "neutral", hard_faction = "neutral",
 	max_life = resolvers.rngavg(30,50), life_rating = 9, life_regen = 7,
 	movement_speed = 1.3,
 	size_category = 1,
@@ -100,7 +102,8 @@ newEntity{ base = "BASE_NPC_ORC",
 newEntity{ base = "BASE_NPC_ORC",
 	name = "orc mother", color=colors.YELLOW,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_orc_orc_mother.png", display_h=2, display_y=-1}}},
-	desc = [[This giant, bloated form towers above you. Mucus and slime ooze from every orifice, dripping onto the cavern floor. Orc children fight over the right to feed from her distended teats whilst small babies are regularly pushed out from her many pulsating vulvas. The sight and the smell make you retch.]],
+	desc = [[This giant, bloated form towers above you. Mucus and slime ooze from every orifice, dripping onto the cavern floor. Orc children fight over the right to feed from her distended teats whilst small babies are regularly emerge from folds of flesh. The sight and the smell make you retch.
+Here stands a tremendous form almost the size of a dragon. Bloated skin rises in thick folds, seeping viscous slime from its wide pores. Hundreds of hanging teats feed a small army of squabbling, fighting young orcs - only the toughest of them are able to gain the precious nutrients to grow stronger, the weaker ones left to wither on the mouldy floor. At the top of this towering hulk is a shrivelled head coated in long tangled hair. Dazed eyes peer out with a mixture of sadness and pain, but as they fix on you they turn to anger, the creature's face contorted with the fierce desire to protect its young.]],
 	level_range = {25, nil}, exp_worth = 1,
 	female = true,
 	rarity = 8,
@@ -115,7 +118,7 @@ newEntity{ base = "BASE_NPC_ORC",
 	on_melee_hit = {[DamageType.SLIME] = resolvers.rngrange(10, 20)},
 
 	summon = {
-		{type="humanoid", subtype="orc", name="orc baby", number=1, hasxp=false},
+		{type="humanoid", subtype="orc", name="orc baby", number=1, hasxp=false, no_summoner_set=true},
 	},
 
 --	ai = "tactical",
@@ -132,7 +135,8 @@ newEntity{ base = "BASE_NPC_ORC",
 newEntity{ base="BASE_NPC_ORC", define_as = "GREATMOTHER",
 	name = "Orc Greatmother", color=colors.VIOLET, unique = true,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_orc_orc_greatmother.png", display_h=2, display_y=-1}}},
-	desc = [[Here stands a tremendous form almost the size of a dragon.  Bloated skin rises in thick folds, seeping viscous slime from its wide pores.  Hundreds of hanging teats feed a small army of squabbling, fighting young orcs - only the toughest of them are able to gain the precious nutrients to grow stronger, the weaker ones left to wither on the mouldy floor.  Dozens of gaping vulvae squelch and pulsate, pushing out new young with alarming rapidity.  At the top of this towering hulk is a shrivelled head coated in long tangled hair.  Dazed eyes peer out with a mixture of sadness and pain, but as they fix on you they turn to anger, the creature's face contorted with the fierce desire to protect its young.]],
+	desc = [[This giant, bloated form towers above you. Mucus and slime ooze from every orifice, dripping onto the cavern floor. Orc children fight over the right to feed from her distended teats whilst small babies are regularly emerge from folds of flesh. The sight and the smell make you retch.
+Here stands a tremendous form almost the size of a dragon. Bloated skin rises in thick folds, seeping viscous slime from its wide pores. Hundreds of hanging teats feed a small army of squabbling, fighting young orcs - only the toughest of them are able to gain the precious nutrients to grow stronger, the weaker ones left to wither on the mouldy floor. At the top of this towering hulk is a shrivelled head coated in long tangled hair. Dazed eyes peer out with a mixture of sadness and pain, but as they fix on you they turn to anger, the creature's face contorted with the fierce desire to protect its young.]],
 	killer_message = "and given to the children as a plaything",
 	level_range = {40, nil}, exp_worth = 1,
 	female = true,
@@ -159,7 +163,7 @@ newEntity{ base="BASE_NPC_ORC", define_as = "GREATMOTHER",
 		{type="humanoid", subtype="orc", name="orc baby", number=4, hasxp=false},
 	},
 	summon = {
-		{type="humanoid", subtype="orc", name="orc baby", number=1, hasxp=false},
+		{type="humanoid", subtype="orc", name="orc baby", number=1, hasxp=false, no_summoner_set=true},
 	},
 
 	resolvers.talents{
@@ -177,5 +181,7 @@ newEntity{ base="BASE_NPC_ORC", define_as = "GREATMOTHER",
 		game.log("#PURPLE#As the orc greatmother falls you realize you have dealt a crippling blow to the orcs.")
 		game.state:eastPatrolsReduce()
 		world:gainAchievement("GREATMOTHER_DEAD", who)
+		who:setQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED, "genocide")
+		who:setQuestStatus("orc-breeding-pits", engine.Quest.COMPLETED)
 	end,
 }
diff --git a/game/modules/tome/data/zones/orc-breeding-pit/objects.lua b/game/modules/tome/data/zones/orc-breeding-pit/objects.lua
index 01c9c426f720352f5262c1c39a5852d65c411194..c09f2bfcf12331c4c48bca7a979a7ee9c701732c 100644
--- a/game/modules/tome/data/zones/orc-breeding-pit/objects.lua
+++ b/game/modules/tome/data/zones/orc-breeding-pit/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/orc-breeding-pit/zone.lua b/game/modules/tome/data/zones/orc-breeding-pit/zone.lua
index d2a64c89c6925a80a838ac23a245b3f58cf7658f..469b2fd1dd85d2cecf801e0e56ee026feccd3bae 100644
--- a/game/modules/tome/data/zones/orc-breeding-pit/zone.lua
+++ b/game/modules/tome/data/zones/orc-breeding-pit/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -62,7 +62,7 @@ return {
 			game:placeRandomLoreObject("BREEDING_HISTORY5")
 		end
 
-		for uid, e in pairs(level.entities) do e.faction="orc-pride" end
+		for uid, e in pairs(level.entities) do if e.faction ~= "neutral" then e.faction="orc-pride" end end
 	end,
 	on_enter = function(lev, old_lev, newzone)
 		if newzone and not game.level.shown_warning then
diff --git a/game/modules/tome/data/zones/paradox-plane/grids.lua b/game/modules/tome/data/zones/paradox-plane/grids.lua
index 45dbb61f6428aa9408722eeed6a71669146195d6..ed8f10c52d0927dd28a9a8f18b3d2be259607fcd 100644
--- a/game/modules/tome/data/zones/paradox-plane/grids.lua
+++ b/game/modules/tome/data/zones/paradox-plane/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -36,6 +36,6 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads somewhere ..]],
+	desc = [[The rift leads... somewhere.]],
 	change_level = 3, change_zone = "daikara",
 }
diff --git a/game/modules/tome/data/zones/paradox-plane/npcs.lua b/game/modules/tome/data/zones/paradox-plane/npcs.lua
index 822b29a9ee083157e446bbf784ce15dae54cefa6..d750acc9e70b17d327c1125c148d2a310a7a05f8 100644
--- a/game/modules/tome/data/zones/paradox-plane/npcs.lua
+++ b/game/modules/tome/data/zones/paradox-plane/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{ define_as = "EPOCH",
 	type = "elemental", subtype = "temporal", unique = true,
 	name = "Epoch",
 	display = "E", color=colors.VIOLET,
-	desc = [[A huge being composed of sparking blue and yellow energy stands before you.  It shifts and flows as it moves; at once erratic and graceful.]],
+	desc = [[A huge being composed of sparking blue and yellow energy stands before you.  It shifts and flows as it moves, at once erratic and graceful.]],
 	level_range = {12, nil}, exp_worth = 2,
 	max_life = 200, life_rating = 17, fixed_rating = true,
 	max_stamina = 85,
diff --git a/game/modules/tome/data/zones/paradox-plane/objects.lua b/game/modules/tome/data/zones/paradox-plane/objects.lua
index e4b0b61338b6bd1a9b82078153f58943681af4c9..93d770a4fe65dcbc0453ad591e503ece0f0ddb5b 100644
--- a/game/modules/tome/data/zones/paradox-plane/objects.lua
+++ b/game/modules/tome/data/zones/paradox-plane/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/paradox-plane/traps.lua b/game/modules/tome/data/zones/paradox-plane/traps.lua
index bdc0bde7c3a006a68d30157f48b562b204d470de..509316ea0973e6c662ae9cdf4d4e3e8501826c66 100644
--- a/game/modules/tome/data/zones/paradox-plane/traps.lua
+++ b/game/modules/tome/data/zones/paradox-plane/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/paradox-plane/zone.lua b/game/modules/tome/data/zones/paradox-plane/zone.lua
index 11f732962628617c8ab2d5e5ce16a67f1ccc74c4..28d0b181525cfdd096627393a3a981f5572fce9c 100644
--- a/game/modules/tome/data/zones/paradox-plane/zone.lua
+++ b/game/modules/tome/data/zones/paradox-plane/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rak-shor-pride/events.lua b/game/modules/tome/data/zones/rak-shor-pride/events.lua
index ff3ff99c6a17d2f556a4912b78f3fc12faa4e371..d2f4e199c97eadb4d1052ee9319a7b584d2a2463 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/events.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rak-shor-pride/grids.lua b/game/modules/tome/data/zones/rak-shor-pride/grids.lua
index 5dc05813787e168db54735eed316fd4fb403907b..b1496cbf36b2332d6f535614e1d913b5b31237f5 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/grids.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua
index 22dbfbb34aa6c90d5938b8ad95de8a425d2bb3bd..01ab0e203a28d7ef0ff4131f6b81224c1181b632 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -110,7 +110,7 @@ newEntity{ base = "BASE_NPC_GHOUL", define_as = "ROTTING_TITAN",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_ghoul_rotting_titan.png", display_h=2, display_y=-1}}},
 	desc = [[This gigantic mass of flesh and stone moves slowly, the ground rumbling with each step it takes. Its body seems to constantly pulsate and reform. Massive stones at the end of each limb form massive blunt weapons.]],
 	level_range = {45, nil}, exp_worth = 2,
-	rarity = 40,
+	rarity = 25,
 	max_life = resolvers.rngavg(150,200), life_rating = 40,
 	combat_armor = 40, combat_def = 10,
 	ai_state = { talent_in=2 },
@@ -125,8 +125,10 @@ newEntity{ base = "BASE_NPC_GHOUL", define_as = "ROTTING_TITAN",
 	ai = "tactical",
 	ai_tactic = resolvers.tactic"melee",
 	autolevel="warriormage",
-
-	can_pass = {pass_wall=70}, --So AI knows to try and pass walls.
+	
+	on_added_to_level = function(self)
+		self.can_pass = {pass_wall=70} --Added after birth so it doesn't spawn inside a wall.
+	end,
 
 	stats = { str=40, dex=20, mag=24, con=25 },
 	resists = {all = 25, [DamageType.PHYSICAL]=15, [DamageType.ARCANE]=-50, [DamageType.FIRE]=-20},
@@ -138,15 +140,17 @@ newEntity{ base = "BASE_NPC_GHOUL", define_as = "ROTTING_TITAN",
 	combat_atk=40,
 	combat_spellpower=25,
 	
+	inc_damage = { [DamageType.PHYSICAL] = 15 },
+	
 	disarm_immune=1, --Since disarming him would be, well, DISARMING him.
 
 	on_move = function(self)
-			if rng.percent(20) then
-				game.logSeen(self, "The ground shakes as %s steps!", self.name:capitalize())
-				local tg = {type="ball", range=0, selffire=false, radius=3, no_restrict=true}
-				local DamageType = require "engine.DamageType"
-				self:project(tg, self.x, self.y, DamageType.PHYSKNOCKBACK, {dam=24, dist=1})
-				self:doQuake(tg, self.x, self.y)
+		if rng.percent(35) then
+			game.logSeen(self, "The ground shakes as %s steps!", self.name:capitalize())
+			local tg = {type="ball", range=0, selffire=false, radius=4, no_restrict=true}
+			local DamageType = require "engine.DamageType"
+			--self:project(tg, self.x, self.y, DamageType.PHYSKNOCKBACK, {dam=24, dist=5})
+			self:doQuake(tg, self.x, self.y)
 		end
 		self:project({type="ball", range=0, selffire=false, radius=1}, self.x, self.y, engine.DamageType.DIG, 1)
 	end,
@@ -180,7 +184,7 @@ newEntity{ base = "BASE_NPC_GHOST", define_as = "GLACIAL_LEGION",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_ghost_glacial_legion.png", display_h=2, display_y=-1}}},
 	desc = [[A massive, shifting, ethereal form floats in the air around an orb of frozen blood. Vapor pools on the floor beneath it.]],
 	level_range = {45, nil}, exp_worth = 2,
-	rarity = 40,
+	rarity = 25,
 	size_category=5,
 	rank = 3.5,
 	max_life = resolvers.rngavg(90,100), life_rating = 18,
@@ -188,34 +192,36 @@ newEntity{ base = "BASE_NPC_GHOST", define_as = "GLACIAL_LEGION",
 	ai = "tactical", ai_state = { talent_in=1, },
 	ai_tactic = resolvers.tactic"ranged",
 	stats = { str=13, dex=15, mag=45, con=14 },
-	combat_spellpower=40,
+	combat_spellpower = 100,
 
 	resists = {all = -10, [DamageType.FIRE] = -100, [DamageType.LIGHT] = 30, [DamageType.COLD] = 100},
 	combat_armor = 0, combat_def = resolvers.mbonus(10, 10),
 	--stealth = resolvers.mbonus(40, 10),
 
-	combat = { dam=50, atk=50, apr=100, dammod={mag=1.1} },
+	combat = { dam=50, atk=90, apr=100, dammod={mag=1.1} },
 	melee_project = {[DamageType.COLD]=resolvers.mbonus(15, 25)},
 	on_melee_hit = {[DamageType.COLD]=resolvers.mbonus(15, 5)},
+	
+	inc_damage = { [DamageType.COLD] = 25 },
 
 	on_move = function(self)
-			local DamageType = require "engine.DamageType"
-			local duration = 7
-			local radius = 0
-			local dam = 25
-			-- Add a lasting map effect
-			game.level.map:addEffect(self,
-				self.x, self.y, duration,
-				engine.DamageType.ICE, 25,
-				radius,
-				5, nil,
-				engine.Entity.new{alpha=100, display='', color_br=30, color_bg=60, color_bb=200},
-				function(e)
-					e.radius = e.radius
-					return true
-				end,
-				false
-			)
+		local DamageType = require "engine.DamageType"
+		local duration = 9
+		local radius = 0
+		local dam = 100
+		-- Add a lasting map effect
+		game.level.map:addEffect(self,
+			self.x, self.y, duration,
+			engine.DamageType.ICE, dam,
+			radius,
+			5, nil,
+			engine.Entity.new{alpha=100, display='', color_br=30, color_bg=60, color_bb=200},
+			function(e)
+				e.radius = e.radius 
+				return true
+			end,
+			false
+		)
 	end,
 
 	resolvers.talents{
@@ -223,13 +229,12 @@ newEntity{ base = "BASE_NPC_GHOST", define_as = "GLACIAL_LEGION",
 		[Talents.T_FREEZE]={base=5, every=4, max=10},
 		[Talents.T_ICE_STORM]={base=4, every=6, max=8},
 		[Talents.T_ICE_SHARDS]={base=5, every=5, max=9},
-		[Talents.T_ARCANE_POWER]={base=4, every=3, max = 11},
 		[Talents.T_SHATTER]={base=3, every=6, max=8},
 		[Talents.T_UTTERCOLD]={base=3, every=7, max = 5},
 		[Talents.T_FROZEN_GROUND]={base=4, every=6, max = 6},
 		[Talents.T_CHILL_OF_THE_TOMB]={base=5, every=5, max=10},
 		[Talents.T_SPELLCRAFT]={base=3, every=7, max=8},
-		[Talents.T_MANAFLOW]={base=5, every=4, max = 12},
+		--[Talents.T_MANAFLOW]={base=5, every=4, max = 12},
 		[Talents.T_FROST_HANDS]={base=3, every=7, max=8},
 	},
 	resolvers.drops{chance=100, nb=3, {tome_drops="boss"} },
@@ -240,10 +245,10 @@ newEntity{ base = "BASE_NPC_GHOST", define_as = "GLACIAL_LEGION",
 newEntity{ base = "BASE_NPC_BONE_GIANT", define_as = "HEAVY_SENTINEL",
 	allow_infinite_dungeon = true,
 	name = "Heavy Sentinel", color=colors.ORANGE, unique=true,
-	desc = [[A towering creature, made from the bones of countless bodies. An aura of flame bellows from within its chest.]],
+	desc = [[A towering creature, made from the bones of countless bodies. An aura of flame billows from within its chest.]],
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_giant_heavy_sentinel.png", display_h=2, display_y=-1}}},
 	level_range = {45, nil}, exp_worth = 2,
-	rarity = 40,
+	rarity = 25,
 	rank = 3.5,
 	ai = "tactical",
 	size=5,
@@ -251,12 +256,12 @@ newEntity{ base = "BASE_NPC_BONE_GIANT", define_as = "HEAVY_SENTINEL",
 	combat_armor = 20, combat_def = 35,
 	life_rating = 28,
 	
-	combat_atk=30,
-	combat_spellpower=15,
+	combat_atk = 60,
+	combat_spellpower=35,
 	
 	stats = { str=28, dex=60, mag=20, con=20 },
 	
-	combat = { dam=resolvers.levelup(60, 1, 2), atk=resolvers.levelup(70, 1, 1), apr=20, dammod={str=1.2}, damtype=engine.DamageType.FIRE, convert_damage={[engine.DamageType.PHYSICAL]=50}},
+	combat = { dam=resolvers.levelup(60, 1, 2), atk=resolvers.levelup(110, 1, 1), apr=20, dammod={str=1.2}, damtype=engine.DamageType.FIRE, convert_damage={[engine.DamageType.PHYSICAL]=50}},
 	
 	melee_project = {[DamageType.FIRE]=resolvers.mbonus(15, 25)},
 	on_melee_hit = {[DamageType.FIRE]=resolvers.mbonus(15, 5)},
@@ -268,12 +273,10 @@ newEntity{ base = "BASE_NPC_BONE_GIANT", define_as = "HEAVY_SENTINEL",
 		[Talents.T_SKELETON_REASSEMBLE]=5,
 		[Talents.T_ARCANE_POWER]={base=3, every=3, max = 6},
 		[Talents.T_FLAME]={base=3, every=4, max = 8},
-		[Talents.T_FLAMESHOCK]={base=2, every=6, max = 7},
-		[Talents.T_MANAFLOW]={base=5, every=5, max = 10},
+		[Talents.T_FLAMESHOCK]={base=3, every=6, max = 7},
 		[Talents.T_INFERNO]={base=2, every=5, max = 6},
 		[Talents.T_BURNING_WAKE]={base=1, every=4, max = 5},
 		[Talents.T_WILDFIRE]={base=3, every=7, max=5},
-		--[Talents.T_GOLEM_MOLTEN_SKIN]={base=3, every=6, max=6},
 		[Talents.T_CLEANSING_FLAMES]={base=2, every=6, max = 5},
 		[Talents.T_ARCANE_COMBAT]=3,
 		[Talents.T_SPELLCRAFT]={base=3, every=7, max=7},
@@ -291,20 +294,25 @@ newEntity{ base = "BASE_NPC_VAMPIRE", unique=true, define_as="ARCH_ZEPHYR",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_vampire_arch_zephyr.png", display_h=2, display_y=-1}}},
 	desc=[[The robes of this ancient vampire billow with intense winds. Bolts of lightning arc along its body. In its hand it holds a bow, electricity streaking across it.]],
 	level_range = {45, nil}, exp_worth = 1,
-	rarity = 40,
+	rarity = 25,
 	autolevel="warriormage",
 	stats = { str=24, dex=40, mag=24, con=20 },
 	max_life = resolvers.rngavg(100,120), life_rating=25,
 	combat_armor = 15, combat_def = 15,
 	rank = 3.5,
-	mana_regen=6,
+	mana_regen = 20, --Maintain Thunderstorm
+	
+	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
 
-	movement_speed=1.5,
+	movement_speed=1.75,
+	
+	combat_atk = 120,
+	combat_spellpower = 60,
 	
-	combat_atk = 40,
-	combat_spellpower = 40,
+	ranged_project = {[DamageType.LIGHTNING] = resolvers.mbonus(30, 30)},
 
-	ai = "tactical", ai_state = { talent_in=4, },
+	ai = "tactical", ai_state = { talent_in=3, },
+	ai_tactic = resolvers.tactic"ranged",
 	resolvers.equip{ {type="weapon", subtype="longbow", defined="STORM_FURY", random_art_replace={chance=50}, autoreq=true, force_drop=true}, {type="ammo", subtype="arrow", autoreq=true} },
 
 	resists = { [DamageType.LIGHTNING] = 100, [DamageType.PHYSICAL] = -20, [DamageType.LIGHT] = 30,  },
@@ -322,7 +330,7 @@ newEntity{ base = "BASE_NPC_VAMPIRE", unique=true, define_as="ARCH_ZEPHYR",
 
 		[Talents.T_SHOOT]=1, -- If possible, add talent that lets it temporarily fire lightning instead of arrows.
 		[Talents.T_RELOAD]=1,
-		[Talents.T_BOW_MASTERY]={base=3, every=10},
+		[Talents.T_BOW_MASTERY]={base=4, every=10},
 		[Talents.T_DUAL_ARROWS]={base=3, every=6, max=8},
 		[Talents.T_PINNING_SHOT]={base=2, every=6, max=4},
 		[Talents.T_CRIPPLING_SHOT]={base=2, every=6, max=7},
@@ -336,31 +344,36 @@ newEntity{ base = "BASE_NPC_WIGHT",
 	allow_infinite_dungeon = true,
 	name = "Void Spectre", color=colors.RED, unique=true,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/undead_wight_void_spectre.png", display_h=2, display_y=-1}}},
-	desc=[[Intense Arcane energy whirls in the air around this ethereal form. ]],
+	desc=[[Intense Arcane energy whirls in the air around this ethereal form.]],
 	level_range = {45, nil}, exp_worth = 2,
 	life_rating=16,
-	rarity = 40,
+	rarity = 25,
 	rank = 3.5,
 	max_life = resolvers.rngavg(200,300),
 	max_mana = resolvers.rngavg(800,1200),
-	mana_regen = 5,
+	mana_regen = 100, --RAW ARCANE POWER
 	combat_armor = 12, combat_def = 30, combat_atk=30,
+	combat_spellpower = resolvers.mbonus(90, 30),
+	
+	arcane_cooldown_divide = 4, --Aether Avatar ++
+	inc_damage = { [DamageType.ARCANE] = 30 },
 	
-		combat = { dam=resolvers.mbonus(40, 20), atk=20, apr=15, damtype=DamageType.ARCANE },
+	combat = { dam=resolvers.mbonus(40, 20), atk=20, apr=15, damtype=DamageType.ARCANE },
 	
-		resists = { [DamageType.COLD] = 30, [DamageType.FIRE] = 30, [DamageType.LIGHTNING] = 30, [DamageType.PHYSICAL] = 0, [DamageType.LIGHT] = 0, [DamageType.ARCANE] = 100},
+	resists = { [DamageType.COLD] = 30, [DamageType.FIRE] = 30, [DamageType.LIGHTNING] = 30, [DamageType.PHYSICAL] = 0, [DamageType.LIGHT] = 0, [DamageType.ARCANE] = 100},
 
 	ai = "tactical",
+	ai_tactic = resolvers.tactic"ranged",
 	resolvers.talents{ [Talents.T_FLAMESHOCK]={base=3, every=5, max=7}, [Talents.T_LIGHTNING]={base=4, every=5, max=8}, [Talents.T_GLACIAL_VAPOUR]={base=3, every=5, max=7}, [Talents.T_STRIKE]={base=3, every=5, max=7},
 		[Talents.T_ARCANE_POWER]={base=6, every=2, max=12},
 		[Talents.T_MANATHRUST]={base=6, every=4, max=10},
 		[Talents.T_ARCANE_VORTEX]={base=4, every=4, max=7},
 		[Talents.T_SPELLCRAFT]=5,
 		[Talents.T_AETHER_BEAM]={base=6, every=7, max=9},
-		[Talents.T_AETHER_BREACH]={base=3, every=6, max=6},
-		[Talents.T_HEAL]={base=2, every=6, max=6},
+		[Talents.T_AETHER_BREACH]={base=4, every=6, max=8},
+		[Talents.T_HEAL]={base=3, every=6, max=6},
 		[Talents.T_SHIELDING]={base=3, every=6, max=6},
-		[Talents.T_ARCANE_SHIELD]={base=2, every=5, max=5},
+		[Talents.T_ARCANE_SHIELD]={base=3, every=5, max=5},
 		[Talents.T_PURE_AETHER]={base=3, every=7, max=5},
 		[Talents.T_PHASE_DOOR]=10,
 	},
diff --git a/game/modules/tome/data/zones/rak-shor-pride/objects.lua b/game/modules/tome/data/zones/rak-shor-pride/objects.lua
index d9d3d3d62a196059a6a62697e20c264e793b3be6..2bf3233d973ee55d78af270bbdc0ace25cb642d7 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/objects.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rak-shor-pride/zone.lua b/game/modules/tome/data/zones/rak-shor-pride/zone.lua
index 57c77b6da38b08e2a8576a87c820413ef041a5dd..0df4f94ebd282dfea7ea3fca37787dde3acc40a5 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/zone.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor-escape/events.lua b/game/modules/tome/data/zones/reknor-escape/events.lua
index 0a6b2df62f0621936317de67d2f6b8cdf314bcc3..63b97ab7ce2b9ce6c85d00f58b93f5b6913a948c 100644
--- a/game/modules/tome/data/zones/reknor-escape/events.lua
+++ b/game/modules/tome/data/zones/reknor-escape/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor-escape/grids.lua b/game/modules/tome/data/zones/reknor-escape/grids.lua
index f7b6e4356fd387c8ea99d4457124043ad41658ec..71185d9e4830a3d3c8ba2b318b0ad1a4341952a5 100644
--- a/game/modules/tome/data/zones/reknor-escape/grids.lua
+++ b/game/modules/tome/data/zones/reknor-escape/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor-escape/npcs.lua b/game/modules/tome/data/zones/reknor-escape/npcs.lua
index 0cb425aca746426d36618c5579a220e8d72b472f..5b9ac324542ff6b2733ce33dd36797426b6756b0 100644
--- a/game/modules/tome/data/zones/reknor-escape/npcs.lua
+++ b/game/modules/tome/data/zones/reknor-escape/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -82,7 +82,7 @@ newEntity{ define_as = "NORGAN",
 	name = "Norgan",
 	display = "@", color=colors.UMBER,
 	faction = "iron-throne",
-	desc = [[Norgan and you are the sole survivors of the Reknor expedition, your duty is to make sure the news come back to the Iron Council.]],
+	desc = [[Norgan and you are the sole survivors of the Reknor expedition; your duty is to make sure the news makes it back to the Iron Council.]],
 	level_range = {1, nil},
 	max_life = 120, life_rating = 12, fixed_rating = true,
 	rank = 3,
diff --git a/game/modules/tome/data/zones/reknor-escape/objects.lua b/game/modules/tome/data/zones/reknor-escape/objects.lua
index d6f3335a6e4836d4d2919d993ffc2beb0145effa..922e38c5b746948ce4f492965b9cb1ccc45d030a 100644
--- a/game/modules/tome/data/zones/reknor-escape/objects.lua
+++ b/game/modules/tome/data/zones/reknor-escape/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor-escape/traps.lua b/game/modules/tome/data/zones/reknor-escape/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/reknor-escape/traps.lua
+++ b/game/modules/tome/data/zones/reknor-escape/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor-escape/zone.lua b/game/modules/tome/data/zones/reknor-escape/zone.lua
index 77d02469ca7bfde225b9079a26a7d393fcdb3350..6e5866ab69d35bfb8c7dbae9ad91d800fcbef55a 100644
--- a/game/modules/tome/data/zones/reknor-escape/zone.lua
+++ b/game/modules/tome/data/zones/reknor-escape/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor/events.lua b/game/modules/tome/data/zones/reknor/events.lua
index f4104550edf7debf0e0e3531269decc8f02192b1..b9d2bfd120ddd53120fd53265cf90c906c37a33f 100644
--- a/game/modules/tome/data/zones/reknor/events.lua
+++ b/game/modules/tome/data/zones/reknor/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor/grids.lua b/game/modules/tome/data/zones/reknor/grids.lua
index d2dc057544381d4b50ad6a48bf176d7bce7c10b2..42d96211380406d3f2f64cf9f9d94658e18a6225 100644
--- a/game/modules/tome/data/zones/reknor/grids.lua
+++ b/game/modules/tome/data/zones/reknor/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor/npcs.lua b/game/modules/tome/data/zones/reknor/npcs.lua
index cfdd3e1147fed908a4eac144d16c1a4706fb22d3..99cd14a053f23da1d9a0be0672bb65086794fd48 100644
--- a/game/modules/tome/data/zones/reknor/npcs.lua
+++ b/game/modules/tome/data/zones/reknor/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor/objects.lua b/game/modules/tome/data/zones/reknor/objects.lua
index 605208b6b42fed0a16c75dc7de8c6bb9a8d8b946..6fd71ae7d5234f86dd8313b68eaa815e489c1215 100644
--- a/game/modules/tome/data/zones/reknor/objects.lua
+++ b/game/modules/tome/data/zones/reknor/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor/traps.lua b/game/modules/tome/data/zones/reknor/traps.lua
index 9115ac384896218c420600097cae66962fb3f9c3..848fbf56b50b4d0d9978139ebecac3a5450ad513 100644
--- a/game/modules/tome/data/zones/reknor/traps.lua
+++ b/game/modules/tome/data/zones/reknor/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/reknor/zone.lua b/game/modules/tome/data/zones/reknor/zone.lua
index f35c98bb0cea0f186e19ab08d7c11777f6a39bdd..63dc08a731db1c67ff58e7d071d637f3a46684fb 100644
--- a/game/modules/tome/data/zones/reknor/zone.lua
+++ b/game/modules/tome/data/zones/reknor/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rhaloren-camp/events.lua b/game/modules/tome/data/zones/rhaloren-camp/events.lua
index 2a29f47cef279bf87eb7867d077e9ca486b2074d..f10a1736ac63d70e5bb2217665674bd30c5763c7 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/events.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rhaloren-camp/grids.lua b/game/modules/tome/data/zones/rhaloren-camp/grids.lua
index 3fb79febf33b037b2b1402a9664f2c0858960812..7f2d1c02f2b186be8765321f5ff6262b09b4d46e 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/grids.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rhaloren-camp/npcs.lua b/game/modules/tome/data/zones/rhaloren-camp/npcs.lua
index 25e44f38e5bacfc58a279ff299687061fd537bd4..ae9d6e14b63f2b3f38733a008f9e9492d6be58bb 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/npcs.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -32,7 +32,7 @@ newEntity{ define_as = "INQUISITOR",
 	type = "humanoid", subtype = "shalore", unique = true,
 	name = "Rhaloren Inquisitor",
 	display = "p", color=colors.VIOLET, female = true,
-	desc = [[This tall elf rush to you, wielding both her greatsword and magical spells.]],
+	desc = [[This tall elf rushes at you, wielding both her greatsword and magical spells.]],
 	killer_message = "and hung from the rafters",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 150, life_rating = 15, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/rhaloren-camp/objects.lua b/game/modules/tome/data/zones/rhaloren-camp/objects.lua
index f3c02bc1bf9f9ead796d3e7b48696f44accc73cf..5cb00249c2e2c4020d51b6921b4c24578b9f5088 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/objects.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rhaloren-camp/traps.lua b/game/modules/tome/data/zones/rhaloren-camp/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/traps.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/rhaloren-camp/zone.lua b/game/modules/tome/data/zones/rhaloren-camp/zone.lua
index 9325af033d7f97c20cf0ce9211f8fcb463de5589..941764a238052f3579a9a4afeaa39f5c5f7f1039 100644
--- a/game/modules/tome/data/zones/rhaloren-camp/zone.lua
+++ b/game/modules/tome/data/zones/rhaloren-camp/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ring-of-blood/events.lua b/game/modules/tome/data/zones/ring-of-blood/events.lua
index 0d300d100c37cb602d148cb51fa31bb980b83fe8..ba169aa8fb4b0fcdb50194e75ccdc22cf4e1acc6 100644
--- a/game/modules/tome/data/zones/ring-of-blood/events.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ring-of-blood/grids.lua b/game/modules/tome/data/zones/ring-of-blood/grids.lua
index 635db9398e9194c8f69df48f0f9f6dfedf17c166..6e51b3366dffb6e23c64231f0920fa5f78067b68 100644
--- a/game/modules/tome/data/zones/ring-of-blood/grids.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
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 9d22815167a947871f28e7353d2d7454d6716fec..556708c478b90f748466531d929336e87942236a 100644
--- a/game/modules/tome/data/zones/ring-of-blood/npcs.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ring-of-blood/objects.lua b/game/modules/tome/data/zones/ring-of-blood/objects.lua
index cc44937cbcae253a854d6650588851c99ba30f8f..7ec6b4bc711ae1a17c7cdaa5801b5c870971c458 100644
--- a/game/modules/tome/data/zones/ring-of-blood/objects.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -23,7 +23,7 @@ newEntity{ base = "BASE_RING",
 	power_source = {psionic=true},
 	define_as = "RING_OF_BLOOD", rarity=false,
 	name = "Bloodcaller", unique=true, image = "object/artifact/jewelry_ring_bloodcaller.png",
-	desc = [[You won the Ring of Blood trial, this is your reward.]],
+	desc = [[You won the Ring of Blood trial, and this is your reward.]],
 	unided_name = "bloody ring",
 	rarity = false,
 	cost = 300,
diff --git a/game/modules/tome/data/zones/ring-of-blood/traps.lua b/game/modules/tome/data/zones/ring-of-blood/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/ring-of-blood/traps.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ring-of-blood/zone.lua b/game/modules/tome/data/zones/ring-of-blood/zone.lua
index 8a41061fe5b5679315814d22a948a6f12abbdc42..bd052870e14755ce0a026c1c487af66025991dfa 100644
--- a/game/modules/tome/data/zones/ring-of-blood/zone.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ritch-tunnels/events.lua b/game/modules/tome/data/zones/ritch-tunnels/events.lua
index 52b6a7a5d3f79e474328a4a390963e76d22eadf9..db09ff1f81898311eb7649a6d7e9e6693c9b89df 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/events.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ritch-tunnels/grids.lua b/game/modules/tome/data/zones/ritch-tunnels/grids.lua
index 73c22660bce2c8a79d314b0266241db25cb4ee6b..6b69856f884287a3d5dcd32590dd0a9e06d0b204 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/grids.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ritch-tunnels/npcs.lua b/game/modules/tome/data/zones/ritch-tunnels/npcs.lua
index adf91fc3d4a180686553176c12276c678825c6e9..5fa9bc6ea176f56b9d29c5b64d62458f8124f8c5 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/npcs.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,7 +28,7 @@ newEntity{
 	define_as = "BASE_NPC_RITCH_REL",
 	type = "insect", subtype = "ritch",
 	display = "I", color=colors.RED,
-	desc = [[Ritchs are giant insects native to the arid wastes of the southern parts of the Far East.
+	desc = [[Ritches are giant insects native to the arid wastes of the southern parts of the Far East.
 Vicious predators, they inject corrupting diseases into their foes, and their sharp claws cut through most armours.]],
 	killer_message = ", who incubated her eggs in the corpse,",
 
diff --git a/game/modules/tome/data/zones/ritch-tunnels/objects.lua b/game/modules/tome/data/zones/ritch-tunnels/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/objects.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ritch-tunnels/traps.lua b/game/modules/tome/data/zones/ritch-tunnels/traps.lua
index 0c6a829714d49f0f6cf70e9b7eb4714b6f9767c0..0c27e99ced0f05f73325e46e710a388c99722f8f 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/traps.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ritch-tunnels/zone.lua b/game/modules/tome/data/zones/ritch-tunnels/zone.lua
index 094322cd076fd0011fef1c01d1186f327de4d79f..2e4fc80c4da3263d797db1ae038389cc98030c05 100644
--- a/game/modules/tome/data/zones/ritch-tunnels/zone.lua
+++ b/game/modules/tome/data/zones/ritch-tunnels/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruined-dungeon/events.lua b/game/modules/tome/data/zones/ruined-dungeon/events.lua
index 18c2397ca6cf6c7da71897394f11bfbacd5a9144..c4966933539772172150a43fb84af013e54afa89 100644
--- a/game/modules/tome/data/zones/ruined-dungeon/events.lua
+++ b/game/modules/tome/data/zones/ruined-dungeon/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruined-dungeon/grids.lua b/game/modules/tome/data/zones/ruined-dungeon/grids.lua
index bdb6c3c73d1c50dcd4c53ca58bd7e56f961124ee..44b5c439044a9923dcb6f92a6f65052673daa0c3 100644
--- a/game/modules/tome/data/zones/ruined-dungeon/grids.lua
+++ b/game/modules/tome/data/zones/ruined-dungeon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruined-dungeon/npcs.lua b/game/modules/tome/data/zones/ruined-dungeon/npcs.lua
index bcc0c8b1ed61b02461b1f657847bd20297addd9d..b36d02271794e933402ac9c1d281a76f799121ac 100644
--- a/game/modules/tome/data/zones/ruined-dungeon/npcs.lua
+++ b/game/modules/tome/data/zones/ruined-dungeon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruined-dungeon/objects.lua b/game/modules/tome/data/zones/ruined-dungeon/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/ruined-dungeon/objects.lua
+++ b/game/modules/tome/data/zones/ruined-dungeon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruined-dungeon/traps.lua b/game/modules/tome/data/zones/ruined-dungeon/traps.lua
index 4bd266e06bb13fb96e543b24cc121d84f0d8ab31..f0715797558a8aeebc58d9a46ea2a5e998eab7ca 100644
--- a/game/modules/tome/data/zones/ruined-dungeon/traps.lua
+++ b/game/modules/tome/data/zones/ruined-dungeon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruined-dungeon/zone.lua b/game/modules/tome/data/zones/ruined-dungeon/zone.lua
index 62be5e7e34e7e3ffc8d81529a0c0a5a3e3e9ade5..9d9eb7f8a9bc685a13559f3ab337a54dc6cac98d 100644
--- a/game/modules/tome/data/zones/ruined-dungeon/zone.lua
+++ b/game/modules/tome/data/zones/ruined-dungeon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruins-kor-pul/events.lua b/game/modules/tome/data/zones/ruins-kor-pul/events.lua
index 9cc616105f7b710ba6d2db99a9c5953f80638b48..bc4d2a59c7d7451eeddb75e8abc4c3690bf9ad97 100644
--- a/game/modules/tome/data/zones/ruins-kor-pul/events.lua
+++ b/game/modules/tome/data/zones/ruins-kor-pul/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruins-kor-pul/grids.lua b/game/modules/tome/data/zones/ruins-kor-pul/grids.lua
index 1764696b341610ab5282e1f23baae568ff36db9d..32ba2fa723e6695054a9e707f722d96ddc096dff 100644
--- a/game/modules/tome/data/zones/ruins-kor-pul/grids.lua
+++ b/game/modules/tome/data/zones/ruins-kor-pul/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua b/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua
index bc620e0c451b92fd6ff8efb2c737d906cde07e27..66cddabc674fe8a9bd8ad31b17b0785ae1d7cfa0 100644
--- a/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua
+++ b/game/modules/tome/data/zones/ruins-kor-pul/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -128,7 +128,7 @@ newEntity{ define_as = "KOR_FURY",
 	type = "undead", subtype = "ghost", unique = true,
 	name = "Kor's Fury",
 	display = "G", color=colors.VIOLET,
-	desc = [[The shade's colossal will keeps it anchored to this world, now as a vengeful, insane spirit.]],
+	desc = [[The Shade's colossal will keeps it anchored to this world, now as a vengeful, insane spirit.]],
 	level_range = {38, nil}, exp_worth = 3,
 	max_life = 250, life_rating = 20, fixed_rating = true,
 	rank = 4,
diff --git a/game/modules/tome/data/zones/ruins-kor-pul/objects.lua b/game/modules/tome/data/zones/ruins-kor-pul/objects.lua
index ed94721cd4191af079737d0429e5dafd5b03aef5..5b297912bafa6c3aa4a11fe9b8540af37a4b0957 100644
--- a/game/modules/tome/data/zones/ruins-kor-pul/objects.lua
+++ b/game/modules/tome/data/zones/ruins-kor-pul/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruins-kor-pul/traps.lua b/game/modules/tome/data/zones/ruins-kor-pul/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/ruins-kor-pul/traps.lua
+++ b/game/modules/tome/data/zones/ruins-kor-pul/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/ruins-kor-pul/zone.lua b/game/modules/tome/data/zones/ruins-kor-pul/zone.lua
index dccbc5d4ad0842e4a251722570fed2d144e19bb7..38a0692d6e49e12cffad76dc65d38e6421c3eb0b 100644
--- a/game/modules/tome/data/zones/ruins-kor-pul/zone.lua
+++ b/game/modules/tome/data/zones/ruins-kor-pul/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sandworm-lair/events.lua b/game/modules/tome/data/zones/sandworm-lair/events.lua
index 822937485b01c4ebf5c570b6017966a55fe8b86e..a29575b5178439f7ee7945d5f61582755ac3cf35 100644
--- a/game/modules/tome/data/zones/sandworm-lair/events.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sandworm-lair/grids.lua b/game/modules/tome/data/zones/sandworm-lair/grids.lua
index 73c22660bce2c8a79d314b0266241db25cb4ee6b..6b69856f884287a3d5dcd32590dd0a9e06d0b204 100644
--- a/game/modules/tome/data/zones/sandworm-lair/grids.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sandworm-lair/npcs.lua b/game/modules/tome/data/zones/sandworm-lair/npcs.lua
index 40d1d04cd23e52d5b481ea718d736db34bd8472a..8ab3066d58d26730dd7c79a10cc0f52313cfabe5 100644
--- a/game/modules/tome/data/zones/sandworm-lair/npcs.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sandworm-lair/objects.lua b/game/modules/tome/data/zones/sandworm-lair/objects.lua
index ce87fe32cc07271d3edb8dbf3f685853832028e4..05877ad72282b8bbc008144e224313362bad18f9 100644
--- a/game/modules/tome/data/zones/sandworm-lair/objects.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -104,7 +104,7 @@ newEntity{ base = "BASE_GEM",
 	define_as = "ATAMATHON_ACTIVATE",
 	subtype = "red",
 	name = "Atamathon's Lost Ruby Eye", color=colors.VIOLET, quest=true, unique=true, identified=true, image="object/artifact/atamathons_lost_ruby_eye.png",
-	desc = [[One of the ruby eyes of the legendary giant golem: Atamathon.
+	desc = [[One of the ruby eyes of the legendary giant golem Atamathon.
 It is said it was made by the halflings during the Age of Pyre as a weapon against the orcs. Even though it was destroyed it managed to deal a crippling blow by killing their leader, Garkul the Devourer.]],
 	material_level = 5,
 	cost = 100,
diff --git a/game/modules/tome/data/zones/sandworm-lair/traps.lua b/game/modules/tome/data/zones/sandworm-lair/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/sandworm-lair/traps.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sandworm-lair/zone.lua b/game/modules/tome/data/zones/sandworm-lair/zone.lua
index d588efb2d04fba07f45983d335282ccfece25865..41da0ac24e548b8399dabc964a30d25d9a8da15d 100644
--- a/game/modules/tome/data/zones/sandworm-lair/zone.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -200,7 +200,7 @@ return {
 		local m = game.zone:makeEntityByName(game.level, "actor", "SANDWORM_TUNNELER_HUGE")
 		if not m then return end
 		game.zone:addEntity(game.level, m, "actor", tx, ty)
-		game.log("#OLIVE_DRAB#You feel the ground shacking from the west.")
+		game.log("#OLIVE_DRAB#You feel the ground shaking from the west.")
 		game.level.data.last_worm_turn = game.turn
 	end,
 }
diff --git a/game/modules/tome/data/zones/scintillating-caves/events.lua b/game/modules/tome/data/zones/scintillating-caves/events.lua
index a4e0248893d88d73885713093e640ad3e00d6be1..de4eb74c98b949821389f3e06b5115b0ca4e0cb1 100644
--- a/game/modules/tome/data/zones/scintillating-caves/events.lua
+++ b/game/modules/tome/data/zones/scintillating-caves/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/scintillating-caves/grids.lua b/game/modules/tome/data/zones/scintillating-caves/grids.lua
index e12400fbcc07d426c25365bb265d4d178c136bbc..e0a3985769532ee166ca3016a7348e7197b2e4e8 100644
--- a/game/modules/tome/data/zones/scintillating-caves/grids.lua
+++ b/game/modules/tome/data/zones/scintillating-caves/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/scintillating-caves/npcs.lua b/game/modules/tome/data/zones/scintillating-caves/npcs.lua
index d3730662070837720ce6151da88148278ca24ae2..936c53e8e65ee39ea5b840be5e71511c6fe208b2 100644
--- a/game/modules/tome/data/zones/scintillating-caves/npcs.lua
+++ b/game/modules/tome/data/zones/scintillating-caves/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -73,7 +73,7 @@ newEntity{ base="BASE_NPC_CRYSTAL", define_as = "SPELLBLAZE_SIMULACRUM",
 	name = "Spellblaze Simulacrum", display = "g", image = "npc/spellblaze_simulacrum.png",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/spellblaze_simulacrum.png", display_h=2, display_y=-1}}},
 	color=colors.VIOLET,
-	desc = [[A formation of purple crystal, but where the others could only be described as polyhedral, this construct seems to strangely resemble... you, if you were several orders of magnitude larger.]],
+	desc = [[A formation of purple crystal, but where the others could only be described as polyhedral, this construct seems to strangely resemble... you, if you were much, much larger.]],
 	killer_message = "and vaporised into nothingness",
 	level_range = {35, nil}, exp_worth = 3,
 	max_life = 300, life_rating = 25, fixed_rating = true,
diff --git a/game/modules/tome/data/zones/scintillating-caves/objects.lua b/game/modules/tome/data/zones/scintillating-caves/objects.lua
index 3945fbd24f43dfa41fa13744ba1a80e7744a4889..9a6f9f208dcefdf78450027ce6b3cd0389b7db15 100644
--- a/game/modules/tome/data/zones/scintillating-caves/objects.lua
+++ b/game/modules/tome/data/zones/scintillating-caves/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/scintillating-caves/traps.lua b/game/modules/tome/data/zones/scintillating-caves/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/scintillating-caves/traps.lua
+++ b/game/modules/tome/data/zones/scintillating-caves/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/scintillating-caves/zone.lua b/game/modules/tome/data/zones/scintillating-caves/zone.lua
index 92e68a6a4a4b59d6741919a2953976a4135cd9b6..fdf4b1d3d09e9a5177b921bf3a01b64fdd4b262a 100644
--- a/game/modules/tome/data/zones/scintillating-caves/zone.lua
+++ b/game/modules/tome/data/zones/scintillating-caves/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shadow-crypt/events.lua b/game/modules/tome/data/zones/shadow-crypt/events.lua
index 5ba2ca759ecdc1538687b728e2f85e1a028e59bc..66544cb9d7350f324a70a5e94ea27ba9df6cf566 100644
--- a/game/modules/tome/data/zones/shadow-crypt/events.lua
+++ b/game/modules/tome/data/zones/shadow-crypt/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shadow-crypt/grids.lua b/game/modules/tome/data/zones/shadow-crypt/grids.lua
index efb73a89c8729383aa76a41be96da3b727b4dc1a..049816b7ebccd29a4a9dce95a4f1859474684a2a 100644
--- a/game/modules/tome/data/zones/shadow-crypt/grids.lua
+++ b/game/modules/tome/data/zones/shadow-crypt/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shadow-crypt/npcs.lua b/game/modules/tome/data/zones/shadow-crypt/npcs.lua
index 3581d3b25a2860782b5df815807126883d9f4229..2d71bad8d86002f718a60eadce91c3d5172e3ca5 100644
--- a/game/modules/tome/data/zones/shadow-crypt/npcs.lua
+++ b/game/modules/tome/data/zones/shadow-crypt/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shadow-crypt/objects.lua b/game/modules/tome/data/zones/shadow-crypt/objects.lua
index 1e95167379666b0f9aab13b88ed48e6b7874f0f7..dcc8d8f6947127f2f228ac10eee9b59c7c14763b 100644
--- a/game/modules/tome/data/zones/shadow-crypt/objects.lua
+++ b/game/modules/tome/data/zones/shadow-crypt/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shadow-crypt/traps.lua b/game/modules/tome/data/zones/shadow-crypt/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/shadow-crypt/traps.lua
+++ b/game/modules/tome/data/zones/shadow-crypt/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shadow-crypt/zone.lua b/game/modules/tome/data/zones/shadow-crypt/zone.lua
index 2c1df39ce957a6e5d7204e79b4e5d94e7dd14f61..052752c2542717812242d659d478b4020122b16e 100644
--- a/game/modules/tome/data/zones/shadow-crypt/zone.lua
+++ b/game/modules/tome/data/zones/shadow-crypt/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress-caldizar/grids.lua b/game/modules/tome/data/zones/shertul-fortress-caldizar/grids.lua
index 7989ee563ad6962cb730132bd3dfe53be75ecfb9..6b31857a78ce9840ffe2c776d520683a72461cf5 100644
--- a/game/modules/tome/data/zones/shertul-fortress-caldizar/grids.lua
+++ b/game/modules/tome/data/zones/shertul-fortress-caldizar/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress-caldizar/npcs.lua b/game/modules/tome/data/zones/shertul-fortress-caldizar/npcs.lua
index 7e05b176a904d4d0956f31d153196498fccbd892..e4581b6a424ed0bb997838a08bd8b6cdf20bf5e9 100644
--- a/game/modules/tome/data/zones/shertul-fortress-caldizar/npcs.lua
+++ b/game/modules/tome/data/zones/shertul-fortress-caldizar/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress-caldizar/objects.lua b/game/modules/tome/data/zones/shertul-fortress-caldizar/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/shertul-fortress-caldizar/objects.lua
+++ b/game/modules/tome/data/zones/shertul-fortress-caldizar/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress-caldizar/zone.lua b/game/modules/tome/data/zones/shertul-fortress-caldizar/zone.lua
index 7312f51fbcfca141e04581e482ee086800788edb..fdaa51a5a549d9078edafb3fddcd17776a1f68a6 100644
--- a/game/modules/tome/data/zones/shertul-fortress-caldizar/zone.lua
+++ b/game/modules/tome/data/zones/shertul-fortress-caldizar/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress/grids.lua b/game/modules/tome/data/zones/shertul-fortress/grids.lua
index 3dae1d9088e30fb411f10eb4f3a708fbed1fedbd..65ad9260ed3b63407c785f8be4bb51f95bc20247 100644
--- a/game/modules/tome/data/zones/shertul-fortress/grids.lua
+++ b/game/modules/tome/data/zones/shertul-fortress/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress/npcs.lua b/game/modules/tome/data/zones/shertul-fortress/npcs.lua
index ef39c507b14c59057d073014acb98201efcd8e2b..b942d18ec1061d99de9044c1d1d13eabd9c03e2b 100644
--- a/game/modules/tome/data/zones/shertul-fortress/npcs.lua
+++ b/game/modules/tome/data/zones/shertul-fortress/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress/objects.lua b/game/modules/tome/data/zones/shertul-fortress/objects.lua
index 5715e6f6c2f27e8d6b3824e5f0cb8f7c78335700..0fe49c72ff42312f37063a170333b51026807e2e 100644
--- a/game/modules/tome/data/zones/shertul-fortress/objects.lua
+++ b/game/modules/tome/data/zones/shertul-fortress/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/shertul-fortress/zone.lua b/game/modules/tome/data/zones/shertul-fortress/zone.lua
index 67e3851eab2413ff547bec7c862ba29f13448222..f0b8869eea21c385586ddcce80942ba79bfe0ff6 100644
--- a/game/modules/tome/data/zones/shertul-fortress/zone.lua
+++ b/game/modules/tome/data/zones/shertul-fortress/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slazish-fen/grids.lua b/game/modules/tome/data/zones/slazish-fen/grids.lua
index 12d90297f43ca394b65c207d4f2a412912c72534..8263ee91323fbf9c68038db0b4b933dbfb19904a 100644
--- a/game/modules/tome/data/zones/slazish-fen/grids.lua
+++ b/game/modules/tome/data/zones/slazish-fen/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,17 +27,36 @@ newEntity{
 	define_as = "BOGTREE",
 	type = "wall", subtype = "water",
 	name = "tree",
-	image = "terrain/swamptree.png",
+	image = "terrain/poisoned_water_01.png",
 	display = '#', color=colors.LIGHT_GREEN, back_color=colors.DARK_BLUE,
 	always_remember = true,
 	can_pass = {pass_tree=1},
 	does_block_move = true,
 	block_sight = true,
 	dig = "SHALLOW_WATER",
-	nice_tiler = { method="replace", base={"BOGTREE", 100, 1, 20}},
+	nice_tiler = { method="replace", base={"BOGTREE", 100, 1, 40}},
 	shader = "water",
 }
-for i = 1, 20 do newEntity{ base="BOGTREE", define_as = "BOGTREE"..i, image = "terrain/poisoned_water_01.png", add_displays = class:makeTrees("terrain/swamptree", 3, 3)} end
+for i = 1, 40 do
+	newEntity(class:makeNewTrees({base="BOGTREE", define_as = "BOGTREE"..i}, {
+		{"small_willow", {"shadow", "trunk", "waterripples", "foliage_bare"}},
+		{"small_willow_moss", {"shadow", "trunk", "waterripples", "foliage_bare"}},
+		{"willow", {tall=-1, "shadow", "trunk", "waterripples", "foliage_bare"}},
+		{"willow_moss", {tall=-1, "shadow", "trunk", "waterripples", "foliage_bare"}},
+		{"small_willow", {"shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"small_willow_moss", {"shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"willow", {tall=-1, "shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"willow_moss", {tall=-1, "shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"small_willow", {"shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"small_willow_moss", {"shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"willow", {tall=-1, "shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"willow_moss", {tall=-1, "shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"small_willow", {"shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"small_willow_moss", {"shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"willow", {tall=-1, "shadow", "trunk", "waterripples", "foliage_spring"}},
+		{"willow_moss", {tall=-1, "shadow", "trunk", "waterripples", "foliage_spring"}},
+	}))
+end
 
 newEntity{ base="WATER_BASE",
 	define_as = "BOGWATER",
@@ -53,7 +72,7 @@ for i = 1, 7 do newEntity{ base="BOGWATER_MISC", define_as = "BOGWATER_MISC"..i,
 
 newEntity{ base="BOGWATER",
 	define_as = "PORTAL",
-	display = "&", color = colors.BLUE,
+	display = "&", color = colors.VIOLET,
 	name = "coral portal",
 	add_displays = {class.new{z=18, image="terrain/naga_portal.png", display_h=2, display_y=-1, embed_particles = {
 		{name="naga_portal_smoke", rad=2, args={smoke="particles_images/smoke_whispery_bright"}},
diff --git a/game/modules/tome/data/zones/slazish-fen/npcs.lua b/game/modules/tome/data/zones/slazish-fen/npcs.lua
index de1196448c9dc220c6cbdc853d291c31d8700c7e..590151bd5b26b8b13ad96bec78035fbaeb968fab 100644
--- a/game/modules/tome/data/zones/slazish-fen/npcs.lua
+++ b/game/modules/tome/data/zones/slazish-fen/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -76,7 +76,7 @@ newEntity{ base = "BASE_NPC_NAGA", define_as = "NAGA_TIDEWARDEN",
 newEntity{ base = "BASE_NPC_NAGA", define_as = "NAGA_TIDECALLER",
 	name = "naga tidecaller", color=colors.BLUE,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_naga_naga_tidecaller.png", display_h=2, display_y=-1}}},
-	desc = [[A slithering noise accompanies the movement of this strange creature, whose snake-like tail gives rise to the body of a beautiful elf-like woman. As she moves her delicate hands water rises from the ground, and you feel that here is no mere monster, but a creature of awe and power.]],
+	desc = [[A slithering noise accompanies the movement of this strange creature, whose snake-like tail gives rise to the body of a beautiful Elf-like woman. As she moves her delicate hands, water rises from the ground, and you feel that here is no mere monster, but a creature of awe and power.]],
 	level_range = {2, nil}, exp_worth = 3, female = true,
 	rarity = 1,
 	max_life = resolvers.rngavg(50,60), life_rating = 10,
@@ -112,8 +112,8 @@ newEntity{ base="BASE_NPC_NAGA", define_as = "ZOISLA",
 	name = "Lady Zoisla the Tidebringer",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_naga_lady_zoisla_the_tidebringer.png", display_h=2, display_y=-1}}},
 	color=colors.VIOLET, female = true,
-	desc = [[Water circles slowly on the ground around this naga's tail, some droplets leaping up now and then as if they are impatient to do their mistress' bidding. Her dark tail is coiled tight, making her look short, but her calm and confident stare assure you that she will not be easily overcome. As the water begins to rise around her the air starts to simmer, and you feel her dark eyes are penetrating into you deeper than is comfortable.]],
-	killer_message = "and brought back to Vargh for experimentations",
+	desc = [[Water circles slowly on the ground around this naga's tail, some droplets leaping up now and then as if they are impatient to do their mistress' bidding. Her dark tail is coiled tight, making her look short, but her calm and confident stare assure you that she will not be easily overcome. As the water begins to rise around her the air starts to shimmer, and you feel her dark eyes are penetrating into you deeper than is comfortable.]],
+	killer_message = "and brought back to Vargh for experimentation",
 	level_range = {7, nil}, exp_worth = 2,
 	max_life = 150, life_rating = 15, fixed_rating = true,
 	max_stamina = 85,
diff --git a/game/modules/tome/data/zones/slazish-fen/objects.lua b/game/modules/tome/data/zones/slazish-fen/objects.lua
index af2848e1b01483be389e9352af1811c1d6622101..32384a367fd1d2effc3c9b2a43eab306c34ed1ec 100644
--- a/game/modules/tome/data/zones/slazish-fen/objects.lua
+++ b/game/modules/tome/data/zones/slazish-fen/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -26,7 +26,7 @@ for i = 1, 3 do
 newEntity{ base = "BASE_LORE",
 	define_as = "SLAZISH_NOTE"..i,
 	name = "weird conch", lore="slazish-note-"..i, image = "terrain/shell1.png",
-	desc = [[A conch, it seemed the naga was using it as a communication tool.]],
+	desc = [[A conch; it seems the naga was using it as a communication tool.]],
 	rarity = false,
 	encumberance = 0,
 }
diff --git a/game/modules/tome/data/zones/slazish-fen/traps.lua b/game/modules/tome/data/zones/slazish-fen/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/slazish-fen/traps.lua
+++ b/game/modules/tome/data/zones/slazish-fen/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slazish-fen/zone.lua b/game/modules/tome/data/zones/slazish-fen/zone.lua
index eda70111a42645ffc9c4187cb8390e5eaeca7055..a07d6856a0a70e732855b1fc2e989822a556b2f4 100644
--- a/game/modules/tome/data/zones/slazish-fen/zone.lua
+++ b/game/modules/tome/data/zones/slazish-fen/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slime-tunnels/grids.lua b/game/modules/tome/data/zones/slime-tunnels/grids.lua
index fa55db04db02ca2f739fb6d9b56269452f517f91..eafe06c1f4e66149c248059a56309c19150fef40 100644
--- a/game/modules/tome/data/zones/slime-tunnels/grids.lua
+++ b/game/modules/tome/data/zones/slime-tunnels/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slime-tunnels/npcs.lua b/game/modules/tome/data/zones/slime-tunnels/npcs.lua
index 2931f23b549f3e56ff4bc0ea920e168e3dd2bcea..692d2dc7be0c5052f17e5ac65d9cf6b672ce9608 100644
--- a/game/modules/tome/data/zones/slime-tunnels/npcs.lua
+++ b/game/modules/tome/data/zones/slime-tunnels/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slime-tunnels/objects.lua b/game/modules/tome/data/zones/slime-tunnels/objects.lua
index 1e95167379666b0f9aab13b88ed48e6b7874f0f7..dcc8d8f6947127f2f228ac10eee9b59c7c14763b 100644
--- a/game/modules/tome/data/zones/slime-tunnels/objects.lua
+++ b/game/modules/tome/data/zones/slime-tunnels/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slime-tunnels/traps.lua b/game/modules/tome/data/zones/slime-tunnels/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/slime-tunnels/traps.lua
+++ b/game/modules/tome/data/zones/slime-tunnels/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/slime-tunnels/zone.lua b/game/modules/tome/data/zones/slime-tunnels/zone.lua
index eb2f77bf299b7aa02aa1ffb8eddd9f7a525799fe..5839183448e4ab5ddcbac34db0b561e9060ef2ea 100644
--- a/game/modules/tome/data/zones/slime-tunnels/zone.lua
+++ b/game/modules/tome/data/zones/slime-tunnels/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sludgenest/grids.lua b/game/modules/tome/data/zones/sludgenest/grids.lua
index 944b9dfa4199968815ac451b1ef4200eb477828f..b5e1422643d0504735e469b01113d00ca10c5b82 100644
--- a/game/modules/tome/data/zones/sludgenest/grids.lua
+++ b/game/modules/tome/data/zones/sludgenest/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sludgenest/npcs.lua b/game/modules/tome/data/zones/sludgenest/npcs.lua
index 29f6492d2ce4c9990e70496c9c0d469a2acde111..8602664ce29f5b12c457b1ecefd71a755b51cbf1 100644
--- a/game/modules/tome/data/zones/sludgenest/npcs.lua
+++ b/game/modules/tome/data/zones/sludgenest/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sludgenest/objects.lua b/game/modules/tome/data/zones/sludgenest/objects.lua
index 1e95167379666b0f9aab13b88ed48e6b7874f0f7..dcc8d8f6947127f2f228ac10eee9b59c7c14763b 100644
--- a/game/modules/tome/data/zones/sludgenest/objects.lua
+++ b/game/modules/tome/data/zones/sludgenest/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sludgenest/traps.lua b/game/modules/tome/data/zones/sludgenest/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/sludgenest/traps.lua
+++ b/game/modules/tome/data/zones/sludgenest/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/sludgenest/zone.lua b/game/modules/tome/data/zones/sludgenest/zone.lua
index f5e321e2a407572e0c8991790b98d1eaf977a581..70aa162664ee9aa20d9d34d691ee0f267a6ee4c1 100644
--- a/game/modules/tome/data/zones/sludgenest/zone.lua
+++ b/game/modules/tome/data/zones/sludgenest/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/south-beach/grids.lua b/game/modules/tome/data/zones/south-beach/grids.lua
index 8e8af4f65ad9ade81081862af5bceb3d29655978..94131ec0ab5841b9c2d81d977153a639fa3d60a6 100644
--- a/game/modules/tome/data/zones/south-beach/grids.lua
+++ b/game/modules/tome/data/zones/south-beach/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/south-beach/npcs.lua b/game/modules/tome/data/zones/south-beach/npcs.lua
index 4f074805d7f29413f1ff49ad42cda0edefa2ad3b..130566e03cef1f022e046d40e74f2af946a9f7c8 100644
--- a/game/modules/tome/data/zones/south-beach/npcs.lua
+++ b/game/modules/tome/data/zones/south-beach/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -53,6 +53,7 @@ newEntity{
 	combat_armor = 3, combat_def = 3,
 
 	on_resurrect = function(self)
+		game.level.data.blight_start_in = nil
 		game.level.map:particleEmitter(self.x, self.y, 10, "ball_blight", {radius=10})
 		local list = {}
 		for uid, e in pairs(game.level.entities) do
diff --git a/game/modules/tome/data/zones/south-beach/objects.lua b/game/modules/tome/data/zones/south-beach/objects.lua
index 7ca09cb7fa21cfa65560027b446dfa9f57cc4437..7a6788c992034fb096f41d075d2d3c390a2607b7 100644
--- a/game/modules/tome/data/zones/south-beach/objects.lua
+++ b/game/modules/tome/data/zones/south-beach/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/south-beach/traps.lua b/game/modules/tome/data/zones/south-beach/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/south-beach/traps.lua
+++ b/game/modules/tome/data/zones/south-beach/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/south-beach/zone.lua b/game/modules/tome/data/zones/south-beach/zone.lua
index cdc82c6442681060c08211889319de6b79b47dd1..a228fd69f45a3b5e2180f6694ede629054331d1f 100644
--- a/game/modules/tome/data/zones/south-beach/zone.lua
+++ b/game/modules/tome/data/zones/south-beach/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/stellar-system-shandral/grids.lua b/game/modules/tome/data/zones/stellar-system-shandral/grids.lua
index 419a83ac3bec86aadf833da40e6465d15e4b165d..3d1e9d5af8816bd9bb4dfbba6fed1344c3f5f90e 100644
--- a/game/modules/tome/data/zones/stellar-system-shandral/grids.lua
+++ b/game/modules/tome/data/zones/stellar-system-shandral/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -55,7 +55,7 @@ newEntity{ base = "CELESTIAL_BODY",
 	define_as = "EYAL",
 	name = "Eyal (Planet)",
 	display = 'O', color=colors.BLUE,
-	desc = [[One of the main planet of the Shandral system.]],
+	desc = [[One of the main planets of the Shandral system.]],
 	sphere_map = "stars/eyal.png",
 	sphere_size = 1,
 	x_rot = 30, y_rot = -30, rot_speed = 9000,
@@ -65,7 +65,7 @@ newEntity{ base = "CELESTIAL_BODY",
 	define_as = "SUMMERTIDE",
 	name = "Summertide (Moon of Eyal)",
 	display = 'o', color=colors.GREY,
-	desc = [[Moon of Eyal.]],
+	desc = [[One of the moons of Eyal.]],
 	sphere_map = "stars/moon1.png",
 	sphere_size = 0.32,
 	x_rot = 50, y_rot = -80, rot_speed = 5600,
@@ -75,7 +75,7 @@ newEntity{ base = "CELESTIAL_BODY",
 	define_as = "WINTERTIDE",
 	name = "Wintertide (Moon of Eyal)",
 	display = 'o', color=colors.GREY,
-	desc = [[Moon of Eyal.]],
+	desc = [[One of the moons of Eyal.]],
 	sphere_map = "stars/moon1.png",
 	sphere_size = 0.32,
 	x_rot = -50, y_rot = 20, rot_speed = 5600,
@@ -88,7 +88,7 @@ newEntity{ base = "CELESTIAL_BODY",
 	define_as = "KOLAL",
 	name = "Kolal (Planet)",
 	display = 'O', color=colors.BROWN,
-	desc = [[One of the main planet of the Shandral system.]],
+	desc = [[One of the main planets of the Shandral system.]],
 	sphere_map = "stars/kolal.png",
 	sphere_size = 0.8,
 	x_rot = 10, y_rot = -50, rot_speed = 4000,
@@ -101,7 +101,7 @@ newEntity{ base = "CELESTIAL_BODY",
 	define_as = "LUXAM",
 	name = "Luxam (Planet)",
 	display = 'O', color=colors.BROWN,
-	desc = [[One of the main planet of the Shandral system.]],
+	desc = [[One of the main planets of the Shandral system.]],
 	sphere_map = "stars/luxam.png",
 	sphere_size = 1.3,
 	x_rot = 0, y_rot = -20, rot_speed = 1000,
@@ -114,7 +114,7 @@ newEntity{ base = "CELESTIAL_BODY",
 	define_as = "PONX",
 	name = "Ponx (Gaz Planet)",
 	display = 'O', color=colors.LIGHT_BLUE,
-	desc = [[One of the main planet of the Shandral system.]],
+	desc = [[One of the main planets of the Shandral system.]],
 	sphere_map = "stars/ponx.png",
 	sphere_size = 2,
 	x_rot = 20, y_rot = -40, rot_speed = 3000,
diff --git a/game/modules/tome/data/zones/stellar-system-shandral/npcs.lua b/game/modules/tome/data/zones/stellar-system-shandral/npcs.lua
index e20c31893b8dea6828b42d12cc42824f8f713438..bb8d0a3701066d4c3e78eb0bcae525e57b4d09d6 100644
--- a/game/modules/tome/data/zones/stellar-system-shandral/npcs.lua
+++ b/game/modules/tome/data/zones/stellar-system-shandral/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/stellar-system-shandral/objects.lua b/game/modules/tome/data/zones/stellar-system-shandral/objects.lua
index e20c31893b8dea6828b42d12cc42824f8f713438..bb8d0a3701066d4c3e78eb0bcae525e57b4d09d6 100644
--- a/game/modules/tome/data/zones/stellar-system-shandral/objects.lua
+++ b/game/modules/tome/data/zones/stellar-system-shandral/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/stellar-system-shandral/traps.lua b/game/modules/tome/data/zones/stellar-system-shandral/traps.lua
index e20c31893b8dea6828b42d12cc42824f8f713438..bb8d0a3701066d4c3e78eb0bcae525e57b4d09d6 100644
--- a/game/modules/tome/data/zones/stellar-system-shandral/traps.lua
+++ b/game/modules/tome/data/zones/stellar-system-shandral/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/stellar-system-shandral/zone.lua b/game/modules/tome/data/zones/stellar-system-shandral/zone.lua
index daca37d38c31045a4de94251f83f15e257de5aa7..0d558d0765a625978003ace47b4dc8c845c2294c 100644
--- a/game/modules/tome/data/zones/stellar-system-shandral/zone.lua
+++ b/game/modules/tome/data/zones/stellar-system-shandral/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tannen-tower/grids.lua b/game/modules/tome/data/zones/tannen-tower/grids.lua
index c429de1a70d788042a2d221bbd40938fd68f591e..d00994af85619a3d992e88867c702afd4e1585c3 100644
--- a/game/modules/tome/data/zones/tannen-tower/grids.lua
+++ b/game/modules/tome/data/zones/tannen-tower/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[This portal seems to be connected with Last Hope, you could probably use it to go back.]],
+	desc = [[This portal seems to be connected with Last Hope; you could probably use it to go back.]],
 
 	on_move = function(self, x, y, who)
 		if who == game.player then
diff --git a/game/modules/tome/data/zones/tannen-tower/npcs.lua b/game/modules/tome/data/zones/tannen-tower/npcs.lua
index e4a5b880e9ac573def3af88120074408df3dacd6..53196a6f9a9949f3eeeebef47cc34c3cf9c3691b 100644
--- a/game/modules/tome/data/zones/tannen-tower/npcs.lua
+++ b/game/modules/tome/data/zones/tannen-tower/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tannen-tower/objects.lua b/game/modules/tome/data/zones/tannen-tower/objects.lua
index e2ebe56d274da18acebd226be147d08a777ba4da..88e436b696625ef196c266d1dad75e5c1b66e59e 100644
--- a/game/modules/tome/data/zones/tannen-tower/objects.lua
+++ b/game/modules/tome/data/zones/tannen-tower/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -73,8 +73,8 @@ newEntity{ define_as = "ORB_MANY_WAYS2",
 	level_range = {30, 30},
 	display = "*", color=colors.VIOLET, image = "object/artifact/orb_many_ways.png",
 	encumber = 1,
-	desc = [[The orb projects images of distant places, some that seem to not be of this world, switching rapidly.
-If used near a portal it could probably activate it.]],
+	desc = [[The orb projects images of distant places, some that seem not to be of this world, switching rapidly.
+If used near a portal, it could probably activate it.]],
 
 	max_power = 30, power_regen = 1,
 	use_power = { name = "activate a portal", power = 10,
diff --git a/game/modules/tome/data/zones/tannen-tower/traps.lua b/game/modules/tome/data/zones/tannen-tower/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/tannen-tower/traps.lua
+++ b/game/modules/tome/data/zones/tannen-tower/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tannen-tower/zone.lua b/game/modules/tome/data/zones/tannen-tower/zone.lua
index 2eeca36368b18658123ce3dda87df99f38eefd8a..2f4132675ad958742d6c088fbc4dd7be67f2a728 100644
--- a/game/modules/tome/data/zones/tannen-tower/zone.lua
+++ b/game/modules/tome/data/zones/tannen-tower/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/telmur/grids.lua b/game/modules/tome/data/zones/telmur/grids.lua
index 1764696b341610ab5282e1f23baae568ff36db9d..32ba2fa723e6695054a9e707f722d96ddc096dff 100644
--- a/game/modules/tome/data/zones/telmur/grids.lua
+++ b/game/modules/tome/data/zones/telmur/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/telmur/npcs.lua b/game/modules/tome/data/zones/telmur/npcs.lua
index e861a29a3aff09335c1b74ac43c0850c2163d460..dd6f78178de14a7338e1d3695bf9f4ddd67c4ff6 100644
--- a/game/modules/tome/data/zones/telmur/npcs.lua
+++ b/game/modules/tome/data/zones/telmur/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/telmur/objects.lua b/game/modules/tome/data/zones/telmur/objects.lua
index cdaeb13c39194faff5ebd7b8c27245f2f5add5f9..23f2b96512454c8aab3f0f7e5153e1a7f926726c 100644
--- a/game/modules/tome/data/zones/telmur/objects.lua
+++ b/game/modules/tome/data/zones/telmur/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -28,7 +28,7 @@ newEntity{ base = "BASE_STAFF",
 	define_as = "TELOS_BOTTOM_HALF", rarity=false, image = "object/artifact/staff_broken_bottom_telos.png",
 	unided_name = "broken staff",
 	name = "Telos's Staff (Bottom Half)", unique=true,
-	desc = [[The bottom part of Telos's broken staff.]],
+	desc = [[The bottom part of Telos' broken staff.]],
 	require = { stat = { mag=35 }, },
 	encumberance = 2.5,
 	cost = 500,
diff --git a/game/modules/tome/data/zones/telmur/traps.lua b/game/modules/tome/data/zones/telmur/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/telmur/traps.lua
+++ b/game/modules/tome/data/zones/telmur/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/telmur/zone.lua b/game/modules/tome/data/zones/telmur/zone.lua
index 7646211f0979ba2a9dd2f67656e3a26ee0f925e3..6d132ad2aebef9ceaf6739d309b2a63133081e72 100644
--- a/game/modules/tome/data/zones/telmur/zone.lua
+++ b/game/modules/tome/data/zones/telmur/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tempest-peak/events.lua b/game/modules/tome/data/zones/tempest-peak/events.lua
index e136b153842acc3422594eacbbff41be308c2507..e320e05341c3d445962976851dba582d7b8bbd3c 100644
--- a/game/modules/tome/data/zones/tempest-peak/events.lua
+++ b/game/modules/tome/data/zones/tempest-peak/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tempest-peak/grids.lua b/game/modules/tome/data/zones/tempest-peak/grids.lua
index 80ce9acb88326e8a3c9c54d6f97a157e53f15f62..7afffa835e763d7cc5d143c13a3029182ab8599e 100644
--- a/game/modules/tome/data/zones/tempest-peak/grids.lua
+++ b/game/modules/tome/data/zones/tempest-peak/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tempest-peak/npcs.lua b/game/modules/tome/data/zones/tempest-peak/npcs.lua
index 1365dd16597148ac90f8454b1fe3965ce10288a6..fc8722312eb2b91d0ca2d3764421bc1b723f32ac 100644
--- a/game/modules/tome/data/zones/tempest-peak/npcs.lua
+++ b/game/modules/tome/data/zones/tempest-peak/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tempest-peak/objects.lua b/game/modules/tome/data/zones/tempest-peak/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/tempest-peak/objects.lua
+++ b/game/modules/tome/data/zones/tempest-peak/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tempest-peak/traps.lua b/game/modules/tome/data/zones/tempest-peak/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/tempest-peak/traps.lua
+++ b/game/modules/tome/data/zones/tempest-peak/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tempest-peak/zone.lua b/game/modules/tome/data/zones/tempest-peak/zone.lua
index 5576fc444959bcaaa45fe450d1b33114f39f79ff..de320e2c3cc87c73225d8152855c978f4a8b4d86 100644
--- a/game/modules/tome/data/zones/tempest-peak/zone.lua
+++ b/game/modules/tome/data/zones/tempest-peak/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temple-of-creation/grids.lua b/game/modules/tome/data/zones/temple-of-creation/grids.lua
index d0641146e646e26d0b70224c234fb4f905717550..c5d67c900b212f27b771efa43945345272d8ca94 100644
--- a/game/modules/tome/data/zones/temple-of-creation/grids.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temple-of-creation/npcs.lua b/game/modules/tome/data/zones/temple-of-creation/npcs.lua
index 3692bcab4fc6bb29de6bd21519a6632c6d77c137..294b6b6b45540096149b994498ad6960847df465 100644
--- a/game/modules/tome/data/zones/temple-of-creation/npcs.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temple-of-creation/objects.lua b/game/modules/tome/data/zones/temple-of-creation/objects.lua
index 07d1f12feff8b42751cd9623140c87ff96c4022a..504c0baa2f07cef0b4ddbb82bd366e673a0ec2f1 100644
--- a/game/modules/tome/data/zones/temple-of-creation/objects.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -57,7 +57,7 @@ for i = 1, 3 do
 newEntity{ base = "BASE_LORE",
 	define_as = "NOTE"..i,
 	name = "tract", lore="temple-creation-note-"..i,
-	desc = [[Tract, revealing the history of the Nagas.]],
+	desc = [[A tract revealing the history of the Nagas.]],
 	rarity = false,
 	encumberance = 0,
 }
@@ -76,7 +76,7 @@ newEntity{ base = "BASE_TRIDENT",
 	define_as = "LEGACY_NALOREN",
 	unided_name = "ornate orichalcum trident",
 	name = "Legacy of the Naloren", unique=true, image = "object/artifact/trident_of_the_tides.png",
-	desc = [[This incredibly beautiful-and powerful-trident is made of the rare metal orichalcum. An amazing pearl is seated in head of the trident, as it spreads into three razor sharp prongs.
+	desc = [[This incredibly beautiful -- and powerful -- trident is made of the rare metal orichalcum. An amazing pearl is seated in head of the trident, as it spreads into three razor sharp prongs.
 It is imbued with the greatest strengths of all of the most powerful Naga warriors.
 Slasul gave it to you as a sign of his faith in you. It is a sign of hope for all of the Naloren race, that one outside of their tribe could be so trusted.]],
 	require = { stat = { str=35 }, },
diff --git a/game/modules/tome/data/zones/temple-of-creation/traps.lua b/game/modules/tome/data/zones/temple-of-creation/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/temple-of-creation/traps.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temple-of-creation/zone.lua b/game/modules/tome/data/zones/temple-of-creation/zone.lua
index 4a00f520602f4de69c5ce67b2eab12e79f20f928..5bcd4f981344febf8e3957089de41b56d7d5a632 100644
--- a/game/modules/tome/data/zones/temple-of-creation/zone.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temporal-rift/grids.lua b/game/modules/tome/data/zones/temporal-rift/grids.lua
index de7f1f24493e31e9575f0f43d9e68cc84fbdfcd9..8ea350e1cc08c4feb3c01b029571978e478de918 100644
--- a/game/modules/tome/data/zones/temporal-rift/grids.lua
+++ b/game/modules/tome/data/zones/temporal-rift/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -36,7 +36,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads somewhere ..]],
+	desc = [[The rift leads... somewhere.]],
 	change_level = 1,
 	change_level_check = function()
 		if game.level.level > 1 then return end
diff --git a/game/modules/tome/data/zones/temporal-rift/npcs.lua b/game/modules/tome/data/zones/temporal-rift/npcs.lua
index 97d442548805e2be73f993f3ff7afed2a34acec2..9aedfa8cbe6d43160e20fb2777ac9fdc2b5217e5 100644
--- a/game/modules/tome/data/zones/temporal-rift/npcs.lua
+++ b/game/modules/tome/data/zones/temporal-rift/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -140,7 +140,7 @@ newEntity{ base="BASE_NPC_HORROR_TEMPORAL", define_as = "CHRONOLITH_TWIN",
 	name = "Chronolith Twin", color=colors.VIOLET, unique = true,
 	subtype = "temporal",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/horror_temporal_cronolith_twin.png", display_h=2, display_y=-1}}},
-	desc = [[A six armed creature with black insect-like eyes dressed in robes.]],
+	desc = [[A six-armed creature, dressed in robes, with black insectile eyes.]],
 	level_range = {20, nil}, exp_worth = 1,
 	max_life = 150, life_rating = 15, fixed_rating = true,
 	rank = 4,
@@ -189,7 +189,7 @@ newEntity{ base="BASE_NPC_HORROR_TEMPORAL", define_as = "CHRONOLITH_CLONE",
 	name = "Chronolith Clone", color=colors.VIOLET, unique = true,
 	subtype = "temporal",
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/horror_temporal_cronolith_clone.png", display_h=2, display_y=-1}}},
-	desc = [[A six armed creature with black insect-like eyes dressed in robes.]],
+	desc = [[A six-armed creature, dressed in robes, with black insectile eyes.]],
 	level_range = {20, nil}, exp_worth = 1,
 	max_life = 150, life_rating = 15, fixed_rating = true,
 	rank = 4,
diff --git a/game/modules/tome/data/zones/temporal-rift/objects.lua b/game/modules/tome/data/zones/temporal-rift/objects.lua
index 93f9e7b7cb588a536c9aa27e96aa25e6727f2292..1aaa14667db07af87fe6c098b7dc7805fb5c9d99 100644
--- a/game/modules/tome/data/zones/temporal-rift/objects.lua
+++ b/game/modules/tome/data/zones/temporal-rift/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temporal-rift/traps.lua b/game/modules/tome/data/zones/temporal-rift/traps.lua
index 02f32361a395c0d5716087b09a38d3fe13e0b8e7..ffc0dced3f63d81e4594309c3e3cff4b0018f429 100644
--- a/game/modules/tome/data/zones/temporal-rift/traps.lua
+++ b/game/modules/tome/data/zones/temporal-rift/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/temporal-rift/zone.lua b/game/modules/tome/data/zones/temporal-rift/zone.lua
index 47d4e0f569d0e5e8ac210bc11ddf40c30d93090c..31afa34a83ebbf4b4b905e9f0b9eb924e722fec7 100644
--- a/game/modules/tome/data/zones/temporal-rift/zone.lua
+++ b/game/modules/tome/data/zones/temporal-rift/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/test/grids.lua b/game/modules/tome/data/zones/test/grids.lua
index 17ada6b7368a085a29ae5a172d44ce01b45cb297..2c70a68e840e5724856b0512bb1b9a33d18f8648 100644
--- a/game/modules/tome/data/zones/test/grids.lua
+++ b/game/modules/tome/data/zones/test/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/test/npcs.lua b/game/modules/tome/data/zones/test/npcs.lua
index 31d77de9646b897494e8d88952dd6f6cf883cb4b..7ed5c3bb0a5111d68ae6a59ecd9d5f6fee94ef6f 100644
--- a/game/modules/tome/data/zones/test/npcs.lua
+++ b/game/modules/tome/data/zones/test/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/test/objects.lua b/game/modules/tome/data/zones/test/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/test/objects.lua
+++ b/game/modules/tome/data/zones/test/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/test/traps.lua b/game/modules/tome/data/zones/test/traps.lua
index 02f32361a395c0d5716087b09a38d3fe13e0b8e7..ffc0dced3f63d81e4594309c3e3cff4b0018f429 100644
--- a/game/modules/tome/data/zones/test/traps.lua
+++ b/game/modules/tome/data/zones/test/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/test/zone.lua b/game/modules/tome/data/zones/test/zone.lua
index 2a35fd0dc797939f97260c8c111712bc1ea75485..92f8be7fc38315567614416a0c83d9076a0539f0 100644
--- a/game/modules/tome/data/zones/test/zone.lua
+++ b/game/modules/tome/data/zones/test/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/thieves-tunnels/events.lua b/game/modules/tome/data/zones/thieves-tunnels/events.lua
index d93eed09c11cb063398a5750209209ebd0d1a92d..5bc9c5158b550bac71a1bda423c8cd03d843515a 100644
--- a/game/modules/tome/data/zones/thieves-tunnels/events.lua
+++ b/game/modules/tome/data/zones/thieves-tunnels/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/thieves-tunnels/grids.lua b/game/modules/tome/data/zones/thieves-tunnels/grids.lua
index 1764696b341610ab5282e1f23baae568ff36db9d..32ba2fa723e6695054a9e707f722d96ddc096dff 100644
--- a/game/modules/tome/data/zones/thieves-tunnels/grids.lua
+++ b/game/modules/tome/data/zones/thieves-tunnels/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/thieves-tunnels/npcs.lua b/game/modules/tome/data/zones/thieves-tunnels/npcs.lua
index c079271942c9108b9acbdcbf8fc5269e2c93e927..77f16efe910df30ab433473e58df6955353c6619 100644
--- a/game/modules/tome/data/zones/thieves-tunnels/npcs.lua
+++ b/game/modules/tome/data/zones/thieves-tunnels/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -47,7 +47,7 @@ newEntity{ define_as = "ASSASSIN_LORD",
 
 	resolvers.tmasteries{ ["cunning/stealth"]=1.3, },
 
-	desc = [[He is the leader of a gang of bandits, watch out for his men.]],
+	desc = [[He is the leader of a gang of bandits; watch out for his men.]],
 	level_range = {8, 50}, exp_worth = 1,
 	combat_armor = 5, combat_def = 7,
 	max_life = resolvers.rngavg(90,100), life_rating = 14,
diff --git a/game/modules/tome/data/zones/thieves-tunnels/objects.lua b/game/modules/tome/data/zones/thieves-tunnels/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/thieves-tunnels/objects.lua
+++ b/game/modules/tome/data/zones/thieves-tunnels/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/thieves-tunnels/traps.lua b/game/modules/tome/data/zones/thieves-tunnels/traps.lua
index bdc0bde7c3a006a68d30157f48b562b204d470de..509316ea0973e6c662ae9cdf4d4e3e8501826c66 100644
--- a/game/modules/tome/data/zones/thieves-tunnels/traps.lua
+++ b/game/modules/tome/data/zones/thieves-tunnels/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/thieves-tunnels/zone.lua b/game/modules/tome/data/zones/thieves-tunnels/zone.lua
index fd9f2d12a2b96849b3f9c5a13eb34f8ccba0df88..33fa73d050ce7ad7392948058f7a7d1da39d7f32 100644
--- a/game/modules/tome/data/zones/thieves-tunnels/zone.lua
+++ b/game/modules/tome/data/zones/thieves-tunnels/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-angolwen/grids.lua b/game/modules/tome/data/zones/town-angolwen/grids.lua
index f2ec47b971e906f77ada3d01f4f2a8ed5ab5454b..d9d953aa2dcc935eea904b13c350c7d64cbf3274 100644
--- a/game/modules/tome/data/zones/town-angolwen/grids.lua
+++ b/game/modules/tome/data/zones/town-angolwen/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-angolwen/npcs.lua b/game/modules/tome/data/zones/town-angolwen/npcs.lua
index 06c414aaac9fd5922d8a696b1b98ae7641b5fc0c..79654744fe77a5a4853560c48b4814dc9ebac23e 100644
--- a/game/modules/tome/data/zones/town-angolwen/npcs.lua
+++ b/game/modules/tome/data/zones/town-angolwen/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -46,7 +46,7 @@ newEntity{ define_as = "SUPREME_ARCHMAGE_LINANIIL",
 
 	autolevel = "caster",
 	ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
-	ai_tactic = resolvers.tactic"ranged",
+	--ai_tactic = resolvers.tactic"ranged",
 	resolvers.inscriptions(5, {}),
 	resolvers.inscriptions(1, {"manasurge rune"}),
 
@@ -116,7 +116,7 @@ newEntity{ define_as = "TARELION",
 	faction = "angolwen",
 	name = "Archmage Tarelion", color=colors.CRIMSON, unique = true,
 	resolvers.nice_tile{tall=true},
-	desc = [[A tall shalore elf, in a flowing robe, he looks calm and at peace but you can feel his tremendous power.]],
+	desc = [[A tall Shalore in a flowing robe, he looks calm and at peace, but you can feel his tremendous power.]],
 	level_range = {30, nil}, exp_worth = 2,
 	rank = 4,
 	size_category = 3,
@@ -213,7 +213,7 @@ newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 	name = "pyromancer", color=colors.LIGHT_RED,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_human_pyromancer.png", display_h=2, display_y=-1}}},
-	desc = [[An archmage specialized in fire magic.]],
+	desc = [[An archmage specializing in fire magic.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(70,80),
@@ -228,7 +228,7 @@ newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 	name = "cryomancer", color=colors.LIGHT_BLUE,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_human_cryomancer.png", display_h=2, display_y=-1}}},
-	desc = [[An archmage specialized in ice magic.]],
+	desc = [[An archmage specializing in ice magic.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(70,80),
@@ -243,7 +243,7 @@ newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 	name = "geomancer", color=colors.UMBER,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_human_geomancer.png", display_h=2, display_y=-1}}},
-	desc = [[An archmage specialized in earth magic.]],
+	desc = [[An archmage specializing in earth magic.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(70,80),
@@ -258,7 +258,7 @@ newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 newEntity{ base = "BASE_NPC_ANGOLWEN_TOWN",
 	name = "tempest", color=colors.WHITE,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/humanoid_human_tempest.png", display_h=2, display_y=-1}}},
-	desc = [[An archmage specialized in lightning magic.]],
+	desc = [[An archmage specializing in lightning magic.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(70,80),
diff --git a/game/modules/tome/data/zones/town-angolwen/objects.lua b/game/modules/tome/data/zones/town-angolwen/objects.lua
index f127021785eab468b5927db059bad08e4e64698a..cd5ee9a414dfcb6227363af4994e1afef32e81a3 100644
--- a/game/modules/tome/data/zones/town-angolwen/objects.lua
+++ b/game/modules/tome/data/zones/town-angolwen/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-angolwen/traps.lua b/game/modules/tome/data/zones/town-angolwen/traps.lua
index 86356908e6d00ea9184405d4556f2a48f96890dc..1453f2e7205a67cf74d578c5af1e3a68a63b5b2d 100644
--- a/game/modules/tome/data/zones/town-angolwen/traps.lua
+++ b/game/modules/tome/data/zones/town-angolwen/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-angolwen/zone.lua b/game/modules/tome/data/zones/town-angolwen/zone.lua
index 8fa6da5170246d52174494a0b4e3696d622385a7..af7e84ff455aa2fc7b8eb8c4552153735f10099f 100644
--- a/game/modules/tome/data/zones/town-angolwen/zone.lua
+++ b/game/modules/tome/data/zones/town-angolwen/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-derth/grids.lua b/game/modules/tome/data/zones/town-derth/grids.lua
index f976593c072806d604c1bcab8018476c0fb40e84..cdc1e0868b7419b9871bcd3fdc742cb9001b407b 100644
--- a/game/modules/tome/data/zones/town-derth/grids.lua
+++ b/game/modules/tome/data/zones/town-derth/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-derth/npcs.lua b/game/modules/tome/data/zones/town-derth/npcs.lua
index d8e77812b7fe9c89e6707eb72bea2918fab13c82..96f290ac42779e9ef4db9f1b3a17dd070ef5337f 100644
--- a/game/modules/tome/data/zones/town-derth/npcs.lua
+++ b/game/modules/tome/data/zones/town-derth/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-derth/objects.lua b/game/modules/tome/data/zones/town-derth/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/town-derth/objects.lua
+++ b/game/modules/tome/data/zones/town-derth/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-derth/traps.lua b/game/modules/tome/data/zones/town-derth/traps.lua
index 5c0ecd83aae3a3edd1350769c8f0fb8899ac6faf..7a5a6a69d1e7468713bd3a92515109bf84b4d86d 100644
--- a/game/modules/tome/data/zones/town-derth/traps.lua
+++ b/game/modules/tome/data/zones/town-derth/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-derth/zone.lua b/game/modules/tome/data/zones/town-derth/zone.lua
index 26a514f65e05b0e644b1a4cf23cfc1ace1b3e68b..85ba634898c40f297a79e040e2ccd950012b3eac 100644
--- a/game/modules/tome/data/zones/town-derth/zone.lua
+++ b/game/modules/tome/data/zones/town-derth/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-elvala/grids.lua b/game/modules/tome/data/zones/town-elvala/grids.lua
index 1726f52678587fdc9b9d7695e788ae0e6ba646a6..e57ee0ee2a897b5fe18da210921243d77fc009c6 100644
--- a/game/modules/tome/data/zones/town-elvala/grids.lua
+++ b/game/modules/tome/data/zones/town-elvala/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-elvala/npcs.lua b/game/modules/tome/data/zones/town-elvala/npcs.lua
index 1689a45b956651d2c41498e90833514cb7dc4553..7e4f9c00a7b84645ed5302fa291bd1e49bfcc960 100644
--- a/game/modules/tome/data/zones/town-elvala/npcs.lua
+++ b/game/modules/tome/data/zones/town-elvala/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -65,7 +65,7 @@ newEntity{ base = "BASE_NPC_ELVALA_TOWN",
 
 newEntity{ base = "BASE_NPC_ELVALA_TOWN",
 	name = "shalore rune master", color=colors.RED,
-	desc = [[A tall elf, his skin covered in runes.]],
+	desc = [[A tall Elf, his skin covered in runes.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 3,
 	max_life = resolvers.rngavg(50,60),
diff --git a/game/modules/tome/data/zones/town-elvala/objects.lua b/game/modules/tome/data/zones/town-elvala/objects.lua
index f3894435f5b4f80126c51a60055530433e62a8c2..e2e94b5c5d59004382acec7915e28d86c633c6ae 100644
--- a/game/modules/tome/data/zones/town-elvala/objects.lua
+++ b/game/modules/tome/data/zones/town-elvala/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-elvala/traps.lua b/game/modules/tome/data/zones/town-elvala/traps.lua
index bcba3344f296393d3b8fed20b074644b0d1dff8a..664c6e94701fbdb25a1f595bafd7b685a83d1fde 100644
--- a/game/modules/tome/data/zones/town-elvala/traps.lua
+++ b/game/modules/tome/data/zones/town-elvala/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-elvala/zone.lua b/game/modules/tome/data/zones/town-elvala/zone.lua
index 8b42f678c0c8c5947e2c496051b43481c466f55f..d181c9653fb3a32595fd9a30169173d6e97c6fee 100644
--- a/game/modules/tome/data/zones/town-elvala/zone.lua
+++ b/game/modules/tome/data/zones/town-elvala/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-gates-of-morning/grids.lua b/game/modules/tome/data/zones/town-gates-of-morning/grids.lua
index 31ae5ff4b96a66167ebb0cbf346564c9b60eaa10..2351ef56406f8c98def83f2d78d55bc515d17710 100644
--- a/game/modules/tome/data/zones/town-gates-of-morning/grids.lua
+++ b/game/modules/tome/data/zones/town-gates-of-morning/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-gates-of-morning/npcs.lua b/game/modules/tome/data/zones/town-gates-of-morning/npcs.lua
index 570a3dc0194c60117af22844be1f836b99db54dc..c858a42c887cf9c597d077e0bdb211cf14ee19cb 100644
--- a/game/modules/tome/data/zones/town-gates-of-morning/npcs.lua
+++ b/game/modules/tome/data/zones/town-gates-of-morning/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-gates-of-morning/objects.lua b/game/modules/tome/data/zones/town-gates-of-morning/objects.lua
index ee3a50b5fe39d4c8adc5dc088f2c0154e7a7cad2..9fe9032b7c6ce77be1db6d07bad27d63aa5bfa04 100644
--- a/game/modules/tome/data/zones/town-gates-of-morning/objects.lua
+++ b/game/modules/tome/data/zones/town-gates-of-morning/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-gates-of-morning/traps.lua b/game/modules/tome/data/zones/town-gates-of-morning/traps.lua
index a95e1c4fa924b6096b4e4671ba66951ec985103e..fa68f13cd8ee12f7231b44328a2d9ebac10f2131 100644
--- a/game/modules/tome/data/zones/town-gates-of-morning/traps.lua
+++ b/game/modules/tome/data/zones/town-gates-of-morning/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-gates-of-morning/zone.lua b/game/modules/tome/data/zones/town-gates-of-morning/zone.lua
index 3f8fb17edf5487ee850cc45b2f34a8c5b1121fa9..bf75c7b80c90770bba2690ba5609e7ecade8e532 100644
--- a/game/modules/tome/data/zones/town-gates-of-morning/zone.lua
+++ b/game/modules/tome/data/zones/town-gates-of-morning/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-irkkk/grids.lua b/game/modules/tome/data/zones/town-irkkk/grids.lua
index a883fafc811e9bf2c0ee6505a5a5d1a567425c08..5220151daf6c26a04013163ac72d88b6970d8343 100644
--- a/game/modules/tome/data/zones/town-irkkk/grids.lua
+++ b/game/modules/tome/data/zones/town-irkkk/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-irkkk/npcs.lua b/game/modules/tome/data/zones/town-irkkk/npcs.lua
index c66ea8a67c9ad1719030261284f6b8f83c786506..d6e3910fcbc35f616df7bbca40297db0f68593df 100644
--- a/game/modules/tome/data/zones/town-irkkk/npcs.lua
+++ b/game/modules/tome/data/zones/town-irkkk/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-irkkk/objects.lua b/game/modules/tome/data/zones/town-irkkk/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/town-irkkk/objects.lua
+++ b/game/modules/tome/data/zones/town-irkkk/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-irkkk/traps.lua b/game/modules/tome/data/zones/town-irkkk/traps.lua
index 997204969ff6f219efea35183b88078b17d0e6b6..c31d02b56bd844c2914855afd7cf5f6e5d470038 100644
--- a/game/modules/tome/data/zones/town-irkkk/traps.lua
+++ b/game/modules/tome/data/zones/town-irkkk/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-irkkk/zone.lua b/game/modules/tome/data/zones/town-irkkk/zone.lua
index 9bff14413363a93d4d07ae34fd4068c12ca87d55..1f2d68a6170bfcfb939e3302f086e48f13d09a14 100644
--- a/game/modules/tome/data/zones/town-irkkk/zone.lua
+++ b/game/modules/tome/data/zones/town-irkkk/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-iron-council/grids.lua b/game/modules/tome/data/zones/town-iron-council/grids.lua
index f32281ae1f3f44a2c0e9df5586ba10793471addf..a0b9aa81215168d65e99a77f054ac41790cb51e7 100644
--- a/game/modules/tome/data/zones/town-iron-council/grids.lua
+++ b/game/modules/tome/data/zones/town-iron-council/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
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 fbfb736c2360dd1c73da980e7bff7cb757480936..5882c3ac07d02de1e76133c2cc1918fefa63c05b 100644
--- a/game/modules/tome/data/zones/town-iron-council/npcs.lua
+++ b/game/modules/tome/data/zones/town-iron-council/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-iron-council/objects.lua b/game/modules/tome/data/zones/town-iron-council/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/town-iron-council/objects.lua
+++ b/game/modules/tome/data/zones/town-iron-council/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-iron-council/traps.lua b/game/modules/tome/data/zones/town-iron-council/traps.lua
index 3c97f2d44efbed93fe473fb97eccf2ac75e15a31..71896fff84559b97e577e133de1065fb71f5bc2f 100644
--- a/game/modules/tome/data/zones/town-iron-council/traps.lua
+++ b/game/modules/tome/data/zones/town-iron-council/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-iron-council/zone.lua b/game/modules/tome/data/zones/town-iron-council/zone.lua
index 89cbcfe9da5bb7a2496aeaa171a5b39c3b50e4e7..fc532ed2e4d06c9fea23b34906441ae7c63f68cd 100644
--- a/game/modules/tome/data/zones/town-iron-council/zone.lua
+++ b/game/modules/tome/data/zones/town-iron-council/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-last-hope/grids.lua b/game/modules/tome/data/zones/town-last-hope/grids.lua
index cdc527ade16ce30fab26f81a7add91cdb80fe4bc..32d788f9710c3658a24af73bc239719d66e14152 100644
--- a/game/modules/tome/data/zones/town-last-hope/grids.lua
+++ b/game/modules/tome/data/zones/town-last-hope/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
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 35dd02988ffef89c4879da83305fc011f42496e7..32cf93272f6848c62b23f9d384bfe4566207b661 100644
--- a/game/modules/tome/data/zones/town-last-hope/npcs.lua
+++ b/game/modules/tome/data/zones/town-last-hope/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -78,7 +78,7 @@ newEntity{ base = "BASE_NPC_LAST_HOPE_TOWN",
 
 newEntity{ base = "BASE_NPC_LAST_HOPE_TOWN",
 	name = "human citizen", color=colors.WHITE,
-	desc = [[A clean looking human resident of Last Hope.]],
+	desc = [[A clean-looking Human resident of Last Hope.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = resolvers.rngavg(30,40),
@@ -88,7 +88,7 @@ newEntity{ base = "BASE_NPC_LAST_HOPE_TOWN",
 newEntity{ base = "BASE_NPC_LAST_HOPE_TOWN",
 	name = "halfling citizen", color=colors.WHITE,
 	subtype = "halfling",
-	desc = [[A clean looking halfling resident of Last Hope.]],
+	desc = [[A clean-looking Halfling resident of Last Hope.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = 1,
 	max_life = resolvers.rngavg(30,40),
diff --git a/game/modules/tome/data/zones/town-last-hope/objects.lua b/game/modules/tome/data/zones/town-last-hope/objects.lua
index 5781cb2851081b8e97002a7b939b81a2e08ae118..2ba6aae706267e4d0b78ef29631a0b5e4de9d685 100644
--- a/game/modules/tome/data/zones/town-last-hope/objects.lua
+++ b/game/modules/tome/data/zones/town-last-hope/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -24,7 +24,7 @@ newEntity{ base = "BASE_LORE",
 	define_as = "FOUNDATION_NOTE"..i,
 	subtype = "last hope foundation", unique=true, no_unique_lore=true, not_in_stores=false,
 	name = "The Diaries of King Toknor the Brave ("..i..")", lore="last-hope-foundation-note-"..i,
-	desc = [[A part of the history of Last Hope, and king Toknor the Brave.]],
+	desc = [[A part of the history of Last Hope, and King Toknor the Brave.]],
 	rarity = false,
 	encumberance = 0,
 	cost = 2,
@@ -48,7 +48,7 @@ newEntity{ base = "BASE_LORE",
 	define_as = "SOUTHSPAR_NOTE"..i,
 	subtype = "southspar", unique=true, no_unique_lore=true, not_in_stores=false,
 	name = "the Pale King part "..(i==1 and "one" or "two"), lore="southspar-note-"..i,
-	desc = [[A study into Southspar's most unusual ruler.]],
+	desc = [[A study of Southspar's most unusual ruler.]],
 	rarity = false,
 	encumberance = 0,
 	cost = 2,
diff --git a/game/modules/tome/data/zones/town-last-hope/traps.lua b/game/modules/tome/data/zones/town-last-hope/traps.lua
index 3e95e50573b1d3cec90afa37c85148785b559ced..8c3c4957a0c579a2daab034d9d2b76fcc1b9a89b 100644
--- a/game/modules/tome/data/zones/town-last-hope/traps.lua
+++ b/game/modules/tome/data/zones/town-last-hope/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-last-hope/zone.lua b/game/modules/tome/data/zones/town-last-hope/zone.lua
index 7f9ddfe6d713e92c9dd48d1733e51f890a774d93..2c28ec9703d81e02feee8ac092f00fc9de97732f 100644
--- a/game/modules/tome/data/zones/town-last-hope/zone.lua
+++ b/game/modules/tome/data/zones/town-last-hope/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-lumberjack-village/grids.lua b/game/modules/tome/data/zones/town-lumberjack-village/grids.lua
index 1726f52678587fdc9b9d7695e788ae0e6ba646a6..e57ee0ee2a897b5fe18da210921243d77fc009c6 100644
--- a/game/modules/tome/data/zones/town-lumberjack-village/grids.lua
+++ b/game/modules/tome/data/zones/town-lumberjack-village/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-lumberjack-village/npcs.lua b/game/modules/tome/data/zones/town-lumberjack-village/npcs.lua
index f759c47fdf93d3fe6a53d2345ef0bca2abdab643..e26c280c6af9e610800bb5890e4fa5e1c2a044b2 100644
--- a/game/modules/tome/data/zones/town-lumberjack-village/npcs.lua
+++ b/game/modules/tome/data/zones/town-lumberjack-village/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-lumberjack-village/objects.lua b/game/modules/tome/data/zones/town-lumberjack-village/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/town-lumberjack-village/objects.lua
+++ b/game/modules/tome/data/zones/town-lumberjack-village/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-lumberjack-village/zone.lua b/game/modules/tome/data/zones/town-lumberjack-village/zone.lua
index 276c1915cace43990d894f9e3dd6f073c55df934..f362bcb33915543853f6acc731a679e17fa0dd6d 100644
--- a/game/modules/tome/data/zones/town-lumberjack-village/zone.lua
+++ b/game/modules/tome/data/zones/town-lumberjack-village/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-point-zero/grids.lua b/game/modules/tome/data/zones/town-point-zero/grids.lua
index fbe5d765adf7ea06c4a49bdeb862ebb2b2d53443..d21204b561147c1fb866a0920f42fb029dd96842 100644
--- a/game/modules/tome/data/zones/town-point-zero/grids.lua
+++ b/game/modules/tome/data/zones/town-point-zero/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads to Maj'Eyal]],
+	desc = [[The rift leads to Maj'Eyal.]],
 	change_level = 1,
 	change_zone = "wilderness",
 }
diff --git a/game/modules/tome/data/zones/town-point-zero/npcs.lua b/game/modules/tome/data/zones/town-point-zero/npcs.lua
index cd63c5cc30cfa6c43332b10f42e0d2177672a853..3b1ac1407dd7f658493a9c924f346f9d7338ec0c 100644
--- a/game/modules/tome/data/zones/town-point-zero/npcs.lua
+++ b/game/modules/tome/data/zones/town-point-zero/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -53,7 +53,7 @@ newEntity{ base = "BASE_NPC_POINT_ZERO_TOWN", define_as = "DEFENDER_OF_REALITY",
 	female = resolvers.rngtable{false, true},
 	subtype = resolvers.rngtable{"human", "shalore"},
 	shader = "moving_transparency", shader_args = {a_min=0.2, a_max=0.8},
-	desc = [[A stern-looking guardian, ever vigilant from the threats of the paradox.]],
+	desc = [[A stern-looking guardian, ever vigilant against the threats of the paradox.]],
 	level_range = {1, nil}, exp_worth = 1,
 	rarity = false,
 	max_life = 400,
@@ -78,7 +78,7 @@ newEntity{
 	type = "elemental", subtype = "void",
 	blood_color = colors.DARK_GREY,
 	display = "E", color=colors.DARK_GREY,
-	desc = [[Losgoroth are mighty void elementals, native to the void between the stars, they are rarely seen on the planet's surface.]],
+	desc = [[Losgoroth are mighty void elementals, native to the void between the stars; they are rarely seen on the planet's surface.]],
 
 	combat = { dam=resolvers.levelup(resolvers.mbonus(40, 15), 1, 1.2), atk=15, apr=15, dammod={mag=0.8}, damtype=DamageType.ARCANE },
 
@@ -130,7 +130,7 @@ newEntity{ base = "BASE_NPC_POINT_ZERO_TOWN", define_as = "ZEMEKKYS",
 	name = "Zemekkys, Grand Keeper of Reality", color=colors.VIOLET,
 	image = "npc/humanoid_elf_high_chronomancer_zemekkys.png",
 	subtype = "shalore",
-	desc = [[A timeless elf stands before you. Even though his age is impossible to sense you feel he has seen many things.]],
+	desc = [[A timeless elf stands before you. Even though his age is impossible to determine, you feel he has seen many things.]],
 	level_range = {50, nil}, exp_worth = 1,
 	rarity = false,
 	max_life = 2000, life_rating = 20,
@@ -202,7 +202,7 @@ newEntity{ define_as = "TEMPORAL_DEFILER",
 	name = "Temporal Defiler",
 	display = "h", color=colors.VIOLET,
 	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/horror_temporal_temporal_defiler.png", display_h=2, display_y=-1}}},
-	desc = [[A huge slender metallic monstrosity with long claws in place of fingers, and razor-sharp teeth., it seems to seek something here.]],
+	desc = [[A huge, slender, metallic monstrosity with long claws in place of fingers, and razor-sharp teeth. It seems to seek something here.]],
 	level_range = {50, nil}, exp_worth = 0.1,
 	max_life = 1500, life_rating = 35, fixed_rating = true,
 	stats = { str=20, dex=10, cun=8, mag=10, con=20 },
diff --git a/game/modules/tome/data/zones/town-point-zero/objects.lua b/game/modules/tome/data/zones/town-point-zero/objects.lua
index 2eb51861a9a98fa7b1f335fad324f4ab6fc1041a..a41490098bc63fe96bfed4261eaafa7d79d0a4f6 100644
--- a/game/modules/tome/data/zones/town-point-zero/objects.lua
+++ b/game/modules/tome/data/zones/town-point-zero/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -25,7 +25,7 @@ local Talents = require "engine.interface.ActorTalents"
 newEntity{ base = "BASE_TOOL_MISC",
 	power_source = {arcane=true},
 	define_as = "TIME_SHARD",
-	desc = [[An iridescent shard of violet crystal.  Its light ebbs and flows, sometimes fast and sometimes slow, keeping track with the chaotic streams of time itself.  It makes you feel both old and young, a newborn child and an ancient being, your flesh simply one instance in a thousand refractions of a single timeless and eternal soul.]],
+	desc = [[An iridescent shard of violet crystal.  Its light ebbs and flows, sometimes fast and sometimes slow, keeping pace with the chaotic streams of time itself.  It makes you feel both old and young, a newborn child and an ancient being, your flesh simply one instance in a thousand refractions of a single timeless and eternal soul.]],
 	unique = true,
 	name = "Shard of Crystalized Time", color = colors.YELLOW,
 	unided_name = "glowing shard", image = "object/artifact/time_shard.png",
diff --git a/game/modules/tome/data/zones/town-point-zero/traps.lua b/game/modules/tome/data/zones/town-point-zero/traps.lua
index 289a739e267dde63f966ed23a7960c0337563f82..22d4903a1a348f1987e7650803131422c0b26b23 100644
--- a/game/modules/tome/data/zones/town-point-zero/traps.lua
+++ b/game/modules/tome/data/zones/town-point-zero/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-point-zero/zone.lua b/game/modules/tome/data/zones/town-point-zero/zone.lua
index e7942f3c5a27119f18390196d86b2fa1f75b9559..0ecc1db916b327c3e9fe2b013a6a5b70aa674ebd 100644
--- a/game/modules/tome/data/zones/town-point-zero/zone.lua
+++ b/game/modules/tome/data/zones/town-point-zero/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-shatur/grids.lua b/game/modules/tome/data/zones/town-shatur/grids.lua
index f6772d7a20979e6ea3de8d2e68508eb75007b34c..240f2e2c3b9e157f6dab310b5a45057a2f1dc00d 100644
--- a/game/modules/tome/data/zones/town-shatur/grids.lua
+++ b/game/modules/tome/data/zones/town-shatur/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -20,6 +20,8 @@
 load("/data/general/grids/basic.lua")
 load("/data/general/grids/forest.lua")
 load("/data/general/grids/water.lua")
+load("/data/general/grids/autumn_forest.lua")
+load("/data/general/grids/elven_forest.lua")
 load("/data/general/grids/mountain.lua", function(e)
 	if e.image == "terrain/rocky_ground.png" then
 		e.image = "terrain/snowy_grass.png"
diff --git a/game/modules/tome/data/zones/town-shatur/npcs.lua b/game/modules/tome/data/zones/town-shatur/npcs.lua
index 6eefaead215d3e67bf2dc9bdca191157e8c366e2..0acd68e26c175e48bfc045281ae1df75b2d80c78 100644
--- a/game/modules/tome/data/zones/town-shatur/npcs.lua
+++ b/game/modules/tome/data/zones/town-shatur/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-shatur/objects.lua b/game/modules/tome/data/zones/town-shatur/objects.lua
index df9c8f344637837d7d089ced1d3ca3c694eb844b..d28a8e4eb00f0b62e22e35954d73a55bac24d5c0 100644
--- a/game/modules/tome/data/zones/town-shatur/objects.lua
+++ b/game/modules/tome/data/zones/town-shatur/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-shatur/traps.lua b/game/modules/tome/data/zones/town-shatur/traps.lua
index 82ad841fb93d2662517e9255a47eb2b2995ce9df..90691b33211f5013353dca8f95e220d4f4510b1c 100644
--- a/game/modules/tome/data/zones/town-shatur/traps.lua
+++ b/game/modules/tome/data/zones/town-shatur/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-shatur/zone.lua b/game/modules/tome/data/zones/town-shatur/zone.lua
index df2b02da8f581af4157227a7b999e69490d9e55d..bd890f7cc505854db522b90e21bfeab9d0570c63 100644
--- a/game/modules/tome/data/zones/town-shatur/zone.lua
+++ b/game/modules/tome/data/zones/town-shatur/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-zigur/grids.lua b/game/modules/tome/data/zones/town-zigur/grids.lua
index 7c4c86ef65fe2d94b38af3f2e0f6f35ecca54ae7..e6b5727c629449472f4cc88dbd597fa5ced85f22 100644
--- a/game/modules/tome/data/zones/town-zigur/grids.lua
+++ b/game/modules/tome/data/zones/town-zigur/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-zigur/npcs.lua b/game/modules/tome/data/zones/town-zigur/npcs.lua
index 8465d4778d1f1131523328fe459375e26873b53d..bf5d7681b58593d9b6b99c23d1e5fd84d9fa6b9f 100644
--- a/game/modules/tome/data/zones/town-zigur/npcs.lua
+++ b/game/modules/tome/data/zones/town-zigur/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -72,7 +72,7 @@ newEntity{ base = "BASE_NPC_ELVEN_CASTER", define_as = "GRAND_CORRUPTOR",
 load("/data/general/npcs/ziguranth.lua", function(e) if e.rarity then e.rarity, e.ziguranth_rarity = nil, e.rarity end end)
 newEntity{ base = "BASE_NPC_ZIGURANTH", define_as = "PROTECTOR_MYSSIL",
 	name = "Protector Myssil", color=colors.VIOLET, unique = true,
-	desc = [[A Halfling ziguranth, clad in dark steel plates. She is the current leader of Zigur.]],
+	desc = [[A Halfling Ziguranth, clad in dark steel plates. She is the current leader of Zigur.]],
 	female = true, subtype = "halfling",
 	level_range = {30, nil}, exp_worth = 1,
 	rank = 4,
diff --git a/game/modules/tome/data/zones/town-zigur/objects.lua b/game/modules/tome/data/zones/town-zigur/objects.lua
index 66093bb6753f1407e3f79a1ab4c6716dab5483ea..a9a38306df545d025796a60308615c1ebb4a565a 100644
--- a/game/modules/tome/data/zones/town-zigur/objects.lua
+++ b/game/modules/tome/data/zones/town-zigur/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-zigur/traps.lua b/game/modules/tome/data/zones/town-zigur/traps.lua
index bff0a2a22016facf6856ab817a34cd847ec3c9ea..2735a9c329004e91e3163c323a72ea011c826fdb 100644
--- a/game/modules/tome/data/zones/town-zigur/traps.lua
+++ b/game/modules/tome/data/zones/town-zigur/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/town-zigur/zone.lua b/game/modules/tome/data/zones/town-zigur/zone.lua
index 38091ba339b8a87385e87e233116183d620a5ebf..4849dade9476020a8c865745c2696798813d7efe 100644
--- a/game/modules/tome/data/zones/town-zigur/zone.lua
+++ b/game/modules/tome/data/zones/town-zigur/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/trollmire/events.lua b/game/modules/tome/data/zones/trollmire/events.lua
index e4ada46390615cd30c0dc661aa2b5eac2029f7de..978f98dc060c69b2ed95ee672321d486e0e6dad7 100644
--- a/game/modules/tome/data/zones/trollmire/events.lua
+++ b/game/modules/tome/data/zones/trollmire/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/trollmire/grids.lua b/game/modules/tome/data/zones/trollmire/grids.lua
index f806afc3a8dbac5aa81ff244925fcc7cfe002bac..bfec29fe65da6ec6600c0eb6d3d463b04d4ce585 100644
--- a/game/modules/tome/data/zones/trollmire/grids.lua
+++ b/game/modules/tome/data/zones/trollmire/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -19,6 +19,7 @@
 
 load("/data/general/grids/basic.lua")
 load("/data/general/grids/forest.lua")
+load("/data/general/grids/autumn_forest.lua")
 load("/data/general/grids/water.lua")
 
 local grass_editer = { method="borders_def", def="grass"}
@@ -55,7 +56,18 @@ newEntity{
 	nice_tiler = { method="replace", base={"BOGTREE", 100, 1, 20}},
 	shader = "water",
 }
-for i = 1, 20 do newEntity{ base="BOGTREE", define_as = "BOGTREE"..i, image = "terrain/water_grass_5_1.png", add_displays = class:makeTrees("terrain/tree_alpha", 13, 9)} end
+for i = 1, 20 do
+	newEntity(class:makeNewTrees({base="BOGTREE", define_as = "BOGTREE"..i, image = "terrain/water_grass_5_1.png"}, {
+		{"small_willow", {"shadow", "trunk", "foliage_bare"}},
+		{"small_willow_moss", {"shadow", "trunk", "foliage_bare"}},
+		{"willow", {tall=-1, "shadow", "trunk", "foliage_bare"}},
+		{"willow_moss", {tall=-1, "shadow", "trunk", "foliage_bare"}},
+		{"small_willow", {"shadow", "trunk", "foliage_spring"}},
+		{"small_willow_moss", {"shadow", "trunk", "foliage_spring"}},
+		{"willow", {tall=-1, "shadow", "trunk", "foliage_spring"}},
+		{"willow_moss", {tall=-1, "shadow", "trunk", "foliage_spring"}},
+	}, 1))
+end
 
 newEntity{ base="WATER_BASE",
 	define_as = "BOGWATER",
diff --git a/game/modules/tome/data/zones/trollmire/npcs.lua b/game/modules/tome/data/zones/trollmire/npcs.lua
index 4b468b2c1cbaf144c554380740b1218609e5b3df..098867b3d75f4ac0956c37f668c9b11978abe67e 100644
--- a/game/modules/tome/data/zones/trollmire/npcs.lua
+++ b/game/modules/tome/data/zones/trollmire/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -216,7 +216,7 @@ newEntity{ define_as = "ALUIN",
 	type = "humanoid", subtype = "human", unique = true,
 	name = "Aluin the Fallen",
 	display = "p", color=colors.VIOLET,
-	desc = [[His once shining armour now dull and bloodstained, this Sun Paladin has given in to despair.]],
+	desc = [[His once-shining armour now dull and bloodstained, this Sun Paladin has given in to despair.]],
 	level_range = {35, nil}, exp_worth = 3,
 	max_life = 350, life_rating = 23, fixed_rating = true,
 	hate_regen = 100,
diff --git a/game/modules/tome/data/zones/trollmire/objects.lua b/game/modules/tome/data/zones/trollmire/objects.lua
index 06cf6c171029fc59982fe82a55c5c339ccf3561a..bbaaed0ef0a7e4325bac355be863b5b687c20f2c 100644
--- a/game/modules/tome/data/zones/trollmire/objects.lua
+++ b/game/modules/tome/data/zones/trollmire/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/trollmire/traps.lua b/game/modules/tome/data/zones/trollmire/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/trollmire/traps.lua
+++ b/game/modules/tome/data/zones/trollmire/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/trollmire/zone.lua b/game/modules/tome/data/zones/trollmire/zone.lua
index d780a031536461933ed32bb284690eefd545c823..727bc9fe05e4fe10565c9da171045363f3f632db 100644
--- a/game/modules/tome/data/zones/trollmire/zone.lua
+++ b/game/modules/tome/data/zones/trollmire/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,6 +18,7 @@
 -- darkgod@te4.org
 
 local layout = game.state:alternateZoneTier1(short_name, {"FLOODED", 1})
+-- layout="DEFAULT"
 if layout == "FLOODED" then
 
 return {
@@ -35,8 +36,8 @@ return {
 	tier1_escort = 2,
 	persistent = "zone",
 	-- Apply a greenish tint to all the map
-	color_shown = {0.8, 1, 0.6, 1},
-	color_obscure = {0.8*0.6, 1*0.6, 0.6*0.6, 0.6},
+--	color_shown = {0.8, 1, 0.6, 1},
+--	color_obscure = {0.8*0.6, 1*0.6, 0.6*0.6, 0.6},
 	ambient_music = "Rainy Day.ogg",
 	min_material_level = function() return game.state:isAdvanced() and 3 or 1 end,
 	max_material_level = function() return game.state:isAdvanced() and 4 or 2 end,
diff --git a/game/modules/tome/data/zones/tutorial-combat-stats/grids.lua b/game/modules/tome/data/zones/tutorial-combat-stats/grids.lua
index bd309d172329d249949462e85e1de166bf6fa453..7ea4f40b3efe7ee188038e7a20b2db61f1ea9490 100644
--- a/game/modules/tome/data/zones/tutorial-combat-stats/grids.lua
+++ b/game/modules/tome/data/zones/tutorial-combat-stats/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -494,4 +494,4 @@ newEntity{
 			--q:final_message()
 		end
 	end,
-}
\ No newline at end of file
+}
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 3c114b42ffea4eab56d210ed2fadbb8e5f9468d9..f48b3f69a9bf71570f3bdda96c77df3a51cd61fb 100644
--- a/game/modules/tome/data/zones/tutorial-combat-stats/npcs.lua
+++ b/game/modules/tome/data/zones/tutorial-combat-stats/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -533,4 +533,4 @@ newEntity{ base = "BASE_NPC_ORC",
 	combat_physcrit = 50,
 	never_move = 1,
 	combat = false,
-}
\ No newline at end of file
+}
diff --git a/game/modules/tome/data/zones/tutorial-combat-stats/objects.lua b/game/modules/tome/data/zones/tutorial-combat-stats/objects.lua
index 57d8e61788108c01f97369f323850c515886aea1..bdc790366ff36fc629d25fdf33f5e30a109d6c9d 100644
--- a/game/modules/tome/data/zones/tutorial-combat-stats/objects.lua
+++ b/game/modules/tome/data/zones/tutorial-combat-stats/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{ base = "BASE_HEAVY_BOOTS", define_as = "PHYSSAVE_BOOTS",
 	color = colors.YELLOW,
 	encumber = 1,
 	rarity = 300,
-	desc = [[Fine boots that increase your physical save by 10.]],
+	desc = [[Fine boots that increase your Physical Save by 10.]],
 	cost = 100,
 	wielder = {
 		combat_physresist = 10,
@@ -48,7 +48,7 @@ newEntity{ base = "BASE_AMULET", define_as = "MINDPOWER_AMULET",
 	color = colors.YELLOW,
 	encumber = 1,
 	rarity = 300,
-	desc = [[A beautiful amulet that increases your mindpower by 3.]],
+	desc = [[A beautiful amulet that increases your Mindpower by 3.]],
 	cost = 100,
 	wielder = {
 		combat_mindpower = 3,
diff --git a/game/modules/tome/data/zones/tutorial-combat-stats/traps.lua b/game/modules/tome/data/zones/tutorial-combat-stats/traps.lua
index f2f93d8e64ca12a0dcde5509d47af3f0260cbfc2..c809b5c5da22a660c63948e3d1f9610e82a24992 100644
--- a/game/modules/tome/data/zones/tutorial-combat-stats/traps.lua
+++ b/game/modules/tome/data/zones/tutorial-combat-stats/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -462,4 +462,4 @@ newEntity{ base = "TRAP_TUTORIAL6", define_as = "TUTORIAL_TIER11",
 newEntity{ base = "TRAP_TUTORIAL6", define_as = "TUTORIAL_TIER12",
 	name = "Cross-Tier Effects",
 	text = "tier12",
-}
\ No newline at end of file
+}
diff --git a/game/modules/tome/data/zones/tutorial-combat-stats/zone.lua b/game/modules/tome/data/zones/tutorial-combat-stats/zone.lua
index bc663b009c976cff48adca2fb8e07bfcd722d556..0dd205eb96a48fb56e5582846a8d8498c08ec4b9 100644
--- a/game/modules/tome/data/zones/tutorial-combat-stats/zone.lua
+++ b/game/modules/tome/data/zones/tutorial-combat-stats/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tutorial/grids.lua b/game/modules/tome/data/zones/tutorial/grids.lua
index 1726f52678587fdc9b9d7695e788ae0e6ba646a6..e57ee0ee2a897b5fe18da210921243d77fc009c6 100644
--- a/game/modules/tome/data/zones/tutorial/grids.lua
+++ b/game/modules/tome/data/zones/tutorial/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tutorial/npcs.lua b/game/modules/tome/data/zones/tutorial/npcs.lua
index a256e7308a4e5b63f9cf25f8384282dac34c5639..3026f085ec385f64741516bb865ec72e4e7b33ad 100644
--- a/game/modules/tome/data/zones/tutorial/npcs.lua
+++ b/game/modules/tome/data/zones/tutorial/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tutorial/objects.lua b/game/modules/tome/data/zones/tutorial/objects.lua
index 41163a5c5b9694292a10e484a12ffa8989c1174a..ca01a5f5b7ce055220a9bec29de1dbe90343891b 100644
--- a/game/modules/tome/data/zones/tutorial/objects.lua
+++ b/game/modules/tome/data/zones/tutorial/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tutorial/traps.lua b/game/modules/tome/data/zones/tutorial/traps.lua
index 1e9f637913f05fff2834f0d02f498f4410de6ebb..15d8096a5163daed192646f53f95b2ab7a25855d 100644
--- a/game/modules/tome/data/zones/tutorial/traps.lua
+++ b/game/modules/tome/data/zones/tutorial/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/tutorial/zone.lua b/game/modules/tome/data/zones/tutorial/zone.lua
index 8c559f2611bdba970deb28f021d8e1bfdb72fa5b..c2060633158d5165fe67eb3118ddd0bc38f28241 100644
--- a/game/modules/tome/data/zones/tutorial/zone.lua
+++ b/game/modules/tome/data/zones/tutorial/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unhallowed-morass/grids.lua b/game/modules/tome/data/zones/unhallowed-morass/grids.lua
index 6be6607e29bca85809b83d9fb7b39b9c15130058..23030ceee5de9e0b62e6bfb35f1af862ca74abbe 100644
--- a/game/modules/tome/data/zones/unhallowed-morass/grids.lua
+++ b/game/modules/tome/data/zones/unhallowed-morass/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -27,7 +27,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads to an other part of the morass.]],
+	desc = [[The rift leads to another part of the morass.]],
 	change_level = 1,
 }
 
@@ -38,7 +38,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads to an other part of the morass.]],
+	desc = [[The rift leads to another part of the morass.]],
 	change_level = 1,
 	change_zone = "town-point-zero",
 	change_level_check = function()
diff --git a/game/modules/tome/data/zones/unhallowed-morass/npcs.lua b/game/modules/tome/data/zones/unhallowed-morass/npcs.lua
index dc1f7543449e77fa7a78c4733d7b9d8e020ddcd8..159884f8b19005707f3e60bddf8e48b9a3df8bf6 100644
--- a/game/modules/tome/data/zones/unhallowed-morass/npcs.lua
+++ b/game/modules/tome/data/zones/unhallowed-morass/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unhallowed-morass/objects.lua b/game/modules/tome/data/zones/unhallowed-morass/objects.lua
index 4bd50f7744a8a94f3c52316466234f308d80da7d..86032254d4a7533078310ec46c961974b8dd7c9f 100644
--- a/game/modules/tome/data/zones/unhallowed-morass/objects.lua
+++ b/game/modules/tome/data/zones/unhallowed-morass/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -30,7 +30,7 @@ newEntity{ base = "BASE_LITE", define_as = "VOID_STAR",
 	color = colors.GREY,
 	encumber = 1,
 	rarity = false,
-	desc = [[It looks like a very tiny star - deep black - and yet it somehow shines.]],
+	desc = [[It looks like a very tiny star -- deep black -- and yet it somehow shines.]],
 	cost = 120,
 	material_level = 2,
 
diff --git a/game/modules/tome/data/zones/unhallowed-morass/traps.lua b/game/modules/tome/data/zones/unhallowed-morass/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/unhallowed-morass/traps.lua
+++ b/game/modules/tome/data/zones/unhallowed-morass/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unhallowed-morass/zone.lua b/game/modules/tome/data/zones/unhallowed-morass/zone.lua
index cbbf1d5910e688a9fd75519ab9ac205c7039c922..8c1cebd36b8cc3d41d8615a04918dd28c251cb95 100644
--- a/game/modules/tome/data/zones/unhallowed-morass/zone.lua
+++ b/game/modules/tome/data/zones/unhallowed-morass/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unremarkable-cave/events.lua b/game/modules/tome/data/zones/unremarkable-cave/events.lua
index ebd66ff0e39c0dc405817d50b80ad8274f8c24cf..fece8d6d9e6d5fe000ba907e816d061746edb99b 100644
--- a/game/modules/tome/data/zones/unremarkable-cave/events.lua
+++ b/game/modules/tome/data/zones/unremarkable-cave/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unremarkable-cave/grids.lua b/game/modules/tome/data/zones/unremarkable-cave/grids.lua
index a97f0cbd2af9436d6a531c35186a67f989ed49e9..70efff07fac329d896b5758e9c290fe5ce96e524 100644
--- a/game/modules/tome/data/zones/unremarkable-cave/grids.lua
+++ b/game/modules/tome/data/zones/unremarkable-cave/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unremarkable-cave/npcs.lua b/game/modules/tome/data/zones/unremarkable-cave/npcs.lua
index 24d609aaa6cae41177b9ecb85114f2dc11c63120..80778e264fba38461954b6d39a8af4887eddd656 100644
--- a/game/modules/tome/data/zones/unremarkable-cave/npcs.lua
+++ b/game/modules/tome/data/zones/unremarkable-cave/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unremarkable-cave/objects.lua b/game/modules/tome/data/zones/unremarkable-cave/objects.lua
index 1e95167379666b0f9aab13b88ed48e6b7874f0f7..dcc8d8f6947127f2f228ac10eee9b59c7c14763b 100644
--- a/game/modules/tome/data/zones/unremarkable-cave/objects.lua
+++ b/game/modules/tome/data/zones/unremarkable-cave/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unremarkable-cave/traps.lua b/game/modules/tome/data/zones/unremarkable-cave/traps.lua
index 18480d56b9ccf36f417cfac50e9646839b108949..2be21dc8880c893fe61bfa5d6fab645f4fa1632d 100644
--- a/game/modules/tome/data/zones/unremarkable-cave/traps.lua
+++ b/game/modules/tome/data/zones/unremarkable-cave/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/unremarkable-cave/zone.lua b/game/modules/tome/data/zones/unremarkable-cave/zone.lua
index 770a9ca5110b5f05bc80040a51717b75d770b935..5130da30101bd096e7c94ced45bce17e43ef5945 100644
--- a/game/modules/tome/data/zones/unremarkable-cave/zone.lua
+++ b/game/modules/tome/data/zones/unremarkable-cave/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon-caverns/events.lua b/game/modules/tome/data/zones/valley-moon-caverns/events.lua
index 413d0e49d8c4f0d59691fd915336273d460f2bb2..9acec1f7039f37327d4bc5f0b36cc575526a3918 100644
--- a/game/modules/tome/data/zones/valley-moon-caverns/events.lua
+++ b/game/modules/tome/data/zones/valley-moon-caverns/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon-caverns/grids.lua b/game/modules/tome/data/zones/valley-moon-caverns/grids.lua
index 23bbdcc333e546699169532ada361f49ccc547cf..9a71576a62f4e1b18e5c6fb2b56c350e0ab46760 100644
--- a/game/modules/tome/data/zones/valley-moon-caverns/grids.lua
+++ b/game/modules/tome/data/zones/valley-moon-caverns/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon-caverns/npcs.lua b/game/modules/tome/data/zones/valley-moon-caverns/npcs.lua
index 227166717042f4a024b09b846754139f2a849f15..de498287cd2633238fe6f4600eed7592e89f66cb 100644
--- a/game/modules/tome/data/zones/valley-moon-caverns/npcs.lua
+++ b/game/modules/tome/data/zones/valley-moon-caverns/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon-caverns/objects.lua b/game/modules/tome/data/zones/valley-moon-caverns/objects.lua
index a0d9119b8fd20df8da748bc7c62b943567919cd9..85d3a0bb1a3295630a7d7eb26a7827cd22918aff 100644
--- a/game/modules/tome/data/zones/valley-moon-caverns/objects.lua
+++ b/game/modules/tome/data/zones/valley-moon-caverns/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon-caverns/traps.lua b/game/modules/tome/data/zones/valley-moon-caverns/traps.lua
index 6bc3e89d31cd44127d5a9357ae18af0745c7316d..11980c29f3b6fd30b2029265dad9918c5b183fec 100644
--- a/game/modules/tome/data/zones/valley-moon-caverns/traps.lua
+++ b/game/modules/tome/data/zones/valley-moon-caverns/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon-caverns/zone.lua b/game/modules/tome/data/zones/valley-moon-caverns/zone.lua
index c9ec13d69c76f5aacca8dcb789ce69ce02ec39eb..18be33ab686af0d7a4b3066e05ad6fe020c3a317 100644
--- a/game/modules/tome/data/zones/valley-moon-caverns/zone.lua
+++ b/game/modules/tome/data/zones/valley-moon-caverns/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon/events.lua b/game/modules/tome/data/zones/valley-moon/events.lua
index 7b96f51079f1f99d5aedd0743d13dec2578a0270..737ea50081018b32fb5bad2459c90c44f2b1537c 100644
--- a/game/modules/tome/data/zones/valley-moon/events.lua
+++ b/game/modules/tome/data/zones/valley-moon/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon/grids.lua b/game/modules/tome/data/zones/valley-moon/grids.lua
index 14efddff379eb1d9dd9232ba2034cec2c8422eb0..3a9c618eb30188e31c4ebe61fe9e41591b85f538 100644
--- a/game/modules/tome/data/zones/valley-moon/grids.lua
+++ b/game/modules/tome/data/zones/valley-moon/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon/npcs.lua b/game/modules/tome/data/zones/valley-moon/npcs.lua
index 274a0882304ac2d27cbbde5c9f8e31bd3e68ebbc..97c6daa3661a001a48edcd18dc326417f03b5314 100644
--- a/game/modules/tome/data/zones/valley-moon/npcs.lua
+++ b/game/modules/tome/data/zones/valley-moon/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon/objects.lua b/game/modules/tome/data/zones/valley-moon/objects.lua
index 1e95167379666b0f9aab13b88ed48e6b7874f0f7..dcc8d8f6947127f2f228ac10eee9b59c7c14763b 100644
--- a/game/modules/tome/data/zones/valley-moon/objects.lua
+++ b/game/modules/tome/data/zones/valley-moon/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon/traps.lua b/game/modules/tome/data/zones/valley-moon/traps.lua
index be5251add72e011f1f9f80fa731880afccd22ee0..ae7fb15b35769c2a0504714b829107d3b93232ca 100644
--- a/game/modules/tome/data/zones/valley-moon/traps.lua
+++ b/game/modules/tome/data/zones/valley-moon/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/valley-moon/zone.lua b/game/modules/tome/data/zones/valley-moon/zone.lua
index 9fc987e0c71ce394191de11e34411cef9daa0ed5..b094a05ec4de6f253f682f55238fc4f4bb6b1cc0 100644
--- a/game/modules/tome/data/zones/valley-moon/zone.lua
+++ b/game/modules/tome/data/zones/valley-moon/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/void/grids.lua b/game/modules/tome/data/zones/void/grids.lua
index de7f1f24493e31e9575f0f43d9e68cc84fbdfcd9..8ea350e1cc08c4feb3c01b029571978e478de918 100644
--- a/game/modules/tome/data/zones/void/grids.lua
+++ b/game/modules/tome/data/zones/void/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -36,7 +36,7 @@ newEntity{
 	notice = true,
 	always_remember = true,
 	show_tooltip = true,
-	desc = [[The rift leads somewhere ..]],
+	desc = [[The rift leads... somewhere.]],
 	change_level = 1,
 	change_level_check = function()
 		if game.level.level > 1 then return end
diff --git a/game/modules/tome/data/zones/void/npcs.lua b/game/modules/tome/data/zones/void/npcs.lua
index e55c9c193b30d1ba609f74e8389cd68367298bc7..cb0546f4248ab6482d4c2e40a02a907f463c1327 100644
--- a/game/modules/tome/data/zones/void/npcs.lua
+++ b/game/modules/tome/data/zones/void/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -26,8 +26,8 @@ newEntity{ define_as = "GOD_GERLYK",
 	type = "god", subtype = "eyal", unique = true,
 	name = "Gerlyk, the Creator",
 	display = "P", color=colors.VIOLET,
-	desc = [[During the Age of Haze nearly all gods were destroyed by the Sher'tuls Godslayers. Yet a few escaped.
-Gerlyk, the creator of the human race, prefered to flee into the void between the stars than to face death. He has been trapped ever since.
+	desc = [[During the Age of Haze nearly all gods were destroyed by the Sher'tul Godslayers. However, a small number escaped.
+Gerlyk, the creator of the Human race, prefered to flee into the void between the stars than to face death. He has been trapped ever since.
 The sorcerers tried to bring him back and nearly succeeded.
 Now you have come to finish what the Sher'tul began. Become a Godslayer yourself.]],
 	level_range = {100, nil}, exp_worth = 3,
diff --git a/game/modules/tome/data/zones/void/objects.lua b/game/modules/tome/data/zones/void/objects.lua
index 41163a5c5b9694292a10e484a12ffa8989c1174a..ca01a5f5b7ce055220a9bec29de1dbe90343891b 100644
--- a/game/modules/tome/data/zones/void/objects.lua
+++ b/game/modules/tome/data/zones/void/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/void/traps.lua b/game/modules/tome/data/zones/void/traps.lua
index 02f32361a395c0d5716087b09a38d3fe13e0b8e7..ffc0dced3f63d81e4594309c3e3cff4b0018f429 100644
--- a/game/modules/tome/data/zones/void/traps.lua
+++ b/game/modules/tome/data/zones/void/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/void/zone.lua b/game/modules/tome/data/zones/void/zone.lua
index 499cd89d7e9d56dcc988f4fa39ed52587c15ba2c..d0814f979bfcf43e1e6054d2dc29bf160117fe3f 100644
--- a/game/modules/tome/data/zones/void/zone.lua
+++ b/game/modules/tome/data/zones/void/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-armoury/grids.lua b/game/modules/tome/data/zones/vor-armoury/grids.lua
index 786b8be49cd9eadd20f1279762825d502e553e6f..c75ddd17f3c83ac6441ebc22bd4af08c98eb3ecf 100644
--- a/game/modules/tome/data/zones/vor-armoury/grids.lua
+++ b/game/modules/tome/data/zones/vor-armoury/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-armoury/npcs.lua b/game/modules/tome/data/zones/vor-armoury/npcs.lua
index 23421f2f698e3a05bb073df3cc4bdd2ac478f6b1..675c250e931a9a6e61616b2b0216953ec114c553 100644
--- a/game/modules/tome/data/zones/vor-armoury/npcs.lua
+++ b/game/modules/tome/data/zones/vor-armoury/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-armoury/objects.lua b/game/modules/tome/data/zones/vor-armoury/objects.lua
index 67a509fab7f71af9a86377bafcf892535ba3c108..03b204402d80dbbb35d3d8ecf2da9f3919ed3d01 100644
--- a/game/modules/tome/data/zones/vor-armoury/objects.lua
+++ b/game/modules/tome/data/zones/vor-armoury/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-armoury/traps.lua b/game/modules/tome/data/zones/vor-armoury/traps.lua
index 93f4c73f6b93a352c42b8bf89fbf898be64e5f6c..7da1f39ccbb931fcf499f9751809dcbe8c1fb60c 100644
--- a/game/modules/tome/data/zones/vor-armoury/traps.lua
+++ b/game/modules/tome/data/zones/vor-armoury/traps.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-armoury/zone.lua b/game/modules/tome/data/zones/vor-armoury/zone.lua
index 0932d8f05a6efacedf80f776906ab1a4936323b7..20ec7c2029a74a6287d4714a1c278553e71d501b 100644
--- a/game/modules/tome/data/zones/vor-armoury/zone.lua
+++ b/game/modules/tome/data/zones/vor-armoury/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-pride/events.lua b/game/modules/tome/data/zones/vor-pride/events.lua
index a8fa841a14c61a810080d093505735ed7d9a43a0..72d4c1358cf806478487866db8cf3af488f9b7cb 100644
--- a/game/modules/tome/data/zones/vor-pride/events.lua
+++ b/game/modules/tome/data/zones/vor-pride/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-pride/grids.lua b/game/modules/tome/data/zones/vor-pride/grids.lua
index 1726f52678587fdc9b9d7695e788ae0e6ba646a6..e57ee0ee2a897b5fe18da210921243d77fc009c6 100644
--- a/game/modules/tome/data/zones/vor-pride/grids.lua
+++ b/game/modules/tome/data/zones/vor-pride/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-pride/npcs.lua b/game/modules/tome/data/zones/vor-pride/npcs.lua
index 70c09ed59813360c7350e7783a5ee0b95decbaed..3b10291d25ba670abb4d6280cc09075b965064f0 100644
--- a/game/modules/tome/data/zones/vor-pride/npcs.lua
+++ b/game/modules/tome/data/zones/vor-pride/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -44,9 +44,10 @@ newEntity{ base="BASE_NPC_ORC_VOR", define_as = "VOR",
 	autolevel = "caster",
 	ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
 	ai_tactic = resolvers.tactic"ranged",
-	resolvers.inscriptions(4, "rune"),
 	resolvers.inscriptions(1, {"manasurge rune"}),
-
+	resolvers.inscriptions(4, "rune"),
+	max_inscriptions = 5,
+	
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, HEAD=1 },
 
 	resolvers.equip{
diff --git a/game/modules/tome/data/zones/vor-pride/objects.lua b/game/modules/tome/data/zones/vor-pride/objects.lua
index 221a34d586c1b419144d0c9913320a5c55a0e0f6..3017e08734762caa2aa2d41a3f243471fe142054 100644
--- a/game/modules/tome/data/zones/vor-pride/objects.lua
+++ b/game/modules/tome/data/zones/vor-pride/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/vor-pride/zone.lua b/game/modules/tome/data/zones/vor-pride/zone.lua
index b5971cc13525f8b180ac21cb277c116a5ec598bd..611129dc6bc47cd649961a8f3e97af6d7153553d 100644
--- a/game/modules/tome/data/zones/vor-pride/zone.lua
+++ b/game/modules/tome/data/zones/vor-pride/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/wilderness/events.lua b/game/modules/tome/data/zones/wilderness/events.lua
index efad9e82943379d4277ded78e161da7a8841e708..ceb395b0d19aad718a5b8c6d9b047ded7af45953 100644
--- a/game/modules/tome/data/zones/wilderness/events.lua
+++ b/game/modules/tome/data/zones/wilderness/events.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/wilderness/grids.lua b/game/modules/tome/data/zones/wilderness/grids.lua
index 7b149dd87e9a6e2d620fbb487d79375a552f16a3..c85baa348f713920cb6244e70c14b8e00f355f1e 100644
--- a/game/modules/tome/data/zones/wilderness/grids.lua
+++ b/game/modules/tome/data/zones/wilderness/grids.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/wilderness/npcs.lua b/game/modules/tome/data/zones/wilderness/npcs.lua
index a24acffb9687666588e3bcb023c251d1df2670b1..127fc82ac06e9b7ceefaa06cd708f14d9494885b 100644
--- a/game/modules/tome/data/zones/wilderness/npcs.lua
+++ b/game/modules/tome/data/zones/wilderness/npcs.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/wilderness/objects.lua b/game/modules/tome/data/zones/wilderness/objects.lua
index 41163a5c5b9694292a10e484a12ffa8989c1174a..ca01a5f5b7ce055220a9bec29de1dbe90343891b 100644
--- a/game/modules/tome/data/zones/wilderness/objects.lua
+++ b/game/modules/tome/data/zones/wilderness/objects.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/data/zones/wilderness/zone.lua b/game/modules/tome/data/zones/wilderness/zone.lua
index aa030e242ec97c6a16fe7f306b58ad01e205f98c..fc4be6867ed47cd5bc21684664301afd525eda14 100644
--- a/game/modules/tome/data/zones/wilderness/zone.lua
+++ b/game/modules/tome/data/zones/wilderness/zone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ArenaFinish.lua b/game/modules/tome/dialogs/ArenaFinish.lua
index 42da2c38bb009ed31dd0ffc857586efad6979627..a4d00b7555c64376d14fd801fb736dc8d58642c7 100644
--- a/game/modules/tome/dialogs/ArenaFinish.lua
+++ b/game/modules/tome/dialogs/ArenaFinish.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/Birther.lua b/game/modules/tome/dialogs/Birther.lua
index ec3082701dfe1318d2a7d4dce1b60655baee5483..96bbcc8c3f37197dab9aa66d5eda915ccc6e82d1 100644
--- a/game/modules/tome/dialogs/Birther.lua
+++ b/game/modules/tome/dialogs/Birther.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -231,6 +231,9 @@ function _M:applyGameState(d)
 		-- Copy normal data
 		table.merge(game.state.birth, copy, true)
 	end
+	if d.game_state_execute then
+		d.game_state_execute()
+	end
 end
 
 function _M:atEnd(v)
@@ -1374,6 +1377,7 @@ function _M:selectTile()
 		"player/ascii_player_exotic_01.png",
 		"player/ascii_player_shopper_01.png",
 	}
+	self:triggerHook{"Birther:donatorTiles", list=list}
 	local remove = Button.new{text="Use default tile", width=500, fct=function()
 		game:unregisterDialog(d)
 		self.has_custom_tile = nil
diff --git a/game/modules/tome/dialogs/CharacterSheet.lua b/game/modules/tome/dialogs/CharacterSheet.lua
index 5f710b13a5183f70a8719f25decfe1a2cc3c7dc6..18e2afda15240b9353bc03662bdc7e87814f92d1 100644
--- a/game/modules/tome/dialogs/CharacterSheet.lua
+++ b/game/modules/tome/dialogs/CharacterSheet.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -385,15 +385,25 @@ function _M:drawDialog(kind, actor_to_compare)
 		w = self.w * 0.25
 
 		s:drawColorStringBlended(self.font, "#LIGHT_BLUE#Speeds:", w, h, 255, 255, 255, true) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, "global_speed", "%.2f%%", "%+.2f%%",100)
+		local color = player.global_speed
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, "global_speed", color.."%.1f%%", "%+.1f%%",100)
 		self:mouseTooltip(self.TOOLTIP_SPEED_GLOBAL,   s:drawColorStringBlended(self.font, ("Global speed  : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, function(actor) return (1/actor:combatMovementSpeed()-1) end, "%.2f%%", "%+.2f%%", 100)
+		color = 1/player:combatMovementSpeed()
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor) return (1/actor:combatMovementSpeed()) end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_SPEED_MOVEMENT, s:drawColorStringBlended(self.font, ("Movement speed: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpellSpeed() end, "%.2f%%", "%+.2f%%", 100, true)
+		color = 1/player:combatSpellSpeed()
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatSpellSpeed() end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_SPEED_SPELL,    s:drawColorStringBlended(self.font, ("Spell speed   : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpeed() end, "%.2f%%", "%+.2f%%", 100, true)
+		color = 1/player:combatSpeed()
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatSpeed() end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_SPEED_ATTACK,   s:drawColorStringBlended(self.font, ("Attack speed  : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatMindSpeed() end, "%.2f%%", "%+.2f%%", 100, true)
+		color = 1/player:combatMindSpeed()
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatMindSpeed() end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_SPEED_MENTAL,   s:drawColorStringBlended(self.font, ("Mental speed  : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		h = h + self.font_h
 		if player.died_times then
@@ -404,9 +414,13 @@ function _M:drawDialog(kind, actor_to_compare)
 			text = compare_fields(player, actor_to_compare, "easy_mode_lifes", "%3d", "%+.0f")
 			self:mouseTooltip(self.TOOLTIP_LIVES, s:drawColorStringBlended(self.font,   ("Lives left     : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		end
-		text = compare_fields(player, actor_to_compare, function(actor) return util.bound((actor.healing_factor or 1), 0, 2.5) end, "%.2f%%", "%+.2f%%", 100)
+		color = player.healing_factor
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor) return util.bound((actor.healing_factor or 1), 0, 2.5) end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_HEALING_MOD, s:drawColorStringBlended(self.font, ("Healing mod.   : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, "life_regen", "%.2f", "%+.2f")
+		color = player.life_regen
+		color = color >= 0 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, "life_regen", color.."%.1f", "%+.1f")
 		self:mouseTooltip(self.TOOLTIP_LIFE_REGEN,  s:drawColorStringBlended(self.font, ("Life regen     : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		text = compare_fields(player, actor_to_compare, function(actor) return actor.life_regen * util.bound((actor.healing_factor or 1), 0, 2.5) end, "%.2f", "%+.2f")
 		self:mouseTooltip(self.TOOLTIP_LIFE_REGEN,  s:drawColorStringBlended(self.font, ("(with heal mod): #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
@@ -557,7 +571,7 @@ function _M:drawDialog(kind, actor_to_compare)
 	elseif kind=="attack" then
 		h = 0
 		w = 0
-
+		local color
 		local mainhand = player:getInven(player.INVEN_MAINHAND)
 		if mainhand and (#mainhand > 0) and not player:attr("disarmed") then
 			local WeaponTxt = "#LIGHT_BLUE#Main Hand"
@@ -587,7 +601,9 @@ function _M:drawDialog(kind, actor_to_compare)
 					self:mouseTooltip(self.TOOLTIP_COMBAT_APR,    s:drawColorStringBlended(self.font, ("APR         : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 					text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatCrit(...) end, "%3d%%", "%+.0f%%", 1, false, false, dam)
 					self:mouseTooltip(self.TOOLTIP_COMBAT_CRIT,   s:drawColorStringBlended(self.font, ("Crit. chance: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-					text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpeed(...) end, "%.2f%%", "%+.2f%%", 100, true, false, mean)
+					color = 1/player:combatSpeed(mean)
+					color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+					text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatSpeed(...) end, color.."%.1f%%", "%+.1f%%", 100, true, false, mean)
 					self:mouseTooltip(self.TOOLTIP_COMBAT_SPEED,  s:drawColorStringBlended(self.font, ("Speed       : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 				end
 				if range then
@@ -608,7 +624,9 @@ function _M:drawDialog(kind, actor_to_compare)
 				self:mouseTooltip(self.TOOLTIP_COMBAT_APR,    s:drawColorStringBlended(self.font, ("APR         : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 				text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatCrit(...) end, "%3d%%", "%+.0f%%", 1, false, false, dam)
 				self:mouseTooltip(self.TOOLTIP_COMBAT_CRIT,   s:drawColorStringBlended(self.font, ("Crit. chance: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-				text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpeed(...) end, "%.2f%%", "%+.2f%%", 100, false, false, mean)
+				color = 1/player:combatSpeed(mean)
+				color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+				text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatSpeed(...) end, color.."%.1f%%", "%+.1f%%", 100, false, false, mean)
 				self:mouseTooltip(self.TOOLTIP_COMBAT_SPEED,  s:drawColorStringBlended(self.font, ("Speed       : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 			end
 			if mean and mean.range then
@@ -637,7 +655,9 @@ function _M:drawDialog(kind, actor_to_compare)
 					self:mouseTooltip(self.TOOLTIP_COMBAT_APR,    s:drawColorStringBlended(self.font, ("APR         : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 					text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatCrit(...) end, "%3d%%", "%+.0f%%", 1, false, false, dam)
 					self:mouseTooltip(self.TOOLTIP_COMBAT_CRIT,   s:drawColorStringBlended(self.font, ("Crit. chance: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-					text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpeed(...) end, "%.2f%%", "%+.2f%%", 100, false, false, mean)
+					color = 1/player:combatSpeed(mean)
+					color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+					text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatSpeed(...) end, color.."%.1f%%", "%+.1f%%", 100, false, false, mean)
 					self:mouseTooltip(self.TOOLTIP_COMBAT_SPEED,  s:drawColorStringBlended(self.font, ("Speed       : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 				end
 				if mean and mean.range then self:mouseTooltip(self.TOOLTIP_COMBAT_RANGE, s:drawColorStringBlended(self.font, ("Range (Off Hand): #00ff00#%3d"):format(mean.range), w, h, 255, 255, 255, true)) h = h + self.font_h end
@@ -656,7 +676,9 @@ function _M:drawDialog(kind, actor_to_compare)
 		self:mouseTooltip(self.TOOLTIP_SPELL_POWER, s:drawColorStringBlended(self.font, ("Spellpower  : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpellCrit() end, "%d%%", "%+.0f%%")
 		self:mouseTooltip(self.TOOLTIP_SPELL_CRIT, s:drawColorStringBlended(self.font,  ("Crit. chance: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatSpellSpeed() end, "%.2f%%", "%+.2f%%", 100)
+		color = 1/player:combatSpellSpeed()
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatSpellSpeed() end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_SPELL_SPEED, s:drawColorStringBlended(self.font, ("Spell speed : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		text = compare_fields(player, actor_to_compare, function(actor, ...) return (1 - (actor.spell_cooldown_reduction or 0)) * 100 end, "%3d%%", "%+.0f%%", nil, true)
 		self:mouseTooltip(self.TOOLTIP_SPELL_COOLDOWN  , s:drawColorStringBlended(self.font,   ("Spell cooldown: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
@@ -667,7 +689,9 @@ function _M:drawDialog(kind, actor_to_compare)
 		self:mouseTooltip(self.TOOLTIP_MINDPOWER, s:drawColorStringBlended(self.font, ("Mindpower: #00ff00#%s"):format(text, dur_text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatMindCrit() end, "%d%%", "%+.0f%%")
 		self:mouseTooltip(self.TOOLTIP_MIND_CRIT, s:drawColorStringBlended(self.font,  ("Crit. chance: #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
-		text = compare_fields(player, actor_to_compare, function(actor, ...) return actor:combatMindSpeed() end, "%.2f%%", "%+.2f%%", 100, true)
+		color = 1/player:combatMindSpeed()
+		color = color >= 1 and "#LIGHT_GREEN#" or "#LIGHT_RED#"
+		text = compare_fields(player, actor_to_compare, function(actor, ...) return 1/actor:combatMindSpeed() end, color.."%.1f%%", "%+.1f%%", 100)
 		self:mouseTooltip(self.TOOLTIP_MIND_SPEED, s:drawColorStringBlended(self.font, ("Mind speed : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 
 		h = 0
@@ -923,7 +947,8 @@ function _M:drawDialog(kind, actor_to_compare)
 		for i, t in ipairs(DamageType.dam_def) do
 			if player.on_melee_hit[DamageType[t.type]] and player.on_melee_hit[DamageType[t.type]] ~= 0 then
 				local dval = player.on_melee_hit[DamageType[t.type]]
-				self:mouseTooltip(self.TOOLTIP_ON_HIT_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-10s#LAST#: #00ff00#%.2f"):format((t.text_color or "#WHITE#"), t.name:capitalize(), (type(dval)=="number") and dval or dval.dam), w, h, 255, 255, 255, true)) h = h + self.font_h
+				dval = Talents.damDesc(player, DamageType[t.type] ,type(dval) == "number" and dval or dval.dam)
+				self:mouseTooltip(self.TOOLTIP_ON_HIT_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-10s#LAST#: #00ff00#%.1f"):format((t.text_color or "#WHITE#"), t.name:capitalize(), dval), w, h, 255, 255, 255, true)) h = h + self.font_h
 			end
 		end
 
diff --git a/game/modules/tome/dialogs/CursedAuraSelect.lua b/game/modules/tome/dialogs/CursedAuraSelect.lua
index 0ec47d24e5ad925806a7a8b18dff6b24b066436a..dcd5ed7deabeb4e15632b1332aaab823ab7a6e8d 100644
--- a/game/modules/tome/dialogs/CursedAuraSelect.lua
+++ b/game/modules/tome/dialogs/CursedAuraSelect.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/DeathDialog.lua b/game/modules/tome/dialogs/DeathDialog.lua
index d61bb3941d54d1c771613e06b97659631fddb25c..6ee772a12dff7f34e4d6d9390619d15a0a9e0d60 100644
--- a/game/modules/tome/dialogs/DeathDialog.lua
+++ b/game/modules/tome/dialogs/DeathDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -18,6 +18,7 @@
 -- darkgod@te4.org
 
 require "engine.class"
+local Shader = require "engine.Shader"
 local Dialog = require "engine.ui.Dialog"
 local Textzone = require "engine.ui.Textzone"
 local Separator = require "engine.ui.Separator"
@@ -29,7 +30,8 @@ module(..., package.seeall, class.inherit(Dialog))
 
 function _M:init(actor)
 	self.actor = actor
-	Dialog.init(self, "Death!", 500, 300)
+	self.ui = "deathbox"
+	Dialog.init(self, "You have #LIGHT_RED#died#LAST#!", 500, 600)
 
 	actor:saveUUID()
 
@@ -37,8 +39,7 @@ function _M:init(actor)
 	if self.dont_show then return end
 	if not config.settings.cheat then game:saveGame() end
 
-	local text = [[You have #LIGHT_RED#died#LAST#!
-Death in ToME is usually permanent, but if you have a means of resurrection it will be proposed in the menu below.
+	local text = [[Death in #{bold}#Tales of Maj'Eyal#{normal}# is usually permanent, but if you have a means of resurrection it will be proposed in the menu below.
 You can dump your character data to a file to remember her/him forever, or you can exit and try once again to survive in the wilds!
 ]]
 
@@ -46,20 +47,40 @@ You can dump your character data to a file to remember her/him forever, or you c
 		self.c_achv = Textzone.new{width=self.iw, scrollbar=true, height=100, text="#LIGHT_GREEN#During your game you#WHITE#:\n* "..table.concat(game.party.on_death_show_achieved, "\n* ")}
 	end
 
+	self:setTitleShadowShader(Shader.default.textoutline and Shader.default.textoutline.shad, 1.5)
 	self.c_desc = Textzone.new{width=self.iw, auto_height=true, text=text}
-	self.c_list = List.new{width=self.iw, nb_items=#self.list, list=self.list, fct=function(item) self:use(item) end}
+	self.c_desc:setTextShadow(1)
+	self.c_desc:setShadowShader(Shader.default.textoutline and Shader.default.textoutline.shad, 1.2)
+
+	self.c_list = List.new{width=self.iw, nb_items=#self.list, list=self.list, fct=function(item) self:use(item) end, select=function(item) self.cur_item = item end}
+
+	self.graphical_options = {
+		blood_life = {
+			available   = self:getUITexture("ui/active_blood_life.png"),
+			unavailable = self:getUITexture("ui/inactive_blood_life.png"),
+		},
+		consume = {
+			available   = self:getUITexture("ui/active_consume.png"),
+			unavailable = self:getUITexture("ui/inactive_consume.png"),
+		},
+		skeleton = {
+			available   = self:getUITexture("ui/active_skeleton.png"),
+			unavailable = self:getUITexture("ui/inactive_skeleton.png"),
+		},
+	}
+
 
 	if self.c_achv then
 		self:loadUI{
 			{left=0, top=0, ui=self.c_desc},
 			{left=0, top=self.c_desc.h, ui=self.c_achv},
-			{left=5, top=self.c_desc.h+self.c_achv.h, padding_h=10, ui=Separator.new{dir="vertical", size=self.iw - 10}},
+			{left=5, top=self.c_desc.h+self.c_achv.h, padding_h=10, ui=Separator.new{ui="deathbox", dir="vertical", size=self.iw - 10}},
 			{left=0, bottom=0, ui=self.c_list},
 		}
 	else
 		self:loadUI{
 			{left=0, top=0, ui=self.c_desc},
-			{left=5, top=self.c_desc.h, padding_h=10, ui=Separator.new{dir="vertical", size=self.iw - 10}},
+			{left=5, top=self.c_desc.h, padding_h=10, ui=Separator.new{ui="deathbox", dir="vertical", size=self.iw - 10}},
 			{left=0, bottom=0, ui=self.c_list},
 		}
 	end
@@ -230,6 +251,7 @@ function _M:use(item)
 		self:restoreResources(self.actor)
 		world:gainAchievement("UNSTOPPABLE", actor)
 		self.actor:check("on_resurrect", "blood_life")
+		game:saveGame()
 	elseif act == "lichform" then
 		local t = self.actor:getTalentFromId(self.actor.T_LICHFORM)
 
@@ -240,6 +262,7 @@ function _M:use(item)
 		t.becomeLich(self.actor, t)
 		self.actor:updateModdableTile()
 		self.actor:check("on_resurrect", "lichform")
+		game:saveGame()
 	elseif act == "easy_mode" then
 		self:eidolonPlane()
 	elseif act == "skeleton" then
@@ -251,6 +274,7 @@ function _M:use(item)
 		self:restoreResources(self.actor)
 		world:gainAchievement("UNSTOPPABLE", actor)
 		self.actor:check("on_resurrect", "skeleton")
+		game:saveGame()
 	elseif act:find("^consume") then
 		local inven, item, o = item.inven, item.item, item.object
 		self.actor:removeObject(inven, item)
@@ -261,11 +285,13 @@ function _M:use(item)
 		self:restoreResources(self.actor)
 		world:gainAchievement("UNSTOPPABLE", actor)
 		self.actor:check("on_resurrect", "consume", o)
+		game:saveGame()
 	end
 end
 
 function _M:generateList()
 	local list = {}
+	self.possible_items = {}
 	local allow_res = true
 
 	-- Pause the game
@@ -298,8 +324,9 @@ function _M:generateList()
 		local consumenb = 1
 		self.actor:inventoryApplyAll(function(inven, item, o)
 			if o.one_shot_life_saving and (not o.slot or inven.worn) then
-				list[#list+1] = {name="Resurrect by consuming "..o:getName{do_colour=true}, action="consume"..consumenb, inven=inven, item=item, object=o}
+				list[#list+1] = {name="Resurrect by consuming "..o:getName{do_colour=true}, action="consume"..consumenb, inven=inven, item=item, object=o, is_consume=true}
 				consumenb = consumenb + 1
+				self.possible_items.consume = true
 			end
 		end)
 	end
@@ -311,4 +338,23 @@ function _M:generateList()
 	list[#list+1] = {name="Exit to main menu", action="exit", subaction="none"}
 
 	self.list = list
+	for _, item in ipairs(list) do self.possible_items[item.action] = true end
+end
+
+function _M:innerDisplayBack(x, y, nb_keyframes, tx, ty)
+	x = x + self.frame.ox1
+	y = y + self.frame.oy1
+
+	if self.possible_items.blood_life then
+		local d = self.graphical_options.blood_life[self.cur_item and self.cur_item.action == "blood_life" and "available" or "unavailable"]
+		d.t:toScreenFull(x + self.frame.w - d.w, y, d.w, d.h, d.tw, d.th, 1, 1, 1, 1)
+	end
+	if self.possible_items.consume then
+		local d = self.graphical_options.consume[self.cur_item and self.cur_item.is_consume and "available" or "unavailable"]
+		d.t:toScreenFull(x, y, d.w, d.h, d.tw, d.th, 1, 1, 1, 1)
+	end
+	if self.possible_items.skeleton then
+		local d = self.graphical_options.skeleton[self.cur_item and self.cur_item.action == "skeleton" and "available" or "unavailable"]
+		d.t:toScreenFull(x, y + self.frame.h - d.h, d.w, d.h, d.tw, d.th, 1, 1, 1, 1)
+	end
 end
diff --git a/game/modules/tome/dialogs/Donation.lua b/game/modules/tome/dialogs/Donation.lua
index bfa46c6c1a56fe72f6addcfd881cb996fee98464..f5256b01b6f0cbeebaad953abba48c365e76cf53 100644
--- a/game/modules/tome/dialogs/Donation.lua
+++ b/game/modules/tome/dialogs/Donation.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -58,16 +58,16 @@ Thank you for your kindness!]]}
 	end
 
 	self.c_donate = Numberbox.new{title="Donation amount: ", number=10, max=1000, min=5, chars=5, fct=function() end}
-	local euro = Textzone.new{auto_width=true, auto_height=true, text=[[€]]}
+	local euro = Textzone.new{auto_width=true, auto_height=true, text=[[euro]]}
 	self.c_recur = Checkbox.new{title="Make it a recurring monthly donation", default=recur, fct=function() end}
 	local ok = require("engine.ui.Button").new{text="Accept", fct=function() self:ok() end}
 	local cancel = require("engine.ui.Button").new{text="Cancel", fct=function() self:cancel() end}
 
 	self:loadUI{
 		{left=0, top=0, ui=desc},
-		{left=5, bottom=5 + ok.h, ui=self.c_donate},
-		{left=5+self.c_donate.w, bottom=10 + ok.h, ui=euro},
-		{right=5, bottom=5 + ok.h, ui=self.c_recur},
+		{left=5, bottom=5 + ok.h + self.c_recur.h, ui=self.c_donate},
+		{left=5+self.c_donate.w, bottom=10 + ok.h + self.c_recur.h, ui=euro},
+		{left=0, bottom=5 + ok.h, ui=self.c_recur},
 		{left=0, bottom=0, ui=ok},
 		{right=0, bottom=0, ui=cancel},
 	}
diff --git a/game/modules/tome/dialogs/DownloadCharball.lua b/game/modules/tome/dialogs/DownloadCharball.lua
index d83dbaa8581ae0da6f77fd2223099448c2587ae9..fc6a71b94a3fe7dc3e6c393bd34c451dc81a9dde 100644
--- a/game/modules/tome/dialogs/DownloadCharball.lua
+++ b/game/modules/tome/dialogs/DownloadCharball.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/GameOptions.lua b/game/modules/tome/dialogs/GameOptions.lua
index 68cddfaf30af1001754de565f6ce6dab323445f6..624d48c53b3a210fe9f2970e1104eb984ec0ba91 100644
--- a/game/modules/tome/dialogs/GameOptions.lua
+++ b/game/modules/tome/dialogs/GameOptions.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/GraphicMode.lua b/game/modules/tome/dialogs/GraphicMode.lua
index 4e28f71cee2d30d54864d1b58c93611a7de8f7d8..0504cb8e3d1543ceea2cd501dbc9be358ffc3858 100644
--- a/game/modules/tome/dialogs/GraphicMode.lua
+++ b/game/modules/tome/dialogs/GraphicMode.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/LevelupDialog.lua b/game/modules/tome/dialogs/LevelupDialog.lua
index adcc6eb3e8064d5938604797aa0c493425854e7f..ef54ce60ad8d143fb22304a426a13f20e3f1de9a 100644
--- a/game/modules/tome/dialogs/LevelupDialog.lua
+++ b/game/modules/tome/dialogs/LevelupDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -152,7 +152,7 @@ function _M:getMaxTPoints(t)
 end
 
 function _M:finish()
-	local ok, dep_miss = self:checkDeps(true)
+	local ok, dep_miss = self:checkDeps(true, true)
 	if not ok then
 		self:simpleLongPopup("Impossible", "You cannot learn this talent(s): "..dep_miss, game.w * 0.4)
 		return nil
@@ -252,7 +252,7 @@ function _M:computeDeps(t)
 	end
 end
 
-function _M:checkDeps(simple)
+function _M:checkDeps(simple, ignore_special)
 	local talents = ""
 	local stats_ok = true
 
@@ -263,7 +263,7 @@ function _M:checkDeps(simple)
 		checked[t_id] = true
 
 		local t = self.actor:getTalentFromId(t_id)
-		local ok, reason = self.actor:canLearnTalent(t, 0)
+		local ok, reason = self.actor:canLearnTalent(t, 0, ignore_special)
 		if not ok and (self.actor:knowTalent(t) or force) then talents = talents.."\n#GOLD##{bold}#    - "..t.name.."#{normal}##LAST#("..reason..")" end
 		if reason == "not enough stat" then
 			stats_ok = false
@@ -335,7 +335,7 @@ function _M:learnTalent(t_id, v)
 		self.actor:unlearnTalent(t_id, nil, true, {no_unlearn=true})
 		self.talents_changed[t_id] = true
 		local _, reason = self.actor:canLearnTalent(t, 0)
-		local ok, dep_miss, stats_ok = self:checkDeps()
+		local ok, dep_miss, stats_ok = self:checkDeps(nil, true)
 		self.actor:learnTalent(t_id, true, nil, {no_unlearn=true})
 		if ok or reason == "not enough stat" or not stats_ok then
 			self.actor:unlearnTalent(t_id)
@@ -398,7 +398,7 @@ function _M:learnType(tt, v)
 			self.talent_types_learned[tt][2] = nil
 		else
 			self.actor:unlearnTalentType(tt)
-			local ok, dep_miss = self:checkDeps()
+			local ok, dep_miss = self:checkDeps(nil, true)
 			if ok then
 				self.actor.unused_talents_types = self.actor.unused_talents_types + 1
 				self.new_talents_changed = true
diff --git a/game/modules/tome/dialogs/LorePopup.lua b/game/modules/tome/dialogs/LorePopup.lua
index d0179d944d9b73891f54a6921696984ff33ba967..43a9fd7efd63802dc65eedb0117191da8c91b572 100644
--- a/game/modules/tome/dialogs/LorePopup.lua
+++ b/game/modules/tome/dialogs/LorePopup.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -104,4 +104,4 @@ function _M:init(l, w, force_height)
 	game:playSound("actions/read")
 	
 	game.tooltip.inhibited = true
-end
\ No newline at end of file
+end
diff --git a/game/modules/tome/dialogs/MapMenu.lua b/game/modules/tome/dialogs/MapMenu.lua
index 3aa86c92611377e8f53352a1425d7e415f6ad861..8e3404e6a134d52be09bb317f832725b894646d3 100644
--- a/game/modules/tome/dialogs/MapMenu.lua
+++ b/game/modules/tome/dialogs/MapMenu.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -138,7 +138,8 @@ function _M:generateList()
 	if a and not self.on_player and game.party:canControl(a, false) then list[#list+1] = {name="Control", action="control", color=colors.simple(colors.TEAL), actor=a} end
 	if a and not self.on_player and game.party:canOrder(a, false) then list[#list+1] = {name="Give order", action="order", color=colors.simple(colors.TEAL), actor=a} end
 	if a and not self.on_player and config.settings.cheat then list[#list+1] = {name="Target player", action="target-player", color=colors.simple(colors.RED), actor=a} end
-	if a and config.settings.cheat then list[#list+1] = {name="Lua inspect", action="debug-inspect", color=colors.simple(colors.LIGHT_BLUE), actor=a} end
+	if a and config.settings.cheat then list[#list+1] = {name="Lua inspect [Actor]", action="debug-inspect", color=colors.simple(colors.LIGHT_BLUE), actor=a} end
+	if g and config.settings.cheat then list[#list+1] = {name="Lua inspect [Terrain]", action="debug-inspect", color=colors.simple(colors.LIGHT_BLUE), actor=g} end
 	if a and config.settings.cheat then list[#list+1] = {name="Show inventory", action="debug-inventory", color=colors.simple(colors.YELLOW), actor=a} end
 	if self.on_player then list[#list+1] = {name="Rest a while", action="rest", color=colors.simple(colors.ANTIQUE_WHITE)} end
 	if self.on_player then list[#list+1] = {name="Auto-explore", action="autoexplore", color=colors.simple(colors.ANTIQUE_WHITE)} end
diff --git a/game/modules/tome/dialogs/PartyOrder.lua b/game/modules/tome/dialogs/PartyOrder.lua
index 9f8fc2c12fd5b11e7202745f2dade4d70147e039..fd0ee55ee10c732eb834a8a45ad47f7a8623af60 100644
--- a/game/modules/tome/dialogs/PartyOrder.lua
+++ b/game/modules/tome/dialogs/PartyOrder.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/PartyRewardSelector.lua b/game/modules/tome/dialogs/PartyRewardSelector.lua
index 1c84a6564f34d31ad6820406db1e5650bfb9efde..ea21c86cdab4e07297dad996db14c5690f0656db 100644
--- a/game/modules/tome/dialogs/PartyRewardSelector.lua
+++ b/game/modules/tome/dialogs/PartyRewardSelector.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/PartySelect.lua b/game/modules/tome/dialogs/PartySelect.lua
index df76b083fc34c899753dd2cdc56bfc71ab8e4b71..a9a81abec4fdac6b255da901487ab93ea9f89fbf 100644
--- a/game/modules/tome/dialogs/PartySelect.lua
+++ b/game/modules/tome/dialogs/PartySelect.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/PartySendItem.lua b/game/modules/tome/dialogs/PartySendItem.lua
index 82dfbd72b33ca924b5be9b0f19e9fd467f92244b..5bc08fe2bbafd159cb3a73d18475357c181867b3 100644
--- a/game/modules/tome/dialogs/PartySendItem.lua
+++ b/game/modules/tome/dialogs/PartySendItem.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/SentientWeapon.lua b/game/modules/tome/dialogs/SentientWeapon.lua
index e0be32a18653704e8aa8290cef50f0d1d3d8a464..f221283bcd5be86f1fcd07d8e1b2a292479abc0c 100644
--- a/game/modules/tome/dialogs/SentientWeapon.lua
+++ b/game/modules/tome/dialogs/SentientWeapon.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowAchievements.lua b/game/modules/tome/dialogs/ShowAchievements.lua
index c8f128d2566322bb77f49b1439c0db49a0eaa53d..47e9f8f517e7790274e7cfc8f432c8a40ab116ab 100644
--- a/game/modules/tome/dialogs/ShowAchievements.lua
+++ b/game/modules/tome/dialogs/ShowAchievements.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowChatLog.lua b/game/modules/tome/dialogs/ShowChatLog.lua
index e2739242be3efdd3cd4ffbdcd7bef9f37799b39a..cbb4ff79bfa2d64e572483853078698c6016fbf8 100644
--- a/game/modules/tome/dialogs/ShowChatLog.lua
+++ b/game/modules/tome/dialogs/ShowChatLog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowEquipInven.lua b/game/modules/tome/dialogs/ShowEquipInven.lua
index bcdc922ffc6eb1823a392d0f8bdfbe99e1b565b8..b913a1819f5cdff3fc1370aeb61d8cb2e0920eaa 100644
--- a/game/modules/tome/dialogs/ShowEquipInven.lua
+++ b/game/modules/tome/dialogs/ShowEquipInven.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowEquipment.lua b/game/modules/tome/dialogs/ShowEquipment.lua
index 28047196b407f0e8c5da406c03b48d2c47d18ecf..ec8b8d397c85f478261aecffbad50ce0601a737a 100644
--- a/game/modules/tome/dialogs/ShowEquipment.lua
+++ b/game/modules/tome/dialogs/ShowEquipment.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowIngredients.lua b/game/modules/tome/dialogs/ShowIngredients.lua
index 10e64ce198f14dfaf0b3f5e15f317333e2ee8a5b..88584c648419f0c99bec11df44e5c8031d3dfafb 100644
--- a/game/modules/tome/dialogs/ShowIngredients.lua
+++ b/game/modules/tome/dialogs/ShowIngredients.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowInventory.lua b/game/modules/tome/dialogs/ShowInventory.lua
index 21b89d41c4686610353901d94003d7282123c830..83ed5c301e2e7db58187f182485cc4d916a3c8c5 100644
--- a/game/modules/tome/dialogs/ShowInventory.lua
+++ b/game/modules/tome/dialogs/ShowInventory.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowLore.lua b/game/modules/tome/dialogs/ShowLore.lua
index 32204e4e8424283ffd6380c955696a33787a0a52..be0df5e30a8b652f2b5840e2216df94c830ddd60 100644
--- a/game/modules/tome/dialogs/ShowLore.lua
+++ b/game/modules/tome/dialogs/ShowLore.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowMap.lua b/game/modules/tome/dialogs/ShowMap.lua
index d7f4669d5009a80d82486ea55b43dc78d41643ca..c3b5b711cc7753f5b36f55950fc78a62882543e3 100644
--- a/game/modules/tome/dialogs/ShowMap.lua
+++ b/game/modules/tome/dialogs/ShowMap.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowPickupFloor.lua b/game/modules/tome/dialogs/ShowPickupFloor.lua
index e88800a7dba0a61b5398c3959b5cb3379e2f3008..1f83752c64c3912c0416ed1277f3d053a76bc8a0 100644
--- a/game/modules/tome/dialogs/ShowPickupFloor.lua
+++ b/game/modules/tome/dialogs/ShowPickupFloor.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/ShowStore.lua b/game/modules/tome/dialogs/ShowStore.lua
index 9aa1d7a95cc284891712000a77eea188bcd4c5ef..4af0d3e61d8db0c8e1f45099cad3d9b22ef04607 100644
--- a/game/modules/tome/dialogs/ShowStore.lua
+++ b/game/modules/tome/dialogs/ShowStore.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -37,7 +37,7 @@ function _M:init(title, store_inven, actor_inven, store_filter, actor_filter, ac
 	self.actor_filter = actor_filter
 	self.actor_actor = actor_actor
 	self.base_title = title or "Store"
-	Dialog.init(self, self:getStoreTitle(), math.max(800, game.w * 0.8), math.max(600, game.h * 0.8))
+	Dialog.init(self, self:getStoreTitle(), game.w * 0.8, game.h * 0.8)
 
 	if store_actor.faction then
 		local i = Map.tiles:loadImage("faction/"..store_actor.faction..".png")
diff --git a/game/modules/tome/dialogs/UberTalent.lua b/game/modules/tome/dialogs/UberTalent.lua
index 85b56ad63c52058602c54c358a69558e9997f04d..67c0402c9349ddbe7d9da2549eae9cc38f4bdf49 100644
--- a/game/modules/tome/dialogs/UberTalent.lua
+++ b/game/modules/tome/dialogs/UberTalent.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/UnlockDialog.lua b/game/modules/tome/dialogs/UnlockDialog.lua
index 393aaf8fddd9e0d93aeccfdd3d443901b393cbd1..c865ae7d061675590550a2514c8141a0d6a053d4 100644
--- a/game/modules/tome/dialogs/UnlockDialog.lua
+++ b/game/modules/tome/dialogs/UnlockDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/UseItemDialog.lua b/game/modules/tome/dialogs/UseItemDialog.lua
index dbcbbd58900ee3481986009fcc6746d6ce1a5216..e97da2641b7735d3244c003eae1cbeaaad4584f7 100644
--- a/game/modules/tome/dialogs/UseItemDialog.lua
+++ b/game/modules/tome/dialogs/UseItemDialog.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/UseTalents.lua b/game/modules/tome/dialogs/UseTalents.lua
index 559b30bf46ddc2bcd4da6b747d90d0300fe467b1..9e8deed486bdcb923ea91c364a9d62b8b0fb2f10 100644
--- a/game/modules/tome/dialogs/UseTalents.lua
+++ b/game/modules/tome/dialogs/UseTalents.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/debug/AlterFaction.lua b/game/modules/tome/dialogs/debug/AlterFaction.lua
index 2a2dccffbefa5deea610d4b86815f859a701bf39..78fe6a6f0ac26d30a9a61df70264187970e82bf8 100644
--- a/game/modules/tome/dialogs/debug/AlterFaction.lua
+++ b/game/modules/tome/dialogs/debug/AlterFaction.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/debug/ChangeZone.lua b/game/modules/tome/dialogs/debug/ChangeZone.lua
index f705befc5e201d40e6a9e82d3bfb23181312649d..d4b178c33420378e63b8b2ae5ddfafecada28c68 100644
--- a/game/modules/tome/dialogs/debug/ChangeZone.lua
+++ b/game/modules/tome/dialogs/debug/ChangeZone.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -64,14 +64,14 @@ end
 function _M:generateList()
 	local list = {}
 
-	local function parse(base, add)
+	local function parse(base, add, add_simple)
 		for i, dir in ipairs(fs.list(base.."/zones/")) do
 			local f = loadfile(base.."/zones/"..dir.."/zone.lua")
 			if f then
 				setfenv(f, setmetatable({}, {__index=_G}))
 				local ok, z = pcall(f)
 				if ok then
-					list[#list+1] = {name=z.name, zone=add..dir, min=1, max=z.max_level}
+					list[#list+1] = {name=z.name..(add_simple and " ["..add_simple.."]" or ""), zone=add..dir, min=1, max=z.max_level}
 				end
 			end
 		end
@@ -81,7 +81,7 @@ function _M:generateList()
 	for i, dir in ipairs(fs.list("/")) do
 		local _, _, addon = dir:find("^data%-(.+)$")
 		if addon then
-			parse("/"..dir, addon.."+")
+			parse("/"..dir, addon.."+", addon)
 		end
 	end
 
diff --git a/game/modules/tome/dialogs/debug/CreateItem.lua b/game/modules/tome/dialogs/debug/CreateItem.lua
index 6c1ff9d37d48e349c9c0dbbc2997a3248af09ae9..10fbe30de9d5af9a826e9ed104319ef9b66c7820 100644
--- a/game/modules/tome/dialogs/debug/CreateItem.lua
+++ b/game/modules/tome/dialogs/debug/CreateItem.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/debug/CreateTrap.lua b/game/modules/tome/dialogs/debug/CreateTrap.lua
index a19a1df9cb600daa91d202e8a4aa9aeb6f9f7771..d6113daeac2ff2c945c2132f138150536de9c229 100644
--- a/game/modules/tome/dialogs/debug/CreateTrap.lua
+++ b/game/modules/tome/dialogs/debug/CreateTrap.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/debug/DebugMain.lua b/game/modules/tome/dialogs/debug/DebugMain.lua
index beb81234b37f460cb40cdf1ddaabbc9a5d899f7e..56dd41847e3108a52db34ce5ada47d734ae415c2 100644
--- a/game/modules/tome/dialogs/debug/DebugMain.lua
+++ b/game/modules/tome/dialogs/debug/DebugMain.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/debug/GrantQuest.lua b/game/modules/tome/dialogs/debug/GrantQuest.lua
index 73487b431eb5204f90c65976d17ab20c558f2eb1..acc85b25a990fd6ce08b8db23331e4e0cb5691d6 100644
--- a/game/modules/tome/dialogs/debug/GrantQuest.lua
+++ b/game/modules/tome/dialogs/debug/GrantQuest.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -69,12 +69,23 @@ end
 function _M:generateList()
 	local list = {}
 
-	for i, file in ipairs(fs.list("/data/quests/")) do
-		if file:find(".lua$") then
-			local n = file:gsub(".lua$", "")
-			list[#list+1] = {name=n, quest=n, hasit=game.player:hasQuest(n)}
+	local function parse(base, add, add_simple)
+		for i, file in ipairs(fs.list(base.."/quests/")) do
+			if file:find(".lua$") then
+				local n = file:gsub(".lua$", "")
+				list[#list+1] = {name=n..(add_simple and " ["..add_simple.."]" or ""), quest=add..n, hasit=game.player:hasQuest(n)}
+			end
 		end
 	end
+
+	parse("/data", "")
+	for i, dir in ipairs(fs.list("/")) do
+		local _, _, addon = dir:find("^data%-(.+)$")
+		if addon then
+			parse("/"..dir, addon.."+", addon)
+		end
+	end
+
 	table.sort(list, function(a,b) return a.name < b.name end)
 
 	local chars = {}
diff --git a/game/modules/tome/dialogs/debug/SummonCreature.lua b/game/modules/tome/dialogs/debug/SummonCreature.lua
index 082bbacc0a61b8b59e542fec10677ccb2fd25eb9..97e31e7b092c2a21d313a01368ba95d0eb4c1d75 100644
--- a/game/modules/tome/dialogs/debug/SummonCreature.lua
+++ b/game/modules/tome/dialogs/debug/SummonCreature.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/elements/TalentGrid.lua b/game/modules/tome/dialogs/elements/TalentGrid.lua
index 1133e7ddeadf2ef81a4acc234ce3b1488b578e26..3270cd87369394a12740b97dee1d7be47944ff91 100644
--- a/game/modules/tome/dialogs/elements/TalentGrid.lua
+++ b/game/modules/tome/dialogs/elements/TalentGrid.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/elements/TalentTrees.lua b/game/modules/tome/dialogs/elements/TalentTrees.lua
index 726a0c6ceccb1be68b08b1c70af83b072e583013..467de25747f33f359430d7f22880863c8fdd9f3d 100644
--- a/game/modules/tome/dialogs/elements/TalentTrees.lua
+++ b/game/modules/tome/dialogs/elements/TalentTrees.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/orders/Behavior.lua b/game/modules/tome/dialogs/orders/Behavior.lua
index 0cc0a06aeac16fe1bbe1504f024f6c3493189f0f..028038b034539697e8201dfc5ffae37afc92dbb4 100644
--- a/game/modules/tome/dialogs/orders/Behavior.lua
+++ b/game/modules/tome/dialogs/orders/Behavior.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/dialogs/orders/Talents.lua b/game/modules/tome/dialogs/orders/Talents.lua
index aff63c1a23ed1e19eff74aca87c09f8f9f060ca0..b6e597471e76e689b72e6ddbd41e0deb9fc939de 100644
--- a/game/modules/tome/dialogs/orders/Talents.lua
+++ b/game/modules/tome/dialogs/orders/Talents.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/init.lua b/game/modules/tome/init.lua
index a7b35e7af99222bd43f6097a3e017ee4550d276e..47ad606e4883c9b5ea7d29ca03d46d279ecb4f97 100644
--- a/game/modules/tome/init.lua
+++ b/game/modules/tome/init.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -22,8 +22,8 @@ long_name = "Tales of Maj'Eyal: Age of Ascendancy"
 short_name = "tome"
 author = { "DarkGod", "darkgod@te4.org" }
 homepage = "http://te4.org/"
-version = {1,1,3}
-engine = {1,1,3,"te4"}
+version = {1,2,0}
+engine = {1,2,0,"te4"}
 description = [[
 Welcome to Maj'Eyal.
 
@@ -48,8 +48,12 @@ starter = "mod.load"
 
 -- List of additional team files required
 teams = {
+	-- Normal packaging
 	{ "#name#-#version#-music.team", "optional", "/" },
 	{ "#name#-#version#-gfx.team", "optional", "/" },
+	-- Steam packaging
+	{ "#name#-music.team", "optional", "/" },
+	{ "#name#-gfx.team", "optional", "/" },
 }
 
 show_funfacts = true
diff --git a/game/modules/tome/load.lua b/game/modules/tome/load.lua
index 8cb57124417e42f2450ce7dea4d5acd38366cc7b..82fd68c6dc3e6ac4fa03fdf1421418d76290cbd8 100644
--- a/game/modules/tome/load.lua
+++ b/game/modules/tome/load.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/modules/tome/resolvers.lua b/game/modules/tome/resolvers.lua
index d519a432af5fa5989ac76630cde8a8c4e71dab23..dae548d47f77fd5778a5fc7355a19f06f1e81726 100644
--- a/game/modules/tome/resolvers.lua
+++ b/game/modules/tome/resolvers.lua
@@ -1,5 +1,5 @@
 -- ToME - Tales of Maj'Eyal
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -658,12 +658,13 @@ local racials = {
 		T_RETCH = {last=30, base=0, every=4, max=5},
 	},
 }
+resolvers.racials_defs = racials
 
 function resolvers.racial(race)
 	return {__resolver="racial", race}
 end
 function resolvers.calc.racial(t, e)
-	if e.type ~= "humanoid" and e.type ~= "undead" then return end
+	if e.type ~= "humanoid" and e.type ~= "giant" and e.type ~= "undead" then return end
 	local race = t[1] or e.subtype
 	if not racials[race] then return end
 
diff --git a/game/profile-thread/Client.lua b/game/profile-thread/Client.lua
index 157a8b9656990ebea06b02bc58d315b5da25a593..a4930a60827b410aa14390aadc15f51930fc7513 100644
--- a/game/profile-thread/Client.lua
+++ b/game/profile-thread/Client.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
@@ -223,7 +223,7 @@ function _M:step()
 
 		-- Ping every minute, lest the server kills us
 		local time = os.time()
-		if time - self.last_ping > 60 then
+		if time - self.last_ping > 60 and self.sock then
 			self.last_ping = time
 			self:orderPing()
 		end
@@ -239,7 +239,7 @@ function _M:run()
 		while order do self:handleOrder(order) order = cprofile.popOrder() end
 
 		self:step()
-		core.game.sleep(20)
+		core.game.sleep(10)
 --	end
 end
 
@@ -334,10 +334,13 @@ function _M:orderSetConfigsBatch(o)
 
 		print("[PROFILE THREAD] flushing CSETs")
 
-		local data = zlib.compress(table.serialize(self.setConfigsBatching))
-		self:command("FSET", data:len())
-		if self:read("200") then self.sock:send(data) end
-
+		if #self.setConfigsBatching <= 0 then
+			print("[PROFILE THREAD] flushing CSETs ignored, empty dataset")
+		else
+			local data = zlib.compress(table.serialize(self.setConfigsBatching))
+			self:command("FSET", data:len())
+			if self:read("200") then self.sock:send(data) end
+		end
 		self.setConfigsBatching = nil
 	else
 		print("[PROFILE THREAD] batching CSETs")
@@ -384,6 +387,22 @@ function _M:orderCheckAddonHash(o)
 	end
 end
 
+function _M:orderCheckBatchHash(o)
+	if not self.sock then cprofile.pushEvent("e='CheckBatchHash' ok=false not_connected=true") end
+	local data = table.serialize(o.data)
+	self:command("BMD5", #data)
+	if self:read("200") then
+		self.sock:send(data)
+		if self:read("200") then		
+			cprofile.pushEvent("e='CheckBatchHash' ok=true")
+		else
+			cprofile.pushEvent(("e='CheckBatchHash' ok=false error=%q"):format(self.last_error))
+		end
+	else
+		cprofile.pushEvent(("e='CheckBatchHash' ok=false error=%q"):format("unknown error"))
+	end
+end
+
 function _M:orderRegisterNewCharacter(o)
 	self:command("CHAR", "NEW", o.module)
 	if self:read("200") then
diff --git a/game/profile-thread/UserChat.lua b/game/profile-thread/UserChat.lua
index 37d928b808f1d434a3808edb44a88fe4b14e2bd7..8d437909471d5f34dd3923294b370d7cab80be83 100644
--- a/game/profile-thread/UserChat.lua
+++ b/game/profile-thread/UserChat.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/profile-thread/init.lua b/game/profile-thread/init.lua
index 0227ee2a7a82829096477a1a4c47143530d4f7a0..785fdbbe9ee344dfa3cfbd60a5495a9a364d30d6 100644
--- a/game/profile-thread/init.lua
+++ b/game/profile-thread/init.lua
@@ -1,5 +1,5 @@
 -- TE4 - T-Engine 4
--- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+-- Copyright (C) 2009 - 2014 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
diff --git a/game/thirdparty/slt2.lua b/game/thirdparty/slt2.lua
new file mode 100644
index 0000000000000000000000000000000000000000..e28511b3b05e67bd21a58bf2a70e728636ca4ddf
--- /dev/null
+++ b/game/thirdparty/slt2.lua
@@ -0,0 +1,175 @@
+--[[
+-- slt2 - Simple Lua Template 2
+--
+-- Project page: https://github.com/henix/slt2
+--
+-- @License
+-- MIT License
+--]]
+
+local slt2 = {}
+
+-- a tree fold on inclusion tree
+-- @param init_func: must return a new value when called
+local function include_fold(template, start_tag, end_tag, fold_func, init_func)
+	local result = init_func()
+
+	start_tag = start_tag or '<?'
+	end_tag = end_tag or '?>'
+	local start_tag_inc = start_tag..'include:'
+
+	local start1, end1 = string.find(template, start_tag_inc, 1, true)
+	local start2 = nil
+	local end2 = 0
+
+	while start1 ~= nil do
+		if start1 > end2 + 1 then -- for beginning part of file
+			result = fold_func(result, string.sub(template, end2 + 1, start1 - 1))
+		end
+		start2, end2 = string.find(template, end_tag, end1 + 1, true)
+		assert(start2, 'end tag "'..end_tag..'" missing')
+		do -- recursively include the file
+			local filename = assert(loadstring('return '..string.sub(template, end1 + 1, start2 - 1)))()
+			assert(filename)
+			local fin = assert(io.open(filename))
+			-- TODO: detect cyclic inclusion?
+			result = fold_func(result, include_fold(fin:read('*a'), start_tag, end_tag, fold_func, init_func), filename)
+			fin:close()
+		end
+		start1, end1 = string.find(template, start_tag_inc, end2 + 1, true)
+	end
+	result = fold_func(result, string.sub(template, end2 + 1))
+	return result
+end
+
+-- preprocess included files
+-- @return string
+function slt2.precompile(template, start_tag, end_tag)
+	return table.concat(include_fold(template, start_tag, end_tag, function(acc, v)
+		if type(v) == 'string' then
+			table.insert(acc, v)
+		elseif type(v) == 'table' then
+			table.insert(acc, table.concat(v))
+		else
+			error('Unknown type: '..type(v))
+		end
+		return acc
+	end, function() return {} end))
+end
+
+-- unique a list, preserve order
+local function stable_uniq(t)
+	local existed = {}
+	local res = {}
+	for _, v in ipairs(t) do
+		if not existed[v] then
+			table.insert(res, v)
+			existed[v] = true
+		end
+	end
+	return res
+end
+
+-- @return { string }
+function slt2.get_dependency(template, start_tag, end_tag)
+	return stable_uniq(include_fold(template, start_tag, end_tag, function(acc, v, name)
+		if type(v) == 'string' then
+		elseif type(v) == 'table' then
+			if name ~= nil then
+				table.insert(acc, name)
+			end
+			for _, subname in ipairs(v) do
+				table.insert(acc, subname)
+			end
+		else
+			error('Unknown type: '..type(v))
+		end
+		return acc
+	end, function() return {} end))
+end
+
+-- @return { name = string, code = string / function}
+function slt2.loadstring(template, start_tag, end_tag, tmpl_name)
+	-- compile it to lua code
+	local lua_code = {}
+
+	start_tag = start_tag or '<?'
+	end_tag = end_tag or '?>'
+
+	local output_func = "coroutine.yield"
+
+	template = slt2.precompile(template, start_tag, end_tag)
+
+	local start1, end1 = string.find(template, start_tag, 1, true)
+	local start2 = nil
+	local end2 = 0
+
+	local cEqual = string.byte('=', 1)
+
+	while start1 ~= nil do
+		if start1 > end2 + 1 then
+			table.insert(lua_code, output_func..'('..string.format("%q", string.sub(template, end2 + 1, start1 - 1))..')')
+		end
+		start2, end2 = string.find(template, end_tag, end1 + 1, true)
+		assert(start2, 'end_tag "'..end_tag..'" missing')
+		if string.byte(template, end1 + 1) == cEqual then
+			table.insert(lua_code, output_func..'('..string.sub(template, end1 + 2, start2 - 1)..')')
+		else
+			table.insert(lua_code, string.sub(template, end1 + 1, start2 - 1))
+		end
+		start1, end1 = string.find(template, start_tag, end2 + 1, true)
+	end
+	table.insert(lua_code, output_func..'('..string.format("%q", string.sub(template, end2 + 1))..')')
+
+	local ret = { name = tmpl_name or '=(slt2.loadstring)' }
+	if setfenv == nil then -- lua 5.2
+		ret.code = table.concat(lua_code, '\n')
+	else -- lua 5.1
+		ret.code = assert(loadstring(table.concat(lua_code, '\n'), ret.name))
+	end
+	return ret
+end
+
+-- @return { name = string, code = string / function }
+function slt2.loadfile(filename, start_tag, end_tag)
+	local fin = assert(io.open(filename))
+	local all = fin:read('*a')
+	fin:close()
+	return slt2.loadstring(all, start_tag, end_tag, filename)
+end
+
+local mt52 = { __index = _ENV }
+local mt51 = { __index = _G }
+
+-- @return a coroutine function
+function slt2.render_co(t, env)
+	local f
+	if setfenv == nil then -- lua 5.2
+		if env ~= nil then
+			setmetatable(env, mt52)
+		end
+		f = assert(load(t.code, t.name, 't', env or _ENV))
+	else -- lua 5.1
+		if env ~= nil then
+			setmetatable(env, mt51)
+		end
+		f = setfenv(t.code, env or _G)
+	end
+	return f
+end
+
+-- @return string
+function slt2.render(t, env)
+	local result = {}
+	local co = coroutine.create(slt2.render_co(t, env))
+	while coroutine.status(co) ~= 'dead' do
+		local ok, chunk = coroutine.resume(co)
+		if not ok then
+			error(chunk)
+		end
+		table.insert(result, chunk)
+	end
+	return table.concat(result)
+end
+
+return slt2
diff --git a/game/thirdparty/tween.LICENSE b/game/thirdparty/tween.LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..6214aa85eb7adcea03912a33cf90bc3620198504
--- /dev/null
+++ b/game/thirdparty/tween.LICENSE
@@ -0,0 +1,82 @@
+Copyright (c) 2011, Enrique García Cota
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+  1. Redistributions of source code must retain the above copyright notice, 
+     this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright notice, 
+     this list of conditions and the following disclaimer in the documentation 
+     and/or other materials provided with the distribution.
+  3. Neither the name of tween.lua nor the names of its contributors 
+     may be used to endorse or promote products derived from this software 
+     without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+=====================================================================================
+
+The easing functions were taken from emmanuelOga's easing functions
+(https://github.com/EmmanuelOga/easing).
+
+Here's its license:
+
+Tweener authors,
+Yuichi Tateno,
+Emmanuel Oga
+
+The MIT License
+--------
+Copyright (c) 2010, Emmanuel Oga.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=====================================================================================
+
+Emmanuel Oga's functions, in turn, were adapted from Penner's Easing Equations 
+and http://code.google.com/p/tweener/ (jstweener javascript version)
+
+Disclaimer for Robert Penner's Easing Equations license:
+
+TERMS OF USE - EASING EQUATIONS
+
+Open source under the BSD License.
+
+Copyright © 2001 Robert Penner
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/game/thirdparty/tween.lua b/game/thirdparty/tween.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d393c639be3ba5ba8016e703a047376ca25c9700
--- /dev/null
+++ b/game/thirdparty/tween.lua
@@ -0,0 +1,380 @@
+-----------------------------------------------------------------------------------------------------------------------
+-- tween.lua - v1.0.1 (2012-02)
+-- Enrique García Cota - enrique.garcia.cota [AT] gmail [DOT] com
+-- tweening functions for lua
+-- inspired by jquery's animate function
+-----------------------------------------------------------------------------------------------------------------------
+local tween = {}
+
+-- private stuff
+
+local tweens -- initialized by calling to tween.stopAll()
+
+local function isCallable(f)
+  local tf = type(f)
+  if tf == 'function' then return true end
+  if tf == 'table' then
+    local mt = getmetatable(f)
+    return (type(mt) == 'table' and type(mt.__call) == 'function')
+  end
+  return false
+end
+
+local function copyTables(destination, keysTable, valuesTable)
+  valuesTable = valuesTable or keysTable
+  local mt = getmetatable(keysTable)
+  if mt and getmetatable(destination) == nil then
+    setmetatable(destination, mt)
+  end
+  for k,v in pairs(keysTable) do
+    if type(v) == 'table' then
+      destination[k] = copyTables({}, v, valuesTable[k])
+    else
+      destination[k] = valuesTable[k]
+    end
+  end
+  return destination
+end
+
+local function checkSubjectAndTargetRecursively(subject, target, path)
+  path = path or {}
+  local targetType, newPath
+  for k,targetValue in pairs(target) do
+    targetType, newPath = type(targetValue), copyTables({}, path)
+    table.insert(newPath, tostring(k))
+    if targetType == 'number' then
+      assert(type(subject[k]) == 'number', "Parameter '" .. table.concat(newPath,'/') .. "' is missing from subject or isn't a number")
+    elseif targetType == 'table' then
+      checkSubjectAndTargetRecursively(subject[k], targetValue, newPath)
+    else
+      assert(targetType == 'number', "Parameter '" .. table.concat(newPath,'/') .. "' must be a number or table of numbers")
+    end
+  end
+end
+
+local function checkStartParams(time, subject, target, easing, callback)
+  assert(type(time) == 'number' and time > 0, "time must be a positive number. Was " .. tostring(time))
+  local tsubject = type(subject)
+  assert(tsubject == 'table' or tsubject == 'userdata', "subject must be a table or userdata. Was " .. tostring(subject))
+  assert(type(target)== 'table', "target must be a table. Was " .. tostring(target))
+  assert(isCallable(easing), "easing must be a function or functable. Was " .. tostring(easing))
+  assert(callback==nil or isCallable(callback), "callback must be nil, a function or functable. Was " .. tostring(time))
+  checkSubjectAndTargetRecursively(subject, target)
+
+end
+
+local function getEasingFunction(easing)
+  easing = easing or "linear"
+  if type(easing) == 'string' then
+    local name = easing
+    easing = tween.easing[name]
+    assert(type(easing) == 'function', "The easing function name '" .. name .. "' is invalid")
+  end
+  return easing
+end
+
+local function newTween(time, subject, target, easing, callback, args)
+  local self = {
+    time = time,
+    subject = subject,
+    target = copyTables({},target),
+    easing = easing,
+    callback = callback,
+    args = args,
+    initial = copyTables({}, target, subject),
+    running = 0
+  }
+  tweens[self] = self
+  return self
+end
+
+local function easeWithTween(self, subject, target, initial)
+  local t,b,c,d
+  for k,v in pairs(target) do
+    if type(v)=='table' then
+      easeWithTween(self, subject[k], v, initial[k])
+    else
+      t,b,c,d = self.running, initial[k], v - initial[k], self.time
+      subject[k] = self.easing(t,b,c,d)
+    end
+  end
+end
+
+local function updateTween(self, dt)
+  self.running = self.running + dt
+  easeWithTween(self, self.subject, self.target, self.initial)
+end
+
+local function hasExpiredTween(self)
+  return self.running >= self.time
+end
+
+local function finishTween(self)
+  copyTables(self.subject, self.target)
+  if self.callback then self.callback(unpack(self.args)) end
+  tween.stop(self)
+end
+
+local function resetTween(self)
+  copyTables(self.subject, self.initial)
+end
+
+-- easing
+
+-- Adapted from https://github.com/EmmanuelOga/easing. See LICENSE.txt for credits.
+-- For all easing functions:
+-- t = time == how much time has to pass for the tweening to complete
+-- b = begin == starting property value
+-- c = change == ending - beginning
+-- d = duration == running time. How much time has passed *right now*
+
+local pow, sin, cos, pi, sqrt, abs, asin = math.pow, math.sin, math.cos, math.pi, math.sqrt, math.abs, math.asin
+
+-- linear
+local function linear(t, b, c, d) return c * t / d + b end
+
+-- quad
+local function inQuad(t, b, c, d) return c * pow(t / d, 2) + b end
+local function outQuad(t, b, c, d)
+  t = t / d
+  return -c * t * (t - 2) + b
+end
+local function inOutQuad(t, b, c, d)
+  t = t / d * 2
+  if t < 1 then return c / 2 * pow(t, 2) + b end
+  return -c / 2 * ((t - 1) * (t - 3) - 1) + b
+end
+local function outInQuad(t, b, c, d)
+  if t < d / 2 then return outQuad(t * 2, b, c / 2, d) end
+  return inQuad((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+-- cubic
+local function inCubic (t, b, c, d) return c * pow(t / d, 3) + b end
+local function outCubic(t, b, c, d) return c * (pow(t / d - 1, 3) + 1) + b end
+local function inOutCubic(t, b, c, d)
+  t = t / d * 2
+  if t < 1 then return c / 2 * t * t * t + b end
+  t = t - 2
+  return c / 2 * (t * t * t + 2) + b
+end
+local function outInCubic(t, b, c, d)
+  if t < d / 2 then return outCubic(t * 2, b, c / 2, d) end
+  return inCubic((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+-- quart
+local function inQuart(t, b, c, d) return c * pow(t / d, 4) + b end
+local function outQuart(t, b, c, d) return -c * (pow(t / d - 1, 4) - 1) + b end
+local function inOutQuart(t, b, c, d)
+  t = t / d * 2
+  if t < 1 then return c / 2 * pow(t, 4) + b end
+  return -c / 2 * (pow(t - 2, 4) - 2) + b
+end
+local function outInQuart(t, b, c, d)
+  if t < d / 2 then return outQuart(t * 2, b, c / 2, d) end
+  return inQuart((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+-- quint
+local function inQuint(t, b, c, d) return c * pow(t / d, 5) + b end
+local function outQuint(t, b, c, d) return c * (pow(t / d - 1, 5) + 1) + b end
+local function inOutQuint(t, b, c, d)
+  t = t / d * 2
+  if t < 1 then return c / 2 * pow(t, 5) + b end
+  return c / 2 * (pow(t - 2, 5) + 2) + b
+end
+local function outInQuint(t, b, c, d)
+  if t < d / 2 then return outQuint(t * 2, b, c / 2, d) end
+  return inQuint((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+-- sine
+local function inSine(t, b, c, d) return -c * cos(t / d * (pi / 2)) + c + b end
+local function outSine(t, b, c, d) return c * sin(t / d * (pi / 2)) + b end
+local function inOutSine(t, b, c, d) return -c / 2 * (cos(pi * t / d) - 1) + b end
+local function outInSine(t, b, c, d)
+  if t < d / 2 then return outSine(t * 2, b, c / 2, d) end
+  return inSine((t * 2) -d, b + c / 2, c / 2, d)
+end
+
+-- expo
+local function inExpo(t, b, c, d)
+  if t == 0 then return b end
+  return c * pow(2, 10 * (t / d - 1)) + b - c * 0.001
+end
+local function outExpo(t, b, c, d)
+  if t == d then return b + c end
+  return c * 1.001 * (-pow(2, -10 * t / d) + 1) + b
+end
+local function inOutExpo(t, b, c, d)
+  if t == 0 then return b end
+  if t == d then return b + c end
+  t = t / d * 2
+  if t < 1 then return c / 2 * pow(2, 10 * (t - 1)) + b - c * 0.0005 end
+  return c / 2 * 1.0005 * (-pow(2, -10 * (t - 1)) + 2) + b
+end
+local function outInExpo(t, b, c, d)
+  if t < d / 2 then return outExpo(t * 2, b, c / 2, d) end
+  return inExpo((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+-- circ
+local function inCirc(t, b, c, d) return(-c * (sqrt(1 - pow(t / d, 2)) - 1) + b) end
+local function outCirc(t, b, c, d)  return(c * sqrt(1 - pow(t / d - 1, 2)) + b) end
+local function inOutCirc(t, b, c, d)
+  t = t / d * 2
+  if t < 1 then return -c / 2 * (sqrt(1 - t * t) - 1) + b end
+  t = t - 2
+  return c / 2 * (sqrt(1 - t * t) + 1) + b
+end
+local function outInCirc(t, b, c, d)
+  if t < d / 2 then return outCirc(t * 2, b, c / 2, d) end
+  return inCirc((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+-- elastic
+local function calculatePAS(p,a,c,d)
+  p, a = p or d * 0.3, a or 0
+  if a < abs(c) then return p, c, p / 4 end -- p, a, s
+  return p, a, p / (2 * pi) * asin(c/a) -- p,a,s
+end
+local function inElastic(t, b, c, d, a, p)
+  local s
+  if t == 0 then return b end
+  t = t / d
+  if t == 1  then return b + c end
+  p,a,s = calculatePAS(p,a,c,d)
+  t = t - 1
+  return -(a * pow(2, 10 * t) * sin((t * d - s) * (2 * pi) / p)) + b
+end
+local function outElastic(t, b, c, d, a, p)
+  local s
+  if t == 0 then return b end
+  t = t / d
+  if t == 1 then return b + c end
+  p,a,s = calculatePAS(p,a,c,d)
+  return a * pow(2, -10 * t) * sin((t * d - s) * (2 * pi) / p) + c + b
+end
+local function inOutElastic(t, b, c, d, a, p)
+  local s
+  if t == 0 then return b end
+  t = t / d * 2
+  if t == 2 then return b + c end
+  p,a,s = calculatePAS(p,a,c,d)
+  t = t - 1
+  if t < 0 then return -0.5 * (a * pow(2, 10 * t) * sin((t * d - s) * (2 * pi) / p)) + b end
+  return a * pow(2, -10 * t) * sin((t * d - s) * (2 * pi) / p ) * 0.5 + c + b
+end
+local function outInElastic(t, b, c, d, a, p)
+  if t < d / 2 then return outElastic(t * 2, b, c / 2, d, a, p) end
+  return inElastic((t * 2) - d, b + c / 2, c / 2, d, a, p)
+end
+
+-- back
+local function inBack(t, b, c, d, s)
+  s = s or 1.70158
+  t = t / d
+  return c * t * t * ((s + 1) * t - s) + b
+end
+local function outBack(t, b, c, d, s)
+  s = s or 1.70158
+  t = t / d - 1
+  return c * (t * t * ((s + 1) * t + s) + 1) + b
+end
+local function inOutBack(t, b, c, d, s)
+  s = (s or 1.70158) * 1.525
+  t = t / d * 2
+  if t < 1 then return c / 2 * (t * t * ((s + 1) * t - s)) + b end
+  t = t - 2
+  return c / 2 * (t * t * ((s + 1) * t + s) + 2) + b
+end
+local function outInBack(t, b, c, d, s)
+  if t < d / 2 then return outBack(t * 2, b, c / 2, d, s) end
+  return inBack((t * 2) - d, b + c / 2, c / 2, d, s)
+end
+
+-- bounce
+local function outBounce(t, b, c, d)
+  t = t / d
+  if t < 1 / 2.75 then return c * (7.5625 * t * t) + b end
+  if t < 2 / 2.75 then
+    t = t - (1.5 / 2.75)
+    return c * (7.5625 * t * t + 0.75) + b
+  elseif t < 2.5 / 2.75 then
+    t = t - (2.25 / 2.75)
+    return c * (7.5625 * t * t + 0.9375) + b
+  end
+  t = t - (2.625 / 2.75)
+  return c * (7.5625 * t * t + 0.984375) + b
+end
+local function inBounce(t, b, c, d) return c - outBounce(d - t, 0, c, d) + b end
+local function inOutBounce(t, b, c, d)
+  if t < d / 2 then return inBounce(t * 2, 0, c, d) * 0.5 + b end
+  return outBounce(t * 2 - d, 0, c, d) * 0.5 + c * .5 + b
+end
+local function outInBounce(t, b, c, d)
+  if t < d / 2 then return outBounce(t * 2, b, c / 2, d) end
+  return inBounce((t * 2) - d, b + c / 2, c / 2, d)
+end
+
+tween.easing = {
+  linear = linear,
+  inQuad    = inQuad,    outQuad    = outQuad,    inOutQuad    = inOutQuad,    outInQuad    = outInQuad,
+  inCubic   = inCubic,   outCubic   = outCubic,   inOutCubic   = inOutCubic,   outInCubic   = outInCubic,
+  inQuart   = inQuart,   outQuart   = outQuart,   inOutQuart   = inOutQuart,   outInQuart   = outInQuart,
+  inQuint   = inQuint,   outQuint   = outQuint,   inOutQuint   = inOutQuint,   outInQuint   = outInQuint,
+  inSine    = inSine,    outSine    = outSine,    inOutSine    = inOutSine,    outInSine    = outInSine,
+  inExpo    = inExpo,    outExpo    = outExpo,    inOutExpo    = inOutExpo,    outInExpo    = outInExpo,
+  inCirc    = inCirc,    outCirc    = outCirc,    inOutCirc    = inOutCirc,    outInCirc    = outInCirc,
+  inElastic = inElastic, outElastic = outElastic, inOutElastic = inOutElastic, outInElastic = outInElastic,
+  inBack    = inBack,    outBack    = outBack,    inOutBack    = inOutBack,    outInBack    = outInBack,
+  inBounce  = inBounce,  outBounce  = outBounce,  inOutBounce  = inOutBounce,  outInBounce  = outInBounce,
+}
+
+
+-- public functions
+
+function tween.start(time, subject, target, easing, callback, ...)
+  easing = getEasingFunction(easing)
+  checkStartParams(time, subject, target, easing, callback)
+  return newTween(time, subject, target, easing, callback, {...})
+end
+
+setmetatable(tween, { __call = function(t, ...) return tween.start(...) end })
+
+function tween.reset(id)
+  local tw = tweens[id]
+  if tw then
+    resetTween(tw)
+    tween.stop(tw)
+  end
+end
+
+function tween.resetAll(id)
+  for _,tw in pairs(tweens) do copyTables(tw.subject, tw.initial) end
+  tween.stopAll()
+end
+
+function tween.update(dt)
+  assert(type(dt) == 'number' and dt > 0, "dt must be a positive number")
+  local expired = {}
+  for _,t in pairs(tweens) do
+    updateTween(t, dt)
+    if hasExpiredTween(t) then table.insert(expired, t) end
+  end
+  for i=1, #expired do finishTween(expired[i]) end
+end
+
+function tween.stop(id)
+  if id~=nil then tweens[id]=nil end
+end
+
+function tween.stopAll()
+  tweens = {}
+end
+
+tween.stopAll()
+
+return tween
+
diff --git a/premake4.lua b/premake4.lua
index c1885561d2461959798ae19a889d34c22be8f1ab..24988916b3d00bfd01470ab4c4d02079dbd5bbb6 100644
--- a/premake4.lua
+++ b/premake4.lua
@@ -18,9 +18,18 @@ solution "TEngine"
 		"src/zlib",
 		"src/bzip2",
 		"src/web",
-		"/opt/SDL-2.0/include/SDL2",
-		"/usr/include/GL",
 	}
+	if _OPTIONS.wincross then
+		includedirs {
+			"/usr/i686-pc-mingw32/usr/include/",
+			"/usr/i686-pc-mingw32/usr/include/GL/",
+		}
+	else
+		includedirs {
+			"/opt/SDL-2.0/include/SDL2",
+			"/usr/include/GL",
+		}
+	end
 	if _OPTIONS.lua == "default" then includedirs{"src/lua"}
 	elseif _OPTIONS.lua == "jit2" then includedirs{"src/luajit2/src", "src/luajit2/dynasm",}
 	end
@@ -29,15 +38,34 @@ if _OPTIONS.steam then
 	dofile("steamworks/build/steam-def.lua")
 end
 
+configuration "bsd"
+	libdirs {
+		"/usr/local/lib",
+	}
+	includedirs {
+		"/usr/local/include",
+	}
+
+if _OPTIONS.wincross then
 configuration "windows"
 	libdirs {
-		"/c/code/SDL/lib",
+		"/Test/xcompile/local//lib",
 	}
 	includedirs {
+		"/Test/xcompile/local/include/SDL2",
+		"/Test/xcompile/local/include",
+	}
+else
+configuration "windows"
+ 	libdirs {
+		"/c/code/SDL/lib",
+ 	}
+ 	includedirs {
 		"/c/code/SDL/include/SDL2",
 		"/c/code/SDL/include",
 		"/c/mingw2/include/GL",
-	}
+ 	}
+end
 
 configuration "macosx"
 	buildoptions { "-isysroot /Developer/SDKs/MacOSX10.6.sdk", "-mmacosx-version-min=10.6" }
@@ -47,6 +75,7 @@ configuration "Debug"
 	defines { }
 	flags { "Symbols" }
 	buildoptions { "-ggdb" }
+	buildoptions { "-O3" }
 	targetdir "bin/Debug"
 	if _OPTIONS.luaassert then defines {"LUA_USE_APICHECK"} end
 	if _OPTIONS.pedantic then buildoptions { "-Wall" } end
diff --git a/src/core_lua.c b/src/core_lua.c
index efcbde6cf4aa949d41cdfdbbd4cd8aa5ab999f1d..b5047a9e433f5ef0fb0c25eb8772fc48a63e09c8 100644
--- a/src/core_lua.c
+++ b/src/core_lua.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
@@ -542,8 +542,28 @@ static int lua_check_error(lua_State *L)
 	return 1;
 }
 
+static char *reboot_message = NULL;
+static int lua_set_reboot_message(lua_State *L)
+{
+	const char *msg = luaL_checkstring(L, 1);
+	if (reboot_message) { free(reboot_message); }
+	reboot_message = strdup(msg);
+	return 0;
+}
+static int lua_get_reboot_message(lua_State *L)
+{
+	if (reboot_message) {
+		lua_pushstring(L, reboot_message);
+		free(reboot_message);
+		reboot_message = NULL;
+	} else lua_pushnil(L);
+	return 1;
+}
+
 static const struct luaL_Reg gamelib[] =
 {
+	{"setRebootMessage", lua_set_reboot_message},
+	{"getRebootMessage", lua_get_reboot_message},
 	{"reboot", lua_reboot_lua},
 	{"set_current_game", lua_set_current_game},
 	{"exit_engine", lua_exit_engine},
@@ -2605,23 +2625,6 @@ static int gl_fbo_toscreen(lua_State *L)
 		g = luaL_checknumber(L, 8);
 		b = luaL_checknumber(L, 9);
 		a = luaL_checknumber(L, 10);
-		GLfloat colors[4*4] = {
-			r, g, b, a,
-			r, g, b, a,
-			r, g, b, a,
-			r, g, b, a,
-		};
-		glColorPointer(4, GL_FLOAT, 0, colors);
-	}
-	else
-	{
-		GLfloat colors[4*4] = {
-			1, 1, 1, 1,
-			1, 1, 1, 1,
-			1, 1, 1, 1,
-			1, 1, 1, 1,
-		};
-		glColorPointer(4, GL_FLOAT, 0, colors);
 	}
 	if (lua_isuserdata(L, 6))
 	{
@@ -2632,6 +2635,13 @@ static int gl_fbo_toscreen(lua_State *L)
 	if (!allowblend) glDisable(GL_BLEND);
 	tglBindTexture(GL_TEXTURE_2D, fbo->texture);
 
+	GLfloat colors[4*4] = {
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+		r, g, b, a,
+	};
+	glColorPointer(4, GL_FLOAT, 0, colors);
 
 	GLfloat texcoords[2*4] = {
 		0, 1,
@@ -2655,6 +2665,95 @@ static int gl_fbo_toscreen(lua_State *L)
 	return 0;
 }
 
+static int gl_fbo_posteffects(lua_State *L)
+{
+	lua_fbo *fbo = (lua_fbo*)auxiliar_checkclass(L, "gl{fbo}", 1);
+	lua_fbo *fbo2 = (lua_fbo*)auxiliar_checkclass(L, "gl{fbo}", 2);
+	lua_fbo *fbo_final = (lua_fbo*)auxiliar_checkclass(L, "gl{fbo}", 3);
+	lua_fbo *tmpfbo;
+	lua_fbo *srcfbo = fbo;
+	lua_fbo *dstfbo = fbo2;
+	int x = luaL_checknumber(L, 4);
+	int y = luaL_checknumber(L, 5);
+	int w = luaL_checknumber(L, 6);
+	int h = luaL_checknumber(L, 7);
+
+	glDisable(GL_BLEND);
+
+	GLfloat colors[4*4] = {
+		1, 1, 1, 1,
+		1, 1, 1, 1,
+		1, 1, 1, 1,
+		1, 1, 1, 1,
+	};
+	glColorPointer(4, GL_FLOAT, 0, colors);
+
+	GLfloat texcoords[2*4] = {
+		0, 1,
+		0, 0,
+		1, 0,
+		1, 1,
+	};
+	glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
+
+	GLfloat vertices[2*4] = {
+		0, 0,
+		0, h,
+		w, h,
+		w, 0,
+	};
+	glVertexPointer(2, GL_FLOAT, 0, vertices);
+
+	// Set the viewport and save the old one
+	glPushAttrib(GL_VIEWPORT_BIT);
+	glViewport(0, 0, fbo->w, fbo->h);
+	glMatrixMode(GL_PROJECTION);
+	glPushMatrix();
+	glLoadIdentity();
+	glOrtho(0, fbo->w, fbo->h, 0, -1001, 1001);
+	glMatrixMode(GL_MODELVIEW);
+	glLoadIdentity();
+
+	tglClearColor(0, 0, 0, 1);
+
+	int shad_idx = 8;
+	while (lua_isuserdata(L, shad_idx) && lua_isuserdata(L, shad_idx+1)) {
+		shader_type *s = (shader_type*)lua_touserdata(L, shad_idx);
+		useShader(s, fbo->w, fbo->h, w, h, 1, 1, 1, 1);
+
+		tglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, dstfbo->fbo);
+		glClear(GL_COLOR_BUFFER_BIT);
+		tglBindTexture(GL_TEXTURE_2D, srcfbo->texture);
+		glDrawArrays(GL_QUADS, 0, 4);
+
+		shad_idx++;
+		tmpfbo = srcfbo;
+		srcfbo = dstfbo;
+		dstfbo = tmpfbo;
+	}
+
+	// Bind final fbo (must have bee previously activated)
+	shader_type *s = (shader_type*)lua_touserdata(L, shad_idx);
+	useShader(s, fbo_final->w, fbo_final->h, w, h, 1, 1, 1, 1);
+	glMatrixMode(GL_PROJECTION);
+	glPopMatrix();
+	glMatrixMode(GL_MODELVIEW);
+	glPopAttrib();
+	tglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_final->fbo);
+	glClear(GL_COLOR_BUFFER_BIT);
+	tglBindTexture(GL_TEXTURE_2D, srcfbo->texture);
+	vertices[0] = x; vertices[1] = y;
+	vertices[2] = x; vertices[3] = y + h;
+	vertices[4] = x + w; vertices[5] = y + h;
+	vertices[6] = x + w; vertices[7] = y;
+	glDrawArrays(GL_QUADS, 0, 4);
+
+	tglUseProgramObject(0);
+
+	glEnable(GL_BLEND);
+	return 0;
+}
+
 static int gl_fbo_is_active(lua_State *L)
 {
 	lua_pushboolean(L, fbo_active);
@@ -3041,6 +3140,7 @@ static const struct luaL_Reg gl_fbo_reg[] =
 {
 	{"__gc", gl_free_fbo},
 	{"toScreen", gl_fbo_toscreen},
+	{"postEffects", gl_fbo_posteffects},
 	{"use", gl_fbo_use},
 	{"png", gl_fbo_to_png},
 	{NULL, NULL},
diff --git a/src/core_lua.h b/src/core_lua.h
index 5d92d8d231e97245c59e57e1c6de1cb67a078c2d..dadf4d2cc3aa328d6f1cebf3275c28591db06c58 100644
--- a/src/core_lua.h
+++ b/src/core_lua.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/display.h b/src/display.h
index 4ce3a0a071eeb29488667586bc73a2cfe980165d..1e0703993dcb71e58eebf66980e3fb15c9382997 100644
--- a/src/display.h
+++ b/src/display.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/display_sdl.c b/src/display_sdl.c
index 65dc0a67eeede82e35a98ca6b45b86f60c5a4b87..70148f1a4e21fa90699d313d29e1d50b09d8239e 100644
--- a/src/display_sdl.c
+++ b/src/display_sdl.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/display_sdl.h b/src/display_sdl.h
index 28914faf766e9b93fb5d8ef8463f0d37448a4c0f..aa21b1682185ca7cec74d0b5749644cf315f9229 100644
--- a/src/display_sdl.h
+++ b/src/display_sdl.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/dmnd_square.c b/src/dmnd_square.c
index 72f88fa4856fac9850ca090ef98bacb0690072b9..5a513160d1347e428dfb92938fa4cac417a37a6a 100644
--- a/src/dmnd_square.c
+++ b/src/dmnd_square.c
@@ -8,7 +8,7 @@
  Lua glue code itself is:
 
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/fov.c b/src/fov.c
index 9ea0949c3ebad3bf08d629be1cb0b433ab8260a2..46831132f2c5ecfad57613ef82932891fa5ffc10 100644
--- a/src/fov.c
+++ b/src/fov.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/fov.h b/src/fov.h
index 7f28f23c17846403c8ad0ec0b6b7d7a7b5b5d314..e1ea09380df574571e72dcbd0051c7cdfd218077 100644
--- a/src/fov.h
+++ b/src/fov.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/fov/fov.c b/src/fov/fov.c
index 833ef528b9d515ff9cdcff38803fb6044763690b..840a690d9198a4f1d9ac34dd176f6d3ac01abab0 100644
--- a/src/fov/fov.c
+++ b/src/fov/fov.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/fov/fov.h b/src/fov/fov.h
index d0867d310987c7df57259180002a9c594252f192..04e5c3507c99c1bb47d831404f740cb3e37d2ea1 100644
--- a/src/fov/fov.h
+++ b/src/fov/fov.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/getself.c b/src/getself.c
index 2e40ac7e8559d49045fed49ae430ecb723ba9f03..9babc433eb620f9436db3328d0cf13c88e815e22 100644
--- a/src/getself.c
+++ b/src/getself.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
@@ -39,6 +39,29 @@ int get_number_cpus()
 //	return 1;
 }
 
+#elif defined(SELFEXE_BSD)
+#include <limits.h>
+#include <stdlib.h>
+const char *get_self_executable(int argc, char **argv)
+{
+	static char res[PATH_MAX];
+	// Like linux, but /proc is not always mounted
+	//  return 0 if it's not
+	if (realpath("/proc/curproc/file", res)) return NULL;
+	return res;
+}
+
+#import <sys/sysctl.h>
+
+int get_number_cpus()
+{
+	int count;
+	size_t size=sizeof(count);
+	
+	if (sysctlbyname("hw.ncpu",&count,&size,NULL,0)) return 1;
+	return count;
+}
+
 #elif defined(SELFEXE_WINDOWS)
 #include <stdlib.h>
 #include <windows.h>
diff --git a/src/getself.h b/src/getself.h
index 41052d49cfd672b93a31b332e4eaaf64b8445a1a..0388c3019ae2387d73d6dad68d53271f9cda7bcd 100644
--- a/src/getself.h
+++ b/src/getself.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/main.c b/src/main.c
index 31f5146220464ddb37da3854022fd7a0838fe5bc..a2045e38381ff4991593b7b63d51e2a78ce698df 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
@@ -41,6 +41,7 @@
 #include "serial.h"
 #include "profile.h"
 #include "main.h"
+#include "te4web.h"
 #include "lua_externs.h"
 #include "runner/core.h"
 #ifdef SELFEXE_WINDOWS
@@ -108,22 +109,6 @@ SDL_mutex *realtimeLock;
 int redraw_pending = 0;
 int realtime_pending = 0;
 
-/*
- * Grab web browser methods
- */
-void (*te4_web_init)(lua_State *L);
-void (*te4_web_update)();
-void te4_web_load() {
-	void *web = SDL_LoadObject("libte4-web.so");
-	printf("Loading web core: %s\n", SDL_GetError());
-	
-	if (web) {
-		te4_web_init = (void (*)(lua_State*)) SDL_LoadFunction(web, "te4_web_init");
-		te4_web_update = (void (*)()) SDL_LoadFunction(web, "te4_web_update");
-	}
-}
-
-
 /*
  * Used to clean up a lock and its corresponding timer/flag.
  *
@@ -212,6 +197,7 @@ static int traceback (lua_State *L) {
 			add_lua_error(ar.short_src, ar.currentline, ar.name?ar.name:"");
 		}
 	}
+	fflush(stdout);
 	return 1;
 }
 
@@ -244,6 +230,7 @@ void stackDump (lua_State *L) {
 		i--;
 	}
 	printf("--------------- Stack Dump Finished ---------------\n" );
+	fflush(stdout);
 }
 
 int docall (lua_State *L, int narg, int nret)
@@ -620,7 +607,7 @@ void on_redraw()
 #ifdef STEAM_TE4
 	if (!no_steam) te4_steam_callbacks();
 #endif
-	if (te4_web_update) te4_web_update();
+	if (te4_web_update) te4_web_update(L);
 }
 
 void pass_command_args(int argc, char *argv[])
diff --git a/src/main.h b/src/main.h
index 0c71ec9de113175f3fbaa3c1ed619d606eb46f7a..9b0f17bc4a5ef52c470d06e4491ab54726dceb11 100644
--- a/src/main.h
+++ b/src/main.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/map.c b/src/map.c
index e571b91c249fdec9854912f2b5153dff0313260c..05935c25a0ad9601850f337a125244fe6f6663b8 100644
--- a/src/map.c
+++ b/src/map.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/map.h b/src/map.h
index 07f7137fe400d584a1e60fd585605b409b8f65dc..a00465ff7f156534a2ed85730430c9c2b243eebb 100644
--- a/src/map.h
+++ b/src/map.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/music.c b/src/music.c
index 49b9fae9ffec40714f9ff7600b2a6a645b3e76d5..e8b137fc174d8252adc7fc992d9b35cfaaf80a51 100644
--- a/src/music.c
+++ b/src/music.c
@@ -5,7 +5,7 @@
 
  Modified for:
  TE4 - T-Engine 4
- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+ Copyright (C) 2009 - 2014 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
diff --git a/src/music.h b/src/music.h
index 8cd31d043fda8ff183cdbfae0b73252d3a03d89f..2f2b5d9bdadfc59ad6e6810704aa40b8107ac939 100644
--- a/src/music.h
+++ b/src/music.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
@@ -27,6 +27,12 @@
 #include <vorbis/vorbisfile.h>
 #include <SDL2/SDL.h>
 #include <SDL2/SDL_thread.h>
+#elif defined(__FreeBSD__)
+#include <AL/al.h>
+#include <AL/alc.h>
+#include <vorbis/vorbisfile.h>
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_thread.h>
 #elif defined(WIN32)
 #include <AL/al.h>
 #include <AL/alc.h>
diff --git a/src/noise.c b/src/noise.c
index 21a2e4c1ba838bb912963f7e1f1b946ffd9f7baf..86bc437c413a47df265c08a95d3e7a08e5a03d78 100644
--- a/src/noise.c
+++ b/src/noise.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/particles.c b/src/particles.c
index 9e1c190f02b94497137b60ea9c53365caf66d548..fc73dd26a0facd1bd94e413350c2332973cdaae5 100644
--- a/src/particles.c
+++ b/src/particles.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
@@ -33,6 +33,7 @@
 #include "SFMT.h"
 #include "tSDL.h"
 #include "main.h"
+#include "useshader.h"
 #include "physfs.h"
 #include "physfsrwops.h"
 
diff --git a/src/particles.h b/src/particles.h
index 5e69ec03fc6076a46ee1497494c5451580b39881..1adaf74a9449d11399a889838e5e04a2ff27fe90 100644
--- a/src/particles.h
+++ b/src/particles.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/particles_gas.c b/src/particles_gas.c
index 160555366dc98d40f0264d94fcccf0086c461bdc..494b46cb21c36722980359b0aaad2e888ab94a59 100644
--- a/src/particles_gas.c
+++ b/src/particles_gas.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/particles_gas.h b/src/particles_gas.h
index e792ff1a8540457944e6295cb881088e2faf754f..14f650e25364529af1238cdba17f2e9cd4f08fa0 100644
--- a/src/particles_gas.h
+++ b/src/particles_gas.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/physfs.c b/src/physfs.c
index 1b4c9066f46838d2950f238d906f295630cbb421..d4492e6a6b92c28ededf5d4db82dc3ba3b4d7510 100644
--- a/src/physfs.c
+++ b/src/physfs.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/profile.c b/src/profile.c
index c25cb411816a98abbf6c381c720d9b8d5a06baa2..2f1eaf0118aaf67499f85e77ca347bd6a318a54a 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/profile.h b/src/profile.h
index 9e1d22638e3822fa18af4ec6700d7b68f22dafdf..7ae2e349c5fdf883cf7d08a0aef296ea6f08a0f8 100644
--- a/src/profile.h
+++ b/src/profile.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/runner/core.h b/src/runner/core.h
index 13e29745ff34f023c19d54a54b6c1cecefc06d82..d19e4c3ba747b6d96228be8994a15cdb90eb4a60 100644
--- a/src/runner/core.h
+++ b/src/runner/core.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/runner/main.c b/src/runner/main.c
index 9a690d40b9213b06c83a7e777ba883bda5ef5ff4..6ad3b9394a3413e884671d69cccebcf15141ef6d 100644
--- a/src/runner/main.c
+++ b/src/runner/main.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/runner/runner.c b/src/runner/runner.c
index bb023441673e923b94a05024396b06d6cdd04b0d..f75d9781c0641bb630fa07307585e01ac893c35f 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/script.h b/src/script.h
index 92c5bf61d3102917847dfe4eb25d8e23554e3a93..52fedef2ab86e83cb57be2f99d849c8b8aa9078e 100644
--- a/src/script.h
+++ b/src/script.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/serial.c b/src/serial.c
index dbd844b40fca4c467360dceb12208d3b24a91450..ba07bee8fb77335d42b507c042af8a120b18c6ef 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/serial.h b/src/serial.h
index a1a3d695067fd7d4c15ce839cc57cc73c9bc3d4b..6730cd3e8e746812790de58c6ca71b445a66cd33 100644
--- a/src/serial.h
+++ b/src/serial.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/shaders.c b/src/shaders.c
index de54cf3cfbc9704e17b9f7510e41a91be6174b66..83a6623e5ce4051949a29d5383d0516d45c4962c 100644
--- a/src/shaders.c
+++ b/src/shaders.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
@@ -262,7 +262,7 @@ static int program_set_uniform_number3_fast(lua_State *L)
 static int program_set_uniform_number4_fast(lua_State *L)
 {
 	shader_type *p = (shader_type*)lua_touserdata(L, 1);
-	GLfloat i[2];
+	GLfloat i[4];
 	i[0] = luaL_checknumber(L, 2);
 	i[1] = luaL_checknumber(L, 3);
 	i[2] = luaL_checknumber(L, 4);
diff --git a/src/tSDL.h b/src/tSDL.h
index 0832e8f85f6d620d2ce3fbb20264f7e0c8694ef0..a7d36c92f413faca9173001aea32feec94321fe0 100644
--- a/src/tSDL.h
+++ b/src/tSDL.h
@@ -3,6 +3,11 @@
 #include <SDL2_ttf/SDL_ttf.h>
 //#include <SDL2_mixer/SDL_mixer.h>
 #include <SDL2_image/SDL_image.h>
+#elif defined(__FreeBSD__)
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_ttf.h>
+//#include <SDL2/SDL_mixer.h>
+#include <SDL2/SDL_image.h>
 #else
 #include <SDL.h>
 #include <SDL_ttf.h>
diff --git a/src/types.h b/src/types.h
index 517c084e6a0b34999087edb8d0d7bbfdac3d883d..b98e5064d260b9e190b272c127ae0e6579ca9ad9 100644
--- a/src/types.h
+++ b/src/types.h
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/wait.c b/src/wait.c
index 98c6b1193a4966632c7337587d52ed0a69bf524b..e9001a5a77a76165bd9af468605e22014c9144e6 100644
--- a/src/wait.c
+++ b/src/wait.c
@@ -1,6 +1,6 @@
 /*
     TE4 - T-Engine 4
-    Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini
+    Copyright (C) 2009 - 2014 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
diff --git a/src/web/gl_texture_surface.cpp b/src/web/gl_texture_surface.cpp
index 5a93b8a489bb6fe65543ba93e38808da60b7f628..8233790d2637ddbae19ee01c5f71d7b39cafa43d 100644
--- a/src/web/gl_texture_surface.cpp
+++ b/src/web/gl_texture_surface.cpp
@@ -1,5 +1,6 @@
 // Taken from awesomium examples
 #include "gl_texture_surface.h"
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -9,21 +10,11 @@ GLRAMTextureSurface::GLRAMTextureSurface(int width, int height) : texture_id_(0)
 	buffer_ = new unsigned char[rowspan_ * height_];
 	needs_update_ = false;
 
-	glGenTextures(1, &texture_id_);
-	glBindTexture(GL_TEXTURE_2D, texture_id_);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
-	GLfloat largest_supported_anisotropy;
-	glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest_supported_anisotropy);
-	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, largest_supported_anisotropy);
-	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width_, height_, 0,
-							 bpp_ == 3 ? GL_RGB : GL_BGRA, GL_UNSIGNED_BYTE, buffer_);
+	texture_id_ = web_make_texture(width_, height_);
 }
 
 GLRAMTextureSurface::~GLRAMTextureSurface() {
-	glDeleteTextures(1, &texture_id_);
+	web_del_texture(texture_id_);
 	delete[] buffer_;
 }
 
@@ -94,10 +85,7 @@ void GLRAMTextureSurface::Scroll(int dx,
 
 void GLRAMTextureSurface::UpdateTexture() {
 	if (needs_update_) {
-		glBindTexture(GL_TEXTURE_2D, texture_id_);
-		glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_,
-											bpp_ == 3 ? GL_RGB : GL_BGRA, GL_UNSIGNED_BYTE,
-											buffer_);
+		web_texture_update(texture_id_, width_, height_, buffer_);
 		needs_update_ = false;
 	}
 }
@@ -109,9 +97,7 @@ GLTextureSurfaceFactory::GLTextureSurfaceFactory() {
 GLTextureSurfaceFactory::~GLTextureSurfaceFactory() {
 }
 
-Awesomium::Surface* GLTextureSurfaceFactory::CreateSurface(Awesomium::WebView* view,
-																					int width,
-																					int height) {
+Awesomium::Surface* GLTextureSurfaceFactory::CreateSurface(Awesomium::WebView* view, int width, int height) {
 	return new GLRAMTextureSurface(width, height);
 }
 
diff --git a/src/web/gl_texture_surface.h b/src/web/gl_texture_surface.h
index 27bcd7c8b6e059bd4de4edb3172bcb038fb7891f..27487500196ad6e6fdcc4f69e6fc606d6633f7f7 100644
--- a/src/web/gl_texture_surface.h
+++ b/src/web/gl_texture_surface.h
@@ -69,4 +69,12 @@ public:
 	virtual void DestroySurface(Awesomium::Surface* surface);
 };
 
+extern void *(*web_mutex_create)();
+extern void (*web_mutex_destroy)(void *mutex);
+extern void (*web_mutex_lock)(void *mutex);
+extern void (*web_mutex_unlock)(void *mutex);
+extern unsigned int (*web_make_texture)(int w, int h);
+extern void (*web_del_texture)(unsigned int tex);
+extern void (*web_texture_update)(unsigned int tex, int w, int h, const void* buffer);
+
 #endif  // __GL_TEXTURE_SURFACE_H__
diff --git a/src/web/web.cpp b/src/web/web.cpp
index 38450e760b5a40b4014e9fb3b7632cac47679847..70d0cd37d24d07af99547a51753ee28bd8c48f39 100644
--- a/src/web/web.cpp
+++ b/src/web/web.cpp
@@ -6,13 +6,12 @@
 */
 
 extern "C" {
-#include "lua.h"
-#include "lauxlib.h"
-#include "lualib.h"
-#include "tSDL.h"
-#include "physfs.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "web-external.h"
 }
 #include "web.h"
+#include "web-internal.h"
 
 #include <Awesomium/WebCore.h>
 #include <Awesomium/BitmapSurface.h>
@@ -20,151 +19,14 @@ extern "C" {
 #include <Awesomium/STLHelpers.h>
 #include "gl_texture_surface.h"
 
-/**********************************************************************
- ******************** Duplicated since we are independant *************
- **********************************************************************/
-static void auxiliar_newclass(lua_State *L, const char *classname, const luaL_Reg *func);
-static void auxiliar_add2group(lua_State *L, const char *classname, const char *group);
-static void auxiliar_setclass(lua_State *L, const char *classname, int objidx);
-static void *auxiliar_checkclass(lua_State *L, const char *classname, int objidx);
-static void *auxiliar_checkgroup(lua_State *L, const char *groupname, int objidx);
-static void *auxiliar_getclassudata(lua_State *L, const char *groupname, int objidx);
-static void *auxiliar_getgroupudata(lua_State *L, const char *groupname, int objidx);
-static int auxiliar_checkboolean(lua_State *L, int objidx);
-static int auxiliar_tostring(lua_State *L);
-
-/*-------------------------------------------------------------------------*\
-* Creates a new class with given methods
-* Methods whose names start with __ are passed directly to the metatable.
-\*-------------------------------------------------------------------------*/
-static void auxiliar_newclass(lua_State *L, const char *classname, const luaL_Reg *func) {
-    luaL_newmetatable(L, classname); /* mt */
-    /* create __index table to place methods */
-    lua_pushstring(L, "__index");    /* mt,"__index" */
-    lua_newtable(L);                 /* mt,"__index",it */
-    /* put class name into class metatable */
-    lua_pushstring(L, "class");      /* mt,"__index",it,"class" */
-    lua_pushstring(L, classname);    /* mt,"__index",it,"class",classname */
-    lua_rawset(L, -3);               /* mt,"__index",it */
-    /* pass all methods that start with _ to the metatable, and all others
-     * to the index table */
-    for (; func->name; func++) {     /* mt,"__index",it */
-        lua_pushstring(L, func->name);
-        lua_pushcfunction(L, func->func);
-        lua_rawset(L, func->name[0] == '_' ? -5: -3);
-    }
-    lua_rawset(L, -3);               /* mt */
-    lua_pop(L, 1);
-}
-
-/*-------------------------------------------------------------------------*\
-* Prints the value of a class in a nice way
-\*-------------------------------------------------------------------------*/
-static int auxiliar_tostring(lua_State *L) {
-    char buf[32];
-    if (!lua_getmetatable(L, 1)) goto error;
-    lua_pushstring(L, "__index");
-    lua_gettable(L, -2);
-    if (!lua_istable(L, -1)) goto error;
-    lua_pushstring(L, "class");
-    lua_gettable(L, -2);
-    if (!lua_isstring(L, -1)) goto error;
-    sprintf(buf, "%p", lua_touserdata(L, 1));
-    lua_pushfstring(L, "%s: %s", lua_tostring(L, -1), buf);
-    return 1;
-error:
-    lua_pushstring(L, "invalid object passed to 'auxiliar.c:__tostring'");
-    lua_error(L);
-    return 1;
-}
-
-/*-------------------------------------------------------------------------*\
-* Insert class into group
-\*-------------------------------------------------------------------------*/
-static void auxiliar_add2group(lua_State *L, const char *classname, const char *groupname) {
-    luaL_getmetatable(L, classname);
-    lua_pushstring(L, groupname);
-    lua_pushboolean(L, 1);
-    lua_rawset(L, -3);
-    lua_pop(L, 1);
-}
-
-/*-------------------------------------------------------------------------*\
-* Make sure argument is a boolean
-\*-------------------------------------------------------------------------*/
-static int auxiliar_checkboolean(lua_State *L, int objidx) {
-    if (!lua_isboolean(L, objidx))
-        luaL_typerror(L, objidx, lua_typename(L, LUA_TBOOLEAN));
-    return lua_toboolean(L, objidx);
-}
-
-/*-------------------------------------------------------------------------*\
-* Return userdata pointer if object belongs to a given class, abort with
-* error otherwise
-\*-------------------------------------------------------------------------*/
-static void *auxiliar_checkclass(lua_State *L, const char *classname, int objidx) {
-    void *data = auxiliar_getclassudata(L, classname, objidx);
-    if (!data) {
-        char msg[45];
-        sprintf(msg, "%.35s expected", classname);
-        luaL_argerror(L, objidx, msg);
-    }
-    return data;
-}
-
-/*-------------------------------------------------------------------------*\
-* Return userdata pointer if object belongs to a given group, abort with
-* error otherwise
-\*-------------------------------------------------------------------------*/
-static void *auxiliar_checkgroup(lua_State *L, const char *groupname, int objidx) {
-    void *data = auxiliar_getgroupudata(L, groupname, objidx);
-    if (!data) {
-        char msg[45];
-        sprintf(msg, "%.35s expected", groupname);
-        luaL_argerror(L, objidx, msg);
-    }
-    return data;
-}
-
-/*-------------------------------------------------------------------------*\
-* Set object class
-\*-------------------------------------------------------------------------*/
-static void auxiliar_setclass(lua_State *L, const char *classname, int objidx) {
-    luaL_getmetatable(L, classname);
-    if (objidx < 0) objidx--;
-    lua_setmetatable(L, objidx);
-}
-
-/*-------------------------------------------------------------------------*\
-* Get a userdata pointer if object belongs to a given group. Return NULL
-* otherwise
-\*-------------------------------------------------------------------------*/
-static void *auxiliar_getgroupudata(lua_State *L, const char *groupname, int objidx) {
-    if (!lua_getmetatable(L, objidx))
-        return NULL;
-    lua_pushstring(L, groupname);
-    lua_rawget(L, -2);
-    if (lua_isnil(L, -1)) {
-        lua_pop(L, 2);
-        return NULL;
-    } else {
-        lua_pop(L, 2);
-        return lua_touserdata(L, objidx);
-    }
-}
-
-/*-------------------------------------------------------------------------*\
-* Get a userdata pointer if object belongs to a given class. Return NULL
-* otherwise
-\*-------------------------------------------------------------------------*/
-static void *auxiliar_getclassudata(lua_State *L, const char *classname, int objidx) {
-    lua_checkstack(L, 2);
-    return luaL_checkudata(L, objidx, classname);
-}
-
-/**********************************************************************
- **********************************************************************
- **********************************************************************/
+void *(*web_mutex_create)();
+void (*web_mutex_destroy)(void *mutex);
+void (*web_mutex_lock)(void *mutex);
+void (*web_mutex_unlock)(void *mutex);
+unsigned int (*web_make_texture)(int w, int h);
+void (*web_del_texture)(unsigned int tex);
+void (*web_texture_update)(unsigned int tex, int w, int h, const void* buffer);
+static void (*web_key_mods)(bool *shift, bool *ctrl, bool *alt, bool *meta);
 
 using namespace Awesomium;
 
@@ -176,37 +38,20 @@ static WebSession *web_session = NULL;
 static PhysfsDataSource *web_data_source = NULL;
 
 typedef struct {
-	lua_State *L;
 	WebJShandler *listener;
 	int methods_ref;
 } web_js_type;
 
-typedef struct {
-	WebView *view;
-	JSObject *te4core;
-	web_js_type *js;
-	int w, h;
-	bool closed;
-} web_view_type;
-
-class WebDownloader;
+class WebListener;
 
-typedef struct {
-	WebDownloader *d;
-	lua_State *L;
-	int on_request_ref;
-	int on_update_ref;
-	int on_finish_ref;
-	bool closed;
-} web_downloader_type;
-
-static char *webstring_to_buf(WebString *wstr, size_t *flen) {
+static char *webstring_to_buf(const WebString &wstr, size_t *flen) {
 	char *buf;
 	unsigned int len = 0;
-	len = wstr->ToUTF8(NULL, 0);
+	len = wstr.ToUTF8(NULL, 0);
 	buf = (char*)malloc(len + 1);
-	wstr->ToUTF8(buf, len);	
-	*flen = (size_t)len;
+	wstr.ToUTF8(buf, len);	
+	buf[len] = '\0';
+	if (flen) *flen = (size_t)len;
 	return buf;
 }
 
@@ -214,434 +59,356 @@ class WebJShandler : public JSMethodHandler {
 public:
 	web_js_type *js;
 	virtual void OnMethodCall(WebView* caller, unsigned int remote_object_id, const WebString& method_name, const JSArray& args) {
-		web_js_type *js = this->js;
-		size_t lfctname;
-		char *fctname = webstring_to_buf((WebString*)&method_name, &lfctname);
-		printf("method call %s\n", fctname);
-
-		lua_rawgeti(js->L, LUA_REGISTRYINDEX, js->methods_ref);
-		lua_pushlstring(js->L, fctname, lfctname);
-		lua_rawget(js->L, -2);
-		lua_pcall(js->L, 0, 0, 0);
-		free(fctname);
 	}
 
 	virtual JSValue OnMethodCallWithReturnValue(WebView* caller, unsigned int remote_object_id, const WebString& method_name, const JSArray& args) {
-		web_js_type *js = this->js;
-		size_t lfctname;
-		char *fctname = webstring_to_buf((WebString*)&method_name, &lfctname);
-		printf("method call %s\n", fctname);
-
-		lua_rawgeti(js->L, LUA_REGISTRYINDEX, js->methods_ref);
-		lua_pushlstring(js->L, fctname, lfctname);
-		lua_rawget(js->L, -2);
-		lua_pcall(js->L, 0, 0, 0);
-		free(fctname);
 	}
 };
 
-class WebDownloader : public WebViewListener::Download {
+class WebListener : 
+	public WebViewListener::View,
+	public WebViewListener::Download,
+	public WebViewListener::Load
+{
+private:
+	int handlers;
 public:
-	web_downloader_type *d;
-	WebDownloader() {}
-	void OnRequestDownload(WebView* caller, int download_id, const WebURL& url, const WebString& suggested_filename, const WebString& mime_type) {
-		web_downloader_type *d = this->d;
-		if (d->closed) return;
-
-		size_t slen; char *sbuf = webstring_to_buf((WebString*)&suggested_filename, &slen);
-		size_t mlen; char *mbuf = webstring_to_buf((WebString*)&mime_type, &mlen);
-		WebString rurl = url.spec();
-		size_t ulen; char *ubuf = webstring_to_buf((WebString*)&rurl, &ulen);
-
-		lua_rawgeti(d->L, LUA_REGISTRYINDEX, d->on_request_ref);
-		lua_pushnumber(d->L, download_id);
-		lua_pushlstring(d->L, ubuf, ulen);
-		lua_pushlstring(d->L, sbuf, slen);
-		lua_pushlstring(d->L, mbuf, mlen);
-		lua_pcall(d->L, 4, 0, 0);
-		free(sbuf);
-		free(mbuf);
-		free(ubuf);
+	WebListener(int handlers) { this->handlers = handlers; }
+
+	virtual void OnChangeTitle(Awesomium::WebView* caller, const Awesomium::WebString& title) {
+		char *cur_title = webstring_to_buf(title, NULL);
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_TITLE_CHANGE;
+		event->handlers = handlers;
+		event->data.title = cur_title;
+		push_event(event);
+	}
+
+	virtual void OnChangeAddressBar(Awesomium::WebView* caller, const Awesomium::WebURL& url) {
+	}
+
+	virtual void OnChangeTooltip(Awesomium::WebView* caller, const Awesomium::WebString& tooltip) {
+	}
+
+	virtual void OnChangeTargetURL(Awesomium::WebView* caller, const Awesomium::WebURL& url) {
+	}
+
+	virtual void OnChangeCursor(Awesomium::WebView* caller, Awesomium::Cursor cursor) {
+	}
+
+	virtual void OnChangeFocus(Awesomium::WebView* caller, Awesomium::FocusedElementType focused_type) {
+	}
+
+	virtual void OnAddConsoleMessage(Awesomium::WebView* caller, const Awesomium::WebString& message, int line_number, const Awesomium::WebString& source) {
+	}
+
+	virtual void OnShowCreatedWebView(Awesomium::WebView* caller, Awesomium::WebView* new_view, const Awesomium::WebURL& opener_url, const Awesomium::WebURL& target_url, const Awesomium::Rect& initial_pos, bool is_popup) {
+		new_view->Destroy();
+
+		WebString rurl = target_url.spec();
+		char *url = webstring_to_buf(rurl, NULL);
+
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_REQUEST_POPUP_URL;
+		event->handlers = handlers;
+		event->data.popup.url = url;
+		event->data.popup.w = initial_pos.width;
+		event->data.popup.h = initial_pos.height;
+		push_event(event);
+
+		printf("[WEB] stopped popup to %s (%dx%d), pushing event...\n", url, event->data.popup.w, event->data.popup.h);
+	}
+
+	void OnRequestDownload(WebView* caller, int download_id, const WebURL& wurl, const WebString& suggested_filename, const WebString& mime_type) {
+		WebString rurl = wurl.spec();
+		const char *mime = webstring_to_buf(mime_type, NULL);
+		const char *url = webstring_to_buf(rurl, NULL);
+		const char *name = webstring_to_buf(suggested_filename, NULL);
+		printf("[WEB] Download request [name: %s] [mime: %s] [url: %s]\n", name, mime, url);
+
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_DOWNLOAD_REQUEST;
+		event->handlers = handlers;
+		event->data.download_request.url = url;
+		event->data.download_request.name = name;
+		event->data.download_request.mime = mime;
+		event->data.download_request.id = download_id;
+		push_event(event);
 	}
 	void OnUpdateDownload(WebView* caller, int download_id, int64 total_bytes, int64 received_bytes, int64 current_speed) {
-		web_downloader_type *d = this->d;
-		if (d->closed) return;
-
-		lua_rawgeti(d->L, LUA_REGISTRYINDEX, d->on_update_ref);
-		lua_pushnumber(d->L, received_bytes);
-		lua_pushnumber(d->L, total_bytes);
-		lua_pushnumber(d->L, current_speed);
-		lua_pcall(d->L, 3, 0, 0);
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_DOWNLOAD_UPDATE;
+		event->handlers = handlers;
+		event->data.download_update.id = download_id;
+		event->data.download_update.got = received_bytes;
+		event->data.download_update.total = total_bytes;
+		event->data.download_update.percent = 100 * ((double)received_bytes / (double)total_bytes);
+		event->data.download_update.speed = current_speed;
+		push_event(event);
 	}
 	void OnFinishDownload(WebView* caller, int download_id, const WebURL& url, const WebString& saved_path) {
-		web_downloader_type *d = this->d;
-		if (d->closed) return;
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_DOWNLOAD_FINISH;
+		event->handlers = handlers;
+		event->data.download_finish.id = download_id;
+		push_event(event);
+	}
+
+	/// This event occurs when the page begins loading a frame.
+	virtual void OnBeginLoadingFrame(Awesomium::WebView* caller, int64 frame_id, bool is_main_frame, const Awesomium::WebURL& wurl, bool is_error_page) {
+		WebString rurl = wurl.spec();
+		const char *url = webstring_to_buf(rurl, NULL);
+
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_LOADING;
+		event->handlers = handlers;
+		event->data.loading.url = url;
+		event->data.loading.status = 0;
+		push_event(event);
+	}
+
+	/// This event occurs when a frame fails to load. See error_desc
+	/// for additional information.
+	virtual void OnFailLoadingFrame(Awesomium::WebView* caller, int64 frame_id, bool is_main_frame, const Awesomium::WebURL& wurl, int error_code, const Awesomium::WebString& error_desc) {
+		WebString rurl = wurl.spec();
+		const char *url = webstring_to_buf(rurl, NULL);
+
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_LOADING;
+		event->handlers = handlers;
+		event->data.loading.url = url;
+		event->data.loading.status = -1;
+		push_event(event);
+	}
 
-		WebString rurl = url.spec();
-		size_t ulen; char *ubuf = webstring_to_buf((WebString*)&rurl, &ulen);
-		size_t plen; char *pbuf = webstring_to_buf((WebString*)&saved_path, &plen);
+	/// This event occurs when the page finishes loading a frame.
+	/// The main frame always finishes loading last for a given page load.
+	virtual void OnFinishLoadingFrame(Awesomium::WebView* caller, int64 frame_id, bool is_main_frame, const Awesomium::WebURL& wurl) {
 
-		lua_rawgeti(d->L, LUA_REGISTRYINDEX, d->on_finish_ref);
-		lua_pushlstring(d->L, ubuf, ulen);
-		lua_pushlstring(d->L, pbuf, plen);
-		lua_pcall(d->L, 2, 0, 0);
+	}
+
+	/// This event occurs when the DOM has finished parsing and the
+	/// window object is available for JavaScript execution.
+	virtual void OnDocumentReady(Awesomium::WebView* caller, const Awesomium::WebURL& wurl) {
+		WebString rurl = wurl.spec();
+		const char *url = webstring_to_buf(rurl, NULL);
+
+		WebEvent *event = new WebEvent();
+		event->kind = TE4_WEB_EVENT_LOADING;
+		event->handlers = handlers;
+		event->data.loading.url = url;
+		event->data.loading.status = 1;
+		push_event(event);
 	}
 };
 
 class PhysfsDataSource : public DataSource {
 public:
 	virtual void OnRequest(int request_id, const WebString& path) {
-		size_t plen;
-		char *rpath = webstring_to_buf((WebString*)&path, &plen);
-		PHYSFS_file *f = PHYSFS_openRead(rpath);
-		if (!f) {
-			printf("WebViewAsset read: %s (%d)\n", rpath, plen);
-			printf(" => not found\n");
-			SendResponse(request_id, 0, NULL, WSLit("text/html"));
-			return;
-		}
-		size_t len = PHYSFS_fileLength(f);
-		size_t rlen = len;
-		size_t pos = 0;
-		char *buf = (char*)malloc(sizeof(char)*len);
-		while (rlen) {
-			size_t r = PHYSFS_read(f, buf + pos, sizeof(char), rlen);
-			rlen -= r;
-			pos += r;
-		}
-
-		const char *mime = "text/html";
-		if (plen >= 3 && !strcmp(rpath + plen - 3, ".js")) mime = "text/javascript";
-		SendResponse(request_id, len, (unsigned char*)buf, WSLit(mime));
-		free((void*)buf);
 	}
 };
 
-static int lua_web_new(lua_State *L) {
-	int w = luaL_checknumber(L, 1);
-	int h = luaL_checknumber(L, 2);
-	size_t urllen;
-	const char* url = luaL_checklstring(L, 3, &urllen);
 
-	web_view_type *view = (web_view_type*)lua_newuserdata(L, sizeof(web_view_type));
-	auxiliar_setclass(L, "web{view}", -1);
-	view->view = web_core->CreateWebView(w, h, web_session, kWebViewType_Offscreen);
+class WebViewOpaque {
+public:
+	WebView *view;
+	WebListener *listener;
+	JSObject *te4core;
+	web_js_type *js;
+};
+
+void te4_web_new(web_view_type *view, const char *url, int w, int h) {
+	size_t urllen = strlen(url);
+	
+	WebViewOpaque *opaque = new WebViewOpaque();
+	view->opaque = (void*)opaque;
+
+	opaque->view = web_core->CreateWebView(w, h, web_session, kWebViewType_Offscreen);
+	opaque->listener = new WebListener(view->handlers);
+	opaque->view->set_view_listener(opaque->listener);
+	opaque->view->set_download_listener(opaque->listener);
+	opaque->view->set_load_listener(opaque->listener);
+	opaque->te4core = NULL;
+	opaque->js = NULL;
 	view->w = w;
 	view->h = h;
-	view->te4core = NULL;
-	view->js = NULL;
 	view->closed = false;
 
 	WebURL lurl(WebString::CreateFromUTF8(url, urllen));
-	view->view->LoadURL(lurl);
-	view->view->SetTransparent(true);
-
-	return 1;
+	opaque->view->LoadURL(lurl);
+	opaque->view->SetTransparent(true);
+	printf("Created webview: %s\n", url);
 }
 
-static int lua_web_close(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
+bool te4_web_close(web_view_type *view) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
 	if (!view->closed) {
-		view->view->Destroy();
+		opaque->view->Destroy();
+		delete opaque->listener;
 		view->closed = true;
-		if (view->js) {
-			luaL_unref(L, LUA_REGISTRYINDEX, view->js->methods_ref);
-			delete view->js->listener;
-			free(view->js);
+		if (opaque->js) {
+			delete opaque->js->listener;
+			free(opaque->js);
 		}
-		if (view->te4core) delete view->te4core;
+		if (opaque->te4core) delete opaque->te4core;
 		printf("Destroyed webview\n");
+		return true;
 	}
-	return 0;
+	return false;
 }
 
-static int lua_web_toscreen(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
-
-	const GLTextureSurface* surface = static_cast<const GLTextureSurface*> (view->view->surface());
-
-	if (surface) {
-		int x = luaL_checknumber(L, 2);
-		int y = luaL_checknumber(L, 3);
-		int w = surface->width();
-		int h = surface->height();
-		if (lua_isnumber(L, 4)) w = lua_tonumber(L, 4);
-		if (lua_isnumber(L, 5)) h = lua_tonumber(L, 5);
-		float r = 1, g = 1, b = 1, a = 1;
-
-		glBindTexture(GL_TEXTURE_2D, surface->GetTexture());
-
-		GLfloat texcoords[2*4] = {
-			0, 0,
-			0, 1,
-			1, 1,
-			1, 0,
-		};
-		GLfloat colors[4*4] = {
-			r, g, b, a,
-			r, g, b, a,
-			r, g, b, a,
-			r, g, b, a,
-		};
-		glColorPointer(4, GL_FLOAT, 0, colors);
-		glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
-
-		GLfloat vertices[2*4] = {
-			x, y,
-			x, y + h,
-			x + w, y + h,
-			x + w, y,
-		};
-		glVertexPointer(2, GL_FLOAT, 0, vertices);
-
-		glDrawArrays(GL_QUADS, 0, 4);
-	}
-
-	return 0;
-}
+bool te4_web_toscreen(web_view_type *view, int *w, int *h, unsigned int *tex) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return false;
 
-static int lua_web_loading(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
+	const GLTextureSurface* surface = static_cast<const GLTextureSurface*> (opaque->view->surface());
+	if (!surface) return false;
+	unsigned int t = surface->GetTexture();
 
-	lua_pushboolean(L, view->view->IsLoading());
-	return 1;
+	*tex = t;
+	*w = (*w < 0) ? view->w : *w;
+	*h = (*h < 0) ? view->h : *h;
+	return true;
 }
 
-static int lua_web_title(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
-
-	WebString wstr = view->view->title();
-	size_t len;
-	char *buf = webstring_to_buf(&wstr, &len);
-
-	lua_pushlstring(L, buf, len);
-	free(buf);
-	return 1;
+bool te4_web_loading(web_view_type *view) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return false;
+	return opaque->view->IsLoading();
 }
 
-static int lua_web_focus(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
+void te4_web_focus(web_view_type *view, bool focus) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return;
 
-	if (lua_toboolean(L, 2)) view->view->Focus();
-	else view->view->Unfocus();
-	return 0;
+	if (focus) opaque->view->Focus();
+	else opaque->view->Unfocus();
 }
 
-static int lua_web_inject_mouse_move(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
+void te4_web_inject_mouse_move(web_view_type *view, int x, int y) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return;
 
-	int x = luaL_checknumber(L, 2);
-	int y = luaL_checknumber(L, 3);
-	view->view->InjectMouseMove(x, y);
-	return 0;
+	opaque->view->InjectMouseMove(x, y);
 }
 
-static int lua_web_inject_mouse_wheel(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
+void te4_web_inject_mouse_wheel(web_view_type *view, int x, int y) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return;
 
-	int x = luaL_checknumber(L, 2);
-	int y = luaL_checknumber(L, 3);
-	view->view->InjectMouseWheel(-y, -x);
-	return 0;
+	opaque->view->InjectMouseWheel(-y, -x);
 }
 
-static int lua_web_inject_mouse_button(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
+void te4_web_inject_mouse_button(web_view_type *view, int kind, bool up) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return;
 
-	bool up = lua_toboolean(L, 2);
-	int kind = luaL_checknumber(L, 3);
 	MouseButton b = kMouseButton_Left;
 	if (kind == 2) b = kMouseButton_Middle;
 	else if (kind == 3) b = kMouseButton_Right;
 
-	if (up) view->view->InjectMouseUp(b);
-	else view->view->InjectMouseDown(b);
-	return 0;
+	if (up) opaque->view->InjectMouseUp(b);
+	else opaque->view->InjectMouseDown(b);
 }
 
-static int lua_web_inject_key(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
-
-	bool up = lua_toboolean(L, 2);
-	int scancode = lua_tonumber(L, 3);
-	int asymb = lua_tonumber(L, 4);
-	const char *uni = NULL;
-	size_t unilen = 0;
-	if (lua_isstring(L, 5)) uni = lua_tolstring(L, 5, &unilen);
+void te4_web_inject_key(web_view_type *view, int scancode, int asymb, const char *uni, int unilen, bool up) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return;
 
 	WebKeyboardEvent keyEvent;
 	keyEvent.type = !up ? WebKeyboardEvent::kTypeKeyDown : WebKeyboardEvent::kTypeKeyUp;
-
+	
 	char buf[20];
 	keyEvent.virtual_key_code = asymb;
 	GetKeyIdentifierFromVirtualKeyCode(keyEvent.virtual_key_code, (char**)&buf);
 	strcpy(keyEvent.key_identifier, buf);
-
-	SDL_Keymod smod = SDL_GetModState();
-
+	
+	bool shift, ctrl, alt, meta;
+	web_key_mods(&shift, &ctrl, &alt, &meta);
 	keyEvent.modifiers = 0;
-
-	if (smod & KMOD_SHIFT) keyEvent.modifiers |= WebKeyboardEvent::kModShiftKey;
-	else if (smod & KMOD_CTRL) keyEvent.modifiers |= WebKeyboardEvent::kModControlKey;
-	else if (smod & KMOD_ALT) keyEvent.modifiers |= WebKeyboardEvent::kModAltKey;
-	else if (smod & KMOD_GUI) keyEvent.modifiers |= WebKeyboardEvent::kModMetaKey;
-
+	if (shift) keyEvent.modifiers |= WebKeyboardEvent::kModShiftKey;
+	else if (ctrl) keyEvent.modifiers |= WebKeyboardEvent::kModControlKey;
+	else if (alt) keyEvent.modifiers |= WebKeyboardEvent::kModAltKey;
+	else if (meta) keyEvent.modifiers |= WebKeyboardEvent::kModMetaKey;
+	
 	keyEvent.native_key_code = scancode;
-
+	
 	if (up) {
-		view->view->InjectKeyboardEvent(keyEvent);
+		opaque->view->InjectKeyboardEvent(keyEvent);
 	} else {
 		if (uni) {
 			WebString wstr = WebString::CreateFromUTF8(uni, unilen);
 			memcpy(keyEvent.text, wstr.data(), wstr.length() * sizeof(wchar16));
 			memcpy(keyEvent.unmodified_text, wstr.data(), wstr.length() * sizeof(wchar16));
 		}
+		
+		opaque->view->InjectKeyboardEvent(keyEvent);
 
-		view->view->InjectKeyboardEvent(keyEvent);
 		if (uni) {
 			keyEvent.type = WebKeyboardEvent::kTypeChar;
 			keyEvent.virtual_key_code = keyEvent.text[0];
 			keyEvent.native_key_code = keyEvent.text[0];
-			view->view->InjectKeyboardEvent(keyEvent);
+			opaque->view->InjectKeyboardEvent(keyEvent);
 		}
 	}
-	return 0;
 }
 
-static int lua_web_set_downloader(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	web_downloader_type *listener = (web_downloader_type*)auxiliar_checkclass(L, "web{downloader}", 2);
-	if (view->closed) return 0;
+void te4_web_download_action(web_view_type *view, long id, const char *path) {
+	WebViewOpaque *opaque = (WebViewOpaque*)view->opaque;
+	if (view->closed) return;
 
-	view->view->set_download_listener(listener->d);
-	return 0;
-}
-
-
-static int lua_downloader_new(lua_State *L) {
-	web_downloader_type *listener = (web_downloader_type*)lua_newuserdata(L, sizeof(web_downloader_type));
-	auxiliar_setclass(L, "web{downloader}", -1);
-
-	listener->d = new WebDownloader();
-	listener->d->d = listener;
-	listener->L = L;
-	listener->closed = false;
-
-	lua_pushvalue(L, 1);
-	listener->on_request_ref = luaL_ref(L, LUA_REGISTRYINDEX);
-	lua_pushvalue(L, 2);
-	listener->on_update_ref = luaL_ref(L, LUA_REGISTRYINDEX);
-	lua_pushvalue(L, 3);
-	listener->on_finish_ref = luaL_ref(L, LUA_REGISTRYINDEX);
-	return 1;
-}
-
-static int lua_downloader_close(lua_State *L) {
-	web_downloader_type *listener = (web_downloader_type*)auxiliar_checkclass(L, "web{downloader}", 1);
-	if (!listener->closed) {
-		luaL_unref(L, LUA_REGISTRYINDEX, listener->on_request_ref);
-		luaL_unref(L, LUA_REGISTRYINDEX, listener->on_update_ref);
-		luaL_unref(L, LUA_REGISTRYINDEX, listener->on_finish_ref);
-		delete listener->d;
-		listener->closed = true;
+	if (path) {
+		WebString wpath = WebString::CreateFromUTF8(path, strlen(path));
+		opaque->view->DidChooseDownloadPath(id, wpath);
+	} else {
+		opaque->view->DidCancelDownload(id);
 	}
-	return 0;
-}
-
-static int lua_web_download_action(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
-	int download_id = luaL_checknumber(L, 2);
-
-	if (lua_isstring(L, 3)) {
-		size_t len;
-		const char *buf = lua_tolstring(L, 3, &len);
-		WebString wpath = WebString::CreateFromUTF8(buf, len);
-		view->view->DidChooseDownloadPath(download_id, wpath);
-	} else view->view->DidCancelDownload(download_id);
-	return 0;
 }
 
-static int lua_web_set_method(lua_State *L) {
-	web_view_type *view = (web_view_type*)auxiliar_checkclass(L, "web{view}", 1);
-	if (view->closed) return 0;
-	size_t lfctname;
-	const char *fctname = luaL_checklstring(L, 2, &lfctname);
-
-	if (!view->te4core) {
-		JSValue result = view->view->CreateGlobalJavascriptObject(WSLit("te4core"));
-		if (result.IsObject()) {
-			view->te4core = &result.ToObject();
-			view->js = (web_js_type*)malloc(sizeof(web_js_type));
-			lua_newtable(L);
-			view->js->L = L;
-			view->js->methods_ref = luaL_ref(L, LUA_REGISTRYINDEX);
-			view->js->listener = new WebJShandler();
-			view->js->listener->js = view->js;
-			view->view->set_js_method_handler(view->js->listener);
+void te4_web_do_update(void (*cb)(WebEvent*)) {
+	if (!web_core) return;
+
+	web_core->Update();
+	WebEvent *event;
+	while (event = pop_event()) {
+		cb(event);
+
+		switch (event->kind) {
+			case TE4_WEB_EVENT_TITLE_CHANGE:
+				free((void*)event->data.title);
+				break;
+			case TE4_WEB_EVENT_REQUEST_POPUP_URL:
+				free((void*)event->data.popup.url);
+				break;
+			case TE4_WEB_EVENT_DOWNLOAD_REQUEST:
+				free((void*)event->data.download_request.url);
+				free((void*)event->data.download_request.name);
+				free((void*)event->data.download_request.mime);
+				break;
+			case TE4_WEB_EVENT_LOADING:
+				free((void*)event->data.loading.url);
+				break;
 		}
-	}
-	if (!view->te4core) {
-		lua_pushboolean(L, false);
-		return 1;
-	}
-	WebString name(WebString::CreateFromUTF8(fctname, lfctname));
-	view->te4core->SetCustomMethod(name, false);
-
-	// Store the function in the table for this view
-	lua_rawgeti(L, LUA_REGISTRYINDEX, view->js->methods_ref);
-	lua_pushstring(L, fctname);
-	lua_pushvalue(L, 3);
-	lua_rawset(L, -3);
-	lua_pop(L, 1);
-
-	lua_pushboolean(L, true);
-	return 1;
-}
-
-static const struct luaL_Reg view_reg[] =
-{
-	{"__gc", lua_web_close},
-	{"downloader", lua_web_set_downloader},
-	{"downloadAction", lua_web_download_action},
-	{"toScreen", lua_web_toscreen},
-	{"focus", lua_web_focus},
-	{"loading", lua_web_loading},
-	{"title", lua_web_title},
-	{"injectMouseMove", lua_web_inject_mouse_move},
-	{"injectMouseWheel", lua_web_inject_mouse_wheel},
-	{"injectMouseButton", lua_web_inject_mouse_button},
-	{"injectKey", lua_web_inject_key},
-	{"setMethod", lua_web_set_method},
-	{NULL, NULL},
-};
-
-static const struct luaL_Reg downloader_reg[] =
-{
-	{"__gc", lua_downloader_close},
-	{NULL, NULL},
-};
-
-static const struct luaL_Reg weblib[] =
-{
-	{"new", lua_web_new},
-	{"downloader", lua_downloader_new},
-	{NULL, NULL},
-};
 
-void te4_web_update() {
-	if (web_core) web_core->Update();
+		delete event;
+	}
 }
 
-void te4_web_init(lua_State *L) {
+void te4_web_setup(
+	int argc, char **gargv, char *spawnc,
+	void*(*mutex_create)(), void(*mutex_destroy)(void*), void(*mutex_lock)(void*), void(*mutex_unlock)(void*),
+	unsigned int (*make_texture)(int, int), void (*del_texture)(unsigned int), void (*texture_update)(unsigned int, int, int, const void*),
+	void (*key_mods)(bool*, bool*, bool*, bool*)
+	) {
+
+	web_mutex_create = mutex_create;
+	web_mutex_destroy = mutex_destroy;
+	web_mutex_lock = mutex_lock;
+	web_mutex_unlock = mutex_unlock;
+	web_make_texture = make_texture;
+	web_del_texture = del_texture;
+	web_texture_update = texture_update;
+	web_key_mods = key_mods;
 	if (!web_core) {
 		web_core = WebCore::Initialize(WebConfig());
 		web_core->set_surface_factory(new GLTextureSurfaceFactory());
@@ -649,9 +416,8 @@ void te4_web_init(lua_State *L) {
 		web_data_source = new PhysfsDataSource();
 		web_session->AddDataSource(WSLit("te4"), web_data_source);
 	}
+}
 
-	auxiliar_newclass(L, "web{view}", view_reg);
-	auxiliar_newclass(L, "web{downloader}", downloader_reg);
-	luaL_openlib(L, "core.webview", weblib, 0);
-	lua_settop(L, 0);
+void te4_web_initialize() {
+	te4_web_init_utils();
 }
diff --git a/src/web/web.h b/src/web/web.h
index 0cfba6eb0185717735b4e55df21818b503f900fb..9c48d336c5a485175b23c1c8a2c3a7bc759dc369 100644
--- a/src/web/web.h
+++ b/src/web/web.h
@@ -22,7 +22,18 @@
 #define WEB_TE4_API
 #endif
 
-WEB_TE4_API void te4_web_init(lua_State *L);
-WEB_TE4_API void te4_web_update();
+WEB_TE4_API void te4_web_setup(int argc, char **argv, char *spawn, void*(*mutex_create)(), void(*mutex_destroy)(void*), void(*mutex_lock)(void*), void(*mutex_unlock)(void*), unsigned int (*make_texture)(int, int), void (*del_texture)(unsigned int), void (*texture_update)(unsigned int, int, int, const void*), void (*)(bool*, bool*, bool*, bool*));
+WEB_TE4_API void te4_web_initialize();
+WEB_TE4_API void te4_web_do_update(void (*cb)(WebEvent*));
+WEB_TE4_API void te4_web_new(web_view_type *view, const char *url, int w, int h);
+WEB_TE4_API bool te4_web_close(web_view_type *view);
+WEB_TE4_API bool te4_web_toscreen(web_view_type *view, int *w, int *h, unsigned int *tex);
+WEB_TE4_API bool te4_web_loading(web_view_type *view);
+WEB_TE4_API void te4_web_focus(web_view_type *view, bool focus);
+WEB_TE4_API void te4_web_inject_mouse_move(web_view_type *view, int x, int y);
+WEB_TE4_API void te4_web_inject_mouse_wheel(web_view_type *view, int x, int y);
+WEB_TE4_API void te4_web_inject_mouse_button(web_view_type *view, int kind, bool up);
+WEB_TE4_API void te4_web_inject_key(web_view_type *view, int scancode, int asymb, const char *uni, int unilen, bool up);
+WEB_TE4_API void te4_web_download_action(web_view_type *view, long id, const char *path);
 
 #endif
diff --git a/tiled-maps/eyal2.tmx b/tiled-maps/eyal2.tmx
index b4724dda047dee5236ae2bea71abf4e2f71d256b..241c64dad1d023239e9c9aba4f638dde747b25bb 100644
--- a/tiled-maps/eyal2.tmx
+++ b/tiled-maps/eyal2.tmx
@@ -741,6 +741,12 @@
     <property name="type" value="&quot;world-encounter&quot;"/>
    </properties>
   </object>
+  <object name="Orc Breeding Pit quest" x="4645" y="1637" width="728" height="406">
+   <properties>
+    <property name="subtype" value="&quot;orc-breeding-pits&quot;"/>
+    <property name="type" value="&quot;world-encounter&quot;"/>
+   </properties>
+  </object>
  </objectgroup>
  <objectgroup name="addSpot#world-encounters" width="170" height="100">
   <object name="Random Zone" x="296" y="256" width="50" height="55">
@@ -953,5 +959,11 @@
     <property name="type" value="&quot;world-encounter&quot;"/>
    </properties>
   </object>
+  <object name="Breeding pits Spawn" x="5190" y="1894" width="17" height="19">
+   <properties>
+    <property name="subtype" value="&quot;orc-breeding-pits-spawn&quot;"/>
+    <property name="type" value="&quot;world-encounter&quot;"/>
+   </properties>
+  </object>
  </objectgroup>
 </map>