diff --git a/baystation12.dme b/baystation12.dme
index 340036c01aa..b39db337002 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -95,6 +95,7 @@
#define FILE_DIR "code/modules/clothing/uniforms"
#define FILE_DIR "code/modules/critters"
#define FILE_DIR "code/modules/critters/hivebots"
+#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob"
@@ -658,7 +659,6 @@
#include "code\game\objects\items\weapons\cigs_lighters.dm"
#include "code\game\objects\items\weapons\clown_items.dm"
#include "code\game\objects\items\weapons\dna_injector.dm"
-#include "code\game\objects\items\weapons\evidence.dm"
#include "code\game\objects\items\weapons\explosives.dm"
#include "code\game\objects\items\weapons\flamethrower.dm"
#include "code\game\objects\items\weapons\grenades.dm"
@@ -795,6 +795,8 @@
#include "code\modules\critters\critter_defenses.dm"
#include "code\modules\critters\critters.dm"
#include "code\modules\critters\hivebots\hivebot.dm"
+#include "code\modules\flufftext\Dreaming.dm"
+#include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\food.dm"
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\mining\datum_processing_recipe.dm"
@@ -1027,6 +1029,7 @@
#include "code\WorkInProgress\Ported\ZeroPoint\LaserComputer.dm"
#include "code\WorkInProgress\Ported\ZeroPoint\SuperMatter.dm"
#include "code\WorkInProgress\SkyMarshal\coatrack.dm"
+#include "code\WorkInProgress\SkyMarshal\evidence.dm"
#include "code\WorkInProgress\SkyMarshal\traitoritems.dm"
#include "code\WorkInProgress\SkyMarshal\wardrobes.dm"
#include "code\WorkInProgress\Tastyfish\Eliza.dm"
diff --git a/code/game/objects/items/weapons/evidence.dm b/code/WorkInProgress/SkyMarshal/evidence.dm
similarity index 91%
rename from code/game/objects/items/weapons/evidence.dm
rename to code/WorkInProgress/SkyMarshal/evidence.dm
index c162f9ac70b..ad3454db7b9 100644
--- a/code/game/objects/items/weapons/evidence.dm
+++ b/code/WorkInProgress/SkyMarshal/evidence.dm
@@ -33,13 +33,8 @@
if(istype(O.loc, /obj/item/weapon/storage))
user << "This is broke as hell."
return
-/* var/obj/item/weapon/storage/U = O.loc
- w_class = O.w_class
- for(var/i, i < U.contents.len, i++)
- if(O in U.contents[i])
- U.contents[i] = null
- O.loc = src
- continue*/
+ var/obj/item/weapon/storage/U = O.loc
+ U.contents.Remove(O)
user << "You put the [O] inside the [src]."
icon_state = "evidence"
src.underlays += O
diff --git a/code/WorkInProgress/detective_work.dm b/code/WorkInProgress/detective_work.dm
index 8a7db0cf947..e076193adba 100644
--- a/code/WorkInProgress/detective_work.dm
+++ b/code/WorkInProgress/detective_work.dm
@@ -244,10 +244,12 @@ mob/var
obj/item/clothing/gloves/var
transfer_blood = 0
mob/living/carbon/human/bloody_hands_mob
-/*
-obj/decal/cleanable/blood/var/track_amt = 3
+obj/effect/decal/cleanable/blood/var
+ track_amt = 3
+ mob/blood_owner
+
turf/Exited(mob/living/carbon/human/M)
if(istype(M,/mob/living))
if(!istype(src, /turf/space)) // Bloody tracks code starts here
@@ -271,9 +273,9 @@ turf/Entered(mob/living/carbon/human/M)
M.shoes.track_blood--
src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name)
- for(var/obj/decal/cleanable/blood/B in src)
+ for(var/obj/effect/decal/cleanable/blood/B in src)
if(B.track_amt <= 0) continue
- if(B.type != /obj/decal/cleanable/blood/tracks && B.type != /obj/decal/cleanable/blood/drip)
+ if(B.type != /obj/effect/decal/cleanable/blood/tracks)
if(istype(M,/mob/living/carbon/human))
if(M.shoes)
M.shoes.add_blood(B.blood_owner)
@@ -282,13 +284,13 @@ turf/Entered(mob/living/carbon/human/M)
else
M.add_blood(B.blood_owner)
M.track_blood_mob = B.blood_owner
- M.track_blood = max(M.track_blood,8)
+ M.track_blood = max(M.track_blood,rand(4,8))
B.track_amt--
break
. = ..()
turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
- for(var/obj/decal/cleanable/blood/tracks/T in src)
+ for(var/obj/effect/decal/cleanable/blood/tracks/T in src)
if(T.dir == d)
if((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1"))
T.desc = "These bloody footprints appear to have been made by [info]."
@@ -296,11 +298,12 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
T.blood_DNA = M.dna.unique_enzymes
T.blood_type = M.b_type
return
- var/obj/decal/cleanable/blood/tracks/this = new(src)
+ var/obj/effect/decal/cleanable/blood/tracks/this = new(src)
+ this.icon = 'footprints.dmi'
if(leaving)
- this.icon_state = "steps2"
+ this.icon_state = "blood2"
else
- this.icon_state = "steps1"
+ this.icon_state = "blood1"
this.dir = d
this.desc = "These bloody footprints appear to have been made by [info]."
if(istype(M,/mob/living/carbon/human))
@@ -333,5 +336,4 @@ proc/blood_incompatible(donor,receiver)
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
- return 0
-*/
\ No newline at end of file
+ return 0
\ No newline at end of file
diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm
index ee7a1bfa9b9..a20e0b28f98 100644
--- a/code/defines/mob/mob.dm
+++ b/code/defines/mob/mob.dm
@@ -164,7 +164,7 @@
var/logged_in = 0
var/underwear = 1//Human
- var/be_syndicate = 0//This really should be a client variable.
+ var/be_syndicate = 0 //This really should be a client variable. EDIT: Hijacked for my own nefarious purposes! --SkyMarshal
var/be_random_name = 0
var/const/blindness = 1//Carbon
var/const/deafness = 2//Carbon
diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm
index 29e1ee6519f..3bf577c6777 100644
--- a/code/defines/obj/decal.dm
+++ b/code/defines/obj/decal.dm
@@ -52,6 +52,7 @@
blood_DNA = null
blood_type = null
var/datum/disease2/disease/virus2 = null
+ var/OriginalMob = null
Del()
for(var/datum/disease/D in viruses)
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 4d1f23c3a0d..1c99ec8bda7 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -4,6 +4,7 @@
var/struc_enzymes = null
var/uni_identity = null
var/original_name = "Unknown"
+ var/b_type
/datum/dna/proc/check_integrity()
//Lazy.
@@ -68,6 +69,7 @@
unique_enzymes = md5(character.real_name)
original_name = character.real_name
+ b_type = character.b_type
reg_dna[unique_enzymes] = character.real_name
/////////////////////////// DNA DATUM
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index c163c809d0e..e4d4dc2bf29 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -79,7 +79,7 @@
playercount += 1
if (player.client && player.mind && player.mind.special_role && player.stat != 2)
traitorcount += 1
- if (player.client && player.mind && !player.mind.special_role && player.stat != 2 && player.be_syndicate && !jobban_isbanned(player, "Syndicate"))
+ if (player.client && player.mind && !player.mind.special_role && player.stat != 2 && (player.be_syndicate & BE_TRAITOR) && !jobban_isbanned(player, "Syndicate"))
possible_traitors += player
//message_admins("Live Players: [playercount]")
//message_admins("Live Traitors: [traitorcount]")
@@ -162,7 +162,7 @@
if(emergency_shuttle.departed)
return
//message_admins("Late Join Check")
- if(character.be_syndicate == 1 && !jobban_isbanned(character, "Syndicate"))
+ if((character.be_syndicate & BE_TRAITOR) && !jobban_isbanned(character, "Syndicate"))
//message_admins("Late Joiner has Be Syndicate")
//message_admins("Checking number of players")
var/playercount = 0
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 5e69cb55c3c..9c4492eadf5 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -137,6 +137,10 @@
/datum/game_mode/proc/greet_traitor(var/datum/mind/traitor)
traitor.current << "You are the traitor."
+ traitor.current << "\red REPEAT"
+ traitor.current << "\red You are the traitor."
+ spawn(rand(600,1800)) //Strumpetplaya - Just another friendly reminder so people don't forget they're the traitor.
+ traitor.current << "\red In case you missed it the first time - YOU ARE THE TRAITOR!"
var/obj_count = 1
for(var/datum/objective/objective in traitor.objectives)
traitor.current << "Objective #[obj_count]: [objective.explanation_text]"
@@ -175,6 +179,8 @@
else
killer << "Unfortunately, the Syndicate did not provide you with a code response."
killer << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
+ spawn(30)
+ killer << sound('AISyndiHack.ogg',volume=50)
//End code phrase.
@@ -318,4 +324,6 @@
else
traitor_mob << "Unfortunately, the Syndicate did not provide you with a code response."
traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
+ spawn(30)
+ traitor_mob << sound('syndicate intro.ogg',volume=50)
//End code phrase.
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 2d24ac4c8b8..89e37c83318 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -89,8 +89,8 @@
"carbon dioxide" = new/datum/tlv(-1.0, -1.0, 5, 10), // Partial pressure, kpa
"plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa
"other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa
- "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60), /* kpa */
- "temperature" = new/datum/tlv(40, 60, 100, 120), // K
+ "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.20,ONE_ATMOSPHERE*0.35,ONE_ATMOSPHERE*0.8,ONE_ATMOSPHERE*0.9), /* kpa */
+ "temperature" = new/datum/tlv(40, 60, 140, 160), // K
)
//all air alarms in area are connected via magic
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index 0e0216f7267..70991042c14 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -65,8 +65,12 @@ MASS SPECTROMETER
icon_state = "forensic0"
var/amount = 20.0
var/printing = 0.0
+ var/fibers_index = 0
var/list/stored_fibers = null
- var/stored_name = null
+ var/list/stored_name = null
+ var/prints_index = 0
+ var/list/stored_prints = null
+ var/list/prints_name = null
w_class = 3.0
item_state = "electronic"
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
@@ -106,7 +110,7 @@ MASS SPECTROMETER
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
if (!ishuman(M))
- user << "\red [M] is not humas and cannot have the fingerprints."
+ user << "\red [M] is not human and cannot have the fingerprints."
return 0
if (( !( istype(M.dna, /datum/dna) ) || M.gloves) )
user << "\blue No fingerprints found on [M]"
@@ -145,26 +149,37 @@ MASS SPECTROMETER
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
else
user << "\blue No blood found on [A]."
- if (!( A.fingerprints ))
- user << "\blue Unable to locate any fingerprints on [A]!"
+ if (!( A.fingerprints ) && !(A.suit_fibers))
+ user << "\blue Unable to locate any fingerprints or fibers on [A]!"
return 0
+ if(!( A.fingerprints ))
+ user << "\blue Unable to locate any fingerprints on [A]!"
else
- if ((src.amount < 1 && src.printing))
- user << "\blue Fingerprints found. Need more cards to print."
- src.printing = 0
- src.icon_state = text("forensic[]", src.printing)
- if (src.printing)
- src.amount--
- var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
- F.amount = 1
- F.fingerprints = A.fingerprints
- F.icon_state = "fingerprint1"
- user << "\blue Done printing."
- var/list/L = params2list(A.fingerprints)
- user << text("\blue Isolated [L.len] fingerprints.")
- for(var/i in L)
- user << text("\blue \t [i]")
- //Foreach goto(186)
+ var/list/L = params2list(A.fingerprints)
+ stored_prints[prints_index] = L
+ prints_name[prints_index] = A.name
+ user << text("\blue Isolated [L.len] fingerprints. Stored in memory.")
+ if(!A.suit_fibers)
+ user << "\blue No Fibers/Materials Located."
+ else
+ user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
+ stored_fibers[fibers_index] = A.suit_fibers
+ stored_name[fibers_index] = A.name
+// else
+// if ((src.amount < 1 && src.printing))
+// user << "\blue Fingerprints found. Need more cards to print."
+// src.printing = 0
+// src.icon_state = text("forensic[]", src.printing)
+// if (src.printing)
+// src.amount--
+// var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
+// F.amount = 1
+// F.fingerprints = A.fingerprints
+// F.icon_state = "fingerprint1"
+// user << "\blue Done printing."
+// for(var/i in L)
+// user << text("\blue \t [i]")
+// //Foreach goto(186)
return
diff --git a/code/game/objects/gibs.dm b/code/game/objects/gibs.dm
index 15dcb69af2e..0cc61f85493 100644
--- a/code/game/objects/gibs.dm
+++ b/code/game/objects/gibs.dm
@@ -1,7 +1,7 @@
//HUMANS
-/proc/gibs(atom/location, var/list/viruses)
- new /obj/effect/gibspawner/human(get_turf(location),viruses)
+/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA)
+ new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA)
/proc/xgibs(atom/location, var/list/viruses)
new /obj/effect/gibspawner/xeno(get_turf(location),viruses)
@@ -16,13 +16,13 @@
var/list/gibamounts = list()
var/list/gibdirections = list() //of lists
- New(location, var/list/viruses)
+ New(location, var/list/viruses, var/datum/dna/MobDNA)
..()
if(istype(loc,/turf)) //basically if a badmin spawns it
- Gib(loc,viruses)
+ Gib(loc,viruses,MobDNA)
- proc/Gib(atom/location, var/list/viruses = list())
+ proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
world << "\red Gib list length mismatch!"
return
@@ -50,6 +50,12 @@
gib.viruses += viruus
viruus.holder = gib
viruus.spread_type = CONTACT_FEET
+ if(MobDNA)
+ gib.blood_DNA = MobDNA.unique_enzymes
+ if(MobDNA.b_type)
+ gib.blood_type = MobDNA.b_type
+ if(MobDNA.original_name != "Unknown")
+ gib.OriginalMob = MobDNA.original_name
var/list/directions = gibdirections[i]
if(directions.len)
gib.streak(directions)
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index b7310d0ed18..779a3e75e0c 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -575,6 +575,8 @@ CIRCULAR SAW
S.open = 0
if(S.display_name == "chest" && H:embryo_op_stage == 1.0)
H:embryo_op_stage = 0.0
+ if(S.display_name == "groin" && H:appendix_op_stage == 1.0)
+ H:appendix_op_stage = 0.0
H.updatehealth()
H.UpdateDamageIcon()
@@ -630,13 +632,13 @@ CIRCULAR SAW
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage)
- if(0.0)
- if(M != user)
- for(var/mob/O in (viewers(M) - user - M))
- O.show_message("\red [M] is beginning to have \his abdomen cut open with [src] by [user].", 1)
- M << "\red [user] begins to cut open your abdomen with [src]!"
- user << "\red You cut [M]'s abdomen open with [src]!"
- M:appendix_op_stage = 1.0
+// if(0.0)
+// if(M != user)
+// for(var/mob/O in (viewers(M) - user - M))
+// O.show_message("\red [M] is beginning to have \his abdomen cut open with [src] by [user].", 1)
+// M << "\red [user] begins to cut open your abdomen with [src]!"
+// user << "\red You cut [M]'s abdomen open with [src]!"
+// M:appendix_op_stage = 1.0
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
@@ -857,6 +859,8 @@ CIRCULAR SAW
S.bleeding = 1
if(S.display_name == "chest")
H:embryo_op_stage = 1.0
+ if(S.display_name == "groin")
+ H:appendix_op_stage = 1.0
H.updatehealth()
H.UpdateDamageIcon()
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index 0660b1bfbea..383aed92dc1 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -33,7 +33,9 @@
if(usr.client.holder)
usr << "[M.key] is a [M.client.holder.rank][M.client.stealth ? " (as [M.client.fakekey])" : ""]"
else if(!M.client.stealth && (M.client.holder.level != -3))
- usr << "\t[M.client]"
+ usr << "\t[pick(nobles)] [M.client]"
+
+var/list/nobles = list("Baron","Bookkeeper","Captain of the Guard","Chief medical dwarf","Count","Dungeon master","Duke","General","Mayor","Outpost liaison","Sheriff","Champion")
/client/verb/active_players()
set category = "OOC"
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 2f94d139895..1682f627e6e 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1487,12 +1487,7 @@
return
if("schoolgirl")
if (src.rank in list("Badmin", "Game Admin", "Game Master"))
- for(var/obj/item/clothing/under/W in world)
- W.icon_state = "schoolgirl"
- W.item_state = "w_suit"
- W.color = "schoolgirl"
- message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
- world << sound('animes.ogg')
+ alert("You cannot perform this action. It is unbelievably stupid.")
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
return
diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm
new file mode 100644
index 00000000000..934ba5458e4
--- /dev/null
+++ b/code/modules/flufftext/Dreaming.dm
@@ -0,0 +1,25 @@
+mob/living/carbon/proc/dream()
+ dreaming = 1
+ var/list/dreams = list(
+ "an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the captain",
+ "voices from all around","deep space","a doctor","the engine","a traitor","an ally","darkness",
+ "light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun",
+ "a hat","the Luna","a ruined station","a planet","plasma","air","the medical bay","the bridge","blinking lights",
+ "a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect",
+ "riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying"
+ )
+ for(var/i = rand(1,4),i > 0, i--)
+ var/dream_image = pick(dreams)
+ dreams -= dream_image
+ src << "\blue ... [dream_image] ..."
+ sleep(rand(40,70))
+ if(paralysis <= 0)
+ dreaming = 0
+ return 0
+ dreaming = 0
+ return 1
+
+mob/living/carbon/proc/handle_dreams()
+ if(prob(5) && !dreaming) dream()
+
+mob/living/carbon/var/dreaming = 0
\ No newline at end of file
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
new file mode 100644
index 00000000000..83d46443fc2
--- /dev/null
+++ b/code/modules/flufftext/Hallucination.dm
@@ -0,0 +1,175 @@
+/*
+Ideas for the subtle effects of hallucination:
+
+Light up oxygen/plasma indicators (done)
+Cause health to look critical/dead, even when standing (done)
+Characters silently watching you
+Brief flashes of fire/space/bombs/c4/dangerous shit (done)
+Items that are rare/traitorous/don't exist appearing in your inventory slots (done)
+Strange audio (should be rare) (done)
+Gunshots/explosions/opening doors/less rare audio (done)
+
+*/
+
+mob/living/carbon/var
+ image/halimage
+ obj/halitem
+ hal_screwyhud = 0 //1 - critical, 2 - dead, 3 - oxygen indicator, 4 - toxin indicator
+ handling_hal = 0
+
+mob/living/carbon/proc/handle_hallucinations()
+ if(handling_hal) return
+ handling_hal = 1
+ while(hallucination > 20)
+ sleep(rand(200,500))
+ var/halpick = rand(1,100)
+ switch(halpick)
+ if(0 to 15)
+ //Screwy HUD
+ //src << "Screwy HUD"
+ hal_screwyhud = pick(1,2,3,3,4,4)
+ spawn(rand(100,250))
+ hal_screwyhud = 0
+ if(16 to 25)
+ //Strange items
+ //src << "Traitor Items"
+ halitem = new
+ var/list/slots_free = list("1,1","3,1")
+ if(l_hand) slots_free -= "1,1"
+ if(r_hand) slots_free -= "3,1"
+ if(istype(src,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = src
+ if(!H.belt) slots_free += "3,0"
+ if(!H.l_store) slots_free += "4,0"
+ if(!H.r_store) slots_free += "5,0"
+ if(slots_free.len)
+ halitem.screen_loc = pick(slots_free)
+ halitem.layer = 50
+ switch(rand(1,6))
+ if(1) //revolver
+ halitem.icon = 'gun.dmi'
+ halitem.icon_state = "revolver"
+ halitem.name = "Revolver"
+ if(2) //c4
+ halitem.icon = 'syndieweapons.dmi'
+ halitem.icon_state = "c4small_0"
+ halitem.name = "Mysterious Package"
+ if(prob(25))
+ halitem.icon_state = "c4small_1"
+ if(3) //sword
+ halitem.icon = 'weapons.dmi'
+ halitem.icon_state = "sword1"
+ halitem.name = "Sword"
+ if(4) //stun baton
+ halitem.icon = 'weapons.dmi'
+ halitem.icon_state = "stunbaton"
+ halitem.name = "Stun Baton"
+ if(5) //emag
+ halitem.icon = 'card.dmi'
+ halitem.icon_state = "emag"
+ halitem.name = "Cryptographic Sequencer"
+ if(6) //flashbang
+ halitem.icon = 'grenade.dmi'
+ halitem.icon_state = "flashbang1"
+ halitem.name = "Flashbang"
+ if(client) client.screen += halitem
+ spawn(rand(100,250))
+ del halitem
+ if(26 to 40)
+ //Flashes of danger
+ //src << "Danger Flash"
+ var/possible_points = list()
+ for(var/turf/simulated/floor/F in view(src,world.view))
+ possible_points += F
+ var/turf/simulated/floor/target = pick(possible_points)
+
+ switch(rand(1,3))
+ if(1)
+ //src << "Space"
+ halimage = image('space.dmi',target,"[rand(1,25)]",TURF_LAYER)
+ if(2)
+ //src << "Fire"
+ halimage = image('fire.dmi',target,"1",TURF_LAYER)
+ if(3)
+ //src << "C4"
+ halimage = image('syndieweapons.dmi',target,"c4small_1",OBJ_LAYER+0.01)
+
+
+ if(client) client.images += halimage
+ spawn(rand(10,50)) //Only seen for a brief moment.
+ if(client) client.images -= halimage
+ halimage = null
+
+
+ if(41 to 65)
+ //Strange audio
+ src << "Strange Audio"
+ switch(rand(1,12))
+ if(1) src << 'airlock.ogg'
+ if(2)
+ if(prob(50))src << 'Explosion1.ogg'
+ else src << 'Explosion2.ogg'
+ if(3) src << 'explosionfar.ogg'
+ if(4) src << 'Glassbr1.ogg'
+ if(5) src << 'Glassbr2.ogg'
+ if(6) src << 'Glassbr3.ogg'
+ if(7) src << 'twobeep.ogg'
+ if(8) src << 'windowdoor.ogg'
+ if(9)
+ //To make it more realistic, I added two gunshots (enough to kill)
+ src << 'Gunshot.ogg'
+ spawn(rand(10,30))
+ src << 'Gunshot.ogg'
+ if(10) src << 'smash.ogg'
+ if(11)
+ //Same as above, but with tasers.
+ src << 'Taser.ogg'
+ spawn(rand(10,30))
+ src << 'Taser.ogg'
+ //Rare audio
+ if(12)
+ switch(rand(1,4))
+ if(1) src << 'ghost.ogg'
+ if(2) src << 'ghost2.ogg'
+ if(3) src << 'Heart Beat.ogg'
+ if(4) src << 'screech.ogg'
+ handling_hal = 0
+
+
+
+
+/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts)
+
+ if(!mocktxt)
+
+ mocktxt = ""
+
+ var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\
+ "Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\
+ "OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Captain IQ","Retrieve Arms",\
+ "Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry")
+
+ if(mid_txts)
+ while(mid_txts.len)
+ var/mid_txt = pick(mid_txts)
+ mocktxt += mid_txt
+ mid_txts -= mid_txt
+
+ while(buttons.len)
+
+ var/button = pick(buttons)
+
+ var/button_txt = pick(possible_txt)
+
+ mocktxt += "[button_txt]
"
+
+ buttons -= button
+ possible_txt -= button_txt
+
+ return start_txt + mocktxt + end_txt + "