From 5ef93b222564618b7d175d2aad3542aa2d6ec133 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Sat, 13 Jun 2015 20:07:48 +1000 Subject: [PATCH] overlays for computers --- code/game/dna.dm | 4 +- code/game/machinery/atmo_control.dm | 11 +- .../atmoalter/area_atmos_computer.dm | 3 +- .../machinery/computer/HolodeckControl.dm | 3 +- code/game/machinery/computer/Operating.dm | 5 +- code/game/machinery/computer/aifixer.dm | 30 +- code/game/machinery/computer/arcade.dm | 5 +- code/game/machinery/computer/atmos_alert.dm | 23 +- code/game/machinery/computer/camera.dm | 12 +- .../machinery/computer/camera_advanced.dm | 312 +++++----- code/game/machinery/computer/card.dm | 3 +- code/game/machinery/computer/cloning.dm | 19 +- .../game/machinery/computer/communications.dm | 3 +- code/game/machinery/computer/computer.dm | 29 +- code/game/machinery/computer/crew.dm | 3 +- code/game/machinery/computer/law.dm | 4 +- code/game/machinery/computer/medical.dm | 7 +- code/game/machinery/computer/message.dm | 17 +- code/game/machinery/computer/pod.dm | 1 - code/game/machinery/computer/power.dm | 6 +- code/game/machinery/computer/prisoner.dm | 4 +- code/game/machinery/computer/robot.dm | 4 +- code/game/machinery/computer/security.dm | 7 +- code/game/machinery/computer/shuttle.dm | 9 +- code/game/machinery/computer/station_alert.dm | 20 +- .../machinery/computer/syndicate_shuttle.dm | 7 +- .../machinery/computer/telecrystalconsoles.dm | 9 +- .../telecomms/computers/logbrowser.dm | 462 +++++++------- .../telecomms/computers/telemonitor.dm | 266 ++++---- .../telecomms/computers/traffic_control.dm | 569 +++++++++--------- code/game/machinery/teleporter.dm | 3 +- code/game/mecha/mech_bay.dm | 16 +- code/game/mecha/mecha_control_console.dm | 14 +- .../structures}/ai_core.dm | 0 code/game/objects/structures/showcase.dm | 48 +- code/modules/library/lib_machines.dm | 5 +- code/modules/mining/laborcamp/laborshuttle.dm | 2 - code/modules/power/solar.dm | 22 +- code/modules/power/turbine.dm | 6 +- code/modules/research/rdconsole.dm | 3 +- code/modules/shuttle/shuttle.dm | 4 +- icons/obj/computer.dmi | Bin 70613 -> 29561 bytes tgstation.dme | 2 +- 43 files changed, 956 insertions(+), 1026 deletions(-) rename code/game/{machinery/computer => objects/structures}/ai_core.dm (100%) diff --git a/code/game/dna.dm b/code/game/dna.dm index 128b7aa1fc6..7645552a3b8 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -497,8 +497,8 @@ /obj/machinery/computer/scan_consolenew name = "\improper DNA scanner access console" desc = "Scan DNA." - icon = 'icons/obj/computer.dmi' - icon_state = "scanner" + icon_screen = "dna" + icon_keyboard = "med_key" density = 1 circuit = /obj/item/weapon/circuitboard/scan_consolenew var/radduration = 2 diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 87eb95b4f42..be01887c3e3 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -87,11 +87,10 @@ ///////////////////////////////////////////////////////////// /obj/machinery/computer/general_air_control - icon = 'icons/obj/computer.dmi' - icon_state = "tank" + icon_screen = "tank" + icon_keyboard = "atmos_key" circuit = /obj/item/weapon/circuitboard/air_management - name = "computer" var/frequency = 1439 var/list/sensors = list() @@ -210,9 +209,6 @@ ///////////////////////////////////////////////////////////// /obj/machinery/computer/general_air_control/large_tank_control - icon = 'icons/obj/computer.dmi' - icon_state = "tank" - var/input_tag var/output_tag frequency = 1441 @@ -353,8 +349,7 @@ Rate: [volume_rate] L/sec
"} ///////////////////////////////////////////////////////////// /obj/machinery/computer/general_air_control/fuel_injection - icon = 'icons/obj/computer.dmi' - icon_state = "atmos" + icon_screen = "atmos" var/device_tag var/list/device_info diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm index cdee1763795..2063e4d72ae 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/game/machinery/atmoalter/area_atmos_computer.dm @@ -1,7 +1,8 @@ /obj/machinery/computer/area_atmos name = "area air control computer" desc = "A computer used to control the stationary scrubbers and pumps in the area." - icon_state = "area_atmos" + icon_screen = "area_atmos" + icon_keyboard = "atmos_key" circuit = "/obj/item/weapon/circuitboard/area_atmos" var/list/connectedscrubbers = new() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index bc10565b0b4..ba07b446a6a 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -1,7 +1,8 @@ /obj/machinery/computer/HolodeckControl name = "holodeck control console" desc = "A computer used to control a nearby holodeck." - icon_state = "holocontrol" + icon_screen = "holocontrol" + icon_keyboard = "tech_key" var/area/linkedholodeck = null var/area/target = null var/active = 0 diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 5e000ff76d6..e446fe82255 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -1,9 +1,8 @@ /obj/machinery/computer/operating name = "operating computer" desc = "Used to monitor the vitals of a patient during surgery." - icon_state = "operating" - density = 1 - anchored = 1.0 + icon_screen = "crew" + icon_keyboard = "med_key" circuit = /obj/item/weapon/circuitboard/operating var/mob/living/carbon/human/patient = null var/obj/structure/optable/table = null diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 35d84985fbf..35d4c641cef 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -1,17 +1,12 @@ /obj/machinery/computer/aifixer name = "\improper AI system integrity restorer" desc = "Used with intelliCards containing nonfunctioning AIs to restore them to working order." - icon = 'icons/obj/computer.dmi' - icon_state = "ai-fixer" req_access = list(access_captain, access_robotics, access_heads) var/mob/living/silicon/ai/occupier = null var/active = 0 circuit = /obj/item/weapon/circuitboard/aifixer - -/obj/machinery/computer/aifixer/New() - src.overlays += image('icons/obj/computer.dmi', "ai-fixer-empty") - ..() - + icon_keyboard = "tech_key" + icon_screen = "ai-fixer" /obj/machinery/computer/aifixer/attackby(I as obj, user as mob, params) if(occupier && istype(I, /obj/item/weapon/screwdriver)) @@ -101,7 +96,6 @@ return if (href_list["fix"]) src.active = 1 - src.overlays += image('icons/obj/computer.dmi', "ai-fixer-on") while (src.occupier.health < 100) src.occupier.adjustOxyLoss(-1) src.occupier.adjustFireLoss(-1) @@ -113,32 +107,28 @@ src.occupier.lying = 0 dead_mob_list -= src.occupier living_mob_list += src.occupier - src.overlays -= image('icons/obj/computer.dmi', "ai-fixer-404") - src.overlays += image('icons/obj/computer.dmi', "ai-fixer-full") src.updateUsrDialog() + update_icon() sleep(10) src.active = 0 - src.overlays -= image('icons/obj/computer.dmi', "ai-fixer-on") - - src.add_fingerprint(usr) src.updateUsrDialog() + update_icon() return /obj/machinery/computer/aifixer/update_icon() ..() - // Broken / Unpowered if((stat & BROKEN) || (stat & NOPOWER)) - overlays.Cut() - - // Working / Powered + return else + if(active) + overlays += "ai-fixer-on" if (occupier) switch (occupier.stat) if (0) - overlays += image('icons/obj/computer.dmi', "ai-fixer-full") + overlays += "ai-fixer-full" if (2) - overlays += image('icons/obj/computer.dmi', "ai-fixer-404") + overlays += "ai-fixer-404" else - overlays += image('icons/obj/computer.dmi', "ai-fixer-empty") + overlays += "ai-fixer-empty" diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 23f042caebf..f5b84540167 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,8 +1,9 @@ /obj/machinery/computer/arcade/ name = "random arcade" desc = "random arcade machine" - icon = 'icons/obj/computer.dmi' icon_state = "arcade" + icon_keyboard = null + icon_screen = "invaders" var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, /obj/item/toy/AI = 2, /obj/item/clothing/under/syndicate/tacticool = 2, @@ -82,7 +83,6 @@ /obj/machinery/computer/arcade/battle name = "arcade machine" desc = "Does not support Pinball." - icon = 'icons/obj/computer.dmi' icon_state = "arcade" circuit = /obj/item/weapon/circuitboard/arcade/battle var/enemy_name = "Space Villian" @@ -288,7 +288,6 @@ /obj/machinery/computer/arcade/orion_trail name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" - icon = 'icons/obj/computer.dmi' icon_state = "arcade" circuit = /obj/item/weapon/circuitboard/arcade/orion_trail var/engine = 0 diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 672624b5316..345b46e272c 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -5,7 +5,8 @@ name = "atmospheric alert console" desc = "Used to access the station's atmospheric sensors." circuit = /obj/item/weapon/circuitboard/atmos_alert - icon_state = "alert:0" + icon_screen = "alert:0" + icon_keyboard = "atmos_key" var/list/priority_alarms = list() var/list/minor_alarms = list() var/receive_frequency = 1437 @@ -61,23 +62,11 @@ src.updateDialog() /obj/machinery/computer/atmos_alert/update_icon() - SetLuminosity(brightness_on) - if(stat & BROKEN) - icon_state = "alert:b" - return - else if (stat & NOPOWER) - icon_state = "alert:O" - SetLuminosity(0) - return - else if(priority_alarms.len) - icon_state = "alert:2" - + ..() + if(priority_alarms.len) + overlays += "alert:2" else if(minor_alarms.len) - icon_state = "alert:1" - - else - icon_state = "alert:0" - return + overlays += "alert:1" /obj/machinery/computer/atmos_alert/proc/return_text() diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 4165bc0003a..10f396874eb 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -1,7 +1,8 @@ /obj/machinery/computer/security name = "security camera console" desc = "Used to access the various cameras on the station." - icon_state = "cameras" + icon_screen = "cameras" + icon_keyboard = "security_key" circuit = /obj/item/weapon/circuitboard/security var/obj/machinery/camera/current = null var/last_pic = 1.0 @@ -94,7 +95,6 @@ /obj/machinery/computer/security/telescreen/update_icon() icon_state = initial(icon_state) - SetLuminosity(brightness_on) if(stat & BROKEN) icon_state += "b" return @@ -108,16 +108,18 @@ density = 0 circuit = null - /obj/machinery/computer/security/wooden_tv name = "security camera monitor" desc = "An old TV hooked into the stations camera network." - icon_state = "security_det" + icon_state = "television" + icon_keyboard = null + icon_screen = "detective_tv" /obj/machinery/computer/security/mining name = "outpost camera console" desc = "Used to access the various cameras on the outpost." - icon_state = "miningcameras" + icon_screen = "mining" + icon_keyboard = "mining_key" network = list("MINE") circuit = "/obj/item/weapon/circuitboard/mining" diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 169100a2ab8..6c32ddfbb11 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -1,157 +1,157 @@ -/obj/machinery/computer/camera_advanced - name = "advanced camera console" - desc = "Used to access the various cameras on the station." - icon_state = "cameras" - //circuit = /obj/item/weapon/circuitboard/security - var/mob/camera/aiEye/remote/eyeobj - var/mob/living/carbon/human/current_user = null - var/list/networks = list("SS13") - var/datum/action/camera_off/off_action = new - var/datum/action/camera_jump/jump_action = new - -/obj/machinery/computer/camera_advanced/proc/CreateEye() - eyeobj = new() - eyeobj.origin = src - -/obj/machinery/computer/camera_advanced/proc/GrantActions(var/mob/living/carbon/user) - off_action.target = user - off_action.Grant(user) - jump_action.target = user - jump_action.Grant(user) - -/obj/machinery/computer/camera_advanced/check_eye(var/mob/user as mob) - if (get_dist(user, src) > 1 || user.eye_blind) - off_action.Activate() - return 0 - return 1 - -/obj/machinery/computer/camera_advanced/attack_hand(var/mob/user as mob) - if(..()) - return - if(!iscarbon(user)) - return - var/mob/living/carbon/L = user - - if(!current_user) - if(!eyeobj) - CreateEye() - GrantActions(user) - current_user = user - eyeobj.user = user - eyeobj.name = "Camere Eye ([user.name])" - L.remote_view = 1 - L.remote_control = eyeobj - L.client.perspective = EYE_PERSPECTIVE - if(!eyeobj.initialized) - for(var/obj/machinery/camera/C in cameranet.cameras) - if(!C.can_use()) - continue - if(C.network&networks) - eyeobj.setLoc(get_turf(C)) - break - eyeobj.initialized = 1 - else - eyeobj.setLoc(eyeobj.loc) - else - user << "The console is already in use!" - -/mob/camera/aiEye/remote - name = "Inactive Camera Eye" - var/sprint = 10 - var/cooldown = 0 - var/acceleration = 1 - var/mob/living/carbon/human/user = null - var/obj/machinery/computer/camera_advanced/origin - var/initialized = 0 - var/visible_icon = 0 - var/image/user_image = null - -/mob/camera/aiEye/remote/GetViewerClient() - if(user) - return user.client - return null - -/mob/camera/aiEye/remote/setLoc(var/T) - if(user) - if(!isturf(user.loc)) - return - T = get_turf(T) - loc = T - cameranet.visibility(src) - if(user.client) - if(visible_icon) - user.client.images -= user_image - user_image = image(icon,loc,icon_state,FLY_LAYER) - user.client.images += user_image - user.client.eye = src - -/mob/camera/aiEye/remote/relaymove(mob/user,direct) - var/initial = initial(sprint) - var/max_sprint = 50 - - if(cooldown && cooldown < world.timeofday) // 3 seconds - sprint = initial - - for(var/i = 0; i < max(sprint, initial); i += 20) - var/turf/step = get_turf(get_step(src, direct)) - if(step) - src.setLoc(step) - - cooldown = world.timeofday + 5 - if(acceleration) - sprint = min(sprint + 0.5, max_sprint) - else - sprint = initial - -/datum/action/camera_off - name = "End Camera View" - action_type = AB_INNATE - button_icon_state = "camera_off" - -/datum/action/camera_off/Activate() - if(!target || !iscarbon(target)) - return - var/mob/living/carbon/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - C.remote_view = 0 - remote_eye.origin.current_user = null - remote_eye.origin.jump_action.Remove(C) - if(C.client) - C.client.perspective = MOB_PERSPECTIVE - C.client.eye = src - C.client.images -= remote_eye.user_image - C.remote_control = null - C.unset_machine() - src.Remove(C) - -/datum/action/camera_jump - name = "Jump To Camera" - action_type = AB_INNATE - button_icon_state = "camera_jump" - -/datum/action/camera_jump/Activate() - if(!target || !iscarbon(target)) - return - var/mob/living/carbon/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/origin = remote_eye.origin - - var/list/L = list() - - for (var/obj/machinery/camera/cam in cameranet.cameras) - L.Add(cam) - - camera_sort(L) - - var/list/T = list() - - for (var/obj/machinery/camera/netcam in L) - var/list/tempnetwork = netcam.network&origin.networks - if (tempnetwork.len) - T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam - - - var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T - var/obj/machinery/camera/final = T[camera] - if(final) +/obj/machinery/computer/camera_advanced + name = "advanced camera console" + desc = "Used to access the various cameras on the station." + icon_screen = "cameras" + icon_keyboard = "security_key" + var/mob/camera/aiEye/remote/eyeobj + var/mob/living/carbon/human/current_user = null + var/list/networks = list("SS13") + var/datum/action/camera_off/off_action = new + var/datum/action/camera_jump/jump_action = new + +/obj/machinery/computer/camera_advanced/proc/CreateEye() + eyeobj = new() + eyeobj.origin = src + +/obj/machinery/computer/camera_advanced/proc/GrantActions(var/mob/living/carbon/user) + off_action.target = user + off_action.Grant(user) + jump_action.target = user + jump_action.Grant(user) + +/obj/machinery/computer/camera_advanced/check_eye(var/mob/user as mob) + if (get_dist(user, src) > 1 || user.eye_blind) + off_action.Activate() + return 0 + return 1 + +/obj/machinery/computer/camera_advanced/attack_hand(var/mob/user as mob) + if(..()) + return + if(!iscarbon(user)) + return + var/mob/living/carbon/L = user + + if(!current_user) + if(!eyeobj) + CreateEye() + GrantActions(user) + current_user = user + eyeobj.user = user + eyeobj.name = "Camere Eye ([user.name])" + L.remote_view = 1 + L.remote_control = eyeobj + L.client.perspective = EYE_PERSPECTIVE + if(!eyeobj.initialized) + for(var/obj/machinery/camera/C in cameranet.cameras) + if(!C.can_use()) + continue + if(C.network&networks) + eyeobj.setLoc(get_turf(C)) + break + eyeobj.initialized = 1 + else + eyeobj.setLoc(eyeobj.loc) + else + user << "The console is already in use!" + +/mob/camera/aiEye/remote + name = "Inactive Camera Eye" + var/sprint = 10 + var/cooldown = 0 + var/acceleration = 1 + var/mob/living/carbon/human/user = null + var/obj/machinery/computer/camera_advanced/origin + var/initialized = 0 + var/visible_icon = 0 + var/image/user_image = null + +/mob/camera/aiEye/remote/GetViewerClient() + if(user) + return user.client + return null + +/mob/camera/aiEye/remote/setLoc(var/T) + if(user) + if(!isturf(user.loc)) + return + T = get_turf(T) + loc = T + cameranet.visibility(src) + if(user.client) + if(visible_icon) + user.client.images -= user_image + user_image = image(icon,loc,icon_state,FLY_LAYER) + user.client.images += user_image + user.client.eye = src + +/mob/camera/aiEye/remote/relaymove(mob/user,direct) + var/initial = initial(sprint) + var/max_sprint = 50 + + if(cooldown && cooldown < world.timeofday) // 3 seconds + sprint = initial + + for(var/i = 0; i < max(sprint, initial); i += 20) + var/turf/step = get_turf(get_step(src, direct)) + if(step) + src.setLoc(step) + + cooldown = world.timeofday + 5 + if(acceleration) + sprint = min(sprint + 0.5, max_sprint) + else + sprint = initial + +/datum/action/camera_off + name = "End Camera View" + action_type = AB_INNATE + button_icon_state = "camera_off" + +/datum/action/camera_off/Activate() + if(!target || !iscarbon(target)) + return + var/mob/living/carbon/C = target + var/mob/camera/aiEye/remote/remote_eye = C.remote_control + C.remote_view = 0 + remote_eye.origin.current_user = null + remote_eye.origin.jump_action.Remove(C) + if(C.client) + C.client.perspective = MOB_PERSPECTIVE + C.client.eye = src + C.client.images -= remote_eye.user_image + C.remote_control = null + C.unset_machine() + src.Remove(C) + +/datum/action/camera_jump + name = "Jump To Camera" + action_type = AB_INNATE + button_icon_state = "camera_jump" + +/datum/action/camera_jump/Activate() + if(!target || !iscarbon(target)) + return + var/mob/living/carbon/C = target + var/mob/camera/aiEye/remote/remote_eye = C.remote_control + var/obj/machinery/computer/camera_advanced/origin = remote_eye.origin + + var/list/L = list() + + for (var/obj/machinery/camera/cam in cameranet.cameras) + L.Add(cam) + + camera_sort(L) + + var/list/T = list() + + for (var/obj/machinery/camera/netcam in L) + var/list/tempnetwork = netcam.network&origin.networks + if (tempnetwork.len) + T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam + + + var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T + var/obj/machinery/camera/final = T[camera] + if(final) remote_eye.setLoc(get_turf(final)) \ No newline at end of file diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 180f3dc2fd5..7c682ce9607 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -7,7 +7,8 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card name = "identification console" desc = "You can use this to change ID's." - icon_state = "id" + icon_screen = "id" + icon_keyboard = "id_key" req_one_access = list(access_heads, access_change_ids) circuit = /obj/item/weapon/circuitboard/card var/obj/item/weapon/card/id/scan = null diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 38489cb1497..68e5b03f423 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -2,8 +2,8 @@ /obj/machinery/computer/cloning name = "cloning console" desc = "Used to clone people and manage DNA." - icon = 'icons/obj/computer.dmi' - icon_state = "dna" + icon_screen = "dna" + icon_keyboard = "med_key" circuit = /obj/item/weapon/circuitboard/cloning req_access = list(access_heads) //Only used for record deletion right now. var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. @@ -396,17 +396,4 @@ R.fields["mind"] = "\ref[subject.mind]" src.records += R - scantemp = "Subject successfully scanned." - -/obj/machinery/computer/cloning/update_icon() - SetLuminosity(brightness_on) - if(stat & BROKEN) - icon_state = "commb" - else - if(stat & NOPOWER) - src.icon_state = "c_unpowered" - stat |= NOPOWER - SetLuminosity(0) - else - icon_state = initial(icon_state) - stat &= ~NOPOWER \ No newline at end of file + scantemp = "Subject successfully scanned." \ No newline at end of file diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index c335d4ad6f6..6e94c641b33 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -6,7 +6,8 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 /obj/machinery/computer/communications name = "communications console" desc = "This can be used for various important functions. Still under developement." - icon_state = "comm" + icon_screen = "comm" + icon_keyboard = "tech_key" req_access = list(access_heads) circuit = /obj/item/weapon/circuitboard/communications var/authenticated = 0 diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 18f8925050f..d10f991fd81 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -1,6 +1,7 @@ /obj/machinery/computer name = "computer" icon = 'icons/obj/computer.dmi' + icon_state = "computer" density = 1 anchored = 1.0 use_power = 1 @@ -9,6 +10,8 @@ var/obj/item/weapon/circuitboard/circuit = null //if circuit==null, computer can't disassembly var/processing = 0 var/brightness_on = 2 + var/icon_keyboard = "generic_key" + var/icon_screen = "generic" /obj/machinery/computer/New(location, obj/item/weapon/circuitboard/C) ..(location) @@ -18,6 +21,7 @@ if(circuit) circuit = new circuit(null) power_change() + update_icon() /obj/machinery/computer/initialize() power_change() @@ -68,23 +72,22 @@ density = 0 /obj/machinery/computer/update_icon() - ..() - icon_state = initial(icon_state) - SetLuminosity(brightness_on) - // Broken + overlays.Cut() + if(stat & NOPOWER) + overlays += "[icon_keyboard]_off" + return + overlays += icon_keyboard if(stat & BROKEN) - icon_state += "b" - - // Unpowered - else if(stat & NOPOWER) - icon_state = initial(icon_state) - icon_state += "0" - SetLuminosity(0) - - + overlays += "[icon_state]_broken" + else + overlays += icon_screen /obj/machinery/computer/power_change() ..() + if(stat & NOPOWER) + SetLuminosity(0) + else + SetLuminosity(brightness_on) update_icon() return diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 1f5862fc01c..32b7eab5df5 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -1,7 +1,8 @@ /obj/machinery/computer/crew name = "crew monitoring console" desc = "Used to monitor active health sensors built into most of the crew's uniforms." - icon_state = "crew" + icon_screen = "crew" + icon_keyboard = "med_key" use_power = 1 idle_power_usage = 250 active_power_usage = 500 diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 0ab00973dd5..875cb4403ae 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -2,7 +2,7 @@ /obj/machinery/computer/upload var/mob/living/silicon/current = null //The target of future law uploads - icon_state = null //To make sure mappers understand THIS ISN'T A VALID TYPE + icon_screen = "command" /obj/machinery/computer/upload/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/aiModule)) @@ -33,7 +33,6 @@ /obj/machinery/computer/upload/ai name = "\improper AI upload console" desc = "Used to upload laws to the AI." - icon_state = "command" circuit = /obj/item/weapon/circuitboard/aiupload /obj/machinery/computer/upload/ai/attack_hand(var/mob/user as mob) @@ -58,7 +57,6 @@ /obj/machinery/computer/upload/borg name = "cyborg upload console" desc = "Used to upload laws to Cyborgs." - icon_state = "command" circuit = /obj/item/weapon/circuitboard/borgupload /obj/machinery/computer/upload/borg/attack_hand(var/mob/user as mob) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 8a52e787827..ef0345be0e5 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -3,7 +3,8 @@ /obj/machinery/computer/med_data//TODO:SANITY name = "medical records console" desc = "This can be used to check medical records." - icon_state = "medcomp" + icon_screen = "medcomp" + icon_keyboard = "med_key" req_one_access = list(access_medical, access_forensics_lockers) circuit = /obj/item/weapon/circuitboard/med_data var/obj/item/weapon/card/id/scan = null @@ -590,4 +591,6 @@ /obj/machinery/computer/med_data/laptop name = "medical laptop" desc = "A cheap Nanotrasen medical laptop, it functions as a medical records computer. It's bolted to the table." - icon_state = "medlaptop" + icon_state = "laptop" + icon_screen = "medlaptop" + icon_keyboard = "laptop_key" diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 19b4fdd5169..5a0cab959e6 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -7,9 +7,7 @@ /obj/machinery/computer/message_monitor name = "message monitor console" desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." - icon_state = "comm_logs" - var/hack_icon = "comm_logsc" - var/normal_icon = "comm_logs" + icon_screen = "comm_logs" circuit = /obj/item/weapon/circuitboard/message_monitor //Server linked to. var/obj/machinery/message_server/linkedServer = null @@ -42,7 +40,6 @@ /obj/machinery/computer/message_monitor/emag_act(user as mob) if(!emagged) if(!isnull(src.linkedServer)) - icon_state = hack_icon // An error screen I made in the computers.dmi emagged = 1 screen = 2 spark_system.set_up(5, 0, src) @@ -56,15 +53,6 @@ else user << "A no server error appears on the screen." -/obj/machinery/computer/message_monitor/update_icon() - ..() - if(stat & (NOPOWER|BROKEN)) - return - if(emagged || hacking) - icon_state = hack_icon - else - icon_state = normal_icon - /obj/machinery/computer/message_monitor/initialize() //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. if(!linkedServer) @@ -263,11 +251,9 @@ var/currentKey = src.linkedServer.decryptkey user << "Brute-force completed! The key is '[currentKey]'." src.hacking = 0 - src.icon_state = normal_icon src.screen = 0 // Return the screen back to normal /obj/machinery/computer/message_monitor/proc/UnmagConsole() - src.icon_state = normal_icon src.emagged = 0 /obj/machinery/computer/message_monitor/proc/ResetMessage() @@ -365,7 +351,6 @@ if(issilicon(usr) && is_special_character(usr)) src.hacking = 1 src.screen = 2 - src.icon_state = hack_icon //Time it takes to bruteforce is dependant on the password length. spawn(100*length(src.linkedServer.decryptkey)) if(src && src.linkedServer && usr) diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 5b93f9e6d53..fa29854b612 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -1,7 +1,6 @@ /obj/machinery/computer/pod name = "mass driver launch control" desc = "A combined blastdoor and mass driver control unit." - icon_state = "computer_generic" var/obj/machinery/mass_driver/connected = null var/title = "Mass Driver Controls" var/id = 1 diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index 9671df6d94f..1911b1067b3 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -3,10 +3,8 @@ /obj/machinery/computer/monitor name = "power monitoring console" desc = "It monitors power levels across the station." - icon = 'icons/obj/computer.dmi' - icon_state = "power" - density = 1 - anchored = 1 + icon_screen = "power" + icon_keyboard = "power_key" use_power = 2 idle_power_usage = 20 active_power_usage = 80 diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index c021d2e158a..48e12d07b80 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -1,8 +1,8 @@ /obj/machinery/computer/prisoner name = "prisoner management console" desc = "Used to manage tracking implants placed inside criminals." - icon = 'icons/obj/computer.dmi' - icon_state = "explosive" + icon_screen = "explosive" + icon_keyboard = "security_key" req_access = list(access_brig) circuit = "/obj/item/weapon/circuitboard/prisoner" var/id = 0.0 diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 305e8d9ea58..8cb27943cf8 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -4,8 +4,8 @@ /obj/machinery/computer/robotics name = "robotics control console" desc = "Used to remotely lockdown or detonate linked Cyborgs." - icon = 'icons/obj/computer.dmi' - icon_state = "robot" + icon_screen = "robot" + icon_keyboard = "rd_key" req_access = list(access_robotics) circuit = /obj/item/weapon/circuitboard/robotics var/temp = null diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 3ac9f1abf03..ef936af78b5 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -3,7 +3,8 @@ /obj/machinery/computer/secure_data//TODO:SANITY name = "security records console" desc = "Used to view and edit personnel's security records" - icon_state = "security" + icon_screen = "security" + icon_keyboard = "security_key" req_one_access = list(access_security, access_forensics_lockers) circuit = /obj/item/weapon/circuitboard/secure_data var/obj/item/weapon/card/id/scan = null @@ -743,7 +744,3 @@ What a mess.*/ if(!record2 || record2 == active2) return 1 return 0 - -/obj/machinery/computer/secure_data/detective_computer - icon = 'icons/obj/computer.dmi' - icon_state = "messyfiles" diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 87e1389167d..b1460042e8a 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -1,7 +1,8 @@ /obj/machinery/computer/emergency_shuttle name = "emergency shuttle console" desc = "For shuttle control." - icon_state = "shuttle" + icon_screen = "shuttle" + icon_keyboard = "tech_key" var/auth_need = 3.0 var/list/authorized = list() @@ -128,8 +129,7 @@ /obj/machinery/computer/supplycomp name = "supply shuttle console" desc = "Used to order supplies." - icon = 'icons/obj/computer.dmi' - icon_state = "supply" + icon_screen = "supply" req_access = list(access_cargo) circuit = /obj/item/weapon/circuitboard/supplycomp verb_say = "flashes" @@ -150,8 +150,7 @@ /obj/machinery/computer/ordercomp name = "supply ordering console" desc = "Used to order supplies from cargo staff." - icon = 'icons/obj/computer.dmi' - icon_state = "request" + icon_screen = "request" circuit = /obj/item/weapon/circuitboard/ordercomp verb_say = "flashes" verb_ask = "flashes" diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 113ab773c84..1d2b1e5c7ce 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -2,13 +2,11 @@ /obj/machinery/computer/station_alert name = "station alert console" desc = "Used to access the station's automated alert system." - icon_state = "alert:0" + icon_screen = "alert:0" + icon_keyboard = "atmos_key" circuit = /obj/item/weapon/circuitboard/stationalert var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list()) - - - /obj/machinery/computer/station_alert/attack_hand(mob/user) if(..()) return @@ -99,20 +97,12 @@ return /obj/machinery/computer/station_alert/update_icon() - SetLuminosity(brightness_on) - if(stat & BROKEN) - icon_state = "alert:b" - return - else if (stat & NOPOWER) - icon_state = "alert:O" - SetLuminosity(0) - 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" + overlays += "alert:2" else - icon_state = "alert:0" - return \ No newline at end of file + overlays += "alert:0" \ No newline at end of file diff --git a/code/game/machinery/computer/syndicate_shuttle.dm b/code/game/machinery/computer/syndicate_shuttle.dm index d13bef052f8..8a0ee76c872 100644 --- a/code/game/machinery/computer/syndicate_shuttle.dm +++ b/code/game/machinery/computer/syndicate_shuttle.dm @@ -1,8 +1,8 @@ /obj/machinery/computer/shuttle/syndicate name = "syndicate shuttle terminal" - icon_state = "syndishuttle" + icon_screen = "syndishuttle" + icon_keyboard = "syndie_key" req_access = list(access_syndicate) - shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_z3;syndicate_z4;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" @@ -12,7 +12,8 @@ /obj/machinery/computer/shuttle/syndicate/whiteship name = "ship control terminal" - icon_state = "shuttle" + icon_screen = "shuttle" + icon_keyboard = "tech_key" shuttleId = "whiteship" req_access = list( ) possible_destinations = "whiteship_ss13;whiteship_home;whiteship_z4" \ No newline at end of file diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 79032b6f001..d20776f350c 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -7,13 +7,14 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F name = "\improper Telecrystal assignment station" desc = "A device used to manage telecrystals during group operations. You shouldn't be looking at this particular one..." icon_state = "tcstation" + icon_keyboard = "tcstation_key" + icon_screen = "syndie" ///////////////////////////////////////////// /obj/machinery/computer/telecrystals/uplinker name = "\improper Telecrystal upload/receive station" desc = "A device used to manage telecrystals during group operations. To use, simply insert your uplink. With your uplink installed \ you can upload your telecrystals to the group's pool using the console, or be assigned additional telecrystals by your lieutenant." - icon_state = "tcstation" var/obj/item/uplinkholder = null var/obj/machinery/computer/telecrystals/boss/linkedboss = null @@ -50,7 +51,7 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F /obj/machinery/computer/telecrystals/uplinker/update_icon() - overlays.Cut() + ..() if(uplinkholder) overlays += "[initial(icon_state)]-closed" @@ -126,7 +127,9 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F desc = "A device used to manage telecrystals during group operations. To use, simply initialize the machine by scanning for nearby uplink stations. \ Once the consoles are linked up, you can assign any telecrystals amongst your operatives; be they donated by your agents or rationed to the squad \ based on the danger rating of the mission." - icon_state = "tcboss" + icon_state = "computer" + icon_screen = "tcboss" + icon_keyboard = "syndie_key" var/virgin = 1 var/scanrange = 10 var/storedcrystals = 0 diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 8798f07c20c..2bb79fbc82d 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -1,232 +1,232 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/computer/telecomms/server - name = "telecommunications server monitoring console" - icon_state = "comm_logs" - - var/screen = 0 // the screen number: - var/list/servers = list() // the servers located by the computer - var/obj/machinery/telecomms/server/SelectedServer - - var/network = "NULL" // the network to probe - var/temp = "" // temporary feedback messages - - var/universal_translate = 0 // set to 1 if it can translate nonhuman speech - - req_access = list(access_tcomsat) - circuit = "/obj/item/weapon/circuitboard/comm_server" - -/obj/machinery/computer/telecomms/server/attack_hand(mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat = "Telecommunication Server Monitor
Telecommunications Server Monitor
" - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
[temp]
" - dat += "
Current Network: [network]
" - if(servers.len) - dat += "
Detected Telecommunication Servers:" - dat += "
\[Flush Buffer\]" - - else - dat += "
No servers detected. Scan for servers: \[Scan\]" - - - // --- Viewing Server --- - - if(1) - dat += "
[temp]
" - dat += "
\[Main Menu\] \[Refresh\]
" - dat += "
Current Network: [network]" - dat += "
Selected Server: [SelectedServer.id]" - - if(SelectedServer.totaltraffic >= 1024) - dat += "
Total recorded traffic: [round(SelectedServer.totaltraffic / 1024)] Terrabytes

