diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index b88e98e47db41cd56cca60a09a9e0c49d4e974e0..92b3ab9cda3d60232241cd429d76de2b1e423ebd 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -1207,16 +1207,10 @@ function _M:setupCommands()
 		end end,
 		[{"_g","ctrl"}] = function() if config.settings.cheat then
 --			self:registerDialog(require("mod.dialogs.DownloadCharball").new())
---			local f, err = loadfile("/data/general/events/cultists.lua")
---			print(f, err)
---			setfenv(f, setmetatable({level=self.level, zone=self.zone}, {__index=_G}))
---			print(pcall(f))
-
-			local o = game.zone:makeEntity(game.level, "object", {type="weapon", random_object=true}, nil, true)
-			o:identify(true)
-			game.zone:addEntity(game.level, o, "object", game.player.x,game.player.y)
-
-
+			local f, err = loadfile("/data/general/events/cultists.lua")
+			print(f, err)
+			setfenv(f, setmetatable({level=self.level, zone=self.zone}, {__index=_G}))
+			print(pcall(f))
 			end end,
 		[{"_f","ctrl"}] = function() if config.settings.cheat then
 			self.player.quests["love-melinda"] = nil
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 6d53d2c3f5292c230451490fd9d37870ec7988f4..e50d082836a1193b420ea8e0a2e83f6376ce32fc 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -1230,9 +1230,11 @@ end
 function _M:spellFriendlyFire()
 	local chance = (self:getLck() - 50) * 0.2
 	if self:isTalentActive(self.T_SPELLCRAFT) then chance = chance + self:getTalentLevelRaw(self.T_SPELLCRAFT) * 20 end
+	chance = chance + (self.combat_spell_friendlyfire or 0)
+
 	chance = 100 - chance
 	print("[SPELL] friendly fire chance", chance)
-	return chance
+	return util.bound(chance, 0, 100)
 end
 
 --- Gets mindpower
diff --git a/game/modules/tome/data/general/events/cultists.lua b/game/modules/tome/data/general/events/cultists.lua
index 61a2e73f3b5eb2f34e8aa81d0c55099aba9cc3b1..c6610fcc222be091e15dde30e590b23699d9fc18 100644
--- a/game/modules/tome/data/general/events/cultists.lua
+++ b/game/modules/tome/data/general/events/cultists.lua
@@ -17,6 +17,9 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
+-- Unique
+if game.state:doneEvent(event_id) then return end
+
 local list = {}
 
 local function check(x, y)
@@ -106,6 +109,8 @@ for i, p in ipairs(list) do
 			g:removeAllMOs()
 			game.level.map:updateMap(self.monolith_x, self.monolith_y)
 			if not game.level.turn_counter then
+				game.level.event_cultists.queen_x = self.monolith_x
+				game.level.event_cultists.queen_y = self.monolith_y
 				game.level.turn_counter = 10 * 150
 				game.level.max_turn_counter = 10 * 150
 				require("engine.ui.Dialog"):simplePopup("Cultist", "The cultist soul seems to be absorbed by the strange stone he was guarding. You feel like something is about to happen...")
@@ -130,6 +135,64 @@ game.zone.on_turn = function()
 		if game.level.turn_counter < 0 then
 			game.level.turn_counter = nil
 
