From 0f9343bbe35d1e788e3b2effc6589079153fa551 Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Tue, 8 Apr 2025 17:41:47 -0400 Subject: [PATCH] Adds a notification to silicon/drones being watched (#90471) ## About The Pull Request Cyborgs now have an alert that shows when someone is watching their internal camera through a security camera console. SyndEye is excluded from this as it's spying instead. Made as an alternative to https://github.com/tgstation/tgstation/pull/90410 but they also aren't mutually exclusive, though I have the same fix for borg camera cutting in this one too. https://github.com/user-attachments/assets/5dfe92f8-8948-4a80-bb64-cbeaca4f80e0 ##### This is part of the same code bounty as https://github.com/tgstation/tgstation/pull/90410 ## Why It's Good For The Game Pretty much the same reason this PR is an alternative to, it's hard for borgs to get away with doing antagonist stuff when people are able to silently watch them at any point from any console or laptop laying around the station, of which there are many. This hopefully lets borgs know if someone is watching, to avoid doing anything in front of the cameras, and to encourage them to get said cameras cut if they plan on doing anything. ## Changelog :cl: add: Drones now have internal cameras that shows up on camera consoles (like Cyborgs) balance: Cyborgs (and drones) now get a notification when someone is watching them through a security camera console. fix: Cutting a Cyborg's camera wire now properly disables it, and mending it now properly re-enables it. /:cl: --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> --- code/__DEFINES/alerts.dm | 2 + code/datums/wires/robot.dm | 9 +++-- code/game/machinery/camera/camera.dm | 10 ++++- code/game/machinery/camera/silicon_camera.dm | 38 ++++++++++++++++++ code/game/machinery/computer/camera.dm | 8 ++-- code/modules/mob/living/basic/drone/_drone.dm | 14 +++++++ code/modules/mob/living/silicon/ai/ai.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 6 +-- code/modules/mob/living/silicon/silicon.dm | 2 +- .../file_system/programs/secureye.dm | 27 ++++++++++--- icons/hud/screen_alert.dmi | Bin 176600 -> 177118 bytes tgstation.dme | 1 + 12 files changed, 101 insertions(+), 20 deletions(-) create mode 100644 code/game/machinery/camera/silicon_camera.dm diff --git a/code/__DEFINES/alerts.dm b/code/__DEFINES/alerts.dm index ad68b1d5595..662711610ee 100644 --- a/code/__DEFINES/alerts.dm +++ b/code/__DEFINES/alerts.dm @@ -71,3 +71,5 @@ #define ALERT_BITRUNNER_THREAT "bitrunning_threat" #define ALERT_BITRUNNER_BREACH "bitrunning_breach" #define ALERT_BITRUNNER_GLITCH "bitrunning_glitch" + +#define ALERT_SILICON_RECORDING "silicon_recording" diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index 2a45b8e2b3d..8696b4fe775 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -79,7 +79,7 @@ if(R.shell) R.undeploy() R.set_connected_ai(null) - R.logevent("AI connection fault [mend?"cleared":"detected"]") + R.logevent("AI connection fault [mend ? "cleared" : "detected"]") if(WIRE_LAWSYNC) // Cut the law wire, and the borg will no longer receive law updates from its AI. Repair and it will re-sync. if(mend) if(!R.emagged) @@ -91,11 +91,12 @@ R.logevent("Lawsync Module fault [mend ? "cleared" : "detected"]") if (WIRE_CAMERA) // Disable the camera. if(!QDELETED(R.builtInCamera) && !R.scrambledcodes) - R.builtInCamera.camera_enabled = mend + var/fixing_camera = !mend + R.builtInCamera.camera_enabled = fixing_camera R.builtInCamera.toggle_cam(usr, 0) R.visible_message(span_notice("[R]'s camera lens focuses loudly."), span_notice("Your camera lens focuses loudly.")) - R.logevent("Camera Module fault [mend?"cleared":"detected"]") - log_silicon("[key_name(usr)] [mend ? "enabled" : "disabled"] [key_name(R)]'s camera via wire") + R.logevent("Camera Module fault [fixing_camera ? "cleared" : "detected"]") + log_silicon("[key_name(usr)] [fixing_camera ? "enabled" : "disabled"] [key_name(R)]'s camera via wire") if(WIRE_LOCKDOWN) // Simple lockdown. R.SetLockdown(!mend) R.logevent("Motor Controller fault [mend?"cleared":"detected"]") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 2834ffbd7e6..724f9f55684 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -70,7 +70,7 @@ var/alarm_on = FALSE ///How many times this camera has been EMP'ed consecutively, will reset back to 0 when fixed. var/emped - ///Boolean on whether the AI can even turn on this camera's light- borg caneras dont have one, for example. + ///Boolean on whether the AI can even turn on this camera's light- borg cameras dont have one, for example. var/internal_light = TRUE ///Number of AIs watching this camera with lights on, used for icons. var/in_use_lights = 0 @@ -444,3 +444,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) else user.clear_sight(SEE_TURFS|SEE_MOBS|SEE_OBJS) return TRUE + +///Called when the camera starts being watched on a camera console. +/obj/machinery/camera/proc/on_start_watching() + return + +///Called when the camera stops being watched on a camera console. +/obj/machinery/camera/proc/on_stop_watching() + return diff --git a/code/game/machinery/camera/silicon_camera.dm b/code/game/machinery/camera/silicon_camera.dm new file mode 100644 index 00000000000..62f59171134 --- /dev/null +++ b/code/game/machinery/camera/silicon_camera.dm @@ -0,0 +1,38 @@ +///Special type of camera installed into silicons (drones included) that gives an alert when someone is watching them through cameras. +/obj/machinery/camera/silicon + network = list(CAMERANET_NETWORK_SS13) + internal_light = FALSE + start_active = TRUE + ///Reference to the host (drone, silicon) that we're a host of. + var/mob/living/living_host + ///Lazylist of sources watching the camera through consoles. + var/list/sources_watching + +/obj/machinery/camera/silicon/Initialize(mapload) + . = ..() + if(!isliving(loc)) + return INITIALIZE_HINT_QDEL + living_host = loc + +/obj/machinery/camera/silicon/Destroy() + if(!isnull(living_host)) + if(living_host.has_alert(ALERT_SILICON_RECORDING)) + living_host.clear_alert(ALERT_SILICON_RECORDING) + living_host = null + sources_watching = null + return ..() + +/obj/machinery/camera/silicon/on_start_watching(datum/source) + LAZYADD(sources_watching, source) + living_host.throw_alert(ALERT_SILICON_RECORDING, /atom/movable/screen/alert/being_recorded) + +/obj/machinery/camera/silicon/on_stop_watching(datum/no_longer_watching) + LAZYREMOVE(sources_watching, no_longer_watching) + if(!LAZYLEN(sources_watching) && living_host.has_alert(ALERT_SILICON_RECORDING)) + living_host.clear_alert(ALERT_SILICON_RECORDING) + +///The alert given to silicons being watched. +/atom/movable/screen/alert/being_recorded + icon_state = "recording" + name = "Recorded" + desc = "Someone is currently watching your internal camera through a camera console." diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 991d0cb3f06..8725bda22f5 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -7,6 +7,7 @@ icon_keyboard = "security_key" circuit = /obj/item/circuitboard/computer/security light_color = COLOR_SOFT_RED + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_SIGHT var/list/network = list(CAMERANET_NETWORK_SS13) var/obj/machinery/camera/active_camera @@ -17,8 +18,6 @@ // Stuff needed to render the map var/atom/movable/screen/map_view/camera/cam_screen - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_SIGHT - /obj/machinery/computer/security/Initialize(mapload) . = ..() // Map name has to start and end with an A-Z character, @@ -99,12 +98,14 @@ return if(action == "switch_camera") + active_camera?.on_stop_watching(src) var/obj/machinery/camera/selected_camera = locate(params["camera"]) in GLOB.cameranet.cameras active_camera = selected_camera if(isnull(active_camera)) return TRUE + active_camera.on_start_watching(src) update_active_camera_screen() return TRUE @@ -149,9 +150,10 @@ // Living creature or not, we remove you anyway. concurrent_users -= user_ref // Unregister map objects - cam_screen.hide_from(user) + cam_screen?.hide_from(user) // Turn off the console if(length(concurrent_users) == 0 && is_living) + active_camera?.on_stop_watching(src) active_camera = null last_camera_turf = null playsound(src, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE) diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index 8807f35e038..61650ce9387 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -70,6 +70,8 @@ var/obj/item/default_storage = /obj/item/storage/drone_tools /// Default [/mob/living/basic/drone/var/head] item var/obj/item/default_headwear + ///The camera built into the drone which allows it to be seen through cameras. + var/obj/machinery/camera/silicon/built_in_camera /** * icon_state of drone from icons/mobs/drone.dmi * @@ -180,6 +182,12 @@ AddComponent(/datum/component/simple_access, SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL))) AddComponent(/datum/component/personal_crafting) // Kind of hard to be a drone and not be able to make tiles + //only shy drones (so all the station ones) gets a camera. + if(shy) + built_in_camera = new(src) + built_in_camera.c_tag = real_name + built_in_camera.network = list(CAMERANET_NETWORK_SS13) + if(default_storage) var/obj/item/storage = new default_storage(src) equip_to_slot_or_del(storage, ITEM_SLOT_DEX_STORAGE) @@ -236,6 +244,7 @@ /mob/living/basic/drone/Destroy() GLOB.drones_list -= src QDEL_NULL(listener) + QDEL_NULL(built_in_camera) return ..() /mob/living/basic/drone/Login() @@ -391,3 +400,8 @@ /mob/living/basic/drone/electrocute_act(shock_damage, source, siemens_coeff, flags = NONE) return FALSE //So they don't die trying to fix wiring + +/mob/living/basic/drone/can_track(mob/living/user) + if(built_in_camera?.can_use()) + return TRUE + return ..() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 349a3f71535..73de0cc05dc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -77,8 +77,8 @@ GLOB.ai_list += src GLOB.shuttle_caller_list += src - builtInCamera = new (src) - builtInCamera.network = list(CAMERANET_NETWORK_SS13) + //They aren't given a c_tag so they don't show up in camera consoles + builtInCamera = new(src) ai_tracking_tool = new(src) RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index fb337b8df09..a9100f82de4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -48,12 +48,10 @@ lawupdate = FALSE if(!scrambledcodes && !builtInCamera) - builtInCamera = new (src) + builtInCamera = new(src) builtInCamera.c_tag = real_name - builtInCamera.network = list(CAMERANET_NETWORK_SS13) - builtInCamera.internal_light = FALSE if(wires.is_cut(WIRE_CAMERA)) - builtInCamera.camera_enabled = 0 + builtInCamera.camera_enabled = FALSE update_icons() . = ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 5b8af577a20..e1672785be5 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -42,7 +42,7 @@ var/list/silicon_huds = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_SECURITY_ADVANCED, DATA_HUD_DIAGNOSTIC) var/law_change_counter = 0 - var/obj/machinery/camera/builtInCamera = null + var/obj/machinery/camera/silicon/builtInCamera var/updating = FALSE //portable camera camerachunk update ///Whether we have been emagged var/emagged = FALSE diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index 0c3208ee203..4a90f25f5b0 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -30,7 +30,7 @@ // Stuff needed to render the map var/atom/movable/screen/map_view/camera/cam_screen - ///Internal tracker used to find a specific person and keep them on cameras. + ///Internal tracker used to find a specific person and keep them on cameras, only used if this is a 'spying' console. var/datum/trackable/internal_tracker ///Syndicate subtype that has no access restrictions and is available on Syndinet @@ -52,13 +52,21 @@ ) spying = TRUE +///Human AI subtype that has access to most networks on the station and can't be copied. /datum/computer_file/program/secureye/human_ai filename = "Overseer" filedesc = "OverSeer" run_access = list(ACCESS_MINISAT) can_run_on_flags = PROGRAM_PDA program_flags = PROGRAM_UNIQUE_COPY - network = list("ss13", "mine", "rd", "labor", "ordnance", "minisat") + network = list( + CAMERANET_NETWORK_SS13, + CAMERANET_NETWORK_MINE, + CAMERANET_NETWORK_RD, + CAMERANET_NETWORK_LABOR, + CAMERANET_NETWORK_ORDNANCE, + CAMERANET_NETWORK_MINISAT, + ) spying = TRUE /datum/computer_file/program/secureye/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) @@ -130,15 +138,21 @@ return switch(action) if("switch_camera") + var/obj/machinery/camera/active_camera = camera_ref?.resolve() + if(!spying && active_camera) + active_camera.on_stop_watching(src) + + if(!spying) + playsound(computer, SFX_TERMINAL_TYPE, 25, FALSE) + var/obj/machinery/camera/selected_camera = locate(params["camera"]) in GLOB.cameranet.cameras if(selected_camera) camera_ref = WEAKREF(selected_camera) else camera_ref = null - if(!spying) - playsound(computer, SFX_TERMINAL_TYPE, 25, FALSE) - if(isnull(camera_ref)) return TRUE + if(!spying) + selected_camera.on_start_watching(src) if(internal_tracker) internal_tracker.reset_tracking() @@ -181,6 +195,9 @@ cam_screen.hide_from(user) // Turn off the console if(length(concurrent_users) == 0 && is_living) + var/obj/machinery/camera/active_camera = camera_ref?.resolve() + if(!spying && active_camera) + active_camera.on_stop_watching(src) camera_ref = null last_camera_turf = null if(!spying) diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 8e6bdfd01b16a43e05ba1697625d89c0029e4854..8ebfdd14b4e70bbe0c547649f38aaef25859fe7a 100755 GIT binary patch delta 21020 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 delta 20501 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 diff --git a/tgstation.dme b/tgstation.dme index 630f3d8586c..106d274a667 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2319,6 +2319,7 @@ #include "code\game\machinery\camera\camera_construction.dm" #include "code\game\machinery\camera\motion.dm" #include "code\game\machinery\camera\presets.dm" +#include "code\game\machinery\camera\silicon_camera.dm" #include "code\game\machinery\camera\trackable.dm" #include "code\game\machinery\computer\_computer.dm" #include "code\game\machinery\computer\accounting.dm"