" - else - dat += "
Total recorded traffic: [SelectedServer.totaltraffic] Gigabytes

" - - dat += "Stored Logs:
    " - - var/i = 0 - for(var/datum/comm_log_entry/C in SelectedServer.log_entries) - i++ - - - // If the log is a speech file - if(C.input_type == "Speech File") - - dat += "
  1. [C.name] \[X\]
    " - - // -- Determine race of orator -- - - var/race // The actual race of the mob - var/language = "Human" // MMIs, pAIs, Cyborgs and humans all speak Human - var/mobtype = C.parameters["mobtype"] - - var/list/humans = typesof(/mob/living/carbon/human, /mob/living/carbon/brain) - var/list/monkeys = typesof(/mob/living/carbon/monkey) - var/list/silicons = typesof(/mob/living/silicon) - var/list/slimes = typesof(/mob/living/simple_animal/slime) - var/list/animals = typesof(/mob/living/simple_animal) - - if(mobtype in humans) - race = "Human" - language = race - - else if(mobtype in slimes) // NT knows a lot about slimes, but not aliens. Can identify slimes - race = "Slime" - language = race - - else if(mobtype in monkeys) - race = "Monkey" - language = race - - else if(mobtype in silicons || C.parameters["job"] == "AI") // sometimes M gets deleted prematurely for AIs... just check the job - race = "Artificial Life" - language = race - - else if(istype(mobtype, /obj)) - race = "Machinery" - language = race - - else if(mobtype in animals) - race = "Domestic Animal" - language = race - - else - race = "Unidentifiable" - language = race - - // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- - - if(language == "Human" || universal_translate || C.parameters["uspeech"]) - dat += "Data type: [C.input_type]
    " - dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
    " - dat += "Class: [race]
    " - dat += "Contents: \"[C.parameters["message"]]\"
    " - - - // -- Orator is not human and universal translate not active -- - - else - dat += "Data type: Audio File
    " - dat += "Source: Unidentifiable
    " - dat += "Class: [race]
    " - dat += "Contents: Unintelligble
    " - - dat += "

  2. " - - else if(C.input_type == "Execution Error") - - dat += "
  3. [C.name] \[X\]
    " - dat += "Output: \"[C.parameters["message"]]\"
    " - dat += "

  4. " - - - dat += "
