From c3f23edfc0b73bfcc3c092183f8bac4c40c4ea23 Mon Sep 17 00:00:00 2001 From: Timberpoes Date: Sat, 8 Aug 2020 15:52:00 +0100 Subject: [PATCH] Re-enables cyborg cameras through camera consoles and AI eye vision. (#52767) * Better camera logic * AI eye cameras can see through borgo cams * Switch that to being able to see through any silicon's camera * Switch that to being able to see through any silicon's camera * Disable borgo camera at high damage * Rohesie-proof some code --- code/game/machinery/computer/camera.dm | 18 +++++++++++------- .../mob/living/silicon/ai/freelook/chunk.dm | 4 ++++ .../mob/living/silicon/robot/inventory.dm | 10 +++++++++- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index dee90f20b11..7859eb8a6dc 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -114,20 +114,24 @@ if(action == "switch_camera") var/c_tag = params["name"] var/list/cameras = get_available_cameras() - var/obj/machinery/camera/C = cameras[c_tag] - active_camera = C + var/obj/machinery/camera/selected_camera = cameras[c_tag] + active_camera = selected_camera playsound(src, get_sfx("terminal_type"), 25, FALSE) // Show static if can't use the camera - if(!active_camera?.can_use()) + if(!selected_camera?.can_use()) show_camera_static() return TRUE var/list/visible_turfs = list() - for(var/turf/T in (C.isXRay() \ - ? range(C.view_range, C) \ - : view(C.view_range, C))) - visible_turfs += T + + // Is this camera located in or attached to a living thing? If so, assume the camera's loc is the living thing. + var/cam_location = isliving(selected_camera.loc) ? selected_camera.loc : selected_camera + + var/list/visible_things = selected_camera.isXRay() ? range(selected_camera.view_range, cam_location) : view(selected_camera.view_range, cam_location) + + for(var/turf/visible_turf in visible_things) + visible_turfs += visible_turf var/list/bbox = get_bbox_of_atoms(visible_turfs) var/size_x = bbox[3] - bbox[1] + 1 diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index 794a6b82703..43388ed6729 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -112,6 +112,10 @@ if(c.can_use()) cameras += c + for(var/mob/living/silicon/sillycone in urange(CHUNK_SIZE, locate(x + (CHUNK_SIZE / 2), y + (CHUNK_SIZE / 2), z))) + if(sillycone.builtInCamera?.can_use()) + cameras += sillycone.builtInCamera + for(var/turf/t in block(locate(max(x, 1), max(y, 1), z), locate(min(x + CHUNK_SIZE - 1, world.maxx), min(y + CHUNK_SIZE - 1, world.maxy), z))) turfs[t] = t diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 3e59b227521..d2fa26831b4 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -149,6 +149,11 @@ playsound(src, 'sound/machines/warning-buzzer.ogg', 75, TRUE, TRUE) audible_message("[src] sounds an alarm! \"CRITICAL ERROR: ALL modules OFFLINE.\"") + + if(builtInCamera) + builtInCamera.status = FALSE + to_chat(src, "CRITICAL ERROR: Built in security camera OFFLINE.") + to_chat(src, "CRITICAL ERROR: ALL modules OFFLINE.") if(2) @@ -175,7 +180,6 @@ return TRUE - /** * Breaks all of a cyborg's slots. */ @@ -200,6 +204,9 @@ inv1.icon_state = initial(inv1.icon_state) disabled_modules &= ~BORG_MODULE_ALL_DISABLED + if(builtInCamera) + builtInCamera.status = TRUE + to_chat(src, "You hear your built in security camera focus adjust as it comes back online!") if(2) if(!(disabled_modules & BORG_MODULE_TWO_DISABLED)) return FALSE @@ -388,3 +395,4 @@ /mob/living/silicon/robot/swap_hand() cycle_modules() +