diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
new file mode 100644
index 00000000000..ae9c9028d74
--- /dev/null
+++ b/code/datums/datacore.dm
@@ -0,0 +1,145 @@
+
+/obj/datacore/proc/manifest(var/nosleep = 0)
+ spawn()
+ if(!nosleep)
+ sleep(40)
+ for(var/mob/living/carbon/human/H in world)
+ if (!isnull(H.mind) && (H.mind.assigned_role != "MODE"))
+ var/datum/data/record/G = new()
+ var/datum/data/record/M = new()
+ var/datum/data/record/S = new()
+ var/datum/data/record/L = new()
+ var/obj/item/weapon/card/id/C = H.wear_id
+ if (C)
+ G.fields["rank"] = C.assignment
+ else
+ if(H.job)
+ G.fields["rank"] = H.job
+ else
+ G.fields["rank"] = "Unassigned"
+ G.fields["name"] = H.real_name
+ G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
+ M.fields["name"] = G.fields["name"]
+ M.fields["id"] = G.fields["id"]
+ S.fields["name"] = G.fields["name"]
+ S.fields["id"] = G.fields["id"]
+ if (H.gender == FEMALE)
+ G.fields["sex"] = "Female"
+ else
+ G.fields["sex"] = "Male"
+ G.fields["age"] = text("[]", H.age)
+ G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
+ G.fields["p_stat"] = "Active"
+ G.fields["m_stat"] = "Stable"
+ M.fields["b_type"] = text("[]", H.b_type)
+ M.fields["b_dna"] = H.dna.unique_enzymes
+ M.fields["mi_dis"] = "None"
+ M.fields["mi_dis_d"] = "No minor disabilities have been declared."
+ M.fields["ma_dis"] = "None"
+ M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
+ M.fields["alg"] = "None"
+ M.fields["alg_d"] = "No allergies have been detected in this patient."
+ M.fields["cdi"] = "None"
+ M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
+ M.fields["notes"] = "No notes."
+ S.fields["criminal"] = "None"
+ S.fields["mi_crim"] = "None"
+ S.fields["mi_crim_d"] = "No minor crime convictions."
+ S.fields["ma_crim"] = "None"
+ S.fields["ma_crim_d"] = "No major crime convictions."
+ S.fields["notes"] = "No notes."
+
+ //Begin locked reporting
+ L.fields["name"] = H.real_name
+ L.fields["sex"] = H.gender
+ L.fields["age"] = H.age
+ L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
+ L.fields["rank"] = H.mind.assigned_role
+ L.fields["b_type"] = H.b_type
+ L.fields["b_dna"] = H.dna.unique_enzymes
+ L.fields["enzymes"] = H.dna.struc_enzymes
+ L.fields["identity"] = H.dna.uni_identity
+ L.fields["image"] = getFlatIcon(H,0)
+ //End locked reporting
+
+ general += G
+ medical += M
+ security += S
+ locked += L
+ return
+
+/obj/datacore/proc/manifest_modify(var/name, var/assignment)
+ var/datum/data/record/foundrecord
+
+ for(var/datum/data/record/t in data_core.general)
+ if(t.fields["name"] == name)
+ foundrecord = t
+ break
+
+ if(foundrecord)
+ foundrecord.fields["rank"] = assignment
+
+
+/obj/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
+ if (!isnull(H.mind) && (H.mind.assigned_role != "MODE"))
+ var/datum/data/record/G = new()
+ var/datum/data/record/M = new()
+ var/datum/data/record/S = new()
+ var/datum/data/record/L = new()
+ var/obj/item/weapon/card/id/C = H.wear_id
+ if (C)
+ G.fields["rank"] = C.assignment
+ else
+ if(H.job)
+ G.fields["rank"] = H.job
+ else
+ G.fields["rank"] = "Unassigned"
+ G.fields["name"] = H.real_name
+ G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
+ M.fields["name"] = G.fields["name"]
+ M.fields["id"] = G.fields["id"]
+ S.fields["name"] = G.fields["name"]
+ S.fields["id"] = G.fields["id"]
+ if (H.gender == FEMALE)
+ G.fields["sex"] = "Female"
+ else
+ G.fields["sex"] = "Male"
+ G.fields["age"] = text("[]", H.age)
+ G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
+ G.fields["p_stat"] = "Active"
+ G.fields["m_stat"] = "Stable"
+ M.fields["b_type"] = text("[]", H.b_type)
+ M.fields["b_dna"] = H.dna.unique_enzymes
+ M.fields["mi_dis"] = "None"
+ M.fields["mi_dis_d"] = "No minor disabilities have been declared."
+ M.fields["ma_dis"] = "None"
+ M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
+ M.fields["alg"] = "None"
+ M.fields["alg_d"] = "No allergies have been detected in this patient."
+ M.fields["cdi"] = "None"
+ M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
+ M.fields["notes"] = "No notes."
+ S.fields["criminal"] = "None"
+ S.fields["mi_crim"] = "None"
+ S.fields["mi_crim_d"] = "No minor crime convictions."
+ S.fields["ma_crim"] = "None"
+ S.fields["ma_crim_d"] = "No major crime convictions."
+ S.fields["notes"] = "No notes."
+
+ //Begin locked reporting
+ L.fields["name"] = H.real_name
+ L.fields["sex"] = H.gender
+ L.fields["age"] = H.age
+ L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
+ L.fields["rank"] = H.mind.assigned_role
+ L.fields["b_type"] = H.b_type
+ L.fields["b_dna"] = H.dna.unique_enzymes
+ L.fields["enzymes"] = H.dna.struc_enzymes
+ L.fields["identity"] = H.dna.uni_identity
+ L.fields["image"] = getFlatIcon(H,0)
+ //End locked reporting
+
+ general += G
+ medical += M
+ security += S
+ locked += L
diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm
deleted file mode 100644
index 724940a9b05..00000000000
--- a/code/defines/obj/computer.dm
+++ /dev/null
@@ -1,302 +0,0 @@
-/obj/machinery/computer
- name = "computer"
- icon = 'computer.dmi'
- density = 1
- anchored = 1.0
- var/obj/item/weapon/circuitboard/circuit = null //if circuit==null, computer can't disassemble
-
-
-/obj/machinery/computer/operating
- name = "Operating Computer"
- density = 1
- anchored = 1.0
- icon_state = "operating"
- circuit = "/obj/item/weapon/circuitboard/operating"
- var/mob/living/carbon/human/victim = null
- var/obj/machinery/optable/table = null
- var/id = 0.0
-
-
-/obj/machinery/computer/arcade
- name = "arcade machine"
- desc = "Does not support Pin ball."
- icon = 'computer.dmi'
- icon_state = "arcade"
- circuit = "/obj/item/weapon/circuitboard/arcade"
- var/enemy_name = "Space Villian"
- var/temp = "Winners Don't Use Spacedrugs" //Temporary message, for attack messages, etc
- var/player_hp = 30 //Player health/attack points
- var/player_mp = 10
- var/enemy_hp = 45 //Enemy health/attack points
- var/enemy_mp = 20
- var/gameover = 0
- var/blocked = 0 //Player cannot attack/heal while set
-
-
-/obj/machinery/computer/aiupload
- name = "AI Upload"
- desc = "Used to upload laws to the AI."
- icon_state = "command"
- circuit = "/obj/item/weapon/circuitboard/aiupload"
- var/mob/living/silicon/ai/current = null
- var/opened = 0
-
-
-/obj/machinery/computer/borgupload
- name = "Cyborg Upload"
- desc = "Used to upload laws to Cyborgs."
- icon_state = "command"
- circuit = "/obj/item/weapon/circuitboard/borgupload"
- var/mob/living/silicon/robot/current = null
-
-
-/obj/machinery/computer/station_alert
- name = "Station Alert Computer"
- desc = "Used to access the station's automated alert system."
- icon_state = "alert:0"
- circuit = "/obj/item/weapon/circuitboard/stationalert"
- var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list())
-
-
-/obj/machinery/computer/atmos_alert
- name = "Atmospheric Alert Computer"
- desc = "Used to access the station's atmospheric sensors."
- icon_state = "alert:0"
- var/list/priority_alarms = list()
- var/list/minor_alarms = list()
- var/receive_frequency = 1437
-
-
-/obj/machinery/computer/atmosphere
- name = "atmos"
- desc = "A computer for Atmospherics."
-
-
-/obj/machinery/computer/atmosphere/siphonswitch
- name = "Area Air Control"
- desc = "Nanotrasen provided this, barely."
- icon_state = "atmos"
- var/otherarea
- var/area/area
-
-
-/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch
- name = "Master Air Control"
- desc = "Emergancy global overrides for the entire atmospherics system."
-
-
-
-
-/obj/machinery/computer/card
- name = "Identification Computer"
- desc = "You can use this to change ID's."
- icon_state = "id"
- circuit = "/obj/item/weapon/circuitboard/card"
- var/obj/item/weapon/card/id/scan = null
- var/obj/item/weapon/card/id/modify = null
- var/authenticated = 0.0
- var/mode = 0.0
- var/printing = null
- req_access = list(access_change_ids)
-
-
-/obj/machinery/computer/card/centcom
- name = "CentCom Identification Computer"
- circuit = "/obj/item/weapon/circuitboard/card/centcom"
- req_access = list(access_cent_captain)
-
-
-/obj/machinery/computer/dna
- name = "DNA operations computer"
- desc = "A Computer used to advanced DNA stuff."
- icon_state = "dna"
- var/obj/item/weapon/card/data/scan = null
- var/obj/item/weapon/card/data/modify = null
- var/obj/item/weapon/card/data/modify2 = null
- var/mode = null
- var/temp = null
-
-
-/obj/machinery/computer/hologram_comp
- name = "Hologram Computer"
- desc = "Rumoured to control holograms."
- icon = 'stationobjs.dmi'
- icon_state = "holo_console0"
- var/obj/machinery/hologram/projector/projector = null
- var/temp = null
- var/lumens = 0.0
- var/h_r = 245.0
- var/h_g = 245.0
- var/h_b = 245.0
-
-
-/obj/machinery/computer/med_data
- name = "Medical Records"
- desc = "This can be used to check medical records."
- icon_state = "medcomp"
- req_access = list(access_medical)
- circuit = "/obj/item/weapon/circuitboard/med_data"
- var/obj/item/weapon/card/id/scan = null
- var/authenticated = null
- var/rank = null
- var/screen = null
- var/datum/data/record/active1 = null
- var/datum/data/record/active2 = null
- var/a_id = null
- var/temp = null
- var/printing = null
-
-
-/obj/machinery/computer/med_data/laptop
- name = "Medical Laptop"
- desc = "Cheap Nanotrasen Laptop."
- icon_state = "medlaptop"
-
-
-/obj/machinery/computer/pod
- name = "Pod Launch Control"
- desc = "A controll for launching pods. Some people prefer firing Mechas."
- icon_state = "computer_generic"
- var/id = 1.0
- var/obj/machinery/mass_driver/connected = null
- var/timing = 0.0
- var/time = 30.0
-
-
-/obj/machinery/computer/pod/old
- icon_state = "old"
- name = "DoorMex Control Computer"
-
-
-/obj/machinery/computer/pod/old/syndicate
- name = "ProComp Executive IIc"
- desc = "The Syndicate operate on a tight budget. Operates external airlocks."
-
-
-/obj/machinery/computer/pod/old/swf
- name = "Magix System IV"
- desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition"
-
-
-/obj/machinery/computer/secure_data
- name = "Security Records"
- desc = "Used to view and edit personnel's security records"
- icon_state = "security"
- req_access = list(access_security)
- circuit = "/obj/item/weapon/circuitboard/secure_data"
- var/obj/item/weapon/card/id/scan = null
- var/authenticated = null
- var/rank = null
- var/screen = null
- var/datum/data/record/active1 = null
- var/datum/data/record/active2 = null
- var/a_id = null
- var/temp = null
- var/printing = null
- var/can_change_id = 0
-
-
-/obj/machinery/computer/secure_data/detective_computer
- icon = 'computer.dmi'
- icon_state = "messyfiles"
-
-
-/obj/machinery/computer/security
- name = "Security Cameras"
- desc = "Used to access the various cameras on the station."
- icon_state = "cameras"
- circuit = "/obj/item/weapon/circuitboard/security"
- var/obj/machinery/camera/current = null
- var/last_pic = 1.0
- var/network = "SS13"
- var/maplevel = 1
-
-
-/obj/machinery/computer/security/telescreen
- name = "Telescreen"
- desc = "Used for watching an empty arena."
- icon = 'stationobjs.dmi'
- icon_state = "telescreen"
- network = "thunder"
- density = 0
- circuit = null
-
-
-/obj/machinery/computer/security/wooden_tv
- name = "Security Cameras"
- desc = "An old TV hooked into the stations camera network."
- icon_state = "security_det"
-
-
-/obj/machinery/computer/security/mining
- name = "Outpost Cameras"
- desc = "Used to access the various cameras on the outpost."
- icon_state = "miningcameras"
- network = "MINE"
- circuit = "/obj/item/weapon/circuitboard/mining"
-
-
-/obj/machinery/computer/crew
- name = "Crew monitoring computer"
- desc = "Used to monitor active health sensors built into most of the crew's uniforms."
- icon_state = "crew"
- use_power = 1
- idle_power_usage = 250
- active_power_usage = 500
- circuit = "/obj/item/weapon/circuitboard/crew"
- var/list/tracked = list( )
-
-
-/obj/machinery/computer/robotics
- name = "Robotics Control"
- desc = "Used to remotely lockdown or detonate linked Cyborgs."
- icon = 'computer.dmi'
- icon_state = "robot"
- req_access = list(access_robotics)
- circuit = "/obj/item/weapon/circuitboard/robotics"
-
- var/id = 0.0
- var/temp = null
- var/status = 0
- var/timeleft = 60
- var/stop = 0.0
- var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text
-
-
-/*/obj/machinery/computer/scan_consolenew //Coming Soon, I highly doubt this but Ill leave it here anyways
- name = "DNA Modifier Access Console"
- desc = "Scand DNA."
- icon = 'computer.dmi'
- icon_state = "scanner"
- density = 1
- var/uniblock = 1.0
- var/strucblock = 1.0
- var/subblock = 1.0
- var/status = null
- var/radduration = 2.0
- var/radstrength = 1.0
- var/radacc = 1.0
- var/buffer1 = null
- var/buffer2 = null
- var/buffer3 = null
- var/buffer1owner = null
- var/buffer2owner = null
- var/buffer3owner = null
- var/buffer1label = null
- var/buffer2label = null
- var/buffer3label = null
- var/buffer1type = null
- var/buffer2type = null
- var/buffer3type = null
- var/buffer1iue = 0
- var/buffer2iue = 0
- var/buffer3iue = 0
- var/delete = 0
- var/injectorready = 1
- var/temphtml = null
- var/obj/machinery/dna_scanner/connected = null
- var/obj/item/weapon/disk/data/diskette = null
- anchored = 1.0
- use_power = 1
- idle_power_usage = 10
- active_power_usage = 400 */
diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm
index f4162aaae89..8b179519534 100644
--- a/code/defines/obj/machinery.dm
+++ b/code/defines/obj/machinery.dm
@@ -155,20 +155,6 @@
active_power_usage = 4
layer = TURF_LAYER
-/obj/machinery/mass_driver
- name = "mass driver"
- desc = "Shoots things into space."
- icon = 'stationobjs.dmi'
- icon_state = "mass_driver"
- var/power = 1.0
- var/code = 1.0
- var/id = 1.0
- anchored = 1.0
- var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
- use_power = 1
- idle_power_usage = 2
- active_power_usage = 50
-
/obj/machinery/meter
name = "meter"
desc = "It measures something."
diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm
index 864d6e451cd..0eb1dd34371 100644
--- a/code/game/machinery/atmo_control.dm
+++ b/code/game/machinery/atmo_control.dm
@@ -442,94 +442,6 @@ Rate: [volume_rate] L/sec
"}
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-/obj/machinery/computer/atmos_alert
- var/datum/radio_frequency/radio_connection
-/obj/machinery/computer/atmos_alert/initialize()
- set_frequency(receive_frequency)
-/obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal)
- if(!signal || signal.encryption) return
- var/zone = signal.data["zone"]
- var/severity = signal.data["alert"]
-
- if(!zone || !severity) return
-
- minor_alarms -= zone
- priority_alarms -= zone
- if(severity=="severe")
- priority_alarms += zone
- else if (severity=="minor")
- minor_alarms += zone
- /*else "clear"*/
- //do nothing
- update_icon()
-
-/obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, receive_frequency)
- receive_frequency = new_frequency
- radio_connection = radio_controller.add_object(src, receive_frequency, RADIO_ATMOSIA)
-
-/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
- user << browse(return_text(),"window=computer")
- user.machine = src
- onclose(user, "computer")
-
-/obj/machinery/computer/atmos_alert/process()
- ..()
- src.updateDialog()
-
-/obj/machinery/computer/atmos_alert/update_icon()
- if(priority_alarms.len)
- icon_state = "alert:2"
-
- else if(minor_alarms.len)
- icon_state = "alert:1"
-
- else
- icon_state = "alert:0"
-
-/obj/machinery/computer/atmos_alert/proc/return_text()
- var/priority_text
- var/minor_text
-
- if(priority_alarms.len)
- for(var/zone in priority_alarms)
- priority_text += "[zone] X
"
- else
- priority_text = "No priority alerts detected.
"
-
- if(minor_alarms.len)
- for(var/zone in minor_alarms)
- minor_text += "[zone] X
"
- else
- minor_text = "No minor alerts detected.
"
-
- var/output = {"[name]
-Priority Alerts:
-[priority_text]
-
-
-Minor Alerts:
-[minor_text]
-
"}
-
- return output
-
-/obj/machinery/computer/atmos_alert/Topic(href, href_list)
- if(..())
- return
-
- if(href_list["priority_clear"])
- var/removing_zone = href_list["priority_clear"]
- for(var/zone in priority_alarms)
- if(ckey(zone) == removing_zone)
- priority_alarms -= zone
-
- if(href_list["minor_clear"])
- var/removing_zone = href_list["minor_clear"]
- for(var/zone in minor_alarms)
- if(ckey(zone) == removing_zone)
- minor_alarms -= zone
- update_icon()
\ No newline at end of file
diff --git a/code/game/machinery/camera.dm b/code/game/machinery/camera.dm
index c52aa8f44ea..47ab969a0ad 100644
--- a/code/game/machinery/camera.dm
+++ b/code/game/machinery/camera.dm
@@ -166,45 +166,6 @@
L.Swap(j, j + 1)
return L
-/obj/machinery/computer/security/attack_hand(var/mob/user as mob)
- if (stat & (NOPOWER|BROKEN))
- return
-
- user.machine = src
-
- var/list/L = list()
- for (var/obj/machinery/camera/C in world)
- L.Add(C)
-
- camera_sort(L)
-
- var/list/D = list()
- D["Cancel"] = "Cancel"
- for (var/obj/machinery/camera/C in L)
- if (C.network == network)
- D[text("[][]", C.c_tag, (C.status ? null : " (Deactivated)"))] = C
-
- var/t = input(user, "Which camera should you change to?") as null|anything in D
-
- if(!t)
- user.machine = null
- return 0
-
- var/obj/machinery/camera/C = D[t]
-
- if (t == "Cancel")
- user.machine = null
- return 0
-
- if (C)
- if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) || !( C.status )) && (!istype(user, /mob/living/silicon/ai)))
- return 0
- else
- src.current = C
- use_power(50)
-
- spawn( 5 )
- attack_hand(user)
/mob/living/silicon/ai/attack_ai(var/mob/user as mob)
if (user != src)
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index 4344af6c2e2..dc7c4cb98eb 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -1,21 +1,36 @@
+/obj/machinery/computer/operating
+ name = "Operating Computer"
+ density = 1
+ anchored = 1.0
+ icon_state = "operating"
+ circuit = "/obj/item/weapon/circuitboard/operating"
+ var
+ mob/living/carbon/human/victim = null
+ obj/machinery/optable/table = null
+ id = 0.0
+
+
/obj/machinery/computer/operating/New()
..()
for(var/obj/machinery/optable/O in world)
if(src.id == O.id)
src.table = O
+
/obj/machinery/computer/operating/attack_ai(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
interact(user)
+
/obj/machinery/computer/operating/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
return
interact(user)
+
/obj/machinery/computer/operating/proc/interact(mob/user)
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
if (!istype(user, /mob/living/silicon))
@@ -52,15 +67,15 @@
user << browse(dat, "window=op")
onclose(user, "op")
+
/obj/machinery/computer/operating/Topic(href, href_list)
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
-// if (href_list["update"])
-// src.interact(usr)
return
+
/obj/machinery/computer/operating/process()
if(!(stat & (NOPOWER|BROKEN)) )
use_power(500)
diff --git a/code/game/machinery/computer/AIcore.dm b/code/game/machinery/computer/ai_core.dm
similarity index 100%
rename from code/game/machinery/computer/AIcore.dm
rename to code/game/machinery/computer/ai_core.dm
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 57b87ae93fd..f4821d0e669 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -1,3 +1,18 @@
+/obj/machinery/computer/arcade
+ name = "arcade machine"
+ desc = "Does not support Pin ball."
+ icon = 'computer.dmi'
+ icon_state = "arcade"
+ circuit = "/obj/item/weapon/circuitboard/arcade"
+ var/enemy_name = "Space Villian"
+ var/temp = "Winners Don't Use Spacedrugs" //Temporary message, for attack messages, etc
+ var/player_hp = 30 //Player health/attack points
+ var/player_mp = 10
+ var/enemy_hp = 45 //Enemy health/attack points
+ var/enemy_mp = 20
+ var/gameover = 0
+ var/blocked = 0 //Player cannot attack/heal while set
+
/obj/machinery/computer/arcade
var/turtle = 0
diff --git a/code/game/machinery/computer/atmos.dm b/code/game/machinery/computer/atmos.dm
deleted file mode 100644
index f7acd285e2b..00000000000
--- a/code/game/machinery/computer/atmos.dm
+++ /dev/null
@@ -1,103 +0,0 @@
-/*CONTENTS
-Gas Sensor
-Siphon computer
-Atmos alert computer
-*/
-
-
-
-//the station alerts computer
-/obj/machinery/computer/station_alert/attack_ai(mob/user)
- add_fingerprint(user)
-
- if(stat & (BROKEN|NOPOWER))
- return
- interact(user)
-
-/obj/machinery/computer/station_alert/attack_hand(mob/user)
- add_fingerprint(user)
- if(stat & (BROKEN|NOPOWER))
- return
- interact(user)
-
-/obj/machinery/computer/station_alert/proc/interact(mob/user)
- usr.machine = src
- var/dat = "Current Station Alerts\n"
- dat += "Close
"
- for (var/cat in src.alarms)
- dat += text("[]
\n", cat)
- var/list/L = src.alarms[cat]
- if (L.len)
- for (var/alarm in L)
- var/list/alm = L[alarm]
- var/area/A = alm[1]
- var/list/sources = alm[3]
- dat += ""
- dat += "• "
- dat += "[A.name]"
- if (sources.len > 1)
- dat += text(" - [] sources", sources.len)
- dat += "
\n"
- else
- dat += "-- All Systems Nominal
\n"
- dat += "
\n"
- user << browse(dat, "window=alerts")
- onclose(user, "alerts")
-
-/obj/machinery/computer/station_alert/Topic(href, href_list)
- if(..())
- return
- return
-
-/obj/machinery/computer/station_alert/proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource)
- if(stat & (BROKEN|NOPOWER))
- return
- var/list/L = src.alarms[class]
- for (var/I in L)
- if (I == A.name)
- var/list/alarm = L[I]
- var/list/sources = alarm[3]
- if (!(alarmsource in sources))
- sources += alarmsource
- return 1
- var/obj/machinery/camera/C = null
- var/list/CL = null
- if (O && istype(O, /list))
- CL = O
- if (CL.len == 1)
- C = CL[1]
- else if (O && istype(O, /obj/machinery/camera))
- C = O
- L[A.name] = list(A, (C) ? C : O, list(alarmsource))
- return 1
-
-/obj/machinery/computer/station_alert/proc/cancelAlarm(var/class, area/A as area, obj/origin)
- if(stat & (BROKEN|NOPOWER))
- return
- var/list/L = src.alarms[class]
- var/cleared = 0
- for (var/I in L)
- if (I == A.name)
- var/list/alarm = L[I]
- var/list/srcs = alarm[3]
- if (origin in srcs)
- srcs -= origin
- if (srcs.len == 0)
- cleared = 1
- L -= I
- return !cleared
-
-/obj/machinery/computer/station_alert/process()
- if(stat & (BROKEN|NOPOWER))
- icon_state = "atmos0"
- return
- var/active_alarms = 0
- for (var/cat in src.alarms)
- var/list/L = src.alarms[cat]
- if(L.len) active_alarms = 1
- if(active_alarms)
- icon_state = "alert:2"
- else
- icon_state = "alert:0"
-
- ..()
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
new file mode 100644
index 00000000000..01718ed8329
--- /dev/null
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -0,0 +1,105 @@
+
+/obj/machinery/computer/atmos_alert
+ name = "Atmospheric Alert Computer"
+ desc = "Used to access the station's atmospheric sensors."
+ icon_state = "alert:0"
+ var
+ list/priority_alarms = list()
+ list/minor_alarms = list()
+ receive_frequency = 1437
+ datum/radio_frequency/radio_connection
+
+
+ initialize()
+ set_frequency(receive_frequency)
+
+ receive_signal(datum/signal/signal)
+ if(!signal || signal.encryption) return
+
+ var/zone = signal.data["zone"]
+ var/severity = signal.data["alert"]
+
+ if(!zone || !severity) return
+
+ minor_alarms -= zone
+ priority_alarms -= zone
+ if(severity=="severe")
+ priority_alarms += zone
+ else if (severity=="minor")
+ minor_alarms += zone
+ update_icon()
+ return
+
+
+ proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, receive_frequency)
+ receive_frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, receive_frequency, RADIO_ATMOSIA)
+
+
+ attack_hand(mob/user)
+ user << browse(return_text(),"window=computer")
+ user.machine = src
+ onclose(user, "computer")
+
+ process()
+ ..()
+ src.updateDialog()
+
+ update_icon()
+ if(priority_alarms.len)
+ icon_state = "alert:2"
+
+ else if(minor_alarms.len)
+ icon_state = "alert:1"
+
+ else
+ icon_state = "alert:0"
+ return
+
+
+ proc/return_text()
+ var/priority_text
+ var/minor_text
+
+ if(priority_alarms.len)
+ for(var/zone in priority_alarms)
+ priority_text += "[zone] X
"
+ else
+ priority_text = "No priority alerts detected.
"
+
+ if(minor_alarms.len)
+ for(var/zone in minor_alarms)
+ minor_text += "[zone] X
"
+ else
+ minor_text = "No minor alerts detected.
"
+
+ var/output = {"[name]
+Priority Alerts:
+[priority_text]
+
+
+Minor Alerts:
+[minor_text]
+
"}
+
+ return output
+
+
+ Topic(href, href_list)
+ if(..())
+ return
+
+ if(href_list["priority_clear"])
+ var/removing_zone = href_list["priority_clear"]
+ for(var/zone in priority_alarms)
+ if(ckey(zone) == removing_zone)
+ priority_alarms -= zone
+
+ if(href_list["minor_clear"])
+ var/removing_zone = href_list["minor_clear"]
+ for(var/zone in minor_alarms)
+ if(ckey(zone) == removing_zone)
+ minor_alarms -= zone
+ update_icon()
+ return
\ No newline at end of file
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
new file mode 100644
index 00000000000..f93a632c7ad
--- /dev/null
+++ b/code/game/machinery/computer/camera.dm
@@ -0,0 +1,90 @@
+
+/obj/machinery/computer/security
+ name = "Security Cameras"
+ desc = "Used to access the various cameras on the station."
+ icon_state = "cameras"
+ circuit = "/obj/item/weapon/circuitboard/security"
+ var
+ obj/machinery/camera/current = null
+ last_pic = 1.0
+ network = "SS13"
+ mapping = 0//For the overview file, interesting bit of code.
+
+
+ attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
+
+ attack_paw(var/mob/user as mob)
+ return attack_hand(user)
+
+
+ check_eye(var/mob/user as mob)
+ if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
+ return null
+ user.reset_view(current)
+ return 1
+
+
+ attack_hand(var/mob/user as mob)
+ if(stat & (NOPOWER|BROKEN)) return
+
+ user.machine = src
+
+ var/list/L = list()
+ for (var/obj/machinery/camera/C in world)
+ L.Add(C)
+
+ camera_sort(L)
+
+ var/list/D = list()
+ D["Cancel"] = "Cancel"
+ for(var/obj/machinery/camera/C in L)
+ if(C.network == network)
+ D[text("[][]", C.c_tag, (C.status ? null : " (Deactivated)"))] = C
+
+ var/t = input(user, "Which camera should you change to?") as null|anything in D
+ if(!t)
+ user.machine = null
+ return 0
+
+ var/obj/machinery/camera/C = D[t]
+
+ if(t == "Cancel")
+ user.machine = null
+ return 0
+
+ if(C)
+ if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) || !( C.status )) && (!istype(user, /mob/living/silicon/ai)))
+ return 0
+ else
+ src.current = C
+ use_power(50)
+ spawn( 5 )
+ attack_hand(user)
+ return
+
+
+
+/obj/machinery/computer/security/telescreen
+ name = "Telescreen"
+ desc = "Used for watching an empty arena."
+ icon = 'stationobjs.dmi'
+ icon_state = "telescreen"
+ network = "thunder"
+ density = 0
+ circuit = null
+
+
+/obj/machinery/computer/security/wooden_tv
+ name = "Security Cameras"
+ desc = "An old TV hooked into the stations camera network."
+ icon_state = "security_det"
+
+
+/obj/machinery/computer/security/mining
+ name = "Outpost Cameras"
+ desc = "Used to access the various cameras on the outpost."
+ icon_state = "miningcameras"
+ network = "MINE"
+ circuit = "/obj/item/weapon/circuitboard/mining"
\ No newline at end of file
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
new file mode 100644
index 00000000000..1cfa528cac3
--- /dev/null
+++ b/code/game/machinery/computer/card.dm
@@ -0,0 +1,264 @@
+/obj/machinery/computer/card
+ name = "Identification Computer"
+ desc = "You can use this to change ID's."
+ icon_state = "id"
+ req_access = list(access_change_ids)
+ circuit = "/obj/item/weapon/circuitboard/card"
+ var
+ obj/item/weapon/card/id/scan = null
+ obj/item/weapon/card/id/modify = null
+ authenticated = 0.0
+ mode = 0.0
+ printing = null
+
+
+/obj/machinery/computer/card/attackby(O as obj, user as mob)//TODO:SANITY
+ if(istype(O, /obj/item/weapon/card/id))
+ var/obj/item/weapon/card/id/idcard = O
+ if(access_change_ids in idcard.access)
+ if(!scan)
+ usr.drop_item()
+ idcard.loc = src
+ scan = idcard
+ else if(!modify)
+ usr.drop_item()
+ idcard.loc = src
+ modify = idcard
+ else
+ if(!modify)
+ usr.drop_item()
+ idcard.loc = src
+ modify = idcard
+ else
+ ..()
+
+
+/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
+
+/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
+ return attack_hand(user)
+
+
+/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
+ if(..())
+ return
+
+ user.machine = src
+ var/dat
+ if (!( ticker ))
+ return
+ if (mode) // accessing crew manifest
+ var/crew = ""
+ for(var/datum/data/record/t in data_core.general)
+ crew += "[t.fields["name"]] - [t.fields["rank"]]
"
+ dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
+ else
+ var/header = "Identification Card Modifier
"
+
+ var/target_name
+ var/target_owner
+ var/target_rank
+ if(modify)
+ target_name = modify.name
+ else
+ target_name = "--------"
+ if(modify && modify.registered)
+ target_owner = modify.registered
+ else
+ target_owner = "--------"
+ if(modify && modify.assignment)
+ target_rank = modify.assignment
+ else
+ target_rank = "Unassigned"
+
+ var/scan_name
+ if(scan)
+ scan_name = scan.name
+ else
+ scan_name = "--------"
+
+ if(!authenticated)
+ header += "
Please insert the cards into the slots
"
+ header += "Target: [target_name]
"
+ header += "Confirm Identity: [scan_name]
"
+ else
+ header += ""
+
+ header += "
"
+
+ var/jobs_all = ""
+ var/list/alljobs = (istype(src,/obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
+ for(var/job in alljobs)
+ jobs_all += "[dd_replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job
+
+
+ var/body
+ if (authenticated && modify)
+ var/carddesc = {""}
+ carddesc += ""
+ carddesc += "Assignment: "
+
+ var/jobs = "[target_rank]" //CHECK THIS
+
+ var/accesses = ""
+ if(istype(src,/obj/machinery/computer/card/centcom))
+ accesses += "Central Command:
"
+ for(var/A in get_all_centcom_access())
+ if(A in modify.access)
+ accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] "
+ else
+ accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] "
+ else
+ accesses += "Access
"
+ accesses += ""
+ body = "[carddesc]
[jobs]
[accesses]" //CHECK THIS
+ else
+ body = "{Log in}
"
+ body += "Access Crew Manifest"
+ dat = "[header][body]
"
+ user << browse(dat, "window=id_com;size=900x520")
+ onclose(user, "id_com")
+ return
+
+
+/obj/machinery/computer/card/Topic(href, href_list)
+ if(..())
+ return
+ usr.machine = src
+ switch(href_list["choice"])
+ if ("modify")
+ if (modify)
+ data_core.manifest_modify(modify.registered, modify.assignment)
+ modify.name = text("[modify.registered]'s ID Card ([modify.assignment])")
+ if(ishuman(usr))
+ modify.loc = usr.loc
+ if(!usr.get_active_hand())
+ usr.put_in_hand(modify)
+ modify = null
+ else
+ modify.loc = loc
+ modify = null
+ else
+ var/obj/item/I = usr.equipped()
+ if (istype(I, /obj/item/weapon/card/id))
+ usr.drop_item()
+ I.loc = src
+ modify = I
+ authenticated = 0
+
+ if ("scan")
+ if (scan)
+ if(ishuman(usr))
+ scan.loc = usr.loc
+ if(!usr.get_active_hand())
+ usr.put_in_hand(scan)
+ scan = null
+ else
+ scan.loc = src.loc
+ scan = null
+ else
+ var/obj/item/I = usr.equipped()
+ if (istype(I, /obj/item/weapon/card/id))
+ usr.drop_item()
+ I.loc = src
+ scan = I
+ authenticated = 0
+ if ("auth")
+ if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode)))
+ if (check_access(scan))
+ authenticated = 1
+ else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify))
+ usr << "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in."
+ if ("logout")
+ authenticated = 0
+ if("access")
+ if(href_list["allowed"])
+ if(authenticated)
+ var/access_type = text2num(href_list["access_target"])
+ var/access_allowed = text2num(href_list["allowed"])
+ if(access_type in (istype(src,/obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
+ modify.access -= access_type
+ if(access_allowed == 1)
+ modify.access += access_type
+ if ("assign")
+ if (authenticated)
+ var/t1 = href_list["assign_target"]
+ if(t1 == "Custom")
+ t1 = input("Enter a custom job assignment.","Assignment")
+ else
+ modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
+ if (modify)
+ modify.assignment = t1
+ if ("reg")
+ if (authenticated)
+ var/t2 = modify
+ //var/t1 = input(usr, "What name?", "ID computer", null) as text
+ if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
+ modify.registered = href_list["reg"]
+ if ("mode")
+ mode = text2num(href_list["mode_target"])
+ if ("print")
+ if (!( printing ))
+ printing = 1
+ sleep(50)
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
+ var/t1 = "Crew Manifest:
"
+ for(var/datum/data/record/t in data_core.general)
+ t1 += "[t.fields["name"]] - [t.fields["rank"]]
"
+ P.info = t1
+ P.name = "paper- 'Crew Manifest'"
+ printing = null
+ if (modify)
+ modify.name = text("[modify.registered]'s ID Card ([modify.assignment])")
+ updateUsrDialog()
+ return
+
+
+
+/obj/machinery/computer/card/centcom
+ name = "CentCom Identification Computer"
+ circuit = "/obj/item/weapon/circuitboard/card/centcom"
+ req_access = list(access_cent_captain)
+
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 4f79ac3e50f..e92df5603ae 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -1,760 +1,131 @@
-/*CONTENTS
-General Computer
-Security Computer
-Comm Computer
-ID Computer
-Pod/Blast Doors computer
-*/
+/obj/machinery/computer
+ name = "computer"
+ icon = 'computer.dmi'
+ density = 1
+ anchored = 1.0
+ var/obj/item/weapon/circuitboard/circuit = null //if circuit==null, computer can't disassemble
-/obj/machinery/computer/New()
- ..()
- spawn(2)
- power_change()
-/obj/machinery/computer/meteorhit(var/obj/O as obj)
- for(var/x in verbs)
- verbs -= x
- set_broken()
- var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- smoke.set_up(5, 0, src)
- smoke.start()
- return
+ New()
+ ..()
+ spawn(2)
+ power_change()
-/obj/machinery/computer/emp_act(severity)
- if(prob(20/severity)) set_broken()
- ..()
-/obj/machinery/computer/ex_act(severity)
- switch(severity)
- if(1.0)
- del(src)
- return
- if(2.0)
- if (prob(25))
- del(src)
- return
- if (prob(50))
- for(var/x in verbs)
- verbs -= x
- set_broken()
- if(3.0)
- if (prob(25))
- for(var/x in verbs)
- verbs -= x
- set_broken()
- else
- return
-
-/obj/machinery/computer/blob_act()
- if (prob(75))
+ meteorhit(var/obj/O as obj)
for(var/x in verbs)
verbs -= x
set_broken()
- density = 0
+ var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
+ smoke.set_up(5, 0, src)
+ smoke.start()
+ return
-/obj/machinery/computer/power_change()
- if(!istype(src,/obj/machinery/computer/security/telescreen))
- if(stat & BROKEN)
- icon_state = initial(icon_state)
- icon_state += "b"
- if (istype(src,/obj/machinery/computer/aifixer))
- overlays = null
- else if(powered())
- icon_state = initial(icon_state)
- stat &= ~NOPOWER
- if (istype(src,/obj/machinery/computer/aifixer))
- var/obj/machinery/computer/aifixer/O = src
- if (O.occupant)
- switch (O.occupant.stat)
- if (0)
- overlays += image('computer.dmi', "ai-fixer-full")
- if (2)
- overlays += image('computer.dmi', "ai-fixer-404")
- else
- overlays += image('computer.dmi', "ai-fixer-empty")
- else
- spawn(rand(0, 15))
- //icon_state = "c_unpowered"
+ emp_act(severity)
+ if(prob(20/severity)) set_broken()
+ ..()
+
+
+ ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if (prob(25))
+ del(src)
+ return
+ if (prob(50))
+ for(var/x in verbs)
+ verbs -= x
+ set_broken()
+ if(3.0)
+ if (prob(25))
+ for(var/x in verbs)
+ verbs -= x
+ set_broken()
+ else
+ return
+
+
+ blob_act()
+ if (prob(75))
+ for(var/x in verbs)
+ verbs -= x
+ set_broken()
+ density = 0
+
+
+ power_change()
+ if(!istype(src,/obj/machinery/computer/security/telescreen))
+ if(stat & BROKEN)
icon_state = initial(icon_state)
- icon_state += "0"
- stat |= NOPOWER
+ icon_state += "b"
if (istype(src,/obj/machinery/computer/aifixer))
overlays = null
-/obj/machinery/computer/process()
- if(stat & (NOPOWER|BROKEN))
- return
- use_power(250)
-
-/obj/machinery/computer/proc/set_broken()
- icon_state = initial(icon_state)
- icon_state += "b"
- stat |= BROKEN
-
-/obj/machinery/computer/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver) && circuit)
- playsound(src.loc, 'Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/M = new circuit( A )
- A.circuit = M
- A.anchored = 1
- for (var/obj/C in src)
- C.loc = src.loc
- if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
- new /obj/item/weapon/shard( src.loc )
- A.state = 3
- A.icon_state = "3"
- else
- user << "\blue You disconnect the monitor."
- A.state = 4
- A.icon_state = "4"
- del(src)
- else
- src.attack_hand(user)
- return
-
-
-/obj/machinery/computer/security/New()
- ..()
- verbs -= /obj/machinery/computer/security/verb/station_map
-
-/obj/machinery/computer/security/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/security/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/security/check_eye(var/mob/user as mob)
- if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
- return null
- user.reset_view(current)
- return 1
-
-/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/attackby(O as obj, user as mob)
-
-
-/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/atmosphere/siphonswitch/mastersiphonswitch/attack_hand(var/mob/user as mob)
- if(..())
- return
-
- user << "We're sorry, this terminal is currently out of order!"
-
-
-
- //var/screen = AALARM_SCREEN_MAIN
- //var/area_uid
- //var/area/alarm_area
- //var/danger_level = 0
-
-
- //var/myproc = /obj/machinery/alarm/proc/return_controls
- //call(myproc)()
-
-
-
-
-
-
-/obj/machinery/computer/card/attackby(O as obj, user as mob)
- if(istype(O, /obj/item/weapon/card/id))
- var/obj/item/weapon/card/id/idcard = O
- if(access_change_ids in idcard.access)
- if(!scan)
- usr.drop_item()
- idcard.loc = src
- scan = idcard
- else if(!modify)
- usr.drop_item()
- idcard.loc = src
- modify = idcard
- else
- if(!modify)
- usr.drop_item()
- idcard.loc = src
- modify = idcard
- else
- ..()
-
-/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
- if(..())
- return
-
- user.machine = src
- var/dat
- if (!( ticker ))
- return
- if (mode) // accessing crew manifest
- var/crew = ""
- for(var/datum/data/record/t in data_core.general)
- crew += "[t.fields["name"]] - [t.fields["rank"]]
"
- dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
- else
- var/header = "Identification Card Modifier
"
-
- var/target_name
- var/target_owner
- var/target_rank
- if(modify)
- target_name = modify.name
- else
- target_name = "--------"
- if(modify && modify.registered)
- target_owner = modify.registered
- else
- target_owner = "--------"
- if(modify && modify.assignment)
- target_rank = modify.assignment
- else
- target_rank = "Unassigned"
-
- var/scan_name
- if(scan)
- scan_name = scan.name
- else
- scan_name = "--------"
-
- if(!authenticated)
- header += "
Please insert the cards into the slots
"
- header += "Target: [target_name]
"
- header += "Confirm Identity: [scan_name]
"
- else
- header += ""
-
- header += "
"
-
- var/jobs_all = ""
- var/list/alljobs = (istype(src,/obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
- for(var/job in alljobs)
- jobs_all += "[dd_replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job
-
-
- var/body
- if (authenticated && modify)
- var/carddesc = {""}
- carddesc += ""
- carddesc += "Assignment: "
-
- var/jobs = "[target_rank]" //CHECK THIS
-
- var/accesses = ""
- if(istype(src,/obj/machinery/computer/card/centcom))
- accesses += "Central Command:
"
- for(var/A in get_all_centcom_access())
- if(A in modify.access)
- accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] "
+ else if(powered())
+ icon_state = initial(icon_state)
+ stat &= ~NOPOWER
+ if (istype(src,/obj/machinery/computer/aifixer))
+ var/obj/machinery/computer/aifixer/O = src
+ if (O.occupant)
+ switch (O.occupant.stat)
+ if (0)
+ overlays += image('computer.dmi', "ai-fixer-full")
+ if (2)
+ overlays += image('computer.dmi', "ai-fixer-404")
else
- accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] "
+ overlays += image('computer.dmi', "ai-fixer-empty")
else
- accesses += "Access
"
- accesses += ""
- body = "[carddesc]
[jobs]
[accesses]" //CHECK THIS
- else
- body = "{Log in}
"
- body += "Access Crew Manifest"
- dat = "[header][body]
"
- user << browse(dat, "window=id_com;size=900x520")
- onclose(user, "id_com")
- return
-
-/obj/machinery/computer/card/Topic(href, href_list)
- if(..())
- return
- usr.machine = src
- switch(href_list["choice"])
- if ("modify")
- if (modify)
- data_core.manifest_modify(modify.registered, modify.assignment)
- modify.name = text("[modify.registered]'s ID Card ([modify.assignment])")
- if(ishuman(usr))
- modify.loc = usr.loc
- if(!usr.get_active_hand())
- usr.put_in_hand(modify)
- modify = null
- else
- modify.loc = loc
- modify = null
- else
- var/obj/item/I = usr.equipped()
- if (istype(I, /obj/item/weapon/card/id))
- usr.drop_item()
- I.loc = src
- modify = I
- authenticated = 0
-
- if ("scan")
- if (scan)
- if(ishuman(usr))
- scan.loc = usr.loc
- if(!usr.get_active_hand())
- usr.put_in_hand(scan)
- scan = null
- else
- scan.loc = src.loc
- scan = null
- else
- var/obj/item/I = usr.equipped()
- if (istype(I, /obj/item/weapon/card/id))
- usr.drop_item()
- I.loc = src
- scan = I
- authenticated = 0
- if ("auth")
- if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode)))
- if (check_access(scan))
- authenticated = 1
- else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify))
- usr << "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in."
- if ("logout")
- authenticated = 0
- if("access")
- if(href_list["allowed"])
- if(authenticated)
- var/access_type = text2num(href_list["access_target"])
- var/access_allowed = text2num(href_list["allowed"])
- if(access_type in (istype(src,/obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
- modify.access -= access_type
- if(access_allowed == 1)
- modify.access += access_type
- if ("assign")
- if (authenticated)
- var/t1 = href_list["assign_target"]
- if(t1 == "Custom")
- t1 = input("Enter a custom job assignment.","Assignment")
- else
- modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
- if (modify)
- modify.assignment = t1
- if ("reg")
- if (authenticated)
- var/t2 = modify
- //var/t1 = input(usr, "What name?", "ID computer", null) as text
- if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
- modify.registered = href_list["reg"]
- if ("mode")
- mode = text2num(href_list["mode_target"])
- if ("print")
- if (!( printing ))
- printing = 1
- sleep(50)
- var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
- var/t1 = "Crew Manifest:
"
- for(var/datum/data/record/t in data_core.general)
- t1 += "[t.fields["name"]] - [t.fields["rank"]]
"
- P.info = t1
- P.name = "paper- 'Crew Manifest'"
- printing = null
- if (modify)
- modify.name = text("[modify.registered]'s ID Card ([modify.assignment])")
- updateUsrDialog()
- return
-
-/obj/datacore/proc/manifest(var/nosleep = 0)
- spawn()
- if(!nosleep)
- sleep(40)
- for(var/mob/living/carbon/human/H in world)
- if (!isnull(H.mind) && (H.mind.assigned_role != "MODE"))
- var/datum/data/record/G = new()
- var/datum/data/record/M = new()
- var/datum/data/record/S = new()
- var/datum/data/record/L = new()
- var/obj/item/weapon/card/id/C = H.wear_id
- if (C)
- G.fields["rank"] = C.assignment
- else
- if(H.job)
- G.fields["rank"] = H.job
- else
- G.fields["rank"] = "Unassigned"
- G.fields["name"] = H.real_name
- G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
- M.fields["name"] = G.fields["name"]
- M.fields["id"] = G.fields["id"]
- S.fields["name"] = G.fields["name"]
- S.fields["id"] = G.fields["id"]
- if (H.gender == FEMALE)
- G.fields["sex"] = "Female"
- else
- G.fields["sex"] = "Male"
- G.fields["age"] = text("[]", H.age)
- G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
- G.fields["p_stat"] = "Active"
- G.fields["m_stat"] = "Stable"
- M.fields["b_type"] = text("[]", H.b_type)
- M.fields["b_dna"] = H.dna.unique_enzymes
- M.fields["mi_dis"] = "None"
- M.fields["mi_dis_d"] = "No minor disabilities have been declared."
- M.fields["ma_dis"] = "None"
- M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
- M.fields["alg"] = "None"
- M.fields["alg_d"] = "No allergies have been detected in this patient."
- M.fields["cdi"] = "None"
- M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
- M.fields["notes"] = "No notes."
- S.fields["criminal"] = "None"
- S.fields["mi_crim"] = "None"
- S.fields["mi_crim_d"] = "No minor crime convictions."
- S.fields["ma_crim"] = "None"
- S.fields["ma_crim_d"] = "No major crime convictions."
- S.fields["notes"] = "No notes."
-
- //Begin locked reporting
- L.fields["name"] = H.real_name
- L.fields["sex"] = H.gender
- L.fields["age"] = H.age
- L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
- L.fields["rank"] = H.mind.assigned_role
- L.fields["b_type"] = H.b_type
- L.fields["b_dna"] = H.dna.unique_enzymes
- L.fields["enzymes"] = H.dna.struc_enzymes
- L.fields["identity"] = H.dna.uni_identity
- L.fields["image"] = getFlatIcon(H,0)
- //End locked reporting
-
- general += G
- medical += M
- security += S
- locked += L
- return
-
-/obj/datacore/proc/manifest_modify(var/name, var/assignment)
- var/datum/data/record/foundrecord
-
- for(var/datum/data/record/t in data_core.general)
- if(t.fields["name"] == name)
- foundrecord = t
- break
-
- if(foundrecord)
- foundrecord.fields["rank"] = assignment
+ spawn(rand(0, 15))
+ //icon_state = "c_unpowered"
+ icon_state = initial(icon_state)
+ icon_state += "0"
+ stat |= NOPOWER
+ if (istype(src,/obj/machinery/computer/aifixer))
+ overlays = null
-/obj/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
- if (!isnull(H.mind) && (H.mind.assigned_role != "MODE"))
- var/datum/data/record/G = new()
- var/datum/data/record/M = new()
- var/datum/data/record/S = new()
- var/datum/data/record/L = new()
- var/obj/item/weapon/card/id/C = H.wear_id
- if (C)
- G.fields["rank"] = C.assignment
- else
- if(H.job)
- G.fields["rank"] = H.job
- else
- G.fields["rank"] = "Unassigned"
- G.fields["name"] = H.real_name
- G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
- M.fields["name"] = G.fields["name"]
- M.fields["id"] = G.fields["id"]
- S.fields["name"] = G.fields["name"]
- S.fields["id"] = G.fields["id"]
- if (H.gender == FEMALE)
- G.fields["sex"] = "Female"
- else
- G.fields["sex"] = "Male"
- G.fields["age"] = text("[]", H.age)
- G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
- G.fields["p_stat"] = "Active"
- G.fields["m_stat"] = "Stable"
- M.fields["b_type"] = text("[]", H.b_type)
- M.fields["b_dna"] = H.dna.unique_enzymes
- M.fields["mi_dis"] = "None"
- M.fields["mi_dis_d"] = "No minor disabilities have been declared."
- M.fields["ma_dis"] = "None"
- M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
- M.fields["alg"] = "None"
- M.fields["alg_d"] = "No allergies have been detected in this patient."
- M.fields["cdi"] = "None"
- M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
- M.fields["notes"] = "No notes."
- S.fields["criminal"] = "None"
- S.fields["mi_crim"] = "None"
- S.fields["mi_crim_d"] = "No minor crime convictions."
- S.fields["ma_crim"] = "None"
- S.fields["ma_crim_d"] = "No major crime convictions."
- S.fields["notes"] = "No notes."
-
- //Begin locked reporting
- L.fields["name"] = H.real_name
- L.fields["sex"] = H.gender
- L.fields["age"] = H.age
- L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
- L.fields["rank"] = H.mind.assigned_role
- L.fields["b_type"] = H.b_type
- L.fields["b_dna"] = H.dna.unique_enzymes
- L.fields["enzymes"] = H.dna.struc_enzymes
- L.fields["identity"] = H.dna.uni_identity
- L.fields["image"] = getFlatIcon(H,0)
- //End locked reporting
-
- general += G
- medical += M
- security += S
- locked += L
+ process()
+ if(stat & (NOPOWER|BROKEN))
+ return
+ use_power(250)
-/obj/machinery/computer/pod/proc/alarm()
- if(stat & (NOPOWER|BROKEN))
- return
+ proc/set_broken()
+ icon_state = initial(icon_state)
+ icon_state += "b"
+ stat |= BROKEN
- if (!( connected ))
- viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!"
- return
- for(var/obj/machinery/door/poddoor/M in machines)
- if (M.id == id)
- spawn( 0 )
- M.open()
- return
- sleep(20)
-
- //connected.drive() *****RM from 40.93.3S
- for(var/obj/machinery/mass_driver/M in machines)
- if(M.id == id)
- M.power = connected.power
- M.drive()
-
- sleep(50)
- for(var/obj/machinery/door/poddoor/M in machines)
- if (M.id == id)
- spawn( 0 )
- M.close()
- return
- return
-
-/obj/machinery/computer/pod/New()
- ..()
- spawn( 5 )
- for(var/obj/machinery/mass_driver/M in machines)
- if (M.id == id)
- connected = M
- else
- return
- return
-
-/obj/machinery/computer/pod/attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver))
- playsound(loc, 'Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (stat & BROKEN)
- user << "\blue The broken glass falls out."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
- new /obj/item/weapon/shard( loc )
-
- //generate appropriate circuitboard. Accounts for /pod/old computer types
- var/obj/item/weapon/circuitboard/pod/M = null
- if(istype(src, /obj/machinery/computer/pod/old))
- M = new /obj/item/weapon/circuitboard/olddoor( A )
- if(istype(src, /obj/machinery/computer/pod/old/syndicate))
- M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
- if(istype(src, /obj/machinery/computer/pod/old/swf))
- M = new /obj/item/weapon/circuitboard/swfdoor( A )
- else //it's not an old computer. Generate standard pod circuitboard.
- M = new /obj/item/weapon/circuitboard/pod( A )
-
- for (var/obj/C in src)
- C.loc = loc
- M.id = id
+ attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver) && circuit)
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/M = new circuit( A )
A.circuit = M
- A.state = 3
- A.icon_state = "3"
A.anchored = 1
- del(src)
- else
- user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
-
- //generate appropriate circuitboard. Accounts for /pod/old computer types
- var/obj/item/weapon/circuitboard/pod/M = null
- if(istype(src, /obj/machinery/computer/pod/old))
- M = new /obj/item/weapon/circuitboard/olddoor( A )
- if(istype(src, /obj/machinery/computer/pod/old/syndicate))
- M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
- if(istype(src, /obj/machinery/computer/pod/old/swf))
- M = new /obj/item/weapon/circuitboard/swfdoor( A )
- else //it's not an old computer. Generate standard pod circuitboard.
- M = new /obj/item/weapon/circuitboard/pod( A )
-
for (var/obj/C in src)
- C.loc = loc
- M.id = id
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- del(src)
- else
- attack_hand(user)
- return
-
-/obj/machinery/computer/pod/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/pod/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/pod/attack_hand(var/mob/user as mob)
- if(..())
- return
-
- var/dat = "Mass Driver Controls"
- user.machine = src
- var/d2
- if (timing)
- d2 = text("Stop Time Launch", src)
- else
- d2 = text("Initiate Time Launch", src)
- var/second = time % 60
- var/minute = (time - second) / 60
- dat += text("
\nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
- if (connected)
- var/temp = ""
- var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
- for(var/t in L)
- if (t == connected.power)
- temp += text("[] ", t)
- else
- temp += text("[] ", src, t, t)
- //Foreach goto(172)
- dat += text("
\nPower Level: []
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
", temp, src, src, src)
- //*****RM from 40.93.3S
- else
- dat += text("
\nToggle Outer Door
", src)
- //*****
- dat += text("
Close", user)
- user << browse(dat, "window=computer;size=400x500")
- onclose(user, "computer")
- return
-
-/obj/machinery/computer/pod/process()
- ..()
- if (timing)
- if (time > 0)
- time = round(time) - 1
- else
- alarm()
- time = 0
- timing = 0
- updateDialog()
- return
-
-/obj/machinery/computer/pod/Topic(href, href_list)
- if(..())
- return
- if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
- usr.machine = src
- if (href_list["power"])
- var/t = text2num(href_list["power"])
- t = min(max(0.25, t), 16)
- if (connected)
- connected.power = t
- else
- if (href_list["alarm"])
- alarm()
- else
- if (href_list["time"])
- timing = text2num(href_list["time"])
+ C.loc = src.loc
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ new /obj/item/weapon/shard( src.loc )
+ A.state = 3
+ A.icon_state = "3"
else
- if (href_list["tp"])
- var/tp = text2num(href_list["tp"])
- time += tp
- time = min(max(round(time), 0), 120)
- else
- if (href_list["door"])
- if(istype(src, /obj/machinery/computer/pod/old/syndicate))//Added here so Nuke ops don't go running naked into space before moving the shuttle.
- if(syndicate_station_at_station == 0)
- usr << "\red You need to launch the Syndicate Shuttle via the computer terminal at the head of the ship before departing."
- return
- for(var/obj/machinery/door/poddoor/M in machines)
- if (M.id == id)
- if (M.density)
- spawn( 0 )
- M.open()
- return
- else
- spawn( 0 )
- M.close()
- return
- //Foreach goto(298)
- add_fingerprint(usr)
- updateUsrDialog()
-
- return
-
-/obj/machinery/mass_driver/proc/drive(amount)
- if(stat & (BROKEN|NOPOWER))
+ user << "\blue You disconnect the monitor."
+ A.state = 4
+ A.icon_state = "4"
+ del(src)
+ else
+ src.attack_hand(user)
return
- use_power(500)
- var/O_limit
- var/atom/target = get_edge_target_turf(src, dir)
- for(var/atom/movable/O in loc)
- if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
- O_limit++
- if(O_limit >= 20)
- for(var/mob/M in hearers(src, null))
- M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items."
- break
- use_power(500)
- spawn( 0 )
- O.throw_at(target, drive_range * power, power)
- flick("mass_driver1", src)
- return
+
+
+
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 382c267cbbe..f90dce85d38 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -1,4 +1,14 @@
/obj/machinery/computer/crew
+ name = "Crew monitoring computer"
+ desc = "Used to monitor active health sensors built into most of the crew's uniforms."
+ icon_state = "crew"
+ use_power = 1
+ idle_power_usage = 250
+ active_power_usage = 500
+ circuit = "/obj/item/weapon/circuitboard/crew"
+ var/list/tracked = list( )
+
+
New()
tracked = list()
..()
@@ -46,8 +56,8 @@
proc
interact(mob/user)
- if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
- if (!istype(user, /mob/living/silicon))
+ if( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
+ if(!istype(user, /mob/living/silicon))
user.machine = null
user << browse(null, "window=powcomp")
return
@@ -58,33 +68,31 @@
t += "
Close"
t += "| Name | Vitals | Position |
"
for(var/obj/item/clothing/under/C in src.tracked)
- if((C) && (C.has_sensor) && (C.loc) && (C.loc.z == 1))
+ if((C) && (C.has_sensor) && (C.loc) && (C.loc.z == 1) && C.sensor_mode)
if(istype(C.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C.loc
var/dam1 = round(H.getOxyLoss(),1)
var/dam2 = round(H.getToxLoss(),1)
var/dam3 = round(H.getFireLoss(),1)
var/dam4 = round(H.getBruteLoss(),1)
+
+ if(H.wear_id)
+ t += "| [H.wear_id.name] | "
+ else
+ t += "
| Unknown: | "
switch(C.sensor_mode)
if(1)
- if(H.wear_id)
- t += "
| [H.wear_id.name] | "
- else
- t += " |
| Unknown: | "
- t+= "[H.stat > 1 ? "Deceased" : "Living"] | Not Available |
"
+ t+= "[H.stat > 1 ? "Deceased" : "Living"] | Not Available | "
if(2)
- if(H.wear_id)
- t += "| [H.wear_id.name] | "
- else
- t += " |
| Unknown: | "
- t += "[H.stat > 1 ? "Deceased" : "Living"], [dam1] - [dam2] - [dam3] - [dam4] | Not Available |
"
+ t += "[H.stat > 1 ? "Deceased" : "Living"], [dam1] - [dam2] - [dam3] - [dam4] | Not Available | "
if(3)
- t += "| [H.name] | [H.stat > 1 ? "Deceased" : "Living"], [dam2] - [dam2] - [dam3] - [dam4] | [get_area(H)] ([H.x], [H.y]) |
"
+ t += "[H.stat > 1 ? "Deceased" : "Living"], [dam2] - [dam2] - [dam3] - [dam4] | [get_area(H)] ([H.x], [H.y]) | "
t += "
"
t += ""
user << browse(t, "window=crewcomp;size=500x800")
onclose(user, "crewcomp")
+
scan()
for(var/obj/item/clothing/under/C in world)
if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human)))
diff --git a/code/game/machinery/computer/hologram.dm b/code/game/machinery/computer/hologram.dm
index 5539a616f49..278a0704ff8 100644
--- a/code/game/machinery/computer/hologram.dm
+++ b/code/game/machinery/computer/hologram.dm
@@ -1,3 +1,17 @@
+/obj/machinery/computer/hologram_comp
+ name = "Hologram Computer"
+ desc = "Rumoured to control holograms."
+ icon = 'stationobjs.dmi'
+ icon_state = "holo_console0"
+ var
+ obj/machinery/hologram/projector/projector = null
+ temp = null
+ lumens = 0.0
+ h_r = 245.0
+ h_g = 245.0
+ h_b = 245.0
+
+
/obj/machinery/computer/hologram_comp/New()
..()
spawn( 10 )
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
new file mode 100644
index 00000000000..11506bc3037
--- /dev/null
+++ b/code/game/machinery/computer/law.dm
@@ -0,0 +1,81 @@
+/obj/machinery/computer/aiupload
+ name = "AI Upload"
+ desc = "Used to upload laws to the AI."
+ icon_state = "command"
+ circuit = "/obj/item/weapon/circuitboard/aiupload"
+ var
+ mob/living/silicon/ai/current = null
+ opened = 0
+
+
+ verb/AccessInternals()
+ set category = "Object"
+ set name = "Access Computer's Internals"
+ set src in oview(1)
+ if(get_dist(src, usr) > 1 || usr.restrained() || usr.lying || usr.stat || istype(usr, /mob/living/silicon))
+ return
+
+ opened = !opened
+ if(opened)
+ usr << "\blue The access panel is now open."
+ else
+ usr << "\blue The access panel is now closed."
+ return
+
+
+ attackby(obj/item/weapon/O as obj, mob/user as mob)
+ if(istype(O, /obj/item/weapon/aiModule))
+ var/obj/item/weapon/aiModule/M = O
+ M.install(src)
+ else
+ ..()
+
+
+ attack_hand(var/mob/user as mob)
+ if(src.stat & NOPOWER)
+ usr << "The upload computer has no power!"
+ return
+ if(src.stat & BROKEN)
+ usr << "The upload computer is broken!"
+ return
+
+ src.current = activeais()
+
+ if (!src.current)
+ usr << "No active AIs detected."
+ else
+ usr << "[src.current.name] selected for law changes."
+ return
+
+
+
+/obj/machinery/computer/borgupload
+ name = "Cyborg Upload"
+ desc = "Used to upload laws to Cyborgs."
+ icon_state = "command"
+ circuit = "/obj/item/weapon/circuitboard/borgupload"
+ var/mob/living/silicon/robot/current = null
+
+
+ attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob)
+ if(istype(module, /obj/item/weapon/aiModule))
+ module.install(src)
+ else
+ return ..()
+
+
+ attack_hand(var/mob/user as mob)
+ if(src.stat & NOPOWER)
+ usr << "The upload computer has no power!"
+ return
+ if(src.stat & BROKEN)
+ usr << "The upload computer is broken!"
+ return
+
+ src.current = freeborg()
+
+ if (!src.current)
+ usr << "No free cyborgs detected."
+ else
+ usr << "[src.current.name] selected for law changes."
+ return
\ No newline at end of file
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 0a88095bde0..ac0e8f48deb 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -1,3 +1,20 @@
+/obj/machinery/computer/med_data//TODO:SANITY
+ name = "Medical Records"
+ desc = "This can be used to check medical records."
+ icon_state = "medcomp"
+ req_access = list(access_medical)
+ circuit = "/obj/item/weapon/circuitboard/med_data"
+ var
+ obj/item/weapon/card/id/scan = null
+ authenticated = null
+ rank = null
+ screen = null
+ datum/data/record/active1 = null
+ datum/data/record/active2 = null
+ a_id = null
+ temp = null
+ printing = null
+
/obj/machinery/computer/med_data/attack_ai(user as mob)
return src.attack_hand(user)
@@ -408,3 +425,8 @@
src.updateUsrDialog()
return
+
+/obj/machinery/computer/med_data/laptop
+ name = "Medical Laptop"
+ desc = "Cheap Nanotrasen Laptop."
+ icon_state = "medlaptop"
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
new file mode 100644
index 00000000000..e529af68aad
--- /dev/null
+++ b/code/game/machinery/computer/pod.dm
@@ -0,0 +1,222 @@
+/obj/machinery/computer/pod
+ name = "Pod Launch Control"
+ desc = "A controll for launching pods. Some people prefer firing Mechas."
+ icon_state = "computer_generic"
+ var
+ id = 1.0
+ obj/machinery/mass_driver/connected = null
+ timing = 0.0
+ time = 30.0
+
+
+/obj/machinery/computer/pod/New()
+ ..()
+ spawn( 5 )
+ for(var/obj/machinery/mass_driver/M in machines)
+ if (M.id == id)
+ connected = M
+ else
+ return
+ return
+
+
+/obj/machinery/computer/pod/proc/alarm()
+ if(stat & (NOPOWER|BROKEN))
+ return
+
+ if (!( connected ))
+ viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!"
+ return
+
+ for(var/obj/machinery/door/poddoor/M in machines)
+ if (M.id == id)
+ spawn( 0 )
+ M.open()
+ return
+ sleep(20)
+
+ //connected.drive() *****RM from 40.93.3S
+ for(var/obj/machinery/mass_driver/M in machines)
+ if(M.id == id)
+ M.power = connected.power
+ M.drive()
+
+ sleep(50)
+ for(var/obj/machinery/door/poddoor/M in machines)
+ if (M.id == id)
+ spawn( 0 )
+ M.close()
+ return
+ return
+
+
+/obj/machinery/computer/pod/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
+ new /obj/item/weapon/shard( loc )
+
+ //generate appropriate circuitboard. Accounts for /pod/old computer types
+ var/obj/item/weapon/circuitboard/pod/M = null
+ if(istype(src, /obj/machinery/computer/pod/old))
+ M = new /obj/item/weapon/circuitboard/olddoor( A )
+ if(istype(src, /obj/machinery/computer/pod/old/syndicate))
+ M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
+ if(istype(src, /obj/machinery/computer/pod/old/swf))
+ M = new /obj/item/weapon/circuitboard/swfdoor( A )
+ else //it's not an old computer. Generate standard pod circuitboard.
+ M = new /obj/item/weapon/circuitboard/pod( A )
+
+ for (var/obj/C in src)
+ C.loc = loc
+ M.id = id
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
+
+ //generate appropriate circuitboard. Accounts for /pod/old computer types
+ var/obj/item/weapon/circuitboard/pod/M = null
+ if(istype(src, /obj/machinery/computer/pod/old))
+ M = new /obj/item/weapon/circuitboard/olddoor( A )
+ if(istype(src, /obj/machinery/computer/pod/old/syndicate))
+ M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
+ if(istype(src, /obj/machinery/computer/pod/old/swf))
+ M = new /obj/item/weapon/circuitboard/swfdoor( A )
+ else //it's not an old computer. Generate standard pod circuitboard.
+ M = new /obj/item/weapon/circuitboard/pod( A )
+
+ for (var/obj/C in src)
+ C.loc = loc
+ M.id = id
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)
+ else
+ attack_hand(user)
+ return
+
+
+/obj/machinery/computer/pod/attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
+
+/obj/machinery/computer/pod/attack_paw(var/mob/user as mob)
+ return attack_hand(user)
+
+
+/obj/machinery/computer/pod/attack_hand(var/mob/user as mob)
+ if(..())
+ return
+
+ var/dat = "Mass Driver Controls"
+ user.machine = src
+ var/d2
+ if (timing)
+ d2 = text("Stop Time Launch", src)
+ else
+ d2 = text("Initiate Time Launch", src)
+ var/second = time % 60
+ var/minute = (time - second) / 60
+ dat += text("
\nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
+ if (connected)
+ var/temp = ""
+ var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
+ for(var/t in L)
+ if (t == connected.power)
+ temp += text("[] ", t)
+ else
+ temp += text("[] ", src, t, t)
+ //Foreach goto(172)
+ dat += text("
\nPower Level: []
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
", temp, src, src, src)
+ //*****RM from 40.93.3S
+ else
+ dat += text("
\nToggle Outer Door
", src)
+ //*****
+ dat += text("
Close", user)
+ user << browse(dat, "window=computer;size=400x500")
+ onclose(user, "computer")
+ return
+
+
+/obj/machinery/computer/pod/process()
+ ..()
+ if (timing)
+ if (time > 0)
+ time = round(time) - 1
+ else
+ alarm()
+ time = 0
+ timing = 0
+ updateDialog()
+ return
+
+
+/obj/machinery/computer/pod/Topic(href, href_list)
+ if(..())
+ return
+ if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
+ usr.machine = src
+ if (href_list["power"])
+ var/t = text2num(href_list["power"])
+ t = min(max(0.25, t), 16)
+ if (connected)
+ connected.power = t
+ else
+ if (href_list["alarm"])
+ alarm()
+ else
+ if (href_list["time"])
+ timing = text2num(href_list["time"])
+ else
+ if (href_list["tp"])
+ var/tp = text2num(href_list["tp"])
+ time += tp
+ time = min(max(round(time), 0), 120)
+ else
+ if (href_list["door"])
+ if(istype(src, /obj/machinery/computer/pod/old/syndicate))//Added here so Nuke ops don't go running naked into space before moving the shuttle.
+ if(syndicate_station_at_station == 0)
+ usr << "\red You need to launch the Syndicate Shuttle via the computer terminal at the head of the ship before departing."
+ return
+ for(var/obj/machinery/door/poddoor/M in machines)
+ if (M.id == id)
+ if (M.density)
+ spawn( 0 )
+ M.open()
+ return
+ else
+ spawn( 0 )
+ M.close()
+ return
+ //Foreach goto(298)
+ add_fingerprint(usr)
+ updateUsrDialog()
+ return
+
+
+
+/obj/machinery/computer/pod/old
+ icon_state = "old"
+ name = "DoorMex Control Computer"
+
+
+
+/obj/machinery/computer/pod/old/syndicate
+ name = "ProComp Executive IIc"
+ desc = "The Syndicate operate on a tight budget. Operates external airlocks."
+
+
+
+/obj/machinery/computer/pod/old/swf
+ name = "Magix System IV"
+ desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition"
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index dc17e6cdfe6..be1a4019161 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -1,3 +1,21 @@
+
+/obj/machinery/computer/robotics
+ name = "Robotics Control"
+ desc = "Used to remotely lockdown or detonate linked Cyborgs."
+ icon = 'computer.dmi'
+ icon_state = "robot"
+ req_access = list(access_robotics)
+ circuit = "/obj/item/weapon/circuitboard/robotics"
+
+ var
+ id = 0.0
+ temp = null
+ status = 0
+ timeleft = 60
+ stop = 0.0
+ screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text
+
+
/obj/machinery/computer/robotics/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 7014680b9de..0d3c3918d64 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -1,9 +1,29 @@
+/obj/machinery/computer/secure_data//TODO:SANITY
+ name = "Security Records"
+ desc = "Used to view and edit personnel's security records"
+ icon_state = "security"
+ req_access = list(access_security)
+ circuit = "/obj/item/weapon/circuitboard/secure_data"
+ var
+ obj/item/weapon/card/id/scan = null
+ authenticated = null
+ rank = null
+ screen = null
+ datum/data/record/active1 = null
+ datum/data/record/active2 = null
+ a_id = null
+ temp = null
+ printing = null
+
+
/obj/machinery/computer/secure_data/attack_ai(mob/user as mob)
return attack_hand(user)
+
/obj/machinery/computer/secure_data/attack_paw(mob/user as mob)
return attack_hand(user)
+
//Someone needs to break down the dat += into chunks instead of long ass lines.
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
if(..())
@@ -20,7 +40,7 @@
if(2.0)
dat += "Record List:
"
for(var/datum/data/record/R in data_core.general)
- dat += text("[]: []
", src, R, R.fields["id"], R.fields["name"])
+ dat += text("[R.fields["id"]]: [R.fields["name"]] - [R.fields["rank"]]
")
dat += text("
Back", src)
if(3.0)
dat += text("Records Maintenance
\nDelete All Records
\n
\nBack", src, src)
@@ -49,6 +69,7 @@
onclose(user, "secure_rec")
return
+
/*Revised /N
I can't be bothered to look more of the actual code outside of switch but that probably needs revising too.
What a mess.*/
@@ -379,3 +400,8 @@ What a mess.*/
updateUsrDialog()
return
+
+
+/obj/machinery/computer/secure_data/detective_computer
+ icon = 'computer.dmi'
+ icon_state = "messyfiles"
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
new file mode 100644
index 00000000000..234a3ea5223
--- /dev/null
+++ b/code/game/machinery/computer/station_alert.dm
@@ -0,0 +1,110 @@
+
+/obj/machinery/computer/station_alert
+ name = "Station Alert Computer"
+ desc = "Used to access the station's automated alert system."
+ icon_state = "alert:0"
+ circuit = "/obj/item/weapon/circuitboard/stationalert"
+ var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list())
+
+
+ attack_ai(mob/user)
+ add_fingerprint(user)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ interact(user)
+ return
+
+
+ attack_hand(mob/user)
+ add_fingerprint(user)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ interact(user)
+ return
+
+
+ proc/interact(mob/user)
+ usr.machine = src
+ var/dat = "Current Station Alerts\n"
+ dat += "Close
"
+ for (var/cat in src.alarms)
+ dat += text("[]
\n", cat)
+ var/list/L = src.alarms[cat]
+ if (L.len)
+ for (var/alarm in L)
+ var/list/alm = L[alarm]
+ var/area/A = alm[1]
+ var/list/sources = alm[3]
+ dat += ""
+ dat += "• "
+ dat += "[A.name]"
+ if (sources.len > 1)
+ dat += text(" - [] sources", sources.len)
+ dat += "
\n"
+ else
+ dat += "-- All Systems Nominal
\n"
+ dat += "
\n"
+ user << browse(dat, "window=alerts")
+ onclose(user, "alerts")
+
+
+ Topic(href, href_list)
+ if(..())
+ return
+ return
+
+
+ proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ var/list/L = src.alarms[class]
+ for (var/I in L)
+ if (I == A.name)
+ var/list/alarm = L[I]
+ var/list/sources = alarm[3]
+ if (!(alarmsource in sources))
+ sources += alarmsource
+ return 1
+ var/obj/machinery/camera/C = null
+ var/list/CL = null
+ if (O && istype(O, /list))
+ CL = O
+ if (CL.len == 1)
+ C = CL[1]
+ else if (O && istype(O, /obj/machinery/camera))
+ C = O
+ L[A.name] = list(A, (C) ? C : O, list(alarmsource))
+ return 1
+
+
+ proc/cancelAlarm(var/class, area/A as area, obj/origin)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ var/list/L = src.alarms[class]
+ var/cleared = 0
+ for (var/I in L)
+ if (I == A.name)
+ var/list/alarm = L[I]
+ var/list/srcs = alarm[3]
+ if (origin in srcs)
+ srcs -= origin
+ if (srcs.len == 0)
+ cleared = 1
+ L -= I
+ return !cleared
+
+
+ process()
+ if(stat & (BROKEN|NOPOWER))
+ icon_state = "atmos0"
+ return
+ var/active_alarms = 0
+ for (var/cat in src.alarms)
+ var/list/L = src.alarms[cat]
+ if(L.len) active_alarms = 1
+ if(active_alarms)
+ icon_state = "alert:2"
+ else
+ icon_state = "alert:0"
+ ..()
+ return
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
new file mode 100644
index 00000000000..d1a3a6a0899
--- /dev/null
+++ b/code/game/machinery/mass_driver.dm
@@ -0,0 +1,35 @@
+/obj/machinery/mass_driver
+ name = "mass driver"
+ desc = "Shoots things into space."
+ icon = 'stationobjs.dmi'
+ icon_state = "mass_driver"
+ anchored = 1.0
+ use_power = 1
+ idle_power_usage = 2
+ active_power_usage = 50
+
+ var
+ power = 1.0
+ code = 1.0
+ id = 1.0
+ drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
+
+
+ proc/drive(amount)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ use_power(500)
+ var/O_limit
+ var/atom/target = get_edge_target_turf(src, dir)
+ for(var/atom/movable/O in loc)
+ if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
+ O_limit++
+ if(O_limit >= 20)
+ for(var/mob/M in hearers(src, null))
+ M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items."
+ break
+ use_power(500)
+ spawn( 0 )
+ O.throw_at(target, drive_range * power, power)
+ flick("mass_driver1", src)
+ return
\ No newline at end of file
diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm
index a278fd1f1ab..bbdf011a8d9 100644
--- a/code/game/machinery/overview.dm
+++ b/code/game/machinery/overview.dm
@@ -5,8 +5,9 @@
set category = "Object"
set src in view(1)
usr.machine = src
+ if(!mapping) return
- log_game("[usr]([usr.key]) used station map L[maplevel] in [src.loc.loc]")
+ log_game("[usr]([usr.key]) used station map L[z] in [src.loc.loc]")
src.drawmap(usr)
@@ -36,7 +37,7 @@
for(var/wy = 1; wy <= world.maxy; wy++)
- var/turf/T = locate(wx, wy, maplevel)
+ var/turf/T = locate(wx, wy, z)
var/colour
var/colour2
@@ -122,8 +123,9 @@
colour = rgb(red, green, blue)
if(!colour2 && !T.density)
-
- var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
+ var/datum/gas_mixture/environment = T.return_air()
+ var/turf_total = environment.total_moles()
+ //var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
var/t1 = turf_total / MOLES_CELLSTANDARD * 150
@@ -192,7 +194,7 @@
for(var/wy = 1; wy <= world.maxy; wy++)
- var/turf/T = locate(wx, wy, maplevel)
+ var/turf/T = locate(wx, wy, z)
var/colour
@@ -284,7 +286,7 @@
//world << "icon: \icon[I]"
- I.DrawBox(colour, rx, ry, rx+1, ry+1)
+ I.DrawBox(colour, rx, ry, rx, ry)
user.clearmap()
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index b69fe67c6c0..f45e94adeab 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -20,43 +20,6 @@ AI MODULES
throw_range = 15
origin_tech = "programming=3"
-/obj/machinery/computer/aiupload/verb/AccessInternals()
- set category = "Object"
- set name = "Access Computer's Internals"
- set src in oview(1)
- if(get_dist(src, usr) > 1 || usr.restrained() || usr.lying || usr.stat || istype(usr, /mob/living/silicon))
- return
-
- opened = !opened
- if(opened)
- usr << "\blue The access panel is now open."
- else
- usr << "\blue The access panel is now closed."
- return
-
-
-/obj/machinery/computer/aiupload/attackby(obj/item/weapon/O as obj, mob/user as mob)
- if(istype(O, /obj/item/weapon/aiModule))
- var/obj/item/weapon/aiModule/M = O
- M.install(src)
- else
- ..()
-
-/obj/machinery/computer/aiupload/attack_hand(var/mob/user as mob)
- if(src.stat & NOPOWER)
- usr << "The upload computer has no power!"
- return
- if(src.stat & BROKEN)
- usr << "The upload computer is broken!"
- return
-
- src.current = activeais()
-
- if (!src.current)
- usr << "No active AIs detected."
- else
- usr << "[src.current.name] selected for law changes."
-
/obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C)
if (istype(C, /obj/machinery/computer/aiupload))
@@ -108,30 +71,6 @@ AI MODULES
usr << "Upload complete. The cyborg's laws have been modified."
-/obj/machinery/computer/borgupload/attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob)
- if(istype(module, /obj/item/weapon/aiModule))
- module.install(src)
- else
- return ..()
-
-/obj/machinery/computer/borgupload/attack_hand(var/mob/user as mob)
- if(src.stat & NOPOWER)
- usr << "The upload computer has no power!"
- return
- if(src.stat & BROKEN)
- usr << "The upload computer is broken!"
- return
-
- src.current = freeborg()
-
- if (!src.current)
- usr << "No free cyborgs detected."
- else
- usr << "[src.current.name] selected for law changes."
-
-
-
-
/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
target << "[sender] has uploaded a change to the laws you must follow, using a [name]. From now on: "
var/time = time2text(world.realtime,"hh:mm:ss")
diff --git a/code/unused/dna.dm b/code/unused/dna.dm
index 28d1393f35f..67e6e962300 100644
--- a/code/unused/dna.dm
+++ b/code/unused/dna.dm
@@ -7,6 +7,16 @@
p++
return t
+/obj/machinery/computer/dna
+ name = "DNA operations computer"
+ desc = "A Computer used to advanced DNA stuff."
+ icon_state = "dna"
+ var/obj/item/weapon/card/data/scan = null
+ var/obj/item/weapon/card/data/modify = null
+ var/obj/item/weapon/card/data/modify2 = null
+ var/mode = null
+ var/temp = null
+
/obj/machinery/computer/dna/attack_ai(mob/user as mob)
return src.attack_hand(user)
diff --git a/tgstation.dme b/tgstation.dme
index 93635ce399a..1eacddcfcd9 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -210,6 +210,7 @@
#include "code\datums\ai_laws.dm"
#include "code\datums\computerfiles.dm"
#include "code\datums\configuration.dm"
+#include "code\datums\datacore.dm"
#include "code\datums\datumvars.dm"
#include "code\datums\disease.dm"
#include "code\datums\mind.dm"
@@ -284,7 +285,6 @@
#include "code\defines\mob\living\silicon\silicon.dm"
#include "code\defines\obj\closet.dm"
#include "code\defines\obj\clothing.dm"
-#include "code\defines\obj\computer.dm"
#include "code\defines\obj\decal.dm"
#include "code\defines\obj\hydro.dm"
#include "code\defines\obj\machinery.dm"
@@ -433,6 +433,7 @@
#include "code\game\machinery\lightswitch.dm"
#include "code\game\machinery\machinery.dm"
#include "code\game\machinery\magnet.dm"
+#include "code\game\machinery\mass_driver.dm"
#include "code\game\machinery\morgue.dm"
#include "code\game\machinery\navbeacon.dm"
#include "code\game\machinery\OpTable.dm"
@@ -466,23 +467,28 @@
#include "code\game\machinery\bots\medbot.dm"
#include "code\game\machinery\bots\mulebot.dm"
#include "code\game\machinery\bots\secbot.dm"
-#include "code\game\machinery\computer\AIcore.dm"
+#include "code\game\machinery\computer\ai_core.dm"
#include "code\game\machinery\computer\aifixer.dm"
#include "code\game\machinery\computer\arcade.dm"
-#include "code\game\machinery\computer\atmos.dm"
+#include "code\game\machinery\computer\atmos_alert.dm"
#include "code\game\machinery\computer\buildandrepair.dm"
+#include "code\game\machinery\computer\camera.dm"
+#include "code\game\machinery\computer\card.dm"
#include "code\game\machinery\computer\cloning.dm"
#include "code\game\machinery\computer\communications.dm"
#include "code\game\machinery\computer\computer.dm"
#include "code\game\machinery\computer\crew.dm"
#include "code\game\machinery\computer\explosive.dm"
#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\Operating.dm"
+#include "code\game\machinery\computer\operating.dm"
+#include "code\game\machinery\computer\pod.dm"
#include "code\game\machinery\computer\power.dm"
#include "code\game\machinery\computer\robot.dm"
#include "code\game\machinery\computer\security.dm"
#include "code\game\machinery\computer\shuttle.dm"
+#include "code\game\machinery\computer\station_alert.dm"
#include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_electronics.dm"
#include "code\game\machinery\doors\brigdoors.dm"