" - - - - user << browse(dat, "window=comm_monitor;size=575x400") - onclose(user, "server_control") - - temp = "" - return - - -/obj/machinery/computer/telecomms/server/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["viewserver"]) - screen = 1 - for(var/obj/machinery/telecomms/T in servers) - if(T.id == href_list["viewserver"]) - SelectedServer = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - servers = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("scan") - if(servers.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/server/T in range(25, src)) - if(T.network == network) - servers.Add(T) - - if(!servers.len) - temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" - else - temp = "- [servers.len] SERVERS PROBED & BUFFERED -" - - screen = 0 - - if(href_list["delete"]) - - if(!src.allowed(usr) && !emagged) - usr << "ACCESS DENIED." - return - - if(SelectedServer) - - var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])] - - temp = "- DELETED ENTRY: [D.name] -" - - SelectedServer.log_entries.Remove(D) - del(D) - - else - temp = "- FAILED: NO SELECTED MACHINE -" - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - - if(newnet && ((usr in range(1, src) || issilicon(usr)))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - - network = newnet - screen = 0 - servers = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - - updateUsrDialog() - return - -/obj/machinery/computer/telecomms/server/attackby() - ..() - src.updateUsrDialog() - return - -/obj/machinery/computer/telecomms/server/emag_act(mob/user as mob) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/obj/machinery/computer/telecomms/server + name = "telecommunications server monitoring console" + icon_screen = "comm_logs" + + var/screen = 0 // the screen number: + var/list/servers = list() // the servers located by the computer + var/obj/machinery/telecomms/server/SelectedServer + + var/network = "NULL" // the network to probe + var/temp = "" // temporary feedback messages + + var/universal_translate = 0 // set to 1 if it can translate nonhuman speech + + req_access = list(access_tcomsat) + circuit = "/obj/item/weapon/circuitboard/comm_server" + +/obj/machinery/computer/telecomms/server/attack_hand(mob/user as mob) + if(..()) + return + user.set_machine(src) + var/dat = "Telecommunication Server Monitor
Telecommunications Server Monitor
" + + switch(screen) + + + // --- Main Menu --- + + if(0) + dat += "
[temp]
" + dat += "
Current Network: [network]
" + if(servers.len) + dat += "
Detected Telecommunication Servers:" + dat += "
\[Flush Buffer\]" + + else + dat += "
No servers detected. Scan for servers: \[Scan\]" + + + // --- Viewing Server --- + + if(1) + dat += "
[temp]
" + dat += "
\[Main Menu\] \[Refresh\]
" + dat += "
Current Network: [network]" + dat += "
Selected Server: [SelectedServer.id]" + + if(SelectedServer.totaltraffic >= 1024) + dat += "
Total recorded traffic: [round(SelectedServer.totaltraffic / 1024)] Terrabytes

" + else + dat += "
Total recorded traffic: [SelectedServer.totaltraffic] Gigabytes

" + + dat += "Stored Logs:
    " + + var/i = 0 + for(var/datum/comm_log_entry/C in SelectedServer.log_entries) + i++ + + + // If the log is a speech file + if(C.input_type == "Speech File") + + dat += "
  1. [C.name] \[X\]
    " + + // -- Determine race of orator -- + + var/race // The actual race of the mob + var/language = "Human" // MMIs, pAIs, Cyborgs and humans all speak Human + var/mobtype = C.parameters["mobtype"] + + var/list/humans = typesof(/mob/living/carbon/human, /mob/living/carbon/brain) + var/list/monkeys = typesof(/mob/living/carbon/monkey) + var/list/silicons = typesof(/mob/living/silicon) + var/list/slimes = typesof(/mob/living/simple_animal/slime) + var/list/animals = typesof(/mob/living/simple_animal) + + if(mobtype in humans) + race = "Human" + language = race + + else if(mobtype in slimes) // NT knows a lot about slimes, but not aliens. Can identify slimes + race = "Slime" + language = race + + else if(mobtype in monkeys) + race = "Monkey" + language = race + + else if(mobtype in silicons || C.parameters["job"] == "AI") // sometimes M gets deleted prematurely for AIs... just check the job + race = "Artificial Life" + language = race + + else if(istype(mobtype, /obj)) + race = "Machinery" + language = race + + else if(mobtype in animals) + race = "Domestic Animal" + language = race + + else + race = "Unidentifiable" + language = race + + // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- + + if(language == "Human" || universal_translate || C.parameters["uspeech"]) + dat += "Data type: [C.input_type]
    " + dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
    " + dat += "Class: [race]
    " + dat += "Contents: \"[C.parameters["message"]]\"
    " + + + // -- Orator is not human and universal translate not active -- + + else + dat += "Data type: Audio File
    " + dat += "Source: Unidentifiable
    " + dat += "Class: [race]
    " + dat += "Contents: Unintelligble
    " + + dat += "

  2. " + + else if(C.input_type == "Execution Error") + + dat += "
  3. [C.name] \[X\]
    " + dat += "Output: \"[C.parameters["message"]]\"
    " + dat += "

  4. " + + + dat += "
" + + + + user << browse(dat, "window=comm_monitor;size=575x400") + onclose(user, "server_control") + + temp = "" + return + + +/obj/machinery/computer/telecomms/server/Topic(href, href_list) + if(..()) + return + + + add_fingerprint(usr) + usr.set_machine(src) + + if(href_list["viewserver"]) + screen = 1 + for(var/obj/machinery/telecomms/T in servers) + if(T.id == href_list["viewserver"]) + SelectedServer = T + break + + if(href_list["operation"]) + switch(href_list["operation"]) + + if("release") + servers = list() + screen = 0 + + if("mainmenu") + screen = 0 + + if("scan") + if(servers.len > 0) + temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" + + else + for(var/obj/machinery/telecomms/server/T in range(25, src)) + if(T.network == network) + servers.Add(T) + + if(!servers.len) + temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" + else + temp = "- [servers.len] SERVERS PROBED & BUFFERED -" + + screen = 0 + + if(href_list["delete"]) + + if(!src.allowed(usr) && !emagged) + usr << "ACCESS DENIED." + return + + if(SelectedServer) + + var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])] + + temp = "- DELETED ENTRY: [D.name] -" + + SelectedServer.log_entries.Remove(D) + del(D) + + else + temp = "- FAILED: NO SELECTED MACHINE -" + + if(href_list["network"]) + + var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) + + if(newnet && ((usr in range(1, src) || issilicon(usr)))) + if(length(newnet) > 15) + temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" + + else + + network = newnet + screen = 0 + servers = list() + temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" + + updateUsrDialog() + return + +/obj/machinery/computer/telecomms/server/attackby() + ..() + src.updateUsrDialog() + return + +/obj/machinery/computer/telecomms/server/emag_act(mob/user as mob) + if(!emagged) + playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 user << "You you disable the security protocols." \ No newline at end of file diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index 432604dc15e..d877489ac19 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -1,134 +1,134 @@ - -/* - Telecomms monitor tracks the overall trafficing of a telecommunications network - and displays a heirarchy of linked machines. -*/ - - -/obj/machinery/computer/telecomms/monitor - name = "telecommunications monitoring console" - icon_state = "comm_monitor" - - var/screen = 0 // the screen number: - var/list/machinelist = list() // the machines located by the computer - var/obj/machinery/telecomms/SelectedMachine - - var/network = "NULL" // the network to probe - - var/temp = "" // temporary feedback messages - circuit = "/obj/item/weapon/circuitboard/comm_monitor" - -/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat = "Telecommunications Monitor
Telecommunications Monitor
" - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
[temp]

" - dat += "
Current Network: [network]
" - if(machinelist.len) - dat += "
Detected Network Entities:" - dat += "
\[Flush Buffer\]" - else - dat += "\[Probe Network\]" - - - // --- Viewing Machine --- - - if(1) - dat += "
[temp]
" - dat += "
\[Main Menu\]
" - dat += "
Current Network: [network]
" - dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
" - dat += "Linked Entities:
    " - for(var/obj/machinery/telecomms/T in SelectedMachine.links) - if(!T.hide) - dat += "
  1. \ref[T.id] [T.name] ([T.id])
  2. " - dat += "
" - - - - user << browse(dat, "window=comm_monitor;size=575x400") - onclose(user, "server_control") - - temp = "" - return - - -/obj/machinery/computer/telecomms/monitor/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["viewmachine"]) - screen = 1 - for(var/obj/machinery/telecomms/T in machinelist) - if(T.id == href_list["viewmachine"]) - SelectedMachine = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - machinelist = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("probe") - if(machinelist.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/T in range(25, src)) - if(T.network == network) - machinelist.Add(T) - - if(!machinelist.len) - temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" - else - temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -" - - screen = 0 - - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && ((usr in range(1, src) || issilicon(usr)))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - network = newnet - screen = 0 - machinelist = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - - updateUsrDialog() - return - -/obj/machinery/computer/telecomms/monitor/attackby() - ..() - src.updateUsrDialog() - return - -/obj/machinery/computer/telecomms/monitor/emag_act(mob/user as mob) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 + +/* + Telecomms monitor tracks the overall trafficing of a telecommunications network + and displays a heirarchy of linked machines. +*/ + + +/obj/machinery/computer/telecomms/monitor + name = "telecommunications monitoring console" + icon_screen = "comm_monitor" + + var/screen = 0 // the screen number: + var/list/machinelist = list() // the machines located by the computer + var/obj/machinery/telecomms/SelectedMachine + + var/network = "NULL" // the network to probe + + var/temp = "" // temporary feedback messages + circuit = "/obj/item/weapon/circuitboard/comm_monitor" + +/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user as mob) + if(..()) + return + user.set_machine(src) + var/dat = "Telecommunications Monitor
Telecommunications Monitor
" + + switch(screen) + + + // --- Main Menu --- + + if(0) + dat += "
[temp]

" + dat += "
Current Network: [network]
" + if(machinelist.len) + dat += "
Detected Network Entities:" + dat += "
\[Flush Buffer\]" + else + dat += "\[Probe Network\]" + + + // --- Viewing Machine --- + + if(1) + dat += "
[temp]
" + dat += "
\[Main Menu\]
" + dat += "
Current Network: [network]
" + dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
" + dat += "Linked Entities:
    " + for(var/obj/machinery/telecomms/T in SelectedMachine.links) + if(!T.hide) + dat += "
  1. \ref[T.id] [T.name] ([T.id])
  2. " + dat += "
" + + + + user << browse(dat, "window=comm_monitor;size=575x400") + onclose(user, "server_control") + + temp = "" + return + + +/obj/machinery/computer/telecomms/monitor/Topic(href, href_list) + if(..()) + return + + + add_fingerprint(usr) + usr.set_machine(src) + + if(href_list["viewmachine"]) + screen = 1 + for(var/obj/machinery/telecomms/T in machinelist) + if(T.id == href_list["viewmachine"]) + SelectedMachine = T + break + + if(href_list["operation"]) + switch(href_list["operation"]) + + if("release") + machinelist = list() + screen = 0 + + if("mainmenu") + screen = 0 + + if("probe") + if(machinelist.len > 0) + temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" + + else + for(var/obj/machinery/telecomms/T in range(25, src)) + if(T.network == network) + machinelist.Add(T) + + if(!machinelist.len) + temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" + else + temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -" + + screen = 0 + + + if(href_list["network"]) + + var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) + if(newnet && ((usr in range(1, src) || issilicon(usr)))) + if(length(newnet) > 15) + temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" + + else + network = newnet + screen = 0 + machinelist = list() + temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" + + updateUsrDialog() + return + +/obj/machinery/computer/telecomms/monitor/attackby() + ..() + src.updateUsrDialog() + return + +/obj/machinery/computer/telecomms/monitor/emag_act(mob/user as mob) + if(!emagged) + playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 user << "You you disable the security protocols." \ No newline at end of file diff --git a/code/game/machinery/telecomms/computers/traffic_control.dm b/code/game/machinery/telecomms/computers/traffic_control.dm index 3edb25ff551..68d72216c4a 100644 --- a/code/game/machinery/telecomms/computers/traffic_control.dm +++ b/code/game/machinery/telecomms/computers/traffic_control.dm @@ -1,286 +1,285 @@ - - -/obj/machinery/computer/telecomms/traffic - name = "telecommunications traffic control console" - icon_state = "computer_generic" - - var/screen = 0 // the screen number: - var/list/servers = list() // the servers located by the computer - var/mob/editingcode - var/mob/lasteditor - var/list/viewingcode = list() - var/obj/machinery/telecomms/server/SelectedServer - - var/network = "NULL" // the network to probe - var/temp = "" // temporary feedback messages - - var/storedcode = "" // code stored - var/obj/item/weapon/card/id/auth = null - var/list/access_log = list() - var/process = 0 - circuit = "/obj/item/weapon/circuitboard/comm_traffic" - - req_access = list(access_tcomsat) - -/obj/machinery/computer/telecomms/traffic/proc/stop_editing() - if(editingcode) - if(editingcode.client) - winshow(editingcode, "Telecomms IDE", 0) // hide the window! - editingcode.unset_machine() - editingcode = null - -/obj/machinery/computer/telecomms/traffic/process() - - if(stat & (NOPOWER|BROKEN)) - stop_editing() - return - - if(editingcode && editingcode.machine != src) - stop_editing() - return - - if(!editingcode) - if(length(viewingcode) > 0) - editingcode = pick(viewingcode) - viewingcode.Remove(editingcode) - return - - process = !process - if(!process) - return - - // loop if there's someone manning the keyboard - if(!editingcode.client) - stop_editing() - return - - // For the typer, the input is enabled. Buffer the typed text - storedcode = "[winget(editingcode, "tcscode", "text")]" - winset(editingcode, "tcscode", "is-disabled=false") - - // If the player's not manning the keyboard anymore, adjust everything - if(!in_range(editingcode, src) && !issilicon(editingcode) || editingcode.machine != src) - winshow(editingcode, "Telecomms IDE", 0) // hide the window! - editingcode = null - return - - // For other people viewing the typer type code, the input is disabled and they can only view the code - // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once) - - if(length(viewingcode)) - // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element - var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") - showcode = replacetext(storedcode, "\"", "\\\"") - - for(var/mob/M in viewingcode) - - if( (M.machine == src && in_range(M, src) ) || issilicon(M)) - winset(M, "tcscode", "is-disabled=true") - winset(M, "tcscode", "text=\"[showcode]\"") - else - viewingcode.Remove(M) - winshow(M, "Telecomms IDE", 0) // hide the windows - - -/obj/machinery/computer/telecomms/traffic/attack_hand(mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat = "Telecommunication Traffic Control
Telecommunications Traffic Control
" - dat += "
[(auth ? "AUTHED" : "NOT AUTHED")]: [(!auth ? "Insert ID" : auth)]
" - dat += "View System Log
" - - if(issilicon(user) || auth) - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
[temp]
" - dat += "
Current Network: [network]
" - if(servers.len) - dat += "
Detected Telecommunication Servers:" - dat += "
\[Flush Buffer\]" - - else - dat += "
No servers detected. Scan for servers: \[Scan\]" - - - // --- Viewing Server --- - - if(1) - if(SelectedServer) - dat += "
[temp]
" - dat += "
\[Main Menu\] \[Refresh\]
" - dat += "
Current Network: [network]" - dat += "
Selected Server: [SelectedServer.id]

