diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 82fdcef2f99a5ed70b3767e84e20c32388a07142..0793540eebf1627e261b268934c1780eb6b61801 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -1373,7 +1373,7 @@ function _M:setupCommands()
 			print("===============")
 		end end,
 		[{"_g","ctrl"}] = function() if config.settings.cheat then
-			self.player:addParticles(engine.Particles.new("shader_ring_rotating", 1, {rotation=0, radius=1.1, img="lightningshield"}, {type="lightningshield"}))
+			self.player:addParticles(engine.Particles.new("meleestorm", 1, {}))
 
 do return end
 			local f, err = loadfile("/data/general/events/fearscape-portal.lua")
diff --git a/game/modules/tome/data/gfx/particles/meleestorm.lua b/game/modules/tome/data/gfx/particles/meleestorm.lua
new file mode 100644
index 0000000000000000000000000000000000000000..2795b6b4192b666eb306789cc3dd2e06de7be41e
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/meleestorm.lua
@@ -0,0 +1,50 @@
+-- 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 rot = rng.range(0,359)
+local img = img or "spinningwinds_black"
+local radius = radius or 1
+
+use_shader = {type="spinningwinds", ellipsoidalFactor={1,1}, time_factor=2000, noup=0.0, verticalIntensityAdjust=-3.0}
+base_size = 64
+
+local first = true
+return {
+	system_rotation = rot, system_rotationv = 0,
+	generator = function()
+	return {
+		trail = 0,
+		life = 8,
+		size = 64, sizev = 8 * radius, 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 = 1, av = -0.05, aa = 0,
+	}
+end, },
+function(self)
+	if first then self.ps:emit(1) first = false end
+end,
+1, "particles_images/"..img
diff --git a/game/modules/tome/data/gfx/particles_images/spinningwinds_black.png b/game/modules/tome/data/gfx/particles_images/spinningwinds_black.png
index 293f00cba2c6f38ff7e448aae5442b74a43bc4a7..4659483a329432853e609d23097037d190c404ca 100644
Binary files a/game/modules/tome/data/gfx/particles_images/spinningwinds_black.png and b/game/modules/tome/data/gfx/particles_images/spinningwinds_black.png differ
diff --git a/game/modules/tome/data/gfx/particles_images/spinningwinds_blue.png b/game/modules/tome/data/gfx/particles_images/spinningwinds_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..52844694a079b6b499fd636813fa9411e854be5a
Binary files /dev/null and b/game/modules/tome/data/gfx/particles_images/spinningwinds_blue.png differ
diff --git a/game/modules/tome/data/gfx/particles_images/spinningwinds_red.png b/game/modules/tome/data/gfx/particles_images/spinningwinds_red.png
new file mode 100644
index 0000000000000000000000000000000000000000..58143775f89e056597ebfb54dea5b0e5d96c3db1
Binary files /dev/null and b/game/modules/tome/data/gfx/particles_images/spinningwinds_red.png differ
diff --git a/game/modules/tome/data/talents/techniques/2hweapon.lua b/game/modules/tome/data/talents/techniques/2hweapon.lua
index 94d30992a07006fc1e49dc0aa554180cbc91673f..47cd01958b276864652bdd852805d400e3c4633d 100644
--- a/game/modules/tome/data/talents/techniques/2hweapon.lua
+++ b/game/modules/tome/data/talents/techniques/2hweapon.lua
@@ -49,6 +49,9 @@ newTalent{
 			end
 		end)
 
+		self:addParticles(Particles.new("meleestorm", 1, {}))
+		self:addParticles(Particles.new("meleestorm", 1, {}))
+
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/talents/techniques/dualweapon.lua b/game/modules/tome/data/talents/techniques/dualweapon.lua
index 2a296d34b02f0a16c22e027fe229a99d43efef00..646ffea61ac91d681b71c5bda096e18c9431d4b1 100644
--- a/game/modules/tome/data/talents/techniques/dualweapon.lua
+++ b/game/modules/tome/data/talents/techniques/dualweapon.lua
@@ -330,6 +330,9 @@ newTalent{
 			end
 		end)
 
+		self:addParticles(Particles.new("meleestorm", 1, {}))
+		self:addParticles(Particles.new("meleestorm", 1, {}))
+
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/talents/techniques/weaponshield.lua b/game/modules/tome/data/talents/techniques/weaponshield.lua
index a938789a49b6b202f722fabdd8f00e301bf77114..0da034ecffb22c69f8c01679419ece8532dc35a4 100644
--- a/game/modules/tome/data/talents/techniques/weaponshield.lua
+++ b/game/modules/tome/data/talents/techniques/weaponshield.lua
@@ -264,6 +264,9 @@ newTalent{
 			end
 		end)
 
+		self:addParticles(Particles.new("meleestorm", 1, {radius=2}))
+		self:addParticles(Particles.new("meleestorm", 1, {radius=2}))
+
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/talents/uber/dex.lua b/game/modules/tome/data/talents/uber/dex.lua
index 55836267d5eaf519f38d6556578abfe8942fbfa7..3ea08786b86b980bf6e75937cc17e8d4e02f15c2 100644
--- a/game/modules/tome/data/talents/uber/dex.lua
+++ b/game/modules/tome/data/talents/uber/dex.lua
@@ -101,6 +101,8 @@ uberTalent{
 				end
 			end
 		end)
+		self:addParticles(Particles.new("meleestorm", 1, {radius=4, img="spinningwinds_blue"}))
+		self:addParticles(Particles.new("meleestorm", 1, {radius=4, img="spinningwinds_blue"}))
 
 		return true
 	end,