diff --git a/game/modules/tome/data/gfx/particles/ice_shards.lua b/game/modules/tome/data/gfx/particles/ice_shards.lua
new file mode 100644
index 0000000000000000000000000000000000000000..008beaaafc1ccfaf1ed78b2beb73d2d9ede01e4a
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/ice_shards.lua
@@ -0,0 +1,63 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 Nicolas Casalini
+--
+-- This 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
+local breakdir = math.rad(rng.range(-8, 8))
+ray.dir = math.atan2(ty, tx)
+ray.size = math.sqrt(tx*tx+ty*ty)
+
+local starts = {}
+for i = 1, 4 do
+	starts[#starts+1] = { a = math.rad(rng.range(0, 360)), r = rng.range(6, 20) }
+end
+
+-- Populate the beam based on the forks
+return { generator = function()
+	local a = ray.dir
+	local rad = rng.range(-3,3)
+	local s = rng.table(starts)
+	local ra = s.a
+	local r = s.r
+
+	return {
+		life = 10,
+		size = rng.range(4, 6), sizev = -0.1, sizea = 0,
+
+		x = r * math.cos(a) + 2 * math.cos(ra), xv = 0, xa = 0,
+		y = r * math.sin(a) + 2 * math.sin(ra), yv = 0, ya = 0,
+		dir = a, dirv = 0, dira = 0,
+		vel = ray.size / 10, velv = 0, vela = 0,
+
+		r = 0,   rv = 0, ra = 0,
+		g = rng.range(170, 210)/255,   gv = 0, ga = 0,
+		b = rng.range(200, 255)/255,   gv = 0, ga = 0,
+		a = rng.range(230, 225)/255,   av = 0, aa = 0,
+	}
+end, },
+function(self)
+	self.nb = (self.nb or 0) + 1
+	if self.nb < 3 then
+		self.ps:emit(30 * 4)
+	end
+end,
+10*30*4*2
diff --git a/game/modules/tome/data/gfx/particles/uttercold.lua b/game/modules/tome/data/gfx/particles/uttercold.lua
new file mode 100644
index 0000000000000000000000000000000000000000..97c728a3aa65e50770ef39fe421d3f44e3a994bc
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/uttercold.lua
@@ -0,0 +1,44 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 Nicolas Casalini
+--
+-- This 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 { generator = function()
+	local ad = rng.range(0, 360)
+	local a = math.rad(ad)
+	local dir = math.rad(ad)
+	local r = rng.range(8, 18)
+
+	return {
+		life = 20,
+		size = 2, sizev = 0.3, sizea = -0.01,
+
+		x = r * math.cos(a), xv = 0, xa = 0,
+		y = r * math.sin(a), yv = 0, ya = 0,
+		dir = 0, dirv = 0, dira = 0,
+		vel = 0, velv = 0, vela = 0,
+
+		r = 0,   rv = 0, ra = 0,
+		g = rng.range(170, 210)/255,   gv = 0, ga = 0,
+		b = rng.range(200, 255)/255,   gv = 0, ga = 0,
+		a = rng.range(230, 225)/255,   av = 0, aa = 0,
+	}
+end, },
+function(self)
+	self.ps:emit(4)
+end,
+80