Merge pull request #9295 from Xhuis/cult_update_un

Small cult update
This commit is contained in:
Cheridan
2015-05-03 23:41:16 -05:00
3 changed files with 96 additions and 187 deletions
+20
View File
@@ -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 << "<span class='boldannounce'><i>Acolyte [user]:</i> [message]</span>"
else
M << "<span class='ghostalert'><i>Acolyte ???:</i> [message]</span>"
/datum/game_mode/cult
name = "cult"
+10 -27
View File
@@ -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("<span class='warning'>[usr.name] starts clawing at his arms like a mad man!</span>", "<span class='warning'>You start clawing at his arms like a mad man!</span>")
apply_damage(25,BRUTE, "l_arm")
apply_damage(25,BRUTE, "r_arm")
usr.visible_message("<span class='warning'>[usr.name] starts clawing at \his arms with \his fingernails!</span>", "<span class='warning'>You begin slicing open your arms with your fingers!</span>")
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("<span class='warning'>[usr.name] paints strange symbols with their own blood.</span>", "<span class='warning'>You paint strange symbols with your own blood.</span>")
usr.visible_message("<span class='warning'>[usr.name] paints strange symbols with their own blood.</span>", "<span class='warning'>You paint a messy rune with your own blood.</span>")
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 << "<span class='boldannounce'>[input]</span>"
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("<span class='danger'>[user] beats [M] with the arcane tome!</span>", \
"<span class='userdanger'>You feel searing heat inside!</span>")
"<span class='userdanger'>[user] beats you with the tome, and you feel a searing heat inside you!</span>")
/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 << "<span class='boldannounce'>[input]</span>"
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 << "<span class='danger'>You do not have enough space to write a proper rune.</span>"
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
+66 -160
View File
@@ -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 << "<font color=\"purple\"><b><i>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.</b></i></font>"
M << "<font color=\"purple\"><b><i>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.</b></i></font>"
/*//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 << "<font color=\"purple\"><b><i>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.</b></i></font>"
M << "<span class='boldannounce'>And not a single fuck was given, exterminate the cult at all costs.</span>"
@@ -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 << "<span class='danger'>The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision.</span>"
else
user << "<span class='danger'>The world beyond opens to your eyes.</span>"
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("<span class='danger'>[corpse_to_raise]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.</span>", \
"<span class='danger'>Life... I'm alive again...</span>", \
"<span class='italics'>You hear a faint, slightly familiar whisper.</span>")
body_to_sacrifice.visible_message("<span class='danger'>[body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!</span>", \
"<span class='danger'>You feel as your blood boils, tearing you apart.</span>", \
"<span class='userdanger'>You feel a horrible sensation of being torn apart, and--</span>", \
"<span class='italics'>You hear a thousand voices, all crying in pain.</span>")
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 << "<font color=\"purple\"><b><i>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.</b></i></font>"
corpse_to_raise << "<font color=\"purple\"><b><i>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.</b></i></font>"
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("<span class='danger'>[user] keels over dead, his blood glowing blue as it escapes his body and dissipates into thin air.</span>", \
"<span class='danger'>In the last moment of your humble life, you feel an immense pain as fabric of reality mends... with your blood.</span>", \
"<span class='italics'>You hear faint rustle.</span>")
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 << "<span class='userdanger'>[input]</span>"
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 << "<span class='danger'>Your blood flows into the rune, and you feel as the rune releases its grasp on space.</span>"
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("<span class='danger'>Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..</span>", 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 << "<span class='danger'>Aargh it burns!</span>"
else
M << "<span class='danger'>Rune suddenly ignites, burning you!</span>"
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 << "<span class='danger'>Blood suddenly ignites, burning you!</span>"
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("<span class='danger'>BZZZT... The rune has exploded in a bright flash.</span>", 3)
S.show_message("<span class='danger'>!@(%* BZZZZZT !@(%!)$</span>", 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?