+			local m = mod.class.NPC.new{
+				type = "demon", subtype = "major",
+				display = 'U',
+				name = "Shasshhiy'Kaish", color=colors.VIOLET, unique = true,
+--				resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/demon_major_shasshhiy_kaish.png", display_h=2, display_y=-1}}},
+				desc = [[This demon would be very attractive if not for the hovering crown of flames, the three tails and sharp claws. As you watch her you can almost feel pain.]],
+				killer_message = "and used for her perverted desires",
+				level_range = {25, nil}, exp_worth = 2,
+				female = 1,
+				faction = "fearscape",
+				rank = 4,
+				size_category = 4,
+				max_life = 250, life_rating = 27, fixed_rating = true,
+				infravision = 10,
+				stats = { str=25, dex=25, cun=32, mag=26, con=14 },
+				move_others=true,
+
+				instakill_immune = 1,
+				stun_immune = 0.5,
+				blind_immune = 0.5,
+				combat_armor = 0, combat_def = 0,
+
+				open_door = true,
+
+				autolevel = "warriormage",
+				ai = "tactical", ai_state = { talent_in=2, ai_move="move_astar", },
+				ai_tactic = resolvers.tactic"melee",
+				resolvers.inscriptions(3, "rune"),
+
+				body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
+
+				combat = { dam=resolvers.levelup(resolvers.mbonus(86, 20), 1, 1.4), atk=50, apr=30, dammod={str=1.1} },
+
+				resolvers.drops{chance=100, nb=5, {tome_drops="boss"} },
+
+				resolvers.talents{
+					[Talents.T_METEOR_RAIN]={base=4, every=5, max=7},
+					[Talents.T_INNER_DEMONS]={base=4, every=5, max=7},
+					[Talents.T_FLAME_OF_URH_ROK]={base=5, every=5, max=8},
+					[Talents.T_PACIFICATION_HEX]={base=5, every=5, max=8},
+					[Talents.T_BURNING_HEX]={base=5, every=5, max=8},
+					[Talents.T_BLOOD_LOCK]={base=5, every=5, max=8},
+					[Talents.T_SPELLCRAFT]=5,
+				},
+				resolvers.sustains_at_birth(),
+
+				inc_damage = {all=90},
+			}
+			m:resolve() m:resolve(nil, true)
+
+			local x, y = util.findFreeGrid(game.level.event_cultists.queen_x-1, game.level.event_cultists.queen_y, 10, true, {[engine.Map.ACTOR]=true})
+			if x then
+				m.inc_damage.all = m.inc_damage.all - 10 * (game.level.event_cultists.kill)
+				m.max_life = m.max_life * (14 - game.level.event_cultists.kill) / 14
+
+				game.zone:addEntity(game.level, m, "actor", x, y) 
+				require("engine.ui.Dialog"):simplePopup("Cultist", "A terrible shout thunders across the level: 'Come my darling, come, I will be ssssooo *nice* to you!'")
+			end
 		elseif  game.level.turn_counter == 10 * 130 or
 			game.level.turn_counter == 10 * 110 or
 			game.level.turn_counter == 10 * 90 or
diff --git a/game/modules/tome/data/general/events/drake-cave.lua b/game/modules/tome/data/general/events/drake-cave.lua
index c973b0e66a7acde9402f83fdb6961d09cc888e8f..df01aedb090ca48170c12a1ec4e232db4d8ae2fd 100644
--- a/game/modules/tome/data/general/events/drake-cave.lua
+++ b/game/modules/tome/data/general/events/drake-cave.lua
@@ -66,7 +66,7 @@ local changer = function(id, kind)
 			object = {
 				class = "engine.generator.object.Random",
 				filters = {{type="gem"}},
-				nb_object = {15, 25},
+				nb_object = {25, 35},
 			},
 			trap = {
 				class = "engine.generator.trap.Random",
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..e988d683016e2d35164ae0df3336f51e3f3b7a8a
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..474323e775481e375ad6824a714885a2260083ff
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..1a49fc9be20c00dbc779aaed3427ae980f7551eb
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..80eb58fcb13be7756f438433ac663059f321997f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_05.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..63b06c7850162e7b9be359fb854ad21824a6e6af
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_05.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_06.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..450c7e774b5bb0992a2928426871135d1f4ece62
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_06.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_07.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b1132869ead7330dad6bbd8ac3084f39cdda744
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_07.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_08.png b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f49a6306e5c0ee080e29766de0f31f37c334752
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/bluish_moonstone_08.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_01.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c2e022408403a3aca4f6713783c7d9de16fdba8
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_02.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ce0480c4de11e72d505b0297111dace860936dd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_02.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_03.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f2e73c7d048c20bdeb38a58c666e4c85b4bbacd
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_03.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_04.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8b8f6f4ac1159677dbe90af234a858299701449
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_04.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_05.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ad30bfd582c4d07bc312bc73277994f24d62cf2
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_05.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_06.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ae60e2fb83cf8dd52c97b793c2ba6f8cd4b75a7
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_06.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_07.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccb44a4306d456a572b2a742da9bd8c577407c8f
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_07.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_08.png b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6dc72d98b2af75265e2922b75fb929fcc49e7c1
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/terrain/darkgreen_moonstone_08.png differ