From fb1271b850fc6c59d59503c47277ff08803767a7 Mon Sep 17 00:00:00 2001 From: DZD Date: Fri, 30 Jan 2015 23:40:41 -0500 Subject: [PATCH] Ports Antag Objectives from TG - Maroon objective: Prevent person from escaping on the shuttle, this can include killing them. (Not in rotation) - Escape with identity objective: Changeling objective, steal a person's identity and ID, and escape on the shuttle with it. (Not in rotation) - Exchange objective: 2 traitors are each given documents, one has the red documents, one has the blue. They must meet and exchange the documents. However, there is a 20% chance each one of them will have a backstab objective, where he must escape with both documents. (Should be in rotation) - Destroy objective: Kill the station AI. (Not in rotation) - Adds steal objective to steal the station secret documents, which are located in the vault filing cabinet. (Should be in rotation) - Adds special (mostly just used by ninja) objective to steal a pinpointer. (Should be in rotation) - Folders and filing cabinets can now store top secret documents. All associated sprites are ported along with these features from TG. --- code/game/gamemodes/objective.dm | 88 ++++++++++++++++++- code/game/gamemodes/steal_items.dm | 16 ++++ code/game/gamemodes/traitor/traitor.dm | 108 ++++++++++++++++++------ code/game/objects/items/documents.dm | 29 +++++++ code/modules/paperwork/filingcabinet.dm | 2 +- code/modules/paperwork/folders.dm | 34 +++++++- icons/obj/bureaucracy.dmi | Bin 11011 -> 13799 bytes maps/cyberiad.dmm | 2 +- paradise.dme | 1 + 9 files changed, 248 insertions(+), 32 deletions(-) create mode 100644 code/game/objects/items/documents.dm diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index abdb1832d6f..61f7f08824e 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." @@ -575,6 +623,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 +735,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 +829,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 dccaabeff59..dc2955d7d36 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -113,6 +113,10 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/device/aicard/C) 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 @@ -220,6 +224,18 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/device/aicard/C) /datum/theft_objective/special flags = THEFT_FLAG_SPECIAL +/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 = "advanced energy gun" typepath = /obj/item/weapon/gun/energy/gun/nuclear diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 3e70f6fd730..0743172bd54 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,42 @@ 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 + 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 + 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 +216,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 +404,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 a42b0125b6a7c5916b1ce1950c9765dd456ad352..b1e9553d546cc640150a7b83d9994c0a03536941 100644 GIT binary patch literal 13799 zcmbWeWmH|k5+-_Z3+_&UAi>=UZV4XT-QAtw?vmgx!QCAK3GVLhZU=jtd*`h+>%I9g zGe1~ocb`7JtGlbd>Z@R2OqeGoHrgm8*>9X?Phr>4s zkqpLnre3O-NlRkB%hvqG)^~fkiy4W;=AN&(r#s0CoK+K}Rzd61Vv@fuBvg)SiF zJR_We-k=HC_WqqDMB~l6<{jbN56-k}pP;#+#ARRZXi4VkMoYKPdol=0lYQmh2!H1D z&shLZWlPC#5{uoUrYZQGP@^r3afwgXoShKz(GXEj+_yCNgU1~Tkeo;_M2sIMn`fqaH(L*HHdO#ElIr;Nkl1i!jOKquj9tl^-h+qksSM_PH}0cV4O% zdokP=@olOk`rBOW9)RH5TUT^x6bwUqCaDzeWWvXXX7^@I4p9G=4ZpqYx3Y~F2lBKN zrK2*fZ^W^*p#K1Y$UxF!!r$F9PBXohT05fej8w(j!# zV6{^B>o}|9-f-j5SJ2zkblmXmjzqo7W3JA&wY;1j4O;kOgK7;|2u*A__(K>Oylor= zI&=>*D_H=w&s$UTm@>1?ex=ny8}3^EDGe5QB&HRxt3uo1wLRtXd-)ojnXMv(lFlM@-ty z6AUldbgJxhFDs|=ZH1(d8g{0`{xh1dr*?wm!ulccpze{|Tg)9ZrIc*?8 zQ6vHc!zm1j*a$7N(2*y*$4V_Lc?8~fJBhv9>0ESR$%|vGBc+z#k;NAy>#Fd_uQdva zFWucjssECblE?%Fbr-4)MC+zV^X$%*TKfKIK6{;F_8PH$QT)EH&)oc-k&X_@YOWmJ zbTqB-q^xx^?INN5*>{teTmQ^9gTA#`Om^JriejnUE}WNLjkx^_2a(%ZqA{Yg+6%r$jC6?3*oPkko3#G2^9z9#bEzFB;}l2;ujQKCkc&i zV3d?`tl{#T)Mq9GWd8BvNAuHJo67VT?}zHqZPAbqJ)3=@o9E}TVPWvIH<>J^BX|bm zSpvVs^zavxxi4;>4hXSBTj}N}=k`rO-4M#m&tO=stC5vlc!W^D2{Tx(r}+}UH5 z7w}(!WO_%oIgO5(C?5&7(~DsjsnOvEUQPjWj9r4mc^3lX{nv3TXPE8`zl>_n4zQgM z`!uY7f4^ASJS{D4+ELfb-Lh)c{#a&NsURxVKo#0E7^UXt_yCfLIic}u-YFqA+;pk8 z^O+z#?$}Gj*ecvdJ{x=z_bb}XiUPCKw76l|@9Juyf~m`zS>s2Gb&9`$$GqxFl=usA z10CX!R-eeb(hmKAD!ZIrk9EGcnUbg~J2FeApBwYESPi(}5Pw5aB_imwIzxa?+SP;O z;^HJsdi~yrfzIwx1S+CZ^!y_yv z#`b%WUYGCC@Ni&{zL2gi35m~*;=oNqui~_{rQlez-yW}bn@6H3W&$?E>iV?aSQV{= z5YwlMQJ>zvKCSxKY>CU4r|TF_D!Ggy6+H&^pzW}2p5WVuETuJLB6$Z^eqQ5A<~b z>8~p-PJ|q>^~PKM;R~%UbX-253(7ZTmlapv;dqvsJzS7B_kG!};(QU3e9!y{b|3QEOXY``$v+0aAhpH6RritCK2~ado?sbq$URDg7hL21 zGD&ps2;NSS)TNrikY2A=z{SO-c8*R%*t85DHl@&ZAwfulXz95&YHLxwaBuhwHX1I1 z8gugFu8iRI8|!?)|Ah*-wY3!#7l)R!Wi_(}@!;CTNw#STV>!NTYpFu~#hR-Ya)mwT z_qv~3ar4%UUX8%37@eh+R^w~1WvAa;LIOt8H!b7^e7Hg?4i1iz@^a@EYbV3yMw`~= zW^M>jt1E=%*o$#p2Djf1{jbp+cmO<$t(O~R;keI=a3y)mGxDI&kyfPwJ`13J@Ygc( zO3H$RZRTo}IP_4L74F)II`;D`-2VYl&2u+MA~OyJ<^S?@-=^)l`!9Lak>n?vs6$gm zOyllH_yAmX{N(=?Fc0~|2W-INqY0y}kU^2d2M`(yK?~al{;yH|e;ORuL8f78`P;;R z+>NV%8a@DIOrQX?tF0GVhmXZ0aS$xiCQ@KvQ}2GIuQ6h&u7;h3V*Vh#eAh|_q?@a)#rjkufsL=^x)?{ELr|-@HL0P6yff6gspK3IZdyvwTT?^0yS+c3XEJ{sWFEHDHJOU^roRF5j_Hm<>%Q zX-0{Bbcy`Qt7mIP^f4T4i=rxaTXCVpEj4&wpHTIY{jFfudK-J=Mq!`*vq1aJm8ydk zAGF%(l+7R1*%)gwo^w`2zsPo~y&oMxLg9adfK~iHJh=5tA8(jaOOt@zp|Olli)A~@ zZb4bMT@$04i3*R6bvs^GJ$(7+ery#zX&$6o)g&ftHkKi5Z_f;}61~DH{}3k59mAbf zhg_B-C;reK5AuIrk1^DZdAV|v*A4o;jmzJql=rviv!ARQW# zHbX|4<7;v@HcTknHe`_f%>qk*e?J+}2BBeM=KsEXOu#VM5x8IQwtHLaXy#y^I6av9 z=YMjm8J=#^xq99|d`pPa3zt83d-{?|C5xjX?3K&boGUuuR&R9b0i z>4kQWx-Bq2diu9<-3|g`<;d$#pL+8Xsq@8Z1>E%&&=L|7>?Ms0%CDDXMFs~3G<*t^ z_fI6}OManMsy175_Rb<|;EJ>B^zUsCx%(6DQNTkw^O`6zHIA6Qy}od}p5WP9g?*5S zA+j(LlsUQ%+4WT?De-A@E$Q%Hbo_?gA0O+CC#0l=u}4Y8O5x}Q?=K4#5gCaoA|gW2 zrFh9M;X_O-jlX6dKAE z;SJhYs4)Wh7iaqtEH~NN&73HSbkX+aeH8Lxo4P+|I$@&idF}AB>3nmtWjqUua`s{_ zSf%>ek^36cdN>e|LMJ&Hd%s=z80J;@`SWKimh7AyvYq{XVB-GRMn^#U$oM^>dWrJ& zQX|Rq!P#zgg`76vl+T`O^6m|ZlM?fW|NXn#X=OJUh72S#$VmuqlVzNRXV}B$!KLEEJ@C5`A40{6E^dlSmS1V%I@;FckkQEIop`CKr5rcG?6y zCd%+gmVj1+F4-DbY+4_<)%0?$dqaUPuCGO_LR`WlA|e!2RA9RKJzsvAWjTPmgkX1I ztXErSS!d?wpcT4TR8~8@-0(iYex&=lD4gDY8(!2mmdO`eub=z8b&?SvIelkj#vYdd>;h=3!M1ng1gvz~&2|Le<> z(dE`a?^NMe0Zstjqd2VQK!Eo>J-Tce@^241p06?*P2*^Gza$6g0|Oak){{R;Yg8hF zZag~-vE^(B&eyxXAR;2R>*_^d{OKbDL_In_p6vATYQN}3N-+`?6l9RdW}#-OnXKXD ztlVCIdu=jIi^OGeEo*`Li95(dL({!jXV#&ct*EG&`)^JH*vIZOQU3gJ!H^ua9X*JFGEbBQQgt(_eX+?EE+c+iIjd!0T{njNoaZRg*on4V7c%Q}5 z>`OM)fgTb$s^Qj1c5pho1%~I%0Yta;hr`3elCm=8?{&0?%Ocmh%nrLyIUb*^Bft`Y z!V^~Phf|Z>L>x|RvM$i|+)D;jlr{;aKeDq)T~C*04}Pj%%$eCA!lVm$HJ)X2&T@JJQ`FfH`b8mlD_#jbt=}21>=CNiN=PRx~zGM zcDad2;!_3GEBBd@714$fkZs(n`lA`VwR@&@XG)63pgX}1_^*hzx(Ip?eN2LC0~)i@t2(d)E+cM(w2 zr|M7B9toNeIo73-ACZ&=R>`tp>9&;tFIpy5@agCp53Zl@$}xzd@7KeURY`cXikKuY zR4WiwBXJO2TwFXtCy*^|M4MR^VeuHS$5^Hz%$J)RypgO?`7cxg#FpBisx=xl38A-# z?bzRkk?*t6_?~iXtngsDo!cJTnvD;{T5j4hC9RlCm6~R28U>`yywCRa>(_W72I}Yd zJ0&k43lRq;G%gNIsH5US(xF%xb&b#GT28h7!?L#4xf3?9`-6lv`;-v};@!8aqhJiK zC+m;8=~~w8mO6HcSxA4psDl8@J0AHF+PFtCH+Zu6yYyN;Hk5+{88#3N7dP~4DkI0# z{pIDPGk;vdpRLdQo;^F9Prx}j%+7a07IH>+XKcg}rhJqs)3`{u%tit3!XpJ0UUA3{Cose^YeIyDCj!`1^X%AngHf`*pX!BVhTK3nw+5g6ClJOi!OWSbe6ogE9@FhhB= zfe=om=mhgl`X>$(Na(zJP3rXt<6jH9Ztz!F0L6Butkp@%?p|)I{A}1IOn?9?O+_pV zj4-_weCbBWd^5J}a8Rrl_k2VL`3r4RwmCUS)rhm4Z{hbz?#GV+enNTs_)L~6Q+ub! zPg>s&P=1TVEt1Pbd>iw9aNL*U_g?pbFFngIMc4&g69~A2X@T~3X~-!kT(<5Pj`vFB z-DApa-9OC-xxi>)XFL3p=sc|QdnwB?#_HA5`_^0Uo~tKC^Lp324g#ff+5EZ0q(&pa z2yp#8rZ7G_imfgVHE4Zv#*ALspMQvjp%-g!+h&`O; z_08es3UR)v=y0hped|A)qKGbfxpHF$0+AN^hVh++^>*B^MP5Z9df%Npx7T05^t;|E zGa#n1TO>@g#tMRI$jQl*Qfx86{m9;gMf=X6>H&SUo%fVX!CYE(rDKh#o%Lt)P&(qk ziNeiD=31nQLK^{ZJI?!mIt;7^mSXa=l^>aDx-EWTB-SEbQvknrU zGnZ(Z#3KZJSKbn56#@a3TH&~o6X(Dv8bIpk^ECS2uMia;E@9&%z-hM><+MMRt8zRC z@&{YZ+i%TStnfU`J=9`X~_D2Y`DIv_l;=6BFwFic{<^ z2ODW4W$9nzTFWf?Oy1diq9_KRZfn7jusiGZU>4Mvy4Q{jJ?u$0iQW`t)xBn4nUbQ( zxt&k3>W9T0SHVT#ODLc=Aweqe`H2VxS*jf+tmE>Ffq?-N8(c-O)o5%cYBRtb&xn{*-@1XGi;Y0kyxLj}AoZJCcFs!7 z_yRY6)G4$Z{I&VJPI#U&6*SDjrP9+pOTiQQ%|SD9g{GavUzKw`-kaS|RYzB-&jFk^ zquak3b=$+zmNcR75&v{dPBuH2!s_{UKo!4Tlir}51y57U_ZCN^c0Q~#U07%m2+DpH zO>aEC7=qeBsGGO-ZOKl2FzY`_IEy>;+ zg~0j95nz`}H~E8{k?gZ@U4r`H!^C;o2j4*5qkhjZ)8Yfo>MB333(Yp?4^5+(bo{YT z*ZRYbn4gs#@x(a>@MiO~f6uc#h7Xd3HNu#VCyzl0@V#}pyu;`qwQSH^#Va1KG0ijI z)8?D&`Jeb_3J{=or!{Y(r1s1HKLE1`qnkfc^gAUW@xFklzq=H+A|)Mg6pqT5jOC1A zEQp7*N;_R@_!>{iY^8J?OJF>^^O;XE%GSq|{c~A;C!W?G=0twzE;rl92J(+ud&*1a z0sn2}CM97(fNZA@-=Q}tCB^Xd`4Li!?HNEVr?2xBe@lQ|y|AZeD_>V0p5Mbr@Zp)P zyRj5;t>4JN4?W*LD{Q~Ma}LPbHz&xh490Fd@j|r92E`XmAbn(G;d$uHJGp*qdr_9TYMV+hEiOfcMrqtqN zWmRf&*p?VRZg1yr>tiC~7)+Wm8?6k;&|@g7H+y0{S?olD;ps9QztedTr2m#kg=gOv zB@-Fh^G(V{5q-oQ5|J;kAMD$pSivzK$%*>x`$VvWEfcXsLlNl|=}oPhZyG zm=AZcTB_UpR4H}vbimTMG0yGy8%t6yd28a*iQB7EGcmk6G28t^pX7%=9g6e*3-mtb zM}*x$VhACjR5Be!4Ib~MhmC);bO-oYVOauR`W9ChE1dddpd6QDRUk1fdOPsB-WD(H zA$>B;3OGb{^)N{iyinYP6+Ja|88NXS6=$fQ`5!H?$|ZKsNjcyXUyl*mz|@k_wMj2k zV>S+sGc?|I#dTt|1@ZD04mCy6<`z4c3JV(7l=T&-VJia`Oh4(i{ZNRwb38FxuasbX zyAYbyO>9xlh#FAXWb}H7DIjZ3{g6N)E}b@*Rn1Z^lrXsMv*<~m4xe;144jaBm_hUv zIy^#7TM=0s2F)g07|_M>NoZfo9!VZw=z4fgx6lV-*7tCT+xY-jyh@Vj)O;2i2-&vy z(I{T@_F^_(6$3A-kX#n7U+xzKytzee72W!9=Vma{<9-KVs4IW97O}MItaqVv6stm_ zJl9KbkSq54WVY=G(to(vWG0Aa-O<_qc8dV&ew?a%FrDDdK|Gk4ByB@PLgUK)BDk&% znpq7Aqy(ob=kriQ2`pyR&?Et$z54hdQh z4K~H$9NRo<@1N&}ejwK{v+kPQObVDK!9|S9iAA4Fnq9^w@+rnUf zN%ZQHi;|Buhf8sGYG_K~Q$e-0#%RhpHNO_{*{R3U%F0A1ib6GdA!@Bd^pZWRfvD{< zMazD8v}xmLmTnIUp}WBoLhs{OhnFP3SEvrJP)%a10@S+KsC_fK%C6UK`#A1YI#Gfkx6-QmtapJ0w(=FVB8e(YH_k z^j)O2=u^vOiOg5(*w5d2IqZzXF+WUi3Oz9jY55U#ykUM=zzSwd^_g%TqS>du7W!g$ z(}Cyl0FuKuR7A%M3ruA+aQ&0Y%>vf_4h@_4RT^QUsp|85oZkj+RJ$M1yEPvr^WL1T z65dNl=3j|m3x0b+dwgsO^D-t6S+ynUci#yOgm0-pg^k4v$rTOFdp$a@bzb*-^8xMQ z?*TbgPUJsp4xg&a{H`cL`YJ-8Kc=Rd9}t++$4e5aRV+fnCzsp{+{-SRSF(^y?ZoPr zqz~B4MhMrk!yoW;{{8d6(}@%CWIJ2Cr;NcRk@W2!#QQ0L^r(Xg@f>RjUTyM@s;y-` zF<&R~^S!s(cx>U;btiJMQiG`KL|Oe4`{UEUW2n6v;q1yMspdX=u0OG)u~ur88-RBC zjy>Y6L{@>@gZAwk}+kNYXRjCk38 zuRM-UP7GDV(Rr$xe!3R4!1a03>@P;-W{~hIe3$}kDkqgO51CgrHu|lnljiUCcB16u z51fKp~CtxZcZ~y**yIK4mO_bB9vl?mdoc;Hc|BpB(W{vh+l6)OfpuT?O1R zkm7}#^QpxiAA7R{w)vt9=v#RDl$rG^EV~$lyQyZ`P7RBw^Xvw%eK6w)vaTC)#hjR%=8bTnAC6>~g`$ zi?F$@%iXeH$jL>3{K1#z!&r?Cx+sl}W%s3SrSB|Ka&E|7WWM?z3J{RK87>DW%u z+oD-Eg0)lcEver(FvB;$s48LjGgDvN=RJebTMBY=`ZWG;=24SsLf`wG0=+TwsPKf{ zXasXU)!Q-yB^ww#RJNw2cVY~2 z=Ijgp6>U@Ynh^8~PMF`uX}@i(Y=t}|bAo|au& z?|PMZSx!`;&|1$&u5W{ZcE36%5d{~>gV!p~?>vQo(l{h&rC>U@sBvxz)~wB-{eI2s zcPq&dS_lBi&Do7BJS5cXT z^}l)2t$lrdo4y!&1r3g%dMRvQ@mRTF&2;81q5q~ zx=|#L#*issH+PVcS{rK(MNn-PEB+w+LK4d;f}+8pfiqf8tC4n$DfYEL(R>hxL|kYU z5^{opOsLfAlGo=C4%9j&x7|w+LvizwUz;VYnvW3@__+{0wm4+xZtdcK(g>Ww!a|V$ za4HiNXwB` zpfU>yT57O@1G%5I?0C5cI#4+PLPG0yN9UZpBZX>Qk{ zO@bUEiTl4qXFIjRd0A)FJm1&J-$Lx zZCv_4+$VER{{PeJ`v0viZ{xhPu+~H*BtoV;stk>cRJ6#lnmP%90trI<+oSvO^`GP? zy)`$U1l9y-4na7e&Mn+#=#GGokKcRMIeglg?aYth?@84SWc}XzfVyGZd6k?r#DqTN zU?SEVk^6BO%&vcXv=rYL=C|vXE7`+YaK?M-`wQ!-d-&JuZwK^(SOpuPSuX{N>RqmkA(A%>LUc zlFvT7TVJ6=9-6bwX?KIysU9F}FP%)8XjB)h$@NGoJNuH;DPi~0E}`{O^zUkS?}>@! z7yal*j)~)2&TOl~aVc3@?1B)Z?QEdUTdS;sexc%jzLF*p&y$36I5hua@ZdN1Q z#eP+UgX}@S=Vjzluag|CwWH&Cxi6JQ2lfT9#i)+|lIVOkUS| z4{aoV4ieZ=m}`s`V$G^Q+LR>VvzTi|x~q7$2I0S55OzKdfHkMFmmlsT0z3&onx-A^ zG^4t*md#{Y=Dgk9>0drUpOOcpyjq65+u_oX<=H))c{2x$`z0tjNnEuLGf;CGu^`Z8 zN!(f|{(83~v6AKeHFC@k4ILS5%b{ckpe2Xs|B${j6m)-=c7_mQ85sKO=sR)h`3N@J|zR& zZTYm_okM130>hzJ@?9o-@MYTgJFZ5TZ-;`8&gy}?p<$k>X|?^PNUqEAoO-J>Eq)xL zv9U3H<7b8c5G}Nq&$CV^$Mmf@2$2xKM~Wm(?K`|-L9|E#m9j?LRZACZfKryG+XuYV z83~usS}_PVzPb@w!_iOf_R zEU+8FW_iB(wC%^K`p!k6t0}4J$3wBfwSdoZc3#B!UuD14=vjc>h>9e(y zPgIG8JX3XQOiiPqA7e;%4%*VK5}e-LcGy$wcV7i!{FRiIVdS|=+(Lh`nH?2`u(@C8 z6Y)4gTS^KgQpwhOt}52EnSAY0-DNs;>v7EZ<*ykZmj(u|6_WoYvXH+Gp?_#TJ{nd4ub}%-;%W?rW;5#>AR}wtt2@aOE{jt6`FmqFF8MW z6^QWvd00?b_~Ta`^}bW`y9_ZzJOMp{a8{;*;o;%Dhw=bDCerq*CW1s^0e=L#T|-ZM z(#X(|etn6Bg(YSC*RNmPTHk}}#Kjltytu%3$D!D${QAk%@vPJ=lZ7OdUSauY9JjkG zZ@*!$Jt`cF>3tSq0W6%Fnle5|m31eb8luRlt^-m|95(~lIxFQhYAm?EFB~zrIELSx z*=44uiL<<1WDxW6^G$S8mB3?ZhK^^XptZ#p)Wv(IW&eWs*p$7#G=0e!B8bSKnXxyt zIVlR%3a{>&30z6^t>@7E2n+W|lN}=d_hT`bj>1oIq<{M;K_uNA2+U@G`>N3yD&Xn( zM#9nKE+%Mr{R^nS%dHSmU@DP1m!va#hQk-XXG; z5n3TuL&wbu>vog5dGrFsHL|}?)06*n&y7&wQWyCtcYudfYY_f6E)Ar=in&_>-a;fN zDVzE$XBODpUVpV1A-Llj9og0+FzFUjcK_y-eI(zD_p?vB*lmN@}xd zz;Ah6hqzU8wN&h7*~C6v*3#$F5;*kE0Kth=)XeAG4^-T#WkS##;%VRkrX`vnVS1s8tS6KNSN^%M~&0 z+=8!hW76M}GLIb!j8JRv0g@EJ-%dWhx_PCAB!`Eo!EP{bQD|>ERE8EqLnN=X=5HLm zkfh1aS00<7*OuYB*1D|d>BIIsN>H3Mf@8W70WG#uS1aRG$uOIgzRu;lKKWaL(SYY8{1r^AC zAiiFCVPtzFcG5V|3@~PBazx@rL1aeL(4ALs>yZ;oc#u2+kp)tsDPj| zku%IQ@zFeVVA-Nd`tG-vM*NeH@xw8y>K1Ayiq(BaLwj)uur%*#=e{~b@GKG&ndJgA zk@qnJ|LyA&4HKPccY$<@9*`zgXY;7t|yIHr8&{k5(v3LMR8^)IM2 zz}A2t>Z@vM=HG{mX4_e$;YUkk@HoK&DOeDJn&+kK$FpkJId@7MFocy^wB60xih}_T zrqWkn0-I{q9DvC~K}(C^gn^09Y?1KEklXX*XJHiJkU9+r=SbBm#Viay8d{$qFi5Nf z?hbwE2Tww9xZcil;>k`Gkt(=cx|K&ev}1>tfuV)XBULcJWpDwQSi^49FPk$m^6jgW z>G;{|!EzO;D*putxb~e!0RGLn6mD4O<#(h?%HB_m|NJl+B0QZL;F%i2-$fa0&g*Tv z8+`mDCYjGJu$nt@l!OHo-1+FYD_@s1wi&2y#Cy(3jxnKg8B}2@W5@v()BqY0e&FVA zYCN#Ht**!a*~))4&yjczltxHAU};p;#)u&PN#Gc?%0CS0!X%$bGH`}ub$A-6Y7+b# z{&$fStsTd`Pku^}O0JeIF4CAVcXsff7f72sz%(?GHgsGmUDt3-j4yW1W*vMT1t@*O zXiJ7BLgfJf4ZwOFuVA@GLQ>M`{%kd+NI^s-U^;TMLLM!sk(~gpKaGCMR9;CbL2DWp z@UZ}6)QBZSj+n2t-i+Pu-Dvv$`4frbmJ`0CI1m=OSnstuTlOvHk2BWFi3nzy*>PmlLZL(GU24055^9vj6}9 literal 11011 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 diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 53bf50e7e66..6108f3f06f3 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/computer/secure_data/detective_computer,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/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 a790a81d85a..3f3bdb6f14b 100644 --- a/paradise.dme +++ b/paradise.dme @@ -598,6 +598,7 @@ #include "code\game\objects\items\candle.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\shooting_range.dm"