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"