diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 146b7b318ff..d03909fefbe 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -177,12 +177,12 @@ datum/mind
text += "employee|headrev|REV"
else
text += "EMPLOYEE|headrev|rev"
-
+
if(current && current.client && current.client.prefs.be_special & BE_REV)
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
-
+
sections["revolution"] = text
/** CULT ***/
@@ -201,13 +201,13 @@ datum/mind
*/
else
text += "EMPLOYEE|cultist"
-
+
if(current && current.client && current.client.prefs.be_special & BE_CULTIST)
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
-
+
sections["cult"] = text
/** WIZARD ***/
@@ -222,12 +222,12 @@ datum/mind
text += "
Objectives are empty! Randomize!"
else
text += "yes|NO"
-
+
if(current && current.client && current.client.prefs.be_special & BE_WIZARD)
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
-
+
sections["wizard"] = text
/** CHANGELING ***/
@@ -243,12 +243,12 @@ datum/mind
text += "
Transform to initial appearance."
else
text += "yes|NO"
-
+
if(current && current.client && current.client.prefs.be_special & BE_CHANGELING)
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
-
+
sections["changeling"] = text
/** NINJA ***/
@@ -263,12 +263,12 @@ datum/mind
//text += "
Objectives are empty! Randomize!"
else
text += "yes|NO"
-
+
if(current && current.client && current.client.prefs.be_special & BE_NINJA)
text += "|Enabled in Prefs"
else
- text += "|Disabled in Prefs"
-
+ text += "|Disabled in Prefs"
+
sections["ninja"] = text
/** VAMPIRE ***/
@@ -282,15 +282,15 @@ datum/mind
text += "
Objectives are empty! Randomize!"
else
text += "yes|NO"
-
+
if(src in ticker.mode.enthralled)
text += "YES|no"
else
text += "yes|NO"
-
+
/** Enthralled ***/
text += "
enthralled"
-
+
sections["vampire"] = text
@@ -311,12 +311,12 @@ datum/mind
text += " Code is [code]. tell the code."
else
text += "operative|NANOTRASEN"
-
+
if(current && current.client && current.client.prefs.be_special & BE_OPERATIVE)
text += "|Enabled in Prefs"
else
- text += "|Disabled in Prefs"
-
+ text += "|Disabled in Prefs"
+
sections["nuclear"] = text
/** TRAITOR ***/
@@ -333,12 +333,12 @@ datum/mind
text += "
Objectives are empty! Randomize!"
else
text += "traitor|EMPLOYEE"
-
+
if(current && current.client && current.client.prefs.be_special & BE_TRAITOR)
text += "|Enabled in Prefs"
else
- text += "|Disabled in Prefs"
-
+ text += "|Disabled in Prefs"
+
sections["traitor"] = text
/** MONKEY ***/
@@ -359,12 +359,12 @@ datum/mind
else
text += "healthy|infected|human|OTHER"
-
+
/*if(current && current.client && current.client.prefs.be_special & BE_MONKEY)
text += "|Enabled in Prefs"
else
- text += "|Disabled in Prefs"*/
-
+ text += "|Disabled in Prefs"*/
+
sections["monkey"] = text
@@ -475,13 +475,13 @@ datum/mind
if(!def_value)//If it's a custom objective, it will be an empty string.
def_value = "custom"
- var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom")
+ var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "destroy", "maroon", "custom")
if (!new_obj_type) return
var/datum/objective/new_objective = null
switch (new_obj_type)
- if ("assassinate","protect","debrain", "harm", "brig")
+ if ("assassinate","protect","debrain", "harm", "brig", "maroon")
//To determine what to name the objective in explanation text.
var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter.
var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text.
@@ -513,6 +513,17 @@ datum/mind
//Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]."
+ if ("destroy")
+ var/list/possible_targets = active_ais(1)
+ if(possible_targets.len)
+ var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets
+ new_objective = new /datum/objective/destroy
+ new_objective.target = new_target.mind
+ new_objective.owner = src
+ new_objective.explanation_text = "Destroy [new_target.name], the experimental AI."
+ else
+ usr << "No active AIs with minds"
+
if ("speciesist")
new_objective = new /datum/objective/speciesist
new_objective.owner = src
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index abdb1832d6f..964001722af 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -234,6 +234,31 @@ datum/objective/anti_revolution/demote
return 0
return 1
+datum/objective/maroon
+ find_target()
+ ..()
+ if(target && target.current)
+ explanation_text = "Prevent [target.current.real_name], the [target.assigned_role] from escaping alive."
+ else
+ explanation_text = "Free Objective"
+ return target
+
+ find_target_by_role(role, role_type=0)
+ ..(role, role_type)
+ if(target && target.current)
+ explanation_text = "Prevent [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] from escaping alive."
+ else
+ explanation_text = "Free Objective"
+ return target
+
+ check_completion()
+ if(target && target.current)
+ if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
+ return 1
+ if(target.current.z == 2)
+ return 0
+ return 1
+
datum/objective/debrain//I want braaaainssss
find_target()
..()
@@ -422,6 +447,29 @@ datum/objective/escape
else
return 0
+datum/objective/escape/escape_with_identity
+ var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
+
+ find_target()
+ target = ..()
+ if(target && target.current)
+ target_real_name = target.current.real_name
+ explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing their identification card."
+ else
+ explanation_text = "Free Objective."
+
+ check_completion()
+ if(!target_real_name)
+ return 1
+ if(!ishuman(owner.current))
+ return 0
+ var/mob/living/carbon/human/H = owner.current
+ if(..())
+ if(H.dna.real_name == target_real_name)
+ if(H.get_id_name()== target_real_name)
+ return 1
+ return 0
+
datum/objective/die
explanation_text = "Die a glorious death."
@@ -545,6 +593,8 @@ datum/objective/steal
else
if(O.flags & 1) // THEFT_FLAG_SPECIAL
continue
+ if(O.flags & 2)
+ continue
steal_target=O
explanation_text = "Steal [O]."
return
@@ -575,6 +625,28 @@ datum/objective/steal
if(!steal_target) return 1 // Free Objective
return steal_target.check_completion(owner)
+datum/objective/steal/exchange
+
+ proc/set_faction(var/faction,var/otheragent)
+ target = otheragent
+ var/datum/theft_objective/unique/targetinfo
+ if(faction == "red")
+ targetinfo = new /datum/theft_objective/unique/docs_blue
+ else if(faction == "blue")
+ targetinfo = new /datum/theft_objective/unique/docs_red
+ explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent"
+ steal_target = targetinfo.typepath
+
+datum/objective/steal/exchange/backstab
+
+ set_faction(var/faction)
+ var/datum/theft_objective/unique/targetinfo
+ if(faction == "red")
+ targetinfo = new /datum/theft_objective/unique/docs_red
+ else if(faction == "blue")
+ targetinfo = new /datum/theft_objective/unique/docs_blue
+ explanation_text = "Do not give up or lose [targetinfo.name]."
+ steal_target = targetinfo.typepath
datum/objective/download
proc/gen_amount_goal()
@@ -665,7 +737,23 @@ datum/objective/absorb
else
return 0
+datum/objective/destroy
+ find_target()
+ var/list/possible_targets = active_ais(1)
+ var/mob/living/silicon/ai/target_ai = pick(possible_targets)
+ target = target_ai.mind
+ if(target && target.current)
+ explanation_text = "Destroy [target.name], the experimental AI."
+ else
+ explanation_text = "Free Objective"
+ return target
+ check_completion()
+ if(target && target.current)
+ if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey)
+ return 1
+ return 0
+ return 1
/* Isn't suited for global objectives
/*---------CULTIST----------*/
@@ -743,7 +831,7 @@ datum/objective/minimize_casualties
check_completion()
if(owner.kills.len>5) return 0
return 1
-
+
//Vox heist objectives.
datum/objective/heist
diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm
index 5a92a88c673..ec2e467e7c4 100644
--- a/code/game/gamemodes/steal_items.dm
+++ b/code/game/gamemodes/steal_items.dm
@@ -3,6 +3,7 @@
// Separated into datums so we can prevent roles from getting certain objectives.
#define THEFT_FLAG_SPECIAL 1
+#define THEFT_FLAG_UNIQUE 2
/datum/theft_objective
var/name=""
@@ -17,13 +18,16 @@
return 0
var/list/all_items = owner.current.get_contents()
for(var/obj/I in all_items) //Check for items
- if(istype(I, typepath))
+ if(istype(I, typepath) && check_special_completion(I))
//Stealing the cheap autoinjector doesn't count
if(istype(I, /obj/item/weapon/reagent_containers/hypospray/autoinjector))
continue
return 1
return 0
+/datum/proc/check_special_completion() //for objectives with special checks (is that slime extract unused? does that intellicard have an ai in it? etcetc)
+ return 1
+
/datum/theft_objective/antique_laser_gun
name = "the captain's antique laser gun"
typepath = /obj/item/weapon/gun/energy/laser/captain
@@ -52,6 +56,13 @@
name = "a functional AI"
typepath = /obj/item/device/aicard
+datum/theft_objective/ai/check_special_completion(var/obj/item/device/aicard/C)
+ if(..())
+ for(var/mob/living/silicon/ai/A in C)
+ if(istype(A, /mob/living/silicon/ai) && A.stat != 2) //See if any AI's are alive inside that card.
+ return 1
+ return 0
+
/datum/theft_objective/defib
name = "a defibrillator"
typepath = /obj/item/weapon/defibrillator
@@ -73,12 +84,20 @@
protected_jobs = list("Research Director")
/datum/theft_objective/slime_extract
- name = "a sample of slime extract"
+ name = "a sample of unused slime extract"
typepath = /obj/item/slime_extract
+ protected_jobs = list("Research Director","Xenobiologist")
+
+/datum/theft_objective/slime_extract/check_special_completion(var/obj/item/slime_extract/E)
+ if(..())
+ if(E.Uses > 0)
+ return 1
+ return 0
/datum/theft_objective/corgi
name = "a piece of corgi meat"
typepath = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
+ protected_jobs = list("Head of Personnel")
/datum/theft_objective/capmedal
name = "the medal of captaincy"
@@ -95,6 +114,10 @@
typepath = /obj/item/clothing/suit/armor/reactive
protected_jobs = list("Research Director")
+/datum/theft_objective/steal/documents
+ name = "any set of secret documents of any organization"
+ typepath = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's
+
/datum/theft_objective/rd_jumpsuit
name = "the research director's jumpsuit"
typepath = /obj/item/clothing/under/rank/research_director
@@ -133,6 +156,7 @@
/datum/theft_objective
name = "an ablative armor vest"
typepath = /obj/item/clothing/suit/armor/laserproof
+ protected_jobs = list("Head of Security", "Warden")
/datum/theft_objective/number
var/min=0
@@ -170,6 +194,7 @@
typepath = /obj/item/weapon/tank
min=28
max=28
+ protected_jobs = list("Chief Engineer", "Engineer", "Scientist", "Research Director", "Life Support Specialist")
/datum/theft_objective/number/plasma_gas/getAmountStolen(var/obj/item/I)
return I:air_contents:toxins
@@ -200,8 +225,23 @@
/datum/theft_objective/special
flags = THEFT_FLAG_SPECIAL
+/datum/theft_objective/unique
+ flags = THEFT_FLAG_UNIQUE
+
+/datum/theft_objective/unique/docs_red
+ name = "the \"Red\" secret documents"
+ typepath = /obj/item/documents/syndicate/red
+
+/datum/theft_objective/unique/docs_blue
+ name = "the \"Blue\" secret documents"
+ typepath = /obj/item/documents/syndicate/blue
+
+/datum/theft_objective/special/pinpointer
+ name = "the captain's pinpointer"
+ typepath = /obj/item/weapon/pinpointer
+
/datum/theft_objective/special/nuke_gun
- name = "nuclear gun"
+ name = "advanced energy gun"
typepath = /obj/item/weapon/gun/energy/gun/nuclear
/datum/theft_objective/special/diamond_drill
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 3e70f6fd730..f788b8145e8 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -4,6 +4,9 @@
var/list/datum/mind/implanter = list()
var/list/datum/mind/implanted = list()
+ var/datum/mind/exchange_red
+ var/datum/mind/exchange_blue
+
/datum/game_mode/traitor
name = "traitor"
config_tag = "traitor"
@@ -95,34 +98,49 @@
traitor.objectives += block_objective
else
- switch(rand(1,100))
- if(1 to 30)
- var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = traitor
- kill_objective.find_target()
- traitor.objectives += kill_objective
- if(31 to 40)
- var/datum/objective/debrain/debrain_objective = new
- debrain_objective.owner = traitor
- debrain_objective.find_target()
- traitor.objectives += debrain_objective
- if(41 to 50)
- var/datum/objective/protect/protect_objective = new
- protect_objective.owner = traitor
- protect_objective.find_target_with_special_role(null,0)
- if (!protect_objective.target)
- protect_objective.find_target() //We could not find any traitors, protect somebody
- traitor.objectives += protect_objective
- if(51 to 66)
- var/datum/objective/harm/harm_objective = new
- harm_objective.owner = traitor
- harm_objective.find_target()
- traitor.objectives += harm_objective
+ if(!exchange_blue && traitors.len >= 5) //Set up an exchange if there are enough traitors
+ if(!exchange_red)
+ exchange_red = traitor
else
- var/datum/objective/steal/steal_objective = new
- steal_objective.owner = traitor
- steal_objective.find_target()
- traitor.objectives += steal_objective
+ exchange_blue = traitor
+ assign_exchange_role(exchange_red)
+ assign_exchange_role(exchange_blue)
+ else
+ var/list/active_ais = active_ais()
+ if(active_ais.len && prob(100/num_players()))
+ var/datum/objective/destroy/destroy_objective = new
+ destroy_objective.owner = traitor
+ destroy_objective.find_target()
+ traitor.objectives += destroy_objective
+ else
+ switch(rand(1,100))
+ if(1 to 30)
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = traitor
+ kill_objective.find_target()
+ traitor.objectives += kill_objective
+ if(31 to 40)
+ var/datum/objective/debrain/debrain_objective = new
+ debrain_objective.owner = traitor
+ debrain_objective.find_target()
+ traitor.objectives += debrain_objective
+ if(41 to 50)
+ var/datum/objective/protect/protect_objective = new
+ protect_objective.owner = traitor
+ protect_objective.find_target_with_special_role(null,0)
+ if (!protect_objective.target)
+ protect_objective.find_target() //We could not find any traitors, protect somebody
+ traitor.objectives += protect_objective
+ if(51 to 61)
+ var/datum/objective/harm/harm_objective = new
+ harm_objective.owner = traitor
+ harm_objective.find_target()
+ traitor.objectives += harm_objective
+ else
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = traitor
+ steal_objective.find_target()
+ traitor.objectives += steal_objective
switch(rand(1,100))
if(1 to 30) // Die glorious death
if (!(locate(/datum/objective/die) in traitor.objectives) && !(locate(/datum/objective/steal) in traitor.objectives))
@@ -205,7 +223,6 @@
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."
-
/datum/game_mode/proc/add_law_zero(mob/living/silicon/ai/killer)
var/law = "Accomplish your objectives at all costs."
var/law_borg = "Accomplish your AI's objectives at all costs."
@@ -394,3 +411,45 @@
update_traitor_icons_removed(traitor_mind)
//world << "Removed [traitor_mind.current.name] from traitor shit"
traitor_mind.current << "\red The fog clouding your mind clears. You remember nothing from the moment you were implanted until now.(You don't remember who implanted you)"
+
+/datum/game_mode/proc/assign_exchange_role(var/datum/mind/owner)
+ //set faction
+ var/faction = "red"
+ if(owner == exchange_blue)
+ faction = "blue"
+
+ //Assign objectives
+ var/datum/objective/steal/exchange/exchange_objective = new
+ exchange_objective.set_faction(faction,((faction == "red") ? exchange_blue : exchange_red))
+ exchange_objective.owner = owner
+ owner.objectives += exchange_objective
+
+ if(prob(20))
+ var/datum/objective/steal/exchange/backstab/backstab_objective = new
+ backstab_objective.set_faction(faction)
+ backstab_objective.owner = owner
+ owner.objectives += backstab_objective
+
+ //Spawn and equip documents
+ var/mob/living/carbon/human/mob = owner.current
+
+ var/obj/item/weapon/folder/syndicate/folder
+ if(owner == exchange_red)
+ folder = new/obj/item/weapon/folder/syndicate/red(mob.locs)
+ else
+ folder = new/obj/item/weapon/folder/syndicate/blue(mob.locs)
+
+ var/list/slots = list (
+ "backpack" = slot_in_backpack,
+ "left pocket" = slot_l_store,
+ "right pocket" = slot_r_store,
+ "left hand" = slot_l_hand,
+ "right hand" = slot_r_hand,
+ )
+
+ var/where = "At your feet"
+ var/equipped_slot = mob.equip_in_one_of_slots(folder, slots)
+ if (equipped_slot)
+ where = "In your [equipped_slot]"
+ mob << "
[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
"
+ mob.update_icons()
diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm
new file mode 100644
index 00000000000..b0761167d4e
--- /dev/null
+++ b/code/game/objects/items/documents.dm
@@ -0,0 +1,29 @@
+/obj/item/documents
+ name = "secret documents"
+ desc = "\"Top Secret\" documents printed on special copy-protected paper."
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "docs_generic"
+ item_state = "paper"
+ throwforce = 0
+ w_class = 1.0
+ throw_range = 1
+ throw_speed = 1
+ layer = 4
+ pressure_resistance = 1
+
+/obj/item/documents/nanotrasen
+ desc = "\"Top Secret\" Nanotrasen documents printed on special copy-protected paper. It is filled with complex diagrams and lists of names, dates and coordinates."
+ icon_state = "docs_verified"
+
+/obj/item/documents/syndicate
+ desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence."
+
+/obj/item/documents/syndicate/red
+ name = "'Red' secret documents"
+ desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Red\"."
+ icon_state = "docs_red"
+
+/obj/item/documents/syndicate/blue
+ name = "'Blue' secret documents"
+ desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Blue\"."
+ icon_state = "docs_blue"
\ No newline at end of file
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index f2b05f5432f..613b3a39b5f 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -34,7 +34,7 @@
/obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob)
- if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle))
+ if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle) || istype(P, /obj/item/documents))
user << "You put [P] in [src]."
user.drop_item()
P.loc = src
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index c12eea86e4d..828c9f90d29 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -31,7 +31,7 @@
return
/obj/item/weapon/folder/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/weapon/paper_bundle))
+ if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/weapon/paper_bundle) || istype(W, /obj/item/documents))
user.drop_item()
W.loc = src
user << "You put the [W] into \the [src]."
@@ -51,6 +51,8 @@
dat += "Remove - [Ph.name]
"
for(var/obj/item/weapon/paper_bundle/Pa in src)
dat += "Remove - [Pa.name]
"
+ for(var/obj/item/documents/doc in src)
+ dat += "Remove - [doc.name]
"
user << browse(dat, "window=folder")
onclose(user, "folder")
add_fingerprint(usr)
@@ -92,3 +94,33 @@
attack_self(usr)
update_icon()
return
+
+/obj/item/weapon/folder/documents
+ name = "folder- 'TOP SECRET'"
+ desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\""
+
+/obj/item/weapon/folder/documents/New()
+ ..()
+ new /obj/item/documents/nanotrasen(src)
+ update_icon()
+
+/obj/item/weapon/folder/syndicate
+ name = "folder- 'TOP SECRET'"
+ desc = "A folder stamped \"Top Secret - Property of The Syndicate.\""
+
+/obj/item/weapon/folder/syndicate/red
+ icon_state = "folder_sred"
+
+/obj/item/weapon/folder/syndicate/red/New()
+ ..()
+ new /obj/item/documents/syndicate/red(src)
+ update_icon()
+
+/obj/item/weapon/folder/syndicate/blue
+ icon_state = "folder_sblue"
+
+/obj/item/weapon/folder/syndicate/blue/New()
+ ..()
+ new /obj/item/documents/syndicate/blue(src)
+ update_icon()
+
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index a42b0125b6a..b1e9553d546 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index 539d745d26e..5460ad195e0 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -1734,7 +1734,7 @@
"aHr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 6},/area/security/nuke_storage)
"aHs" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{pixel_y = 23},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "vault"},/area/security/nuke_storage)
"aHt" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "vault"; dir = 10},/area/security/nuke_storage)
-"aHu" = (/obj/machinery/computer/secure_data/detective_computer,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage)
+"aHu" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/filingcabinet,/obj/item/weapon/folder/documents,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage)
"aHv" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/gateway)
"aHw" = (/obj/machinery/gateway{density = 0},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway)
"aHx" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/gateway)
diff --git a/paradise.dme b/paradise.dme
index da523a65690..a9b187ce2c7 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -600,6 +600,7 @@
#include "code\game\objects\items\changestone.dm"
#include "code\game\objects\items\contraband.dm"
#include "code\game\objects\items\crayons.dm"
+#include "code\game\objects\items\documents.dm"
#include "code\game\objects\items\flag.dm"
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\policetape.dm"