" - dat += "
\[Edit Code\]" - dat += "
Signal Execution: " - if(SelectedServer.autoruncode) - dat += "ALWAYS" - else - dat += "NEVER" - else - screen = 0 - return - - - user << browse(dat, "window=traffic_control;size=575x400") - onclose(user, "server_control") - - temp = "" - return - -/obj/machinery/computer/telecomms/traffic/proc/create_log(var/entry, var/mob/user) - var/id = null - if(issilicon(user)) - id = "System Administrator" - else - if(auth) - id = "[auth.registered_name] ([auth.assignment])" - else - ERROR("There is a null auth while the user isn't a silicon! ([user.name], [user.type])") - return - access_log += "\[[get_timestamp()]\] [id] [entry]" - -/obj/machinery/computer/telecomms/traffic/proc/print_logs() - . = "

Traffic Control Telecomms System Log


" - for(var/entry in access_log) - . += entry + "
" - return . - -/obj/machinery/computer/telecomms/traffic/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["auth"]) - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(!auth) - var/obj/item/weapon/card/id/I = C.get_active_hand() - if(istype(I)) - if(check_access(I)) - C.drop_item() - I.loc = src - auth = I - create_log("has logged in.", usr) - else - create_log("has logged out.", usr) - auth.loc = src.loc - C.put_in_hands(auth) - auth = null - updateUsrDialog() - return - - if(href_list["print"]) - usr << browse(print_logs(), "window=traffic_logs") - return - - if(!auth && !issilicon(usr) && !emagged) - usr << "ACCESS DENIED." - return - - if(href_list["viewserver"]) - screen = 1 - for(var/obj/machinery/telecomms/T in servers) - if(T.id == href_list["viewserver"]) - SelectedServer = T - create_log("selected server [T.name]", usr) - break - - - if(href_list["operation"]) - create_log("has performed action: [href_list["operation"]].", usr) - switch(href_list["operation"]) - - if("release") - servers = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("scan") - if(servers.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/server/T in range(25, src)) - if(T.network == network) - servers.Add(T) - - if(!servers.len) - temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" - else - temp = "- [servers.len] SERVERS PROBED & BUFFERED -" - - screen = 0 - - if("editcode") - if(editingcode == usr) return - if(usr in viewingcode) return - - if(!editingcode) - lasteditor = usr - editingcode = usr - winshow(editingcode, "Telecomms IDE", 1) // show the IDE - winset(editingcode, "tcscode", "is-disabled=false") - winset(editingcode, "tcscode", "text=\"\"") - var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") - showcode = replacetext(storedcode, "\"", "\\\"") - winset(editingcode, "tcscode", "text=\"[showcode]\"") - - else - viewingcode.Add(usr) - winshow(usr, "Telecomms IDE", 1) // show the IDE - winset(usr, "tcscode", "is-disabled=true") - winset(editingcode, "tcscode", "text=\"\"") - var/showcode = replacetext(storedcode, "\"", "\\\"") - winset(usr, "tcscode", "text=\"[showcode]\"") - - if("togglerun") - SelectedServer.autoruncode = !(SelectedServer.autoruncode) - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - - if(newnet && canAccess(usr)) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - - network = newnet - screen = 0 - servers = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - create_log("has set the network to [network].", usr) - - updateUsrDialog() - return - -/obj/machinery/computer/telecomms/traffic/attackby() - ..() - src.updateUsrDialog() - return - -/obj/machinery/computer/telecomms/traffic/emag_act(mob/user as mob) - if(!emagged) - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) - emagged = 1 - user << "You you disable the security protocols." - -/obj/machinery/computer/telecomms/traffic/proc/canAccess(var/mob/user) - if(issilicon(user) || in_range(user, src)) - return 1 + + +/obj/machinery/computer/telecomms/traffic + name = "telecommunications traffic control console" + + var/screen = 0 // the screen number: + var/list/servers = list() // the servers located by the computer + var/mob/editingcode + var/mob/lasteditor + var/list/viewingcode = list() + var/obj/machinery/telecomms/server/SelectedServer + + var/network = "NULL" // the network to probe + var/temp = "" // temporary feedback messages + + var/storedcode = "" // code stored + var/obj/item/weapon/card/id/auth = null + var/list/access_log = list() + var/process = 0 + circuit = "/obj/item/weapon/circuitboard/comm_traffic" + + req_access = list(access_tcomsat) + +/obj/machinery/computer/telecomms/traffic/proc/stop_editing() + if(editingcode) + if(editingcode.client) + winshow(editingcode, "Telecomms IDE", 0) // hide the window! + editingcode.unset_machine() + editingcode = null + +/obj/machinery/computer/telecomms/traffic/process() + + if(stat & (NOPOWER|BROKEN)) + stop_editing() + return + + if(editingcode && editingcode.machine != src) + stop_editing() + return + + if(!editingcode) + if(length(viewingcode) > 0) + editingcode = pick(viewingcode) + viewingcode.Remove(editingcode) + return + + process = !process + if(!process) + return + + // loop if there's someone manning the keyboard + if(!editingcode.client) + stop_editing() + return + + // For the typer, the input is enabled. Buffer the typed text + storedcode = "[winget(editingcode, "tcscode", "text")]" + winset(editingcode, "tcscode", "is-disabled=false") + + // If the player's not manning the keyboard anymore, adjust everything + if(!in_range(editingcode, src) && !issilicon(editingcode) || editingcode.machine != src) + winshow(editingcode, "Telecomms IDE", 0) // hide the window! + editingcode = null + return + + // For other people viewing the typer type code, the input is disabled and they can only view the code + // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once) + + if(length(viewingcode)) + // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element + var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") + showcode = replacetext(storedcode, "\"", "\\\"") + + for(var/mob/M in viewingcode) + + if( (M.machine == src && in_range(M, src) ) || issilicon(M)) + winset(M, "tcscode", "is-disabled=true") + winset(M, "tcscode", "text=\"[showcode]\"") + else + viewingcode.Remove(M) + winshow(M, "Telecomms IDE", 0) // hide the windows + + +/obj/machinery/computer/telecomms/traffic/attack_hand(mob/user as mob) + if(..()) + return + user.set_machine(src) + var/dat = "Telecommunication Traffic Control
Telecommunications Traffic Control
" + dat += "
[(auth ? "AUTHED" : "NOT AUTHED")]: [(!auth ? "Insert ID" : auth)]
" + dat += "View System Log
" + + if(issilicon(user) || auth) + + switch(screen) + + + // --- Main Menu --- + + if(0) + dat += "
[temp]
" + dat += "
Current Network: [network]
" + if(servers.len) + dat += "
Detected Telecommunication Servers:" + dat += "
\[Flush Buffer\]" + + else + dat += "
No servers detected. Scan for servers: \[Scan\]" + + + // --- Viewing Server --- + + if(1) + if(SelectedServer) + dat += "
[temp]
" + dat += "
\[Main Menu\] \[Refresh\]
" + dat += "
Current Network: [network]" + dat += "
Selected Server: [SelectedServer.id]

