diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 3e31c0f573b..6afb86104b6 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -19,6 +19,26 @@
if(mind.current == ticker.mode.sacrifice_target) return 0
return 1
+/proc/cultist_commune(var/mob/living/user, var/clear = 0, var/say = 0, var/message)
+ if(!message)
+ return
+ if(say)
+ user.say("O bidai nabora se[pick("'","`")]sma!")
+ else
+ user.whisper("O bidai nabora se[pick("'","`")]sma!")
+ sleep(10)
+ if(say)
+ user.say(message)
+ else
+ user.whisper(message)
+ for(var/mob/M in mob_list)
+ if(iscultist(M) || (M in dead_mob_list))
+ if(clear)
+ M << "Acolyte [user]: [message]"
+ else
+ M << "Acolyte ???: [message]"
+
+
/datum/game_mode/cult
name = "cult"
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index ac159322699..18a63e3ed4f 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -42,28 +42,23 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
return
if(ishuman(usr) || ismonkey(usr)) //Damage only applies to humans and monkeys, to allow constructs to communicate
- usr.visible_message("[usr.name] starts clawing at his arms like a mad man!", "You start clawing at his arms like a mad man!")
- apply_damage(25,BRUTE, "l_arm")
- apply_damage(25,BRUTE, "r_arm")
+ usr.visible_message("[usr.name] starts clawing at \his arms with \his fingernails!", "You begin slicing open your arms with your fingers!")
+ apply_damage(10,BRUTE, "l_arm")
+ apply_damage(10,BRUTE, "r_arm")
sleep(50)
if(usr.incapacitated())
return //Hard to drawn intrinsic symbols when you're bleeding out in your cell.
var/turf/location = loc
if(istype(location, /turf/simulated)) // tearing your arms apart is going to spill a bit of blood, in fact thats the idea
location.add_blood(usr) // TO-DO change this to a badly drawn rune
- apply_damage(15,BRUTE, "l_arm") // does a metric fuck ton of damage because this meant to be an emergency method of communication.
- apply_damage(15,BRUTE, "r_arm")
+ apply_damage(10,BRUTE, "l_arm") // does a metric fuck ton of damage because this meant to be an emergency method of communication.
+ apply_damage(10,BRUTE, "r_arm")
if(usr.incapacitated())
return
- usr.visible_message("[usr.name] paints strange symbols with their own blood.", "You paint strange symbols with your own blood.")
+ usr.visible_message("[usr.name] paints strange symbols with their own blood.", "You paint a messy rune with your own blood.")
sleep(20)
- usr.say("O bidai nabora se[pick("'","`")]sma!")
- sleep(10)
- usr.say("[input]")
- for(var/mob/M in mob_list)
- if((M.mind && (M.mind in ticker.mode.cult)) || (M in dead_mob_list))
- M << "[input]"
+ cultist_commune(usr, 0, 1, input)
return
@@ -186,8 +181,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
return emp(src.loc,3)
if(word1 == wordtravel && word2 == wordblood && word3 == wordself)
return drain()
- if(word1 == wordsee && word2 == wordhell && word3 == wordjoin)
- return seer()
if(word1 == wordblood && word2 == wordjoin && word3 == wordhell)
return raise()
if(word1 == wordhide && word2 == wordsee && word3 == wordblood)
@@ -518,7 +511,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
return
M.take_organ_damage(0,rand(5,20)) //really lucky - 5 hits for a crit
M.visible_message("[user] beats [M] with the arcane tome!", \
- "You feel searing heat inside!")
+ "[user] beats you with the tome, and you feel a searing heat inside you!")
/obj/item/weapon/tome/attack_self(mob/living/user as mob)
@@ -544,11 +537,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "")
if(!input)
return
- usr.whisper("O bidai nabora se[pick("'","`")]sma!")
- usr.whisper("[input]")
- for(var/datum/mind/H in ticker.mode.cult)
- if (H.current)
- H.current << "[input]"
+ cultist_commune(user, 1, 0, input)
return
if("Notes")
if(usr.get_active_hand() != src)
@@ -690,7 +679,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
var/r
if (!istype(user.loc,/turf))
user << "You do not have enough space to write a proper rune."
- var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun", "summon shell")
+ var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun", "summon shell")
r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable.
var/obj/effect/rune/R = new /obj/effect/rune
if(istype(user, /mob/living/carbon/human))
@@ -754,12 +743,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
R.word3=wordself
R.loc = user.loc
R.check_icon()
- if("seer")
- R.word1=wordsee
- R.word2=wordhell
- R.word3=wordjoin
- R.loc = user.loc
- R.check_icon()
if("raise")
R.word1=wordblood
R.word2=wordjoin
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 340aa519ba5..a4b36d9acb0 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -1,7 +1,11 @@
var/list/sacrificed = list()
/obj/effect/rune
-/////////////////////////////////////////FIRST RUNE
+
+
+///Teleport: Teleports the user to a random teleport rune with the same rune. Can be imbued into a talisman.
+
+
/obj/effect/rune/proc/teleport(var/key)
var/mob/living/user = usr
var/allrunesloc[]
@@ -37,6 +41,7 @@ var/list/sacrificed = list()
return
+//Subtype of teleport, teleports any items and mobs on top of the rune rather than the user themselves
/obj/effect/rune/proc/itemport(var/key)
// var/allrunesloc[]
// allrunesloc = new/list()
@@ -76,7 +81,9 @@ var/list/sacrificed = list()
return fizzle(user)
-/////////////////////////////////////////SECOND RUNE
+
+///Summon Tome: Summons a completely untranslated tome.
+
/obj/effect/rune/proc/tomesummon()
if(istype(src,/obj/effect/rune))
@@ -94,8 +101,8 @@ var/list/sacrificed = list()
return
+///Convert: The primary method of gaining new followers. Requires three cultists, doesn't work on loyalty implanted people, captains, or chaplains.
-/////////////////////////////////////////THIRD RUNE
/obj/effect/rune/proc/convert()
var/list/mob/living/cultsinrange = list()
@@ -117,22 +124,6 @@ var/list/sacrificed = list()
M.mind.special_role = "Cultist"
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."
-/*//convert no longer gives words
- //picking which word to use
- if(usr.mind.cult_words.len != ticker.mode.allwords.len) // No point running if they already know everything
- var/convert_word
- for(var/i=1, i<=3, i++)
- convert_word = pick(ticker.mode.grantwords)
- if(convert_word in usr.mind.cult_words)
- if(i==3) convert_word = null //NOTE: If max loops is changed ensure this condition is changed to match /Mal
- else
- break
- if(!convert_word)
- usr << "\red This Convert was unworthy of knowledge of the other side!"
- else
- usr << "\red The Geometer of Blood is pleased to see his followers grow in numbers."
- ticker.mode.grant_runeword(usr, convert_word)
- return 1 */
else
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 << "And not a single fuck was given, exterminate the cult at all costs."
@@ -147,8 +138,8 @@ var/list/sacrificed = list()
return fizzle()
+///Summon Nar-Sie: Summons the avatar of Nar-Sie to wreak havoc on the station. Will turn walls and floors to cult version and make anyone it touches into a harvester.
-/////////////////////////////////////////FOURTH RUNE
/obj/effect/rune/proc/tearreality()
var/list/mob/living/carbon/human/cultist_count = list()
@@ -189,7 +180,9 @@ var/list/sacrificed = list()
else
return fizzle()
-/////////////////////////////////////////FIFTH RUNE
+
+///EMP: Lets out a large EMP blast
+
/obj/effect/rune/proc/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/effect/rune))
@@ -204,7 +197,7 @@ var/list/sacrificed = list()
empulse(U, (range_red - 2), range_red)
qdel(rune)
-/////////////////////////////////////////SIXTH RUNE
+///Blood Drain: Deals 1-25 damage to someone on top of it and heals an equivalent amount of brute damage to the user. Can be stacked. Too much blood drain = blood hunger that must be sated.
/obj/effect/rune/proc/drain()
var/drain = 0
@@ -244,32 +237,9 @@ var/list/sacrificed = list()
return
+///Raise Dead: Requires two corpses. Brings one to life and gibs the other.
-
-
-/////////////////////////////////////////SEVENTH RUNE
-
-/obj/effect/rune/proc/seer()
- if(usr.loc==src.loc)
- usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium vivira. Itonis al'ra matum!")
- var/mob/living/carbon/human/user = usr
- if(user.see_invisible!=25 || (istype(user) && user.glasses)) //check for non humans
- user << "The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision."
- else
- user << "The world beyond opens to your eyes."
- var/see_temp = user.see_invisible
- user.see_invisible = SEE_INVISIBLE_OBSERVER
- user.seer = 1
- while(user.loc==src.loc)
- sleep(30)
- user.seer = 0
- user.see_invisible = see_temp
- return
- return fizzle()
-
-/////////////////////////////////////////EIGHTH RUNE
-
/obj/effect/rune/proc/raise()
var/mob/living/carbon/human/corpse_to_raise
var/mob/living/carbon/human/body_to_sacrifice
@@ -328,40 +298,31 @@ var/list/sacrificed = list()
corpse_to_raise.SetStunned(0)
corpse_to_raise.SetWeakened(0)
corpse_to_raise.radiation = 0
-// corpse_to_raise.buckled = null
-// if(corpse_to_raise.handcuffed)
-// qdel(corpse_to_raise.handcuffed)
-// corpse_to_raise.update_inv_handcuffed(0)
corpse_to_raise.stat = CONSCIOUS
corpse_to_raise.updatehealth()
corpse_to_raise.update_damage_overlays(0)
corpse_to_raise.key = ghost.key //the corpse will keep its old mind! but a new player takes ownership of it (they are essentially possessed)
//This means, should that player leave the body, the original may re-enter
- usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
+ if(usr.real_name == "Herbert West")
+ usr.say("To life, to life, I bring them!")
+ else
+ usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
corpse_to_raise.visible_message("[corpse_to_raise]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \
"Life... I'm alive again...", \
"You hear a faint, slightly familiar whisper.")
body_to_sacrifice.visible_message("[body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!", \
- "You feel as your blood boils, tearing you apart.", \
+ "You feel a horrible sensation of being torn apart, and--", \
"You hear a thousand voices, all crying in pain.")
body_to_sacrifice.gib()
-
-// if(ticker.mode.name == "cult")
-// ticker.mode:add_cultist(corpse_to_raise.mind)
-// else
-// ticker.mode.cult |= corpse_to_raise.mind
-
corpse_to_raise << "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."
corpse_to_raise << "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."
return
+///Veil: Makes all surrounding runes invisible. They cannot be used directly but still used indirectly (i.e. teleport...)
-
-/////////////////////////////////////////NINETH RUNE
-
/obj/effect/rune/proc/obscure(var/rad)
var/S=0
for(var/obj/effect/rune/R in orange(rad,src))
@@ -388,7 +349,9 @@ var/list/sacrificed = list()
call(/obj/effect/rune/proc/fizzle)()
return
-/////////////////////////////////////////TENTH RUNE
+
+///Astral Journey: Lets a player explore around as a ghost but does 10 brute damage for every tick they are like that. If they are moved from the rune they cannot return.
+
/obj/effect/rune/proc/ajourney() //some bits copypastaed from admin tools - Urist
if(usr.loc==src.loc)
@@ -409,10 +372,9 @@ var/list/sacrificed = list()
return fizzle()
+///Manifest: User must be standing on rune. When invoked, makes a culted human spawn. The user takes damage depending on how many humans there are. If the user moves, all manifested humans are killed.
-/////////////////////////////////////////ELEVENTH RUNE
-
/obj/effect/rune/proc/manifest()
var/obj/effect/rune/this_rune = src
src = null
@@ -458,11 +420,9 @@ var/list/sacrificed = list()
return
+///Imbue Talisman: Put a compatible rune near this one and a paper on top of the imbue rune. Activate, and the compatible rune will be imbued into the paper.
-
-/////////////////////////////////////////TWELFTH RUNE
-
/obj/effect/rune/proc/talisman()//only hide, emp, teleport, deafen, blind and tome runes can be imbued atm
var/obj/item/weapon/paper/newtalisman
var/unsuitable_newtalisman = 0
@@ -542,52 +502,24 @@ var/list/sacrificed = list()
else
return fizzle()
-/////////////////////////////////////////THIRTEENTH RUNE
-/obj/effect/rune/proc/mend()
- var/mob/living/user = usr
- src = null
- user.say("Uhrast ka'hfa heldsagen ver[pick("'","`")]lot!")
- user.take_overall_damage(200, 0)
- runedec+=10
- user.visible_message("[user] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.", \
- "In the last moment of your humble life, you feel an immense pain as fabric of reality mends... with your blood.", \
- "You hear faint rustle.")
- for(,user.stat==2)
- sleep(600)
- if (!user)
- return
- runedec-=10
- return
+///Communicate: Static communication rune. Somewhat pointless with free communications with tomes.
-/////////////////////////////////////////FOURTEETH RUNE
-
- // returns 0 if the rune is not used. returns 1 if the rune is used.
/obj/effect/rune/proc/communicate()
- . = 1 // Default output is 1. If the rune is deleted it will return 1
- var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "")
+ var/input = stripped_input(usr, "Please enter a message to tell to the other acolytes.", "Voice of Blood", "")
if(!input)
- if (istype(src))
+ if(istype(src))
fizzle()
return 0
else
return 0
- if(istype(src,/obj/effect/rune))
- usr.say("O bidai nabora se[pick("'","`")]sma!")
- else
- usr.whisper("O bidai nabora se[pick("'","`")]sma!")
-
- if(istype(src,/obj/effect/rune))
- usr.say("[input]")
- else
- usr.whisper("[input]")
- for(var/mob/M in mob_list)
- if((M.mind && (M.mind in ticker.mode.cult)) || (M in dead_mob_list))
- M << "[input]"
+ cultist_commune(usr , 1, 1, input)
return 1
-/////////////////////////////////////////FIFTEENTH RUNE
+
+///Sacrifice: Gibs a target as an offering. Gives tome words as a reward and if the target has a mind, spawns a soul shard with their shade contained within.
+
/obj/effect/rune/proc/sacrifice()
var/list/mob/living/carbon/human/cultsinrange = list()
@@ -705,21 +637,6 @@ var/list/sacrificed = list()
stone_or_gib(M)
for(var/mob/victim in src.loc) //TO-DO: Move the shite above into the mob's own sac_act - see /mob/living/simple_animal/pet/corgi/sac_act for an example
victim.sac_act(src, victim) //Sacrifice procs are now seperate per mob, this allows us to allow sacrifice on as many mob types as we want without making an already clunky system worse
-/* for(var/mob/living/carbon/alien/A)
- for(var/mob/K in cultsinrange)
- K.say("Barhah hra zar'garis!")
- A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need.
- if (ticker.mode.name == "cult")
- if(prob(75))
- usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- sac_grant_word()
- else
- usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- usr << "\red However, this alien is not enough to gain His favor."
- else
- usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- return
- return fizzle() */
/obj/effect/rune/proc/sac_grant_word(var/mob/living/C) //The proc that which chooses a word rewarded for a successful sacrifice, sacrifices always give a currently unknown word if the normal checks pass
if(C.mind.cult_words.len != ticker.mode.allwords.len) // No point running if they already know everything
@@ -739,7 +656,8 @@ var/list/sacrificed = list()
T.gib()
-/////////////////////////////////////////SIXTEENTH RUNE
+///Reveal: Reverses the Veil rune's effect, revealing all hidden runes.
+
/obj/effect/rune/proc/revealrunes(var/obj/W as obj)
var/go=0
@@ -783,7 +701,9 @@ var/list/sacrificed = list()
call(/obj/effect/rune/proc/fizzle)()
return
-/////////////////////////////////////////SEVENTEENTH RUNE
+
+///Wall: Makes the rune dense and uncrossable. You can invoke it again to make it normal again. Deals 2 brute damage when used.
+
/obj/effect/rune/proc/wall()
usr.say("Khari[pick("'","`")]d! Eske'te tannin!")
@@ -796,9 +716,11 @@ var/list/sacrificed = list()
usr << "Your blood flows into the rune, and you feel as the rune releases its grasp on space."
return
-/////////////////////////////////////////EIGHTTEENTH RUNE
-/obj/effect/rune/proc/freedom()
+///Free Cultist: If the cultist is not walking free, makes it so.
+
+
+/obj/effect/rune/proc/freedom() //MURICA ;_;7
var/mob/living/user = usr
var/list/mob/living/cultists = new
for(var/datum/mind/H in ticker.mode.cult)
@@ -847,7 +769,9 @@ var/list/sacrificed = list()
qdel(src)
return fizzle(user)
-/////////////////////////////////////////NINETEENTH RUNE
+
+///Summon Cultist: Requires 3 cultists, summons a cultist to the rune's location and does 25 brute to all users.
+
/obj/effect/rune/proc/cultsummon()
var/mob/living/user = usr
@@ -881,7 +805,9 @@ var/list/sacrificed = list()
qdel(src)
return fizzle(user)
-/////////////////////////////////////////TWENTIETH RUNES
+
+///Deafen: Makes all nearby non-cultists deaf.
+
/obj/effect/rune/proc/deafen()
if(istype(src,/obj/effect/rune))
@@ -923,6 +849,10 @@ var/list/sacrificed = list()
V.show_message("Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
return
+
+///Blind: Makes all non-cultists nearby blind. Combine with Deafen to make the entire shuttle go into a panic and laugh as they bumble around.
+
+
/obj/effect/rune/proc/blind()
if(istype(src,/obj/effect/rune))
var/affected = 0
@@ -965,15 +895,11 @@ var/list/sacrificed = list()
return
+///Blood Boil: Every non-cultist nearby will take 51 burn and 51 brute damage. 5% chance for them to gib as well. Users will take 15 brute. 10% chance for the rune to blow up.
+
+
/obj/effect/rune/proc/bloodboil() //cultists need at least one DANGEROUS rune. Even if they're all stealthy.
-/*
- var/list/mob/living/carbon/cultists = new
- for(var/datum/mind/H in ticker.mode.cult)
- if (istype(H.current,/mob/living/carbon))
- cultists+=H.current
-*/
- 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.
+ var/culcount = 0
for(var/mob/living/carbon/C in orange(1,src))
if(iscultist(C) && !C.stat)
culcount++
@@ -1001,35 +927,9 @@ var/list/sacrificed = list()
return fizzle()
return
-// WIP rune, I'll wait for Rastaf0 to add limited blood.
-/obj/effect/rune/proc/burningblood()
- var/culcount = 0
- for(var/mob/living/carbon/C in orange(1,src))
- if(iscultist(C) && !C.stat)
- culcount++
- if(culcount >= 5)
- for(var/obj/effect/rune/R in world)
- if(R.blood_DNA == src.blood_DNA)
- for(var/mob/living/M in orange(2,R))
- M.take_overall_damage(0,15)
- if (R.invisibility>M.see_invisible)
- M << "Aargh it burns!"
- else
- M << "Rune suddenly ignites, burning you!"
- var/turf/T = get_turf(R)
- T.hotspot_expose(700,125)
- for(var/obj/effect/decal/cleanable/blood/B in world)
- if(B.blood_DNA == src.blood_DNA)
- for(var/mob/living/M in orange(1,B))
- M.take_overall_damage(0,5)
- M << "Blood suddenly ignites, burning you!"
- var/turf/T = get_turf(B)
- T.hotspot_expose(700,125)
- qdel(B)
- qdel(src)
+///Stun: Everyone nearby would be stunned for a -very- short time. If used in a talisman, it stuns and mutes a single target.
-////////// Rune 24 (counting burningblood, which kinda doesnt work yet.)
/obj/effect/rune/proc/runestun(var/mob/living/T as mob)
if(istype(src,/obj/effect/rune)) ///When invoked as rune, flash and stun everyone around.
@@ -1047,7 +947,7 @@ var/list/sacrificed = list()
else if(issilicon(L))
var/mob/living/silicon/S = L
S.Weaken(5)
- S.show_message("BZZZT... The rune has exploded in a bright flash.", 3)
+ S.show_message("!@(%* BZZZZZT !@(%!)$", 3)
qdel(src)
else ///When invoked as talisman, stun and mute the target mob.
usr.say("Dream sign ''Evil sealing talisman'[pick("'","`")]!")
@@ -1070,7 +970,9 @@ var/list/sacrificed = list()
C.Stun(10)
return
-/////////////////////////////////////////TWENTY-FIFTH RUNE
+
+///Armor: The user will be armed with cultist garb, a trophy rack, and a high-damage sword. If items are in these slots, they will not be equipped and simply deleted.
+
/obj/effect/rune/proc/armor()
var/mob/living/carbon/human/user = usr
@@ -1091,6 +993,10 @@ var/list/sacrificed = list()
qdel(src)
+
+///Summon Shell: Summons a construct shell if there's four plasteel sheets on top of the rune
+
+
/obj/effect/rune/proc/summon_shell() // Summons a construct shell
for(var/obj/item/stack/sheet/plasteel/PS in src.loc) //I could probably combine the amounts but I'm too lazy to compensate for others' lazyness
if(PS.amount >= 4) // may need increasing?