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 += "Remove [target_name] || " + header += "Remove [scan_name]
" + header += "Access Crew Manifest || " + header += "Log Out
" + + 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 += "" + carddesc += "" + carddesc += "Registered: " + 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 += "" + accesses += "" + for(var/i = 1; i <= 7; i++) + accesses += "" + accesses += "" + for(var/i = 1; i <= 7; i++) + accesses += "" + accesses += "
[get_region_accesses_name(i)]:
" + for(var/A in get_region_accesses(i)) + if(A in modify.access) + accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] " + else + accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] " + accesses += "
" + 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 += "Remove [target_name] || " - header += "Remove [scan_name]
" - header += "Access Crew Manifest || " - header += "Log Out
" - - 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 += "" - carddesc += "" - carddesc += "Registered: " - 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 += "" - accesses += "" - for(var/i = 1; i <= 7; i++) - accesses += "" - accesses += "" - for(var/i = 1; i <= 7; i++) - accesses += "" - accesses += "
[get_region_accesses_name(i)]:
" - for(var/A in get_region_accesses(i)) - if(A in modify.access) - accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] " - else - accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] " - accesses += "
" - 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 += "" 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 += "" + else + t += "" switch(C.sensor_mode) if(1) - if(H.wear_id) - t += "" + t+= "" if(2) - if(H.wear_id) - t += "" + t += "" if(3) - t += "" + t += "" t += "
NameVitalsPosition
[H.wear_id.name]
Unknown:
[H.wear_id.name]" - else - t += "
Unknown:" - t+= "[H.stat > 1 ? "Deceased" : "Living"]Not Available
[H.stat > 1 ? "Deceased" : "Living"]Not Available
[H.wear_id.name]" - else - t += "
Unknown:" - t += "[H.stat > 1 ? "Deceased" : "Living"], [dam1] - [dam2] - [dam3] - [dam4]Not Available
[H.stat > 1 ? "Deceased" : "Living"], [dam1] - [dam2] - [dam3] - [dam4]Not Available
[H.name][H.stat > 1 ? "Deceased" : "Living"], [dam2] - [dam2] - [dam3] - [dam4][get_area(H)] ([H.x], [H.y])
[H.stat > 1 ? "Deceased" : "Living"], [dam2] - [dam2] - [dam3] - [dam4][get_area(H)] ([H.x], [H.y])
" 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"