Comitting for Giacom.

Details here: http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=8960

And, to summarise:
Added a new computer, the message monitor console. It is able to access the logs on the message server.
Made PDAs dependant on the message server instead of Telecomms. This fixes PDAs not sending any messages due to no listening_freqs.

When paper is splashed with Ethanol, the contents of the paper or book disappear.
Added white coloured pens. Allows you to write hidden messages that can be revealed by highlighting the text.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3777 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
petethegoat@gmail.com
2012-06-09 22:14:09 +00:00
parent 9a0d06afe7
commit 524c2ae6a9
10 changed files with 345 additions and 42 deletions

View File

@@ -28,6 +28,11 @@
var/list/records = null
var/frame_desc = null
/obj/item/weapon/circuitboard/message_monitor
name = "Circuit board (Message Monitor)"
build_path = "/obj/machinery/computer/message_monitor"
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/security
name = "Circuit board (Security)"
build_path = "/obj/machinery/computer/security"

View File

@@ -0,0 +1,209 @@
// Allows you to monitor messages that passes the server.
/obj/machinery/computer/message_monitor
name = "Message Monitor Console"
desc = "Used to Monitor the crew's messages, that are sent via PDA."
icon_state = "comm_monitor"
circuit = "/obj/item/weapon/circuitboard/message_monitor"
var/obj/machinery/message_server/linkedServer = null
var/screen = 0 // 0 = Main menu, 1 = Message Logs
var/hacking = 0 // Is it being hacked into by the AI/Cyborg
/obj/machinery/computer/message_monitor/attackby(obj/item/weapon/O as obj, mob/user as mob)
if(istype(O,/obj/item/weapon/card/emag/))
//Just brings up the Message Log without having to know the passcode.
if(!hacking)
usr << "<span class='warning'>BZZT.. The console beeps and brings up the Message Logs.</span>"
screen = 1
else
usr << "<span class='notice'>It looks like the console is already being hacked into.</span>"
..()
return
/obj/machinery/computer/message_monitor/process()
//Is the server isn't linked to a server, and there's a server available, default it to the first one in the list.
if(!linkedServer)
if(message_servers && message_servers.len > 0)
linkedServer = message_servers[1]
return
/obj/machinery/computer/message_monitor/attack_hand(var/mob/user as mob)
if(stat & (NOPOWER|BROKEN))
return
if(!istype(user, /mob/living))
return
var/dat = "<head><title>Message Monitor Console</title></head><body>"
dat += "<center><h2>Message Monitor Console</h2></center><hr>"
switch(screen)
//Main menu
if(0)
if(hacking)
screen = 2
return src.attack_hand(user)
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
dat += "1. ERROR: Server not found<br>"
else
dat += "<A href='?src=\ref[src];active=1'>1. Toggle Power: [src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</a><br>"
dat += "<A href='?src=\ref[src];find=1'>2. Link To A Server</a><br>"
dat += "<A href='?src=\ref[src];clear=1'>3. Clear Message Logs</a><hr>"
dat += "<font color='red'> KEY REQUIRED</font><br>"
dat += "<A href='?src=\ref[src];view=1'>4. View Message Logs </a><br>"
dat += "<A href='?src=\ref[src];pass=1'>5. Set Custom Key</a><hr><br>"
//Malf/Traitor AIs can bruteforce into the system to gain the Key.
if((istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot)) && (user.mind.special_role && user.mind.original == user))
dat += "<A href='?src=\ref[src];hack=1'><i><font color='Red'>*&@. Bruteforce Key</font></i></font></a><br>"
//Message Logs
if(1)
if(hacking)
screen = 2
return src.attack_hand(user)
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
usr << "<span class='notice'>No server detected.</span>"
screen = 0
return src.attack_hand(user)
var/index = 0
//var/recipient = "Unspecified" //name of the person
//var/sender = "Unspecified" //name of the sender
//var/message = "Blank" //transferred message
dat += "<center><A href='?src=\ref[src];back=1'>Return</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
dat += "<table border='1' width='100%'><tr><th width='20%'>Sender</th><th width='20%'>Recipient</th><th width='300px' word-wrap: break-word>Message</th></tr>"
for(var/list/datum/data_pda_msg/pda in src.linkedServer.pda_msgs)
index++
if(index > 3000)
break
dat += "<tr><td width='20%'>[pda.sender]</td><td width='20%'>[pda.recipient]</td><td width='80%'>[pda.message]</td></tr>"
dat += "</table>"
//Hacking screen.
if(2)
if(!hacking)
screen = 0
return src.attack_hand(user)
if(istype(user, /mob/living/silicon/ai) || istype(user, /mob/living/silicon/robot))
dat += "Brute-forcing for server key.<br> This will take anywhere from two to five minutes."
dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time."
else
//It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever.
dat += {"010101000110100001101001011100110010000001110111011010010110110
0011011000010000001110100011000010110101101100101001000000110000101101110
01111001011101110110100001100101011100100110010100100000011001100111001001
10111101101101001000000111010001110111011011110010000001110100011011110010
00000110011001101001011101100110010100100000011011010110100101101110011101
01011101000110010101110011001011100010000001001001011011100010000001110100
01101000011001010010000001101101011001010110000101101110001011010111010001
10100101101101011001010010110000100000011101000110100001101001011100110010
00000110001101101111011011100111001101101111011011000110010100100000011000
11011000010110111000100000011100100110010101110110011001010110000101101100
00100000011110010110111101110101011100100010000001110100011100100111010101
10010100100000011010010110111001110100011001010110111001110100011010010110
11110110111001110011001000000110100101100110001000000111100101101111011101
01001000000110110001100101011101000010000001110011011011110110110101100101
01101111011011100110010100100000011000010110001101100011011001010111001101
11001100100000011010010111010000101110001000000100110101100001011010110110
01010010000001110011011101010111001001100101001000000110111001101111001000
00011010000111010101101101011000010110111001110011001000000110010101101110
01110100011001010111001000100000011101000110100001100101001000000111001001
10111101101111011011010010000001100100011101010111001001101001011011100110
01110010000001110100011010000110000101110100001000000111010001101001011011
010110010100101110"}
dat += "</body>"
user << browse(dat, "window=message;size=500x700")
onclose(user, "message")
return
/obj/machinery/computer/message_monitor/attack_ai(mob/user as mob)
return src.attack_hand(user)
/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user as mob)
var/currentKey = src.linkedServer.decryptkey
user << "<span class='warning'>Brute-force completed! The key is '[currentKey]'.</span>"
src.hacking = 0
src.screen = 0 // Return the screen back to normal
/obj/machinery/computer/message_monitor/Topic(href, href_list)
if(..())
return
if(stat & (NOPOWER|BROKEN))
return
if(!istype(usr, /mob/living))
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
if (href_list["active"])
linkedServer.active = !linkedServer.active
if (href_list["find"])
if(message_servers && message_servers.len > 1)
src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers
usr << "Server selected.</span>"
else if(message_servers && message_servers.len > 0)
linkedServer = message_servers[1]
usr << "<span class='notice'>Single Server Detected - Server selected.</span>"
else
usr << "<span class='notice'>No server detected.</span>"
if (href_list["view"])
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
usr << "<span class='notice'>No server detected.</span>"
else
var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null)
if(dkey && dkey != "")
if(src.linkedServer.decryptkey == dkey)
src.screen = 1
else
usr << "<span class='warning'>ALERT: Incorrect password!</span>"
if (href_list["clear"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
usr << "<span class='notice'>No server detected.</span>"
else
src.linkedServer.pda_msgs = list()
usr << "<span class='notice'>Logs cleared.</span>"
if (href_list["pass"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
usr << "<span class='notice'>No server detected.</span>"
else
var/dkey = trim(input(usr,"Please enter the decryption key.") as text|null)
if(dkey && dkey != "")
if(dkey == src.linkedServer.decryptkey)
var/newkey = trim(input(usr,"Please enter the new key."))
if(newkey && newkey != "")
src.linkedServer.decryptkey = newkey
usr << "<span class='notice'>Password set.</span>"
else
usr << "<span class='warning'>ALERT: Incorrect password!</span>"
if (href_list["hack"])
if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr))
src.hacking = 1
src.screen = 2
//usr << "[src.linkedServer.decryptkey]"
spawn((100*6)*rand(2, 4))
if(src && src.linkedServer && usr)
BruteForce(usr)
if (href_list["back"])
src.screen = 0
return src.attack_hand(usr)
/obj/item/weapon/paper/monitorkey
//..()
name = "Monitor Decryption Key"
var/obj/machinery/message_server/server = null
/obj/item/weapon/paper/monitorkey/New()
..()
if(message_servers && message_servers.len > 0)
server = message_servers[1]
info = "<center><h2>Daily Key Reset</h2></center><br>The new message monitor key is '[server.decryptkey]'.<br>Please keep this a secret and away from the clown.<br>If necessary, change the password to a more secure one."
info_links = info
overlays += "paper_words"

View File

@@ -545,7 +545,6 @@
return
if (!in_range(src, U) && loc != U)
return
var/obj/item/device/pda/P = locate(href_list["target"])
if(!istype(P)) return
@@ -557,14 +556,17 @@
return
last_text = world.time
// check if telecomms I/O route 1459 is stable
var/telecomms_intact = telecomms_process(P.owner, owner, t)
if(telecomms_intact) // only send the message if it's stable!
for (var/obj/machinery/message_server/MS in world)
MS.send_pda_message("[P.owner]","[owner]","[t]")
//var/telecomms_intact = telecomms_process(P.owner, owner, t)
var/obj/machinery/message_server/useMS = null
if(message_servers)
for (var/obj/machinery/message_server/MS in message_servers)
//PDAs are now dependant on the Message Server.
if(MS.active)
useMS = MS
break
if(useMS) // only send the message if it's stable
useMS.send_pda_message("[P.owner]","[owner]","[t]")
tnote += "<i><b>&rarr; To [P.owner]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];choice=Message;target=\ref[src]'>[owner]</a> ([ownjob]):</b></i><br>[t]<br>"
@@ -583,21 +585,25 @@
if( P.loc && ishuman(P.loc) )
var/mob/living/carbon/human/H = P.loc
H << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
P.overlays = null
P.overlays += image('pda.dmi', "pda-r")
else
U << "ERROR: Server isn't responding."
// pAI Message
else
var/telecomms_intact = telecomms_process(P.owner, owner, t)
if(telecomms_intact) // only send the message if it's stable!
for (var/obj/machinery/message_server/MS in world)
MS.send_pda_message("[P.owner]","[owner]","[t]")
//var/telecomms_intact = telecomms_process(P.owner, owner, t)
var/obj/machinery/message_server/useMS = null
if(message_servers)
for (var/obj/machinery/message_server/MS in message_servers)
//PDAs are now dependant on the Message Server.
if(MS.active)
useMS = MS
break
if(useMS) // only send the message if it's stable
useMS.send_pda_message("[P.owner]","[owner]","[t]")
tnote += "<i><b>&rarr; To [P]:</b></i><br>[t]<br>"
P.tnote += "<i><b>&larr; From <a href='byond://?src=\ref[P];soft=pdamessage;target=\ref[src]'>[src]</a>:</b></i><br>[t]<br>"
@@ -609,9 +615,16 @@
for (var/mob/living/silicon/ai/ai in world)
ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
if (!P.silent)
playsound(P.loc, 'twobeep.ogg', 50, 1)
for (var/mob/O in hearers(3, P.loc))
O.show_message(text("\icon[P] *[P.ttone]*"))
if( P.loc && ishuman(P.loc) )
var/mob/living/carbon/human/H = P.loc
H << "\icon[P] <b>Message from [src.owner] ([ownjob]), </b>\"[t]\" (<a href='byond://?src=\ref[P];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
else
U << "ERROR: Server isn't responding."
@@ -752,20 +765,22 @@
var/telecomms_intact = 0
/* Make sure telecomms is intact */
for (var/obj/machinery/telecomms/receiver/R in world)
if((1459 in R.freq_listening) && R.on)
for (var/obj/machinery/telecomms/bus/B in R.links)
if((1459 in B.freq_listening) && B.on)
for(var/obj/machinery/telecomms/server/S in B.links)
if((1459 in S.freq_listening) && S.on)
if((1459 in S.freq_listening) && S.on)
// Add a log
S.add_entry("[originator] sent to [receipent]: \"[data]\"", "PDA log")
for(var/obj/machinery/telecomms/broadcaster/C in S.links)
if((1459 in C.freq_listening) && C.on)
if(((1459 in C.freq_listening || C.freq_listening.len == 0)) && C.on)
telecomms_intact = 1
break
@@ -1033,6 +1048,15 @@
if (selected:toff)
return
var/obj/machinery/message_server/useMS = null
if(!isnull(message_servers))
for (var/obj/machinery/message_server/MS in message_servers)
//PDAs are now dependant on the Message Server.
if(MS.active)
useMS = MS
break
if(!isnull(useMS)) // only send the message if it's stable
useMS.send_pda_message("[selected:owner]","[usr.name]","[t]")
usr.show_message("<i>PDA message to <b>[selected:owner]</b>: [t]</i>")
selected:tnote += "<i><b>&larr; From (AI) [usr.name]:</b></i><br>[t]<br>"
@@ -1044,6 +1068,8 @@
selected.overlays = null
selected.overlays += image('pda.dmi', "pda-r")
else
usr << "ERROR: Server isn't responding."
//Some spare PDAs in a box

View File

@@ -805,6 +805,7 @@ datum
mutagen
name = "Unstable mutagen"
id = "mutagen"
@@ -1558,6 +1559,19 @@ datum
M:confused += 3
..()
return
reaction_obj(var/obj/O, var/volume)
if(istype(O,/obj/item/weapon/paper))
var/obj/item/weapon/paper/paperaffected = O
paperaffected.clearpaper()
usr << "The solution melts away the ink on the paper."
if(istype(O,/obj/item/weapon/book))
if(volume >= 5)
var/obj/item/weapon/book/affectedbook = O
affectedbook.dat = null
usr << "The solution melts away the ink on the book."
else
usr << "It wasn't enough..."
return
ammonia
name = "Ammonia"

View File

@@ -136,6 +136,13 @@
addtofield(i, "<font face=\"[deffont]\"><A href='?src=\ref[src];write=[i]'>write</A></font>", 1)
info_links = info_links + "<font face=\"[deffont]\"><A href='?src=\ref[src];write=end'>write</A></font>"
/obj/item/weapon/paper/proc/clearpaper()
info = null
stamps = null
stamped = list()
overlays = null
updateinfolinks()
/obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob, var/iscrayon = 0)
t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
@@ -204,7 +211,6 @@
\[hr\] : Adds a horizontal rule.
</BODY></HTML>"}, "window=paper_help")
/obj/item/weapon/paper/Topic(href, href_list)
..()
if ((usr.stat || usr.restrained()))
@@ -282,5 +288,6 @@
stamped += P.type
user << "\blue You stamp the paper with your rubber stamp."
add_fingerprint(user)
return

View File

@@ -22,3 +22,13 @@
desc = "It's a normal red ink pen."
icon_state = "pen_red"
colour = "red"
/obj/item/weapon/pen/invisble
desc = "It's an invisble pen marker."
icon_state = "pen"
colour = "white"
/obj/item/weapon/pen/invisble
desc = "It's an invisble pen marker."
icon_state = "pen"
colour = "white"

View File

@@ -358,6 +358,15 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/comm_server"
message_monitor
name = "Circuit Design (Messaging Monitor Console)"
desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
id = "message_monitor"
req_tech = list("programming" = 5)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/message_monitor"
///////////////////////////////////
//////////AI Module Disks//////////
///////////////////////////////////

View File

@@ -1,3 +1,5 @@
var/global/list/message_servers = list()
/datum/data_pda_msg
var/recipient = "Unspecified" //name of the person
var/sender = "Unspecified" //name of the sender
@@ -53,14 +55,35 @@
var/list/datum/data_pda_msg/pda_msgs = list()
var/list/datum/data_rc_msg/rc_msgs = list()
var/active = 1
var/decryptkey = "password";
/obj/machinery/message_server/New()
message_servers += src
decryptkey = generateKey()
send_pda_message("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.")
..()
return
/obj/machinery/message_server/Del()
message_servers -= src
..()
return
/obj/machinery/message_server/proc/generateKey()
//Feel free to move to Helpers.
var/newKey
newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rose")
newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai")
newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
return newKey
/obj/machinery/message_server/process()
//if(decryptkey == "password")
// decryptkey = generateKey()
if((stat & (BROKEN|NOPOWER)) && active)
active = 0
return
update_icon()
return

View File

@@ -4477,10 +4477,10 @@
"bIe" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{tag = "icon-whitehall (WEST)"; icon_state = "whitehall"; dir = 8},/area/medical/sleeper)
"bIf" = (/turf/simulated/wall/r_wall,/area/toxins/server)
"bIg" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Server Room APC"; pixel_x = -25},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIh" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIi" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/machinery/door/window/northleft{name = "Server Room"; req_access_txt = "30"},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIj" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIk" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIj" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIk" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/computer/message_monitor,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bIl" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/machinery/power/apc{dir = 8; name = "Lab Hallway APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bIm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bIn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/toxins/xenobiology)
@@ -4537,11 +4537,11 @@
"bJm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/medical/surgery)
"bJn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/medical/surgery)
"bJo" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/turf/simulated/floor,/area/medical/surgery)
"bJp" = (/obj/machinery/computer/rdservercontrol,/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJq" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJp" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/table,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJq" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 1; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJr" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJs" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 1; on = 1},/obj/effect/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJt" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJs" = (/obj/effect/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJt" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/computer/rdservercontrol,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
"bJu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/sign/biohazard{pixel_x = 28},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bJv" = (/turf/simulated/wall,/area/toxins/xenobiology)
"bJw" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)

View File

@@ -180,7 +180,6 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "maps/backup"
#define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
@@ -513,6 +512,7 @@
#include "code\game\machinery\computer\hologram.dm"
#include "code\game\machinery\computer\law.dm"
#include "code\game\machinery\computer\medical.dm"
#include "code\game\machinery\computer\message.dm"
#include "code\game\machinery\computer\Operating.dm"
#include "code\game\machinery\computer\pod.dm"
#include "code\game\machinery\computer\power.dm"