diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm
index a21d1a32d5b..8ef21cef047 100644
--- a/code/game/magic/cultist/ritual.dm
+++ b/code/game/magic/cultist/ritual.dm
@@ -7,10 +7,23 @@ var/wordblood = null
var/wordjoin = null
var/wordtech = null
var/worddestr = null
+var/wordother = null
+var/wordhear = null
+var/wordfree = null
+var/wordhide
var/runedec = 0
+/client/proc/check_words() // -- Urist
+ set category = "Special Verbs"
+ set name = "Check Rune Words"
+ set desc = "Check the rune-word meaning"
+ if(!wordtravel)
+ runerandom()
+ usr << "[wordtravel] is travel, [wordblood] is blood, [wordjoin] is join, [wordhell] is Hell, [worddestr] is destroy, [wordtech] is technology, [wordself] is self, [wordsee] is see, [wordfree] is freedom, [wordhear] is hear, [wordother] is other, [wordhide] is hide."
+
+
/proc/runerandom() //randomizes word meaning
- var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq")
+ var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri", "orkan", "allaq")
wordtravel=pick(runewords)
runewords-=wordtravel
wordself=pick(runewords)
@@ -27,6 +40,14 @@ var/runedec = 0
runewords-=wordtech
worddestr=pick(runewords)
runewords-=worddestr
+ wordother=pick(runewords)
+ runewords-=wordother
+ wordhear=pick(runewords)
+ runewords-=wordhear
+ wordfree=pick(runewords)
+ runewords-=wordfree
+ wordhide=pick(runewords)
+ runewords-=wordhide
/obj/rune
anchored = 1
@@ -42,6 +63,7 @@ var/runedec = 0
word3
// travel self [word] - Teleport to random [rune with word destination matching]
+// travel other [word] - Portal to rune with word destination matching
// see blood Hell - Create a new tome
// join blood self - Incorporate person over the rune into the group
// Hell join self - Summon TERROR
@@ -49,12 +71,23 @@ var/runedec = 0
// travel blood self - Drain blood
// see Hell join - See invisible
// blood join Hell - Raise dead
-// blood see destroy - Hide nearby runes
-// destroy see blood - Reveal nearby runes
+
+// hide see blood - Hide nearby runes
+// destroy hide blood - Reveal nearby runes
+
// Hell travel self - Leave your body and ghost around
// blood see travel - Manifest a ghost into a mortal body
// Hell tech join - Imbue a rune into a talisman
// Hell blood join - Sacrifice rune
+// destroy travel self - Wall rune
+// join other self - Summon cultist rune
+// freedom join other - Freeing rune
+
+// destroy see hear - Deafening rune
+// destroy see other - Blinding rune
+// destroy see blood - BLOOD BOIL
+
+// other hear blood - Communication rune
examine()
if(!cultists.Find(usr))
@@ -68,7 +101,8 @@ var/runedec = 0
del(src)
return
else if(istype(I, /obj/item/weapon/storage/bible) && usr.mind && (usr.mind.assigned_role == "Chaplain"))
- user << "\blue You banish the vile magic with the blessing of God!"
+ var/obj/item/weapon/storage/bible/bible = I
+ user << "\blue You banish the vile magic with the blessing of [bible.deity_name]!"
del(src)
return
return
@@ -77,33 +111,17 @@ var/runedec = 0
if(!cultists.Find(user))
user << "You can't mouth the arcane scratchings without fumbling over them."
return
+ if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle) || user.ear_deaf)
+ user << "You need to be able to both speak and hear to use runes."
+ return
if(!word1 || !word2 || !word3 || prob(usr.brainloss))
return fizzle()
- if(!src.visibility)
- src.visibility=1
+// if(!src.visibility)
+// src.visibility=1
if(word1 == wordtravel && word2 == wordself)
return teleport(src.word3)
if(word1 == wordsee && word2 == wordblood && word3 == wordhell)
return tomesummon()
-/*
- if(word1 == "ire" && word2 == "certum" && word3 == "jatkaa")
- var/list/temprunes = list()
- var/list/runes = list()
- for(var/obj/rune/R in world)
- if(istype(R, /obj/rune))
- if(R.word1 == "ire" && R.word2 == "certum" && R.word3 == "jatkaa")
- runes.Add(R)
- var/atom/a = get_turf_loc(R)
- temprunes.Add(a.loc)
- var/chosen = input("Scry which rune?", "Scrying") in temprunes
- if(!chosen)
- return fizzle()
- var/selection_position = temprunes.Find(chosen)
- var/obj/rune/chosenrune = runes[selection_position]
- user.client.eye = chosenrune
- user:current = chosenrune
- user.reset_view(chosenrune)
-*/
if(word1 == wordjoin && word2 == wordblood && word3 == wordself)
return convert()
if(word1 == wordhell && word2 == wordjoin && word3 == wordself)
@@ -116,7 +134,7 @@ var/runedec = 0
return seer()
if(word1 == wordblood && word2 == wordjoin && word3 == wordhell)
return raise()
- if(word1 == wordblood && word2 == wordsee && word3 == worddestr)
+ if(word1 == wordhide && word2 == wordsee && word3 == wordblood)
return obscure(4)
if(word1 == wordhell && word2 == wordtravel && word3 == wordself)
return ajourney()
@@ -126,8 +144,24 @@ var/runedec = 0
return talisman()
if(word1 == wordhell && word2 == wordblood && word3 == wordjoin)
return sacrifice()
- if(word1 == worddestr && word2 == wordsee && word3 == wordblood)
+ if(word1 == worddestr && word2 == wordhide && word3 == wordblood)
return revealrunes(src)
+ if(word1 == worddestr && word2 == wordtravel && word3 == wordself)
+ return wall()
+ if(word1 == wordfree && word2 == wordjoin && word3 == wordother)
+ return freedom()
+ if(word1 == wordjoin && word2 == wordother && word3 == wordself)
+ return cultsummon()
+ if(word1 == worddestr && word2 == wordsee && word3 == wordhear)
+ return deafen()
+ if(word1 == worddestr && word2 == wordsee && word3 == wordother)
+ return blind()
+ if(word1 == worddestr && word2 == wordsee && word3 == wordblood)
+ return bloodboil()
+ if(word1 == wordother && word2 == wordhear && word3 == wordblood)
+ return communicate()
+ if(word1 == wordtravel && word2 == wordother)
+ return itemport(src.word3)
else
return fizzle()
@@ -170,7 +204,7 @@ var/runedec = 0
if(word1 == wordblood && word2 == wordjoin && word3 == wordhell)
icon_state = "1"
return
- if(word1 == wordblood && word2 == wordsee && word3 == worddestr)
+ if(word1 == wordhide && word2 == wordsee && word3 == wordblood)
icon_state = "1"
src.icon += rgb(0, 0 , 255)
return
@@ -188,10 +222,42 @@ var/runedec = 0
if(word1 == wordhell && word2 == wordblood && word3 == wordjoin)
icon_state = "[rand(1,6)]"
src.icon += rgb(255, 255, 255)
- if(word1 == worddestr && word2 == wordsee && word3 == wordblood)
+ return
+ if(word1 == worddestr && word2 == wordhide && word3 == wordblood)
icon_state = "4"
src.icon += rgb(255, 255, 255)
-
+ return
+ if(word1 == worddestr && word2 == wordtravel && word3 == wordself)
+ icon_state = "1"
+ src.icon += rgb(255, 0, 0)
+ return
+ if(word1 == wordfree && word2 == wordjoin && word3 == wordother)
+ icon_state = "4"
+ src.icon += rgb(255, 0, 255)
+ return
+ if(word1 == wordjoin && word2 == wordother && word3 == wordself)
+ icon_state = "2"
+ src.icon += rgb(0, 255, 0)
+ return
+ if(word1 == worddestr && word2 == wordsee && word3 == wordhear)
+ icon_state = "4"
+ src.icon += rgb(0, 255, 0)
+ return
+ if(word1 == worddestr && word2 == wordsee && word3 == wordother)
+ icon_state = "4"
+ src.icon += rgb(0, 0, 255)
+ return
+ if(word1 == worddestr && word2 == wordsee && word3 == wordblood)
+ icon_state = "4"
+ src.icon += rgb(255, 0, 0)
+ return
+ if(word1 == wordother && word2 == wordhear && word3 == wordblood)
+ icon_state = "3"
+ src.icon += rgb(200, 0, 0)
+ return
+ if(word1 == wordtravel && word2 == wordother)
+ icon_state = "1"
+ src.icon += rgb(200, 0, 0)
return
icon_state="[rand(1,6)]" //random shape and color for dummy runes
src.icon -= rgb(255,255,255)
@@ -205,6 +271,18 @@ var/runedec = 0
w_class = 3.0
flags = FPRINT | TABLEPASS
+ attack(mob/M as mob, mob/user as mob)
+ if(!cultists.Find(user))
+ return ..()
+ if(cultists.Find(M))
+ return
+ M.fireloss += rand(5,15)
+ for(var/mob/O in viewers(M, null))
+ O.show_message(text("\red [] beats [] with the arcane tome!", user, M), 1)
+ M << "\red You feel searing heat inside!"
+
+
+
attack_self(mob/user as mob)
if(!wordtravel)
runerandom()
@@ -228,7 +306,7 @@ var/runedec = 0
else
if(alert("Scribe a rune?",,"Yes","No")=="No")
return
- var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar")
+ var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")
var/w1
var/w2
var/w3
@@ -243,12 +321,15 @@ var/runedec = 0
user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world."
user.bruteloss += 1
if(do_after(user, 50))
+ var/mob/living/carbon/human/H = user
var/obj/rune/R = new /obj/rune(user.loc)
user << "\red You finish drawing the arcane markings of the Geometer."
R.word1 = w1
R.word2 = w2
R.word3 = w3
R.check_icon()
+ R.blood_DNA = H.dna.unique_enzymes
+ R.blood_type = H.b_type
return
else
user << "The book seems full of illegible scribbles. Is this a joke?"
@@ -262,104 +343,164 @@ var/runedec = 0
usr << "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though."
/obj/item/weapon/tome/imbued //admin tome, spawns working runes without waiting
-
+ w_class = 2.0
+ var/cultistsonly = 1
attack_self(mob/user as mob)
+ if(src.cultistsonly && !cultists.Find(usr))
+ return
if(!wordtravel)
runerandom()
if(user)
var/r
if (!istype(user.loc,/turf))
user << "\red You do not have enough space to write a proper rune."
- var/list/runes = list("teleport", "tome", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "astral journey", "manifest", "imbue talisman", "sacrifice")
- r = input("Choose a rune to scribe", "Rune Scribing") in runes
+ var/list/runes = list("teleport", "itemport", "tome", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate")
+ r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable.
+ var/obj/rune/R = new /obj/rune
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ R.blood_DNA = H.dna.unique_enzymes
+ R.blood_type = H.b_type
switch(r)
if("teleport")
- var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar")
+ var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")
var/beacon
if(usr)
beacon = input("Select the last rune", "Rune Scribing") in words
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordtravel
R.word2=wordself
R.word3=beacon
+ R.loc = user.loc
+ R.check_icon()
+ if("itemport")
+ var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")
+ var/beacon
+ if(usr)
+ beacon = input("Select the last rune", "Rune Scribing") in words
+ R.word1=wordtravel
+ R.word2=wordother
+ R.word3=beacon
+ R.loc = user.loc
R.check_icon()
if("tome")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordsee
R.word2=wordblood
R.word3=wordhell
+ R.loc = user.loc
R.check_icon()
if("convert")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordjoin
R.word2=wordblood
R.word3=wordself
+ R.loc = user.loc
R.check_icon()
if("tear in reality")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordhell
R.word2=wordjoin
R.word3=wordself
+ R.loc = user.loc
R.check_icon()
if("emp")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=worddestr
R.word2=wordsee
R.word3=wordtech
+ R.loc = user.loc
R.check_icon()
if("drain")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordtravel
R.word2=wordblood
R.word3=wordself
+ R.loc = user.loc
R.check_icon()
if("seer")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordsee
R.word2=wordhell
R.word3=wordjoin
+ R.loc = user.loc
R.check_icon()
if("raise")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordblood
R.word2=wordjoin
R.word3=wordhell
+ R.loc = user.loc
R.check_icon()
if("obscure")
- var/obj/rune/R = new /obj/rune(user.loc)
- R.word1=wordblood
+ R.word1=wordhide
R.word2=wordsee
- R.word3=worddestr
+ R.word3=wordblood
+ R.loc = user.loc
R.check_icon()
if("astral journey")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordhell
R.word2=wordtravel
R.word3=wordself
+ R.loc = user.loc
R.check_icon()
if("manifest")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordblood
R.word2=wordsee
R.word3=wordtravel
+ R.loc = user.loc
R.check_icon()
if("imbue talisman")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordhell
R.word2=wordtech
R.word3=wordjoin
+ R.loc = user.loc
R.check_icon()
if("sacrifice")
- var/obj/rune/R = new /obj/rune(user.loc)
R.word1=wordhell
R.word2=wordblood
R.word3=wordjoin
+ R.loc = user.loc
R.check_icon()
- if("revealrunes")
- var/obj/rune/R = new /obj/rune(user.loc)
+ if("reveal")
+ R.word1=worddestr
+ R.word2=wordhide
+ R.word3=wordblood
+ R.loc = user.loc
+ R.check_icon()
+ if("wall")
+ R.word1=worddestr
+ R.word2=wordtravel
+ R.word3=wordself
+ R.loc = user.loc
+ R.check_icon()
+ if("freedom")
+ R.word1=wordfree
+ R.word2=wordjoin
+ R.word3=wordother
+ R.loc = user.loc
+ R.check_icon()
+ if("cultsummon")
+ R.word1=wordjoin
+ R.word2=wordother
+ R.word3=wordself
+ R.loc = user.loc
+ R.check_icon()
+ if("deafen")
+ R.word1=worddestr
+ R.word2=wordsee
+ R.word3=wordhear
+ R.loc = user.loc
+ R.check_icon()
+ if("blind")
+ R.word1=worddestr
+ R.word2=wordsee
+ R.word3=wordother
+ R.loc = user.loc
+ R.check_icon()
+ if("bloodboil")
R.word1=worddestr
R.word2=wordsee
R.word3=wordblood
+ R.loc = user.loc
+ R.check_icon()
+ if("communicate")
+ R.word1=wordother
+ R.word2=wordhear
+ R.word3=wordblood
+ R.loc = user.loc
R.check_icon()
/obj/item/weapon/paperscrap
@@ -389,7 +530,7 @@ var/runedec = 0
var/uses = 0
attack_self(mob/user as mob)
- usr.bruteloss+=10
+ usr.bruteloss+=5
switch(imbue)
if("newtome")
call(/obj/rune/proc/tomesummon)()
@@ -399,10 +540,14 @@ var/runedec = 0
call(/obj/rune/proc/obscure)(2)
if("revealrunes")
call(/obj/rune/proc/revealrunes)(src)
- if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar")
+ if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan")
call(/obj/rune/proc/teleport)(imbue)
if("communicate")
call(/obj/rune/proc/communicate)()
+ if("deafen")
+ call(/obj/rune/proc/deafen)()
+ if("blind")
+ call(/obj/rune/proc/blind)()
if("supply")
supply()
if(src && src.imbue!="supply")
diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm
new file mode 100644
index 00000000000..0d3d0a9031b
--- /dev/null
+++ b/code/game/magic/cultist/runes.dm
@@ -0,0 +1,886 @@
+var/list/sacrificed = list()
+
+/obj/rune
+/////////////////////////////////////////FIRST RUNE
+ proc
+ teleport(var/key)
+ var/allrunesloc[]
+ allrunesloc = new/list()
+ var/index = 0
+ // var/tempnum = 0
+ for(var/obj/rune/R in world)
+ if(R == src)
+ continue
+ if(R.word1 == wordtravel && R.word2 == wordself && R.word3 == key)
+ index++
+ allrunesloc.len = index
+ allrunesloc[index] = R.loc
+ if(allrunesloc && index != 0)
+ if(istype(src,/obj/rune))
+ usr.say("Sas'so c'arta forbici!")
+ else
+ usr.whisper("Sas'so c'arta forbici!")
+ usr.visible_message("\red [usr] disappears in a flash of red light!", \
+ "\red You feel as your body gets dragged through the dimension of Nar-Sie!", \
+ "\red You hear a sickening crunch and sloshing of viscera.")
+ usr.loc = allrunesloc[rand(1,index)]
+ return
+ if(istype(src,/obj/rune))
+ return fizzle() //Use friggin manuals, Dorf, your list was of zero length.
+ else
+ call(/obj/rune/proc/fizzle)()
+ return
+
+
+ itemport(var/key)
+// var/allrunesloc[]
+// allrunesloc = new/list()
+// var/index = 0
+ // var/tempnum = 0
+ var/culcount = 0
+ var/obj/rune/IP = null
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ culcount++
+ for(var/obj/rune/R in world)
+ if(R == src)
+ continue
+ if(R.word1 == wordtravel && R.word2 == wordother && R.word3 == key)
+ IP = R
+ if(culcount>=3)
+ usr.say("Sas'so c'arta forbici tarem!")
+ usr.visible_message("\red You feel air moving from the rune - like as it was swapped with somewhere else.", \
+ "\red You feel air moving from the rune - like as it was swapped with somewhere else.", \
+ "\red You smell ozone.")
+ for(var/obj/O in src.loc)
+ if(!O.anchored)
+ O.loc = IP.loc
+ for(var/mob/M in src.loc)
+ M.loc = IP.loc
+ return
+
+ return fizzle()
+
+
+/////////////////////////////////////////SECOND RUNE
+
+ tomesummon()
+ if(istype(src,/obj/rune))
+ usr.say("N'ath reth sh'yro eth d'raggathnor!")
+ else
+ usr.whisper("N'ath reth sh'yro eth d'raggathnor!")
+ usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a book lies.", \
+ "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a book.", \
+ "\red You hear a pop and smell ozone.")
+ if(istype(src,/obj/rune))
+ new /obj/item/weapon/tome(src.loc)
+ else
+ new /obj/item/weapon/tome(usr.loc)
+ del(src)
+ return
+
+
+
+/////////////////////////////////////////THIRD RUNE
+
+ convert()
+ for(var/mob/living/carbon/human/M in src.loc)
+ if(cultists.Find(M))
+ return fizzle()
+ if(M.stat==2)
+ return fizzle()
+ if(ticker.mode.name == "cult")
+ var/list/uncons = call(/datum/game_mode/cult/proc/get_unconvertables)()
+ if(M.mind in uncons)
+ return fizzle()
+ ticker.mode:add_cultist(M.mind)
+ usr.say("Mah'weyh pleggh at e'ntrath!")
+ M.visible_message("\red [M] writhes in pain as the markings below him glow a bloody red.", \
+ "\red AAAAAAHHHH!.", \
+ "\red You hear an anguished scream.")
+ M << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
+ M << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
+ if (ticker.mode.name == "cult")
+ ticker.mode:grant_runeword(M)
+ cultists.Add(M)
+ return
+ return fizzle()
+
+
+
+/////////////////////////////////////////FOURTH RUNE
+
+ tearreality()
+ var/cultist_count = 0
+ for(var/mob/M in range(1,src))
+ if(cultists.Find(M))
+ M.say("Tok-lyr rqa'nap g'lt-ulotf!")
+ cultist_count += 1
+ if(cultist_count >= 9)
+ var/obj/machinery/the_singularity/S = new /obj/machinery/the_singularity/(src.loc)
+ S.icon = 'magic_terror.dmi'
+ S.name = "Tear in the Fabric of Reality"
+ S.desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees."
+ S.pixel_x = -89
+ S.pixel_y = -85
+ if(ticker.mode.name == "cult")
+ ticker.mode:eldergod = 0
+ return
+ else
+ return
+
+/////////////////////////////////////////FIFTH RUNE
+
+ emp(var/U,var/range_red) //range_red - var which determines by which number to reduce the default emp range, U is the source loc, needed because of talisman emps which are held in hand at the moment of using and that apparently messes things up -- Urist
+ if(istype(src,/obj/rune))
+ usr.say("Ta'gh fara'qha fel d'amar det!")
+ else
+ usr.whisper("Ta'gh fara'qha fel d'amar det!")
+ playsound(U, 'Welder2.ogg', 25, 1)
+ var/turf/T = get_turf(U)
+ if(T)
+ T.hotspot_expose(700,125)
+
+ var/rune = src // detaching the proc - in theory
+ src = null
+
+ var/obj/overlay/pulse = new/obj/overlay ( T )
+ pulse.icon = 'effects.dmi'
+ pulse.icon_state = "emppulse"
+ pulse.name = "emp pulse"
+ pulse.anchored = 1
+ spawn(20)
+ del(pulse)
+
+ for(var/obj/item/weapon/W in range(world.view-range_red, T))
+
+ if (istype(W, /obj/item/assembly/m_i_ptank) || istype(W, /obj/item/assembly/r_i_ptank) || istype(W, /obj/item/assembly/t_i_ptank))
+
+ var/fuckthis
+ if(istype(W:part1,/obj/item/weapon/tank/plasma))
+ fuckthis = W:part1
+ fuckthis:ignite()
+ if(istype(W:part2,/obj/item/weapon/tank/plasma))
+ fuckthis = W:part2
+ fuckthis:ignite()
+ if(istype(W:part3,/obj/item/weapon/tank/plasma))
+ fuckthis = W:part3
+ fuckthis:ignite()
+
+
+ for(var/mob/living/M in viewers(world.view-range_red, T))
+
+ if(!istype(M, /mob/living)) continue
+
+ if (istype(M, /mob/living/silicon))
+ M.fireloss += 25
+ flick("noise", M:flash)
+ M << "\red *BZZZT*"
+ M << "\red Warning: Electromagnetic pulse detected."
+ if(istype(M, /mob/living/silicon/ai))
+ if (prob(30))
+ switch(pick(1,2,3)) //Add Random laws.
+ if(1)
+ M:cancel_camera()
+ if(2)
+ M:lockdown()
+ if(3)
+ M:ai_call_shuttle()
+ continue
+
+
+ M << "\red Your equipment malfunctions." //Yeah, i realise that this WILL
+ //show if theyre not carrying anything
+ //that is affected. lazy.
+ if (locate(/obj/item/weapon/cloaking_device, M))
+ for(var/obj/item/weapon/cloaking_device/S in M)
+ S.active = 0
+ S.icon_state = "shield0"
+
+ if (locate(/obj/item/weapon/gun/energy, M))
+ for(var/obj/item/weapon/gun/energy/G in M)
+ G.charges = 0
+ G.update_icon()
+
+ if ((istype(M, /mob/living/carbon/human)) && (istype(M:glasses, /obj/item/clothing/glasses/thermal)))
+ M << "\red Your thermals malfunction."
+ M.eye_blind = 3
+ M.eye_blurry = 5
+ M.disabilities |= 1
+ spawn(100)
+ M.disabilities &= ~1
+
+ if (locate(/obj/item/device/radio, M))
+ for(var/obj/item/device/radio/R in M) //Add something for the intercoms.
+ R.broadcasting = 0
+ R.listening = 0
+
+ if (locate(/obj/item/device/flash, M))
+ for(var/obj/item/device/flash/F in M) //Add something for the intercoms.
+ F.attack_self()
+
+ if (locate(/obj/item/weapon/baton, M))
+ for(var/obj/item/weapon/baton/B in M) //Add something for the intercoms.
+ B.charges = 0
+
+ if(locate(/obj/item/clothing/under/chameleon, M))
+ for(var/obj/item/clothing/under/chameleon/C in M) //Add something for the intercoms.
+ M << "\red Your jumpsuit malfunctions"
+ C.name = "psychedelic"
+ C.desc = "Groovy!"
+ C.icon_state = "psyche"
+ C.color = "psyche"
+ spawn(200)
+ C.name = "Black Jumpsuit"
+ C.icon_state = "bl_suit"
+ C.color = "black"
+ C.desc = null
+
+ M << "\red BZZZT"
+
+
+ for(var/obj/machinery/A in range(world.view-range_red, T))
+ A.use_power(7500)
+
+ var/obj/overlay/pulse2 = new/obj/overlay ( A.loc )
+ pulse2.icon = 'effects.dmi'
+ pulse2.icon_state = "empdisable"
+ pulse2.name = "emp sparks"
+ pulse2.anchored = 1
+ pulse2.dir = pick(cardinal)
+
+ spawn(10)
+ del(pulse2)
+
+ if(istype(A, /obj/machinery/turret))
+ A:enabled = 0
+ A:lasers = 0
+ A:power_change()
+
+ if(istype(A, /obj/machinery/computer) && prob(20))
+ A:set_broken()
+
+ if(istype(A, /obj/machinery/firealarm) && prob(50))
+ A:alarm()
+
+ if(istype(A, /obj/machinery/power/smes))
+ A:online = 0
+ A:charging = 0
+ A:output = 0
+ A:charge -= 1e6
+ if (A:charge < 0)
+ A:charge = 0
+ spawn(100)
+ A:output = initial(A:output)
+ A:charging = initial(A:charging)
+ A:online = initial(A:online)
+
+ if(istype(A, /obj/machinery/door))
+ if(prob(20) && (istype(A,/obj/machinery/door/airlock) || istype(A,/obj/machinery/door/window)) )
+ A:open()
+ if(prob(40))
+ if(A:secondsElectrified != 0) continue
+ A:secondsElectrified = -1
+ spawn(300)
+ A:secondsElectrified = 0
+
+ if(istype(A, /obj/machinery/power/apc))
+ if(A:cell)
+ A:cell:charge -= 1000
+ if (A:cell:charge < 0)
+ A:cell:charge = 0
+ A:lighting = 0
+ A:equipment = 0
+ A:environ = 0
+ spawn(600)
+ A:equipment = 3
+ A:environ = 3
+
+ if(istype(A, /obj/machinery/camera))
+ A.icon_state = "cameraemp"
+ A:network = null //Not the best way but it will do. I think.
+ spawn(900)
+ A:network = initial(A:network)
+ A:icon_state = initial(A:icon_state)
+ for(var/mob/living/silicon/ai/O in world)
+ if (O.current == A)
+ O.cancel_camera()
+ O << "Your connection to the camera has been lost."
+ for(var/mob/O in world)
+ if (istype(O.machine, /obj/machinery/computer/security))
+ var/obj/machinery/computer/security/S = O.machine
+ if (S.current == A)
+ O.machine = null
+ S.current = null
+ O.reset_view(null)
+ O << "The screen bursts into static."
+
+ if(istype(A, /obj/machinery/clonepod))
+ A:malfunction()
+ del(rune)
+ return
+
+/////////////////////////////////////////SIXTH RUNE
+
+ drain()
+ var/drain = 0
+ for(var/obj/rune/R in world)
+ if(R.word1==wordtravel && R.word2==wordblood && R.word3==wordself)
+ for(var/mob/living/carbon/D in R.loc)
+ if(D.health>=-100)
+ var/bdrain = rand(1,25)
+ D << "\red You feel weakened."
+ D.bruteloss += bdrain
+ drain += bdrain
+ if(!drain)
+ return fizzle()
+ usr.say ("Yu'gular faras desdae. Havas mithum javara. Umathar uf'kal thenar!")
+ usr.visible_message("\red Blood flows from the rune into [usr]!", \
+ "\red The blood starts flowing from the rune and into your frail mortal body. You feel... empowered.", \
+ "\red You hear a liquid flowing.")
+ if(usr.bhunger)
+ usr.bhunger -= 2*drain
+ if(drain>=50)
+ usr.visible_message("\red [usr]'s eyes give off eerie red glow!", \
+ "\red ...but it wasn't nearly enough. You crave, crave for more. The hunger consumes you from within.", \
+ "\red You hear a heartbeat.")
+ usr.bhunger += drain
+ for (,usr.bhunger,usr.bhunger--)
+ sleep(50)
+ usr.bruteloss += 3
+ usr.bruteloss -= drain
+ return
+
+
+
+
+
+
+/////////////////////////////////////////SEVENTH RUNE
+
+ seer()
+ if(usr.loc==src.loc)
+ usr.say("Rash'tla sektath mal'zua. Zasan therium vivira. Itonis al'ra matum!")
+ if(usr.see_invisible!=0 && usr.see_invisible!=15)
+ usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision."
+ else
+ usr << "\red The world beyond opens to your eyes."
+ usr.see_invisible = 15
+ return
+ return fizzle()
+
+/////////////////////////////////////////EIGHTH RUNE
+
+ raise()
+ for(var/mob/living/carbon/human/M in src.loc)
+ if(M.health<=-100)
+ for(var/obj/rune/R in world)
+ if(R.word1==wordblood && R.word2==wordjoin && R.word3==wordhell)
+ for(var/mob/living/carbon/human/N in R.loc)
+ if(N.health>-100 && N.client)
+ for(var/mob/dead/observer/O in src.loc)
+ if(M.key)
+ usr << "\red The body still has some earthly ties. It must sever them, if only for them to grow again later."
+ return
+ if(!O.key)
+ continue
+ M.key=O.key
+ del(O)
+
+ //rejuvenatedheal(M) // Darem, this is just rejuvenation code that has been made into a proc. Look into rune8 file for the code itself.
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ for(var/A in H.organs)
+ var/datum/organ/external/affecting = null
+ if(!H.organs[A]) continue
+ affecting = H.organs[A]
+ if(!istype(affecting, /datum/organ/external)) continue
+ affecting.heal_damage(1000, 1000) //fixes getting hit after ingestion, killing you when game updates organ health
+ H.UpdateDamageIcon()
+ M.fireloss = 0
+ M.toxloss = 0
+ M.bruteloss = 0
+ M.oxyloss = 0
+ M.paralysis = 0
+ M.stunned = 0
+ M.weakened = 0
+ M.radiation = 0
+ M.health = 100
+ M.updatehealth()
+ M.buckled = initial(M.buckled)
+ M.handcuffed = initial(M.handcuffed)
+ if (M.stat > 1)
+ M.stat=0
+
+ usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
+ M.visible_message("\red [M]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \
+ "\red Life... I'm alive again...", \
+ "\red You hear a faint, slightly familiar whisper.")
+ N.gib(1)
+ N.visible_message("\red [N] is torn apart, a black smoke swiftly dissipating from his remains!", \
+ "\red You feel as your blood boils, tearing you apart.", \
+ "\red You hear a thousand voices, all crying in pain.")
+ return
+ return fizzle()
+
+
+
+
+
+/////////////////////////////////////////NINETH RUNE
+
+ obscure(var/rad)
+ var/S=0
+ for(var/obj/rune/R in orange(rad,src))
+ if(R!=src)
+ R.visibility=0
+ S=1
+ if(S)
+ if(istype(src,/obj/rune))
+ usr.say("Kla'atu barada nikt'o!")
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The rune turns into gray dust, veiling the surrounding runes.", 3)
+ del(src)
+ else
+ usr.whisper("Kla'atu barada nikt'o!")
+ usr << "\red Your talisman turns into gray dust, veiling the surrounding runes."
+ for (var/mob/V in orange(1,src))
+ if(V!=usr)
+ V.show_message("\red Dust emanates from [usr]'s hands for a moment.", 3)
+
+ return
+ if(istype(src,/obj/rune))
+ return fizzle()
+ else
+ call(/obj/rune/proc/fizzle)()
+ return
+
+/////////////////////////////////////////TENTH RUNE
+
+ ajourney() //some bits copypastaed from admin tools - Urist
+ if(usr.loc==src.loc)
+ var/mob/living/carbon/human/L = usr
+ usr.say("Fwe'sh mah erl nyag r'ya!")
+ usr.ghostize()
+ usr.visible_message("\red [usr]'s eyes glow blue as \he freezes in place, absolutely motionless.", \
+ "\red The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this it's a great sight, being here strains your mind and body. Hurry.", \
+ "\red You hear only complete silence for a moment.")
+ for(L.ajourn=1,L.ajourn)
+ sleep(10)
+ if(L.key)
+ L.ajourn=0
+ return
+ else
+ L.bruteloss++
+ return fizzle()
+
+
+
+
+/////////////////////////////////////////ELEVENTH RUNE
+
+ manifest()
+ if(usr.loc==src.loc)
+ for(var/mob/dead/observer/O in src.loc)
+ usr.say("Gal'h'rfikk harfrandid mud'gib!")
+ var/mob/living/carbon/human/dummy/D = new /mob/living/carbon/human/dummy(src.loc)
+ usr.visible_message("\red A shape forms in the center of the rune. A shape of... a man.", \
+ "\red A shape forms in the center of the rune. A shape of... a man.", \
+ "\red You hear liquid flowing.")
+ D.real_name = "Unknown"
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(length(P.info)<=24)
+ D.real_name = P.info
+ D.universal_speak = 1
+ D.nodamage = 0
+ D.key = O.key
+ del(O)
+ for(,usr.loc==src.loc)
+ sleep(30)
+ if(usr.health>-100)
+ usr.bruteloss++
+ else
+ break
+ D.visible_message("\red [D] slowly dissipates into dust and bones.", \
+ "\red You feel pain, as bonds formed between your soul and this homunculus break.", \
+ "\red You hear faint rustle.")
+ D.dust(1)
+ return
+ return fizzle()
+
+
+
+
+
+/////////////////////////////////////////TWELFTH RUNE
+
+ talisman()//only hide, emp, teleport and tome runes can be imbued atm
+ for(var/obj/rune/R in orange(1,src))
+ if(R==src)
+ continue
+ if(R.word1==wordtravel && R.word2==wordself)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "[R.word3]"
+ T.info = "[R.word3]"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ if(R.word1==wordsee && R.word2==wordblood && R.word3==wordhell)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "newtome"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ if(R.word1==worddestr && R.word2==wordsee && R.word3==wordtech)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "emp"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ if(R.word1==wordblood && R.word2==wordsee && R.word3==worddestr)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "conceal"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ if(R.word1==worddestr && R.word2==wordsee && R.word3==wordblood)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "revealrunes"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ if(R.word1==worddestr && R.word2==wordsee && R.word3==wordhear)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "deafen"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ if(R.word1==worddestr && R.word2==wordsee && R.word3==wordother)
+ for(var/obj/item/weapon/paper/P in src.loc)
+ if(P.info)
+ usr << "\red The blank is tainted. It is unsuitable."
+ return
+ del(P)
+ var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(src.loc)
+ T.imbue = "blind"
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The runes turn into dust, which then forms into an arcane image on the paper.", 3)
+ del(R)
+ del(src)
+ usr.say("H'drak v'loso, mir'kanas verbot!")
+ return
+ return fizzle()
+
+/////////////////////////////////////////THIRTEENTH RUNE
+
+ mend()
+ usr.say("Uhrast ka'hfa heldsagen ver'lot!")
+ usr.bruteloss+=200
+ runedec+=5
+ usr.visible_message("\red [usr] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", \
+ "\red In the last moment of your humbly life, you feel as fabric of reality mends... with your blood.", \
+ "\red You hear faint rustle.")
+ for(,usr.health<-100)
+ sleep(600)
+ runedec=0
+ return
+
+
+
+
+/////////////////////////////////////////FOURTEETH RUNE
+
+ communicate()
+ if(istype(src,/obj/rune))
+ usr.say("O bidai nabora se'sma!")
+ else
+ usr.whisper("O bidai nabora se'sma!")
+ var/input = input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "")
+ if(!input)
+ return fizzle()
+ if(istype(src,/obj/rune))
+ usr.say("[input]")
+ else
+ usr.whisper("[input]")
+ for(var/mob/living/carbon/human/H in cultists)
+ H << "\red \b [input]"
+ del(src)
+ return
+
+/////////////////////////////////////////FIFTEENTH RUNE
+
+ sacrifice()
+ var/culcount = 0
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ culcount++
+ if(culcount>=3)
+ for(var/mob/living/carbon/human/S in src.loc)
+ if(ticker.mode.name == "cult")
+ if(S == ticker.mode:sacrifice_target.current)//Iunno, check if it's a target
+ sacrificed += S.mind
+ S.gib(1)
+ usr << "\red The Geometer of Blood accepts this sacrifice."
+ else
+ usr << "\red The Geometer of Blood does not accept this sacrifice."
+ return
+ return fizzle()
+
+/////////////////////////////////////////SIXTEENTH RUNE
+
+ revealrunes(var/obj/W as obj)
+ var/go=0
+ var/rad
+ var/S=0
+ if(istype(W,/obj/rune))
+ rad = 6
+ go = 1
+ if (istype(W,/obj/item/weapon/paper/talisman))
+ rad = 4
+ go = 1
+ if (istype(W,/obj/item/weapon/storage/bible))
+ rad = 1
+ go = 1
+ if(go)
+ for(var/obj/rune/R in orange(rad,src))
+ if(R!=src)
+ R.visibility=15
+ S=1
+ if(S)
+ if(istype(W,/obj/item/weapon/storage/bible))
+ usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!"
+ return
+ if(istype(W,/obj/rune))
+ usr.say("Nikt'o barada kla'atu!")
+ for (var/mob/V in viewers(src))
+ V.show_message("\red The rune turns into red dust, reveaing the surrounding runes.", 3)
+ del(src)
+ return
+ if(istype(W,/obj/item/weapon/paper/talisman))
+ usr.whisper("Nikt'o barada kla'atu!")
+ usr << "\red Your talisman turns into red dust, revealing the surrounding runes."
+ for (var/mob/V in orange(1,usr.loc))
+ if(V!=usr)
+ V.show_message("\red Red dust emanates from [usr]'s hands for a moment.", 3)
+ return
+ return
+ if(istype(W,/obj/rune))
+ return fizzle()
+ if(istype(W,/obj/item/weapon/paper/talisman))
+ call(/obj/rune/proc/fizzle)()
+ return
+
+/////////////////////////////////////////SEVENTEENTH RUNE
+
+ wall()
+ usr.say("Khari'd! Eske'te tannin!")
+ src.density = !src.density
+ usr.bruteloss += 2
+ if(src.density)
+ usr << "Your blood flows into the rune, and you feel that the very space over the rune thickens."
+ else
+ usr << "Your blood flows into the rune, and you feel as the rune releases its grasp on space."
+ return
+
+/////////////////////////////////////////EIGHTTEENTH RUNE
+
+ freedom()
+ var/culcount = 0
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ culcount++
+ if(culcount>=3)
+ var/mob/cultist = input("Choose the one who you want to free", "Followers of Geometer") as null|anything in (cultists - usr)
+ if(!cultist)
+ return fizzle()
+ if (cultist == usr) //just to be sure.
+ return
+ if(!cultist.buckled && !cultist.handcuffed)
+ usr << "The [cultist] is already free."
+ return
+ cultist.buckled = initial(cultist.buckled)
+ cultist.handcuffed = initial(cultist.handcuffed)
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ C.bruteloss += 15
+ C.say("Khari'd! Gual'te nikka!")
+ del(src)
+ return fizzle()
+
+/////////////////////////////////////////NINETEENTH RUNE
+
+ cultsummon()
+ var/culcount = 0
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ culcount++
+ if(culcount>=3)
+ var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr)
+ if(!cultist)
+ return fizzle()
+ if (cultist == usr) //just to be sure.
+ return
+ if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/closet)))
+ usr << "You cannot summon the [cultist], for him shackles of blood are strong"
+ return fizzle()
+ cultist.loc = src.loc
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ C.say("N'ath reth sh'yro eth d'rekkathnor!")
+ C.bruteloss += 25
+ usr.visible_message("\red Rune disappears with a flash of red light, and in it's place now a body lies.", \
+ "\red You are blinded by the flash of red light! After you're able to see again, you see that now instead of the rune there's a body.", \
+ "\red You hear a pop and smell ozone.")
+ del(src)
+ return fizzle()
+
+/////////////////////////////////////////TWENTIETH RUNES
+
+ deafen()
+ if(istype(src,/obj/rune))
+ var/affected = 0
+ for(var/mob/living/carbon/C in viewers(src))
+ if (cultists.Find(C))
+ continue
+ C.ear_deaf += 30
+ C.show_message("\red World around you suddenly becomes quiet.", 3)
+ affected++
+ if(affected)
+ usr.say("Sti' kaliedir!")
+ usr << "World becomes quiet as deafening rune dissipates into fine dust."
+ del(src)
+ else
+ return fizzle()
+ else
+ usr.whisper("Sti' kaliedir!")
+ usr << "\red Your talisman turns into gray dust, deafening everyone around."
+ for(var/mob/living/carbon/C in viewers(usr))
+ if (cultists.Find(C))
+ continue
+ C.ear_deaf += 30
+ C.show_message("\red World around you suddenly becomes quiet.", 3)
+ for (var/mob/V in orange(1,src))
+ if(!cultists.Find(V))
+ V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
+ return
+
+ blind()
+ if(istype(src,/obj/rune))
+ var/affected = 0
+ for(var/mob/living/carbon/C in viewers(src))
+ if (cultists.Find(C))
+ continue
+ C.eye_blurry += 30
+ C.eye_blind += 10
+ C.show_message("\red Suddenly you see red flash, that blinds you.", 3)
+ affected++
+ if(affected)
+ usr.say("Sti' kaliesin!")
+ usr << "Rune flashes, blinding those who not follow the Nar-Sie. and dissipates into fine dust."
+ del(src)
+ else
+ return fizzle()
+ else
+ usr.whisper("Sti' kaliesin!")
+ usr << "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie."
+ for(var/mob/living/carbon/C in viewers(usr))
+ if (cultists.Find(C))
+ continue
+ C.eye_blurry += 30
+ C.eye_blind += 10
+ C.show_message("\red You feel sharp pain in your eyes, and the world disappears into darkness..", 3)
+ return
+
+
+ bloodboil() //cultists need at least one DANGEROUS rune. Even if they're all stealthy.
+ var/culcount = 0 //also, wording for it is old wording for obscure rune, which is now hide-see-blood.
+ var/list/cultboil = list(cultists-usr) //and for this words are destroy-see-blood.
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ culcount++
+ if(culcount>=2)
+ for(var/mob/living/carbon/M in viewers(usr))
+ if(cultboil.Find(M))
+ continue
+ M.bruteloss += 51
+ M.fireloss += 51
+ M << "\red Your blood boils!"
+ if(prob(5))
+ spawn(5)
+ M.gib(1)
+ for(var/obj/rune/R in viewers(src))
+ if(prob(10))
+ explosion(R.loc, -1, 0, 1, 5)
+ del(src)
+ else
+ return fizzle()
+ return
+
+// WIP rune, I'll wait for Rastaf0 to add limited blood.
+
+ burningblood()
+ var/culcount = 0
+ for(var/mob/living/carbon/human/C in orange(1,src))
+ if(cultists.Find(C))
+ culcount++
+ if(culcount >= 5)
+ for(var/obj/rune/R in world)
+ if(R.blood_DNA == src.blood_DNA && R.blood_type == src.blood_type)
+ for(var/mob/M in orange(2,R))
+ M.fireloss += 15
+ M << "Rune suddenly ignites, burning you!"
+ for(var/obj/decal/cleanable/blood/B in world)
+ if(B.blood_DNA == src.blood_DNA && B.blood_type == src.blood_type)
+ for(var/mob/M in orange(1,B))
+ M.fireloss += 5
+ M << "Blood suddenly ignites, burning you!"
+ del(B)
+ del(src)
\ No newline at end of file
diff --git a/code/game/magic/cultist/specialtalisman.dm b/code/game/magic/cultist/specialtalisman.dm
index e3b471d4687..1eafdaa4f3e 100644
--- a/code/game/magic/cultist/specialtalisman.dm
+++ b/code/game/magic/cultist/specialtalisman.dm
@@ -28,7 +28,7 @@
T.imbue = "newtome"
if("teleport")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
- T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar")]"
+ T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]"
T.info = "[T.imbue]"
if("emp")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index ea145670ac4..855bc4357ff 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -107,7 +107,7 @@ PLANT ANALYZER
/obj/item/device/detective_scanner/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
src.add_fingerprint(user)
- if (istype(A, /obj/decal/cleanable/blood))
+ if (istype(A, /obj/decal/cleanable/blood) || istype(A, /obj/rune))
if(A.blood_DNA)
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
if(A:virus)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7e70924cf67..05d231790e1 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -1328,7 +1328,7 @@
var/flash_range = input("Flash range (in tiles):") as num
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range)
message_admins("\blue [src.ckey] creating an admin explosion at [epicenter.loc].")
-
+/*
/client/proc/check_words() // -- Urist
set category = "Special Verbs"
set name = "Check Rune Words"
@@ -1336,7 +1336,7 @@
if(!wordtravel)
runerandom()
usr << "[wordtravel] is travel, [wordblood] is blood, [wordjoin] is join, [wordhell] is Hell, [worddestr] is destroy, [wordtech] is technology, [wordself] is self, [wordsee] is see"
-
+*/
/client/proc/give_spell(mob/T as mob in world) // -- Urist
set category = "Fun"
set name = "Give Spell"
diff --git a/tgstation.dme b/tgstation.dme
index c78dd64fc19..1ae1870d9b0 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -416,22 +416,7 @@
#include "code\game\magic\magicmonster.dm"
#include "code\game\magic\musician.dm"
#include "code\game\magic\cultist\ritual.dm"
-#include "code\game\magic\cultist\rune1.dm"
-#include "code\game\magic\cultist\rune10.dm"
-#include "code\game\magic\cultist\rune11.dm"
-#include "code\game\magic\cultist\rune12.dm"
-#include "code\game\magic\cultist\rune13.dm"
-#include "code\game\magic\cultist\rune14.dm"
-#include "code\game\magic\cultist\rune15.dm"
-#include "code\game\magic\cultist\rune16.dm"
-#include "code\game\magic\cultist\rune2.dm"
-#include "code\game\magic\cultist\rune3.dm"
-#include "code\game\magic\cultist\rune4.dm"
-#include "code\game\magic\cultist\rune5.dm"
-#include "code\game\magic\cultist\rune6.dm"
-#include "code\game\magic\cultist\rune7.dm"
-#include "code\game\magic\cultist\rune8.dm"
-#include "code\game\magic\cultist\rune9.dm"
+#include "code\game\magic\cultist\runes.dm"
#include "code\game\magic\cultist\specialtalisman.dm"
#include "code\game\mecha\global_iterator.dm"
#include "code\game\mecha\mech_bay.dm"