" + dat += "
\[Edit Code\]" + dat += "
Signal Execution: " + if(SelectedServer.autoruncode) + dat += "ALWAYS" + else + dat += "NEVER" + else + screen = 0 + return + + + user << browse(dat, "window=traffic_control;size=575x400") + onclose(user, "server_control") + + temp = "" + return + +/obj/machinery/computer/telecomms/traffic/proc/create_log(var/entry, var/mob/user) + var/id = null + if(issilicon(user)) + id = "System Administrator" + else + if(auth) + id = "[auth.registered_name] ([auth.assignment])" + else + ERROR("There is a null auth while the user isn't a silicon! ([user.name], [user.type])") + return + access_log += "\[[get_timestamp()]\] [id] [entry]" + +/obj/machinery/computer/telecomms/traffic/proc/print_logs() + . = "

Traffic Control Telecomms System Log


" + for(var/entry in access_log) + . += entry + "
" + return . + +/obj/machinery/computer/telecomms/traffic/Topic(href, href_list) + if(..()) + return + + + add_fingerprint(usr) + usr.set_machine(src) + + if(href_list["auth"]) + if(iscarbon(usr)) + var/mob/living/carbon/C = usr + if(!auth) + var/obj/item/weapon/card/id/I = C.get_active_hand() + if(istype(I)) + if(check_access(I)) + C.drop_item() + I.loc = src + auth = I + create_log("has logged in.", usr) + else + create_log("has logged out.", usr) + auth.loc = src.loc + C.put_in_hands(auth) + auth = null + updateUsrDialog() + return + + if(href_list["print"]) + usr << browse(print_logs(), "window=traffic_logs") + return + + if(!auth && !issilicon(usr) && !emagged) + usr << "ACCESS DENIED." + return + + if(href_list["viewserver"]) + screen = 1 + for(var/obj/machinery/telecomms/T in servers) + if(T.id == href_list["viewserver"]) + SelectedServer = T + create_log("selected server [T.name]", usr) + break + + + if(href_list["operation"]) + create_log("has performed action: [href_list["operation"]].", usr) + switch(href_list["operation"]) + + if("release") + servers = list() + screen = 0 + + if("mainmenu") + screen = 0 + + if("scan") + if(servers.len > 0) + temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" + + else + for(var/obj/machinery/telecomms/server/T in range(25, src)) + if(T.network == network) + servers.Add(T) + + if(!servers.len) + temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" + else + temp = "- [servers.len] SERVERS PROBED & BUFFERED -" + + screen = 0 + + if("editcode") + if(editingcode == usr) return + if(usr in viewingcode) return + + if(!editingcode) + lasteditor = usr + editingcode = usr + winshow(editingcode, "Telecomms IDE", 1) // show the IDE + winset(editingcode, "tcscode", "is-disabled=false") + winset(editingcode, "tcscode", "text=\"\"") + var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") + showcode = replacetext(storedcode, "\"", "\\\"") + winset(editingcode, "tcscode", "text=\"[showcode]\"") + + else + viewingcode.Add(usr) + winshow(usr, "Telecomms IDE", 1) // show the IDE + winset(usr, "tcscode", "is-disabled=true") + winset(editingcode, "tcscode", "text=\"\"") + var/showcode = replacetext(storedcode, "\"", "\\\"") + winset(usr, "tcscode", "text=\"[showcode]\"") + + if("togglerun") + SelectedServer.autoruncode = !(SelectedServer.autoruncode) + + if(href_list["network"]) + + var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) + + if(newnet && canAccess(usr)) + if(length(newnet) > 15) + temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" + + else + + network = newnet + screen = 0 + servers = list() + temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" + create_log("has set the network to [network].", usr) + + updateUsrDialog() + return + +/obj/machinery/computer/telecomms/traffic/attackby() + ..() + src.updateUsrDialog() + return + +/obj/machinery/computer/telecomms/traffic/emag_act(mob/user as mob) + if(!emagged) + playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + emagged = 1 + user << "You you disable the security protocols." + +/obj/machinery/computer/telecomms/traffic/proc/canAccess(var/mob/user) + if(issilicon(user) || in_range(user, src)) + return 1 return 0 \ No newline at end of file diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 1ec4c229900..f84caabafdc 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -1,7 +1,8 @@ /obj/machinery/computer/teleporter name = "Teleporter Control Console" desc = "Used to control a linked teleportation Hub and Station." - icon_state = "teleport" + icon_screen = "teleport" + icon_keyboard = "teleport_key" circuit = "/obj/item/weapon/circuitboard/teleporter" var/obj/item/device/gps/locked = null var/regime_set = "Teleporter" diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 08f454d379a..d2c467765a4 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -81,10 +81,8 @@ /obj/machinery/computer/mech_bay_power_console name = "mech bay power control console" desc = "Used to control mechbay power ports." - density = 1 - anchored = 1 - icon = 'icons/obj/computer.dmi' - icon_state = "recharge_comp" + icon_screen = "recharge_comp" + icon_keyboard = "rd_key" circuit = /obj/item/weapon/circuitboard/mech_bay_power_console var/obj/machinery/mech_bay_recharge_port/recharge_port @@ -147,16 +145,10 @@ /obj/machinery/computer/mech_bay_power_console/update_icon() - if(stat & NOPOWER) - icon_state = "recharge_comp0" - return - if(stat & BROKEN) - icon_state = "recharge_compb" - return + ..() if(!recharge_port || !recharge_port.recharging_mech || !recharge_port.recharging_mech.cell || !(recharge_port.recharging_mech.cell.charge < recharge_port.recharging_mech.cell.maxcharge)) - icon_state = "recharge_comp" return - icon_state = "recharge_comp_on" + overlays += "recharge_comp_on" /obj/machinery/computer/mech_bay_power_console/initialize() reconnect() diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index b8bbbc23481..adc83c8da0d 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -1,8 +1,8 @@ /obj/machinery/computer/mecha name = "exosuit control console" desc = "Used to remotely locate or lockdown exosuits." - icon = 'icons/obj/computer.dmi' - icon_state = "mecha" + icon_screen = "mecha" + icon_keyboard = "tech_key" req_access = list(access_robotics) circuit = "/obj/item/weapon/circuitboard/mecha_control" var/list/located = list() @@ -58,16 +58,6 @@ updateUsrDialog() return - -/obj/machinery/computer/mecha/update_icon() - if(stat & NOPOWER) - icon_state = "mecha0" - return - if(stat & BROKEN) - icon_state = "mechab" - return - icon_state = "mecha" - /obj/item/mecha_parts/mecha_tracking name = "exosuit tracking beacon" desc = "Device used to transmit exosuit data." diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/objects/structures/ai_core.dm similarity index 100% rename from code/game/machinery/computer/ai_core.dm rename to code/game/objects/structures/ai_core.dm diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 3a5be7f1b01..e32ef9952a4 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -1,20 +1,28 @@ -/*Completely generic structures for use by mappers to create fake objects, i.e. display rooms*/ -/obj/structure/showcase - name = "showcase" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "showcase_1" - desc = "A stand with the empty body of a cyborg bolted to it." - density = 1 - anchored = 1 - -/obj/structure/showcase/fakeid - name = "\improper Centcom identification console" - desc = "You can use this to change ID's." - icon = 'icons/obj/computer.dmi' - icon_state = "id" - -/obj/structure/showcase/fakesec - name = "\improper Centcom security records" - desc = "Used to view and edit personnel's security records" - icon = 'icons/obj/computer.dmi' - icon_state = "security" \ No newline at end of file +/*Completely generic structures for use by mappers to create fake objects, i.e. display rooms*/ +/obj/structure/showcase + name = "showcase" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "showcase_1" + desc = "A stand with the empty body of a cyborg bolted to it." + density = 1 + anchored = 1 + +/obj/structure/showcase/fakeid + name = "\improper Centcom identification console" + desc = "You can use this to change ID's." + icon = 'icons/obj/computer.dmi' + icon_state = "computer" + +/obj/structure/showcase/fakeid/New() + overlays += "id" + overlays += "id_key" + +/obj/structure/showcase/fakesec + name = "\improper Centcom security records" + desc = "Used to view and edit personnel's security records" + icon = 'icons/obj/computer.dmi' + icon_state = "computer" + +/obj/structure/showcase/fakesec/New() + overlays += "security" + overlays += "security_key" \ No newline at end of file diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 254b383c7a4..c9d885d8f29 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -16,8 +16,9 @@ */ /obj/machinery/computer/libraryconsole name = "library visitor console" - icon = 'icons/obj/computer.dmi' - icon_state = "library" + icon_state = "oldcomp" + icon_screen = "library" + icon_keyboard = null circuit = /obj/item/weapon/circuitboard/libraryconsole var/screenstate = 0 var/title diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index 7f0992a502f..079eaeab8dd 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -1,8 +1,6 @@ /obj/machinery/computer/shuttle/labor name = "labor shuttle console" desc = "Used to call and send the labor camp shuttle." - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" circuit = /obj/item/weapon/circuitboard/labor_shuttle shuttleId = "laborcamp" possible_destinations = "laborcamp_home;laborcamp_away" diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 77c4aa75751..1c8838e4311 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -274,11 +274,13 @@ name = "solar panel control" desc = "A controller for solar panel arrays." icon = 'icons/obj/computer.dmi' - icon_state = "solar" + icon_state = "computer" anchored = 1 density = 1 use_power = 1 idle_power_usage = 250 + var/icon_screen = "solar" + var/icon_keyboard = "power_key" var/id = 0 var/cdir = 0 var/targetdir = 0 // target angle in manual tracking (since it updates every game minute) @@ -351,19 +353,17 @@ set_panels(cdir) /obj/machinery/power/solar_control/update_icon() - if(stat & BROKEN) - icon_state = "broken" - overlays.Cut() - return - if(stat & NOPOWER) - icon_state = "c_unpowered" - overlays.Cut() - return - icon_state = "solar" overlays.Cut() + if(stat & NOPOWER) + overlays += "[icon_keyboard]_off" + return + overlays += icon_keyboard + if(stat & BROKEN) + overlays += "[icon_state]_broken" + else + overlays += icon_screen if(cdir > -1) overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)) - return /obj/machinery/power/solar_control/attack_hand(mob/user) if(!..()) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 86e3930b58a..405880f4249 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -56,10 +56,8 @@ /obj/machinery/computer/turbine_computer name = "gas turbine control computer" desc = "A computer to remotely control a gas turbine" - icon = 'icons/obj/computer.dmi' - icon_state = "turbinecomp" - anchored = 1 - density = 1 + icon_screen = "turbinecomp" + icon_keyboard = "tech_key" circuit = /obj/item/weapon/circuitboard/turbine_computer var/obj/machinery/power/compressor/compressor var/id = 0 diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d076c813158..06ad949f29d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -31,7 +31,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole name = "R&D Console" - icon_state = "rdcomp" + icon_screen = "rdcomp" + icon_keyboard = "rd_key" circuit = /obj/item/weapon/circuitboard/rdconsole var/datum/research/files //Stores all the collected research data. var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk. diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index b60a0d7bfe5..27dac665e03 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -482,8 +482,8 @@ /obj/machinery/computer/shuttle name = "Shuttle Console" - icon = 'icons/obj/computer.dmi' - icon_state = "shuttle" + icon_screen = "shuttle" + icon_keyboard = "tech_key" req_access = list( ) circuit = /obj/item/weapon/circuitboard/shuttle var/shuttleId diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index 4a7846286daa55d8e81df94ec84825fe8403d8fd..567fa80e5a755f297a0264466353737b7fecb352 100644 GIT binary patch literal 29561 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 P4WO;@P`yIcHsb#P=(Kmg literal 70613 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ⅈ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�Q#>G(d<%_gmsLq4({ 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 X*q=Ic3=$y>0Y5iXHLm8VnECxb)T`Q^ diff --git a/tgstation.dme b/tgstation.dme index 42c59cb7caa..5f44fac3287 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -431,7 +431,6 @@ #include "code\game\machinery\camera\motion.dm" #include "code\game\machinery\camera\presets.dm" #include "code\game\machinery\camera\tracking.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_alert.dm" @@ -685,6 +684,7 @@ #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\items\weapons\tanks\watertank.dm" +#include "code\game\objects\structures\ai_core.dm" #include "code\game\objects\structures\artstuff.dm" #include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bedsheet_bin.dm"