From 992e037adc7f5fde24c337600cf0b679d7809721 Mon Sep 17 00:00:00 2001 From: zevo Date: Sat, 11 May 2024 18:38:30 -0400 Subject: [PATCH 01/11] bodycams --- code/datums/components/simple_bodycam.dm | 66 ++++++++ code/game/machinery/computer/camera.dm | 23 ++- code/modules/clothing/body_camera.dm | 144 ++++++++++++++++++ .../mob/living/silicon/ai/freelook/chunk.dm | 5 + icons/obj/bodycamera.dmi | Bin 0 -> 454 bytes shiptest.dme | 2 + 6 files changed, 233 insertions(+), 7 deletions(-) create mode 100644 code/datums/components/simple_bodycam.dm create mode 100644 code/modules/clothing/body_camera.dm create mode 100644 icons/obj/bodycamera.dmi diff --git a/code/datums/components/simple_bodycam.dm b/code/datums/components/simple_bodycam.dm new file mode 100644 index 000000000000..cfc0a90d778e --- /dev/null +++ b/code/datums/components/simple_bodycam.dm @@ -0,0 +1,66 @@ +/// Simple component to integrate a bodycam into a mob. Ported from Fulpstation. +/datum/component/simple_bodycam + dupe_mode = COMPONENT_DUPE_SELECTIVE + /// The actual camera, in our mob's contents + VAR_PRIVATE/obj/machinery/camera/bodycam + /// How fast we update + var/camera_update_time = 0.5 SECONDS + +/datum/component/simple_bodycam/Initialize( + camera_name = "bodycam", + c_tag = capitalize(camera_name), + network = "ss13", + camera_update_time = 0.5 SECONDS, +) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + + src.camera_update_time = camera_update_time + + bodycam = new(parent) + bodycam.network = list(network) + bodycam.name = camera_name + bodycam.c_tag = c_tag + + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(update_cam)) + RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate_cam)) + RegisterSignal(bodycam, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED), PROC_REF(camera_gone)) + + do_update_cam() + +/datum/component/simple_bodycam/Destroy() + if(QDELETED(bodycam)) + bodycam = null + else + QDEL_NULL(bodycam) + return ..() + +/datum/component/simple_bodycam/CheckDupeComponent( + datum/component/simple_bodycam/new_bodycam, // will be null + camera_name, + c_tag, + network = "ss13", + emp_proof, + camera_update_time, +) + // Dupes are only allowed if we don't have a camera on that network already + return (network in bodycam.network) + +/datum/component/simple_bodycam/proc/update_cam(datum/source, atom/old_loc, ...) + SIGNAL_HANDLER + + if(get_turf(old_loc) != get_turf(parent)) + do_update_cam() + +/datum/component/simple_bodycam/proc/do_update_cam() + GLOB.cameranet.updatePortableCamera(bodycam, camera_update_time) + +/datum/component/simple_bodycam/proc/rotate_cam(datum/source, old_dir, new_dir) + SIGNAL_HANDLER + // I don't actually think cameras care about dir but just in case + bodycam.setDir(new_dir) + +/datum/component/simple_bodycam/proc/camera_gone(datum/source) + SIGNAL_HANDLER + if (!QDELETED(src)) + qdel(src) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 50ed20ae619e..0ada95e0603e 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -130,20 +130,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 @@ -193,6 +197,11 @@ D["[C.c_tag]"] = C return D +/obj/machinery/computer/security/attackby(obj/item/bodycam/bc, mob/user, params) + bc.cameranetwork = network + user.balloon_alert(user, "Body camera linked to network.") + return + // SECURITY MONITORS /obj/machinery/computer/security/wooden_tv diff --git a/code/modules/clothing/body_camera.dm b/code/modules/clothing/body_camera.dm new file mode 100644 index 000000000000..4d057bdebde5 --- /dev/null +++ b/code/modules/clothing/body_camera.dm @@ -0,0 +1,144 @@ +/obj/item/clothing/under/Initialize(mapload) + . = ..() + AddComponent(/datum/component/bodycamera_holder) + +/** + * The bodycamera + * + * This is the item that gets installed into items that have the bodycamera_holder element + */ +/obj/item/bodycam + name = "\a body camera" + icon = 'icons/obj/bodycamera.dmi' + icon_state = "bodycamera" + desc = "A small camera that can be attached to clothing, there's an instructions tag if you look a little closer..." + ///The camera itself. + var/obj/machinery/camera/builtin_bodycamera + var/list/cameranetwork = list("ss13") + +/obj/item/bodycam/examine_more(mob/user) + . = ..() + . += list(span_notice("Use [src] on any under clothing item to quickly install it.")) + . += list(span_notice("Use a [span_bold("screwdriver")] to remove it.")) + . += list(span_notice("While equipped, use your ID card on the vest to activate/deactivate the camera.")) + . += list(span_notice("Unequipping the clothing item will immediately deactivate the camera.")) + +/obj/item/bodycam/AltClick(mob/user) + . = ..() + + +/obj/item/bodycam/Destroy() + if(builtin_bodycamera) + turn_off() + return ..() + +/obj/item/bodycam/proc/is_on() + if(isnull(builtin_bodycamera)) + return FALSE + return TRUE + +/obj/item/bodycam/proc/turn_on(mob/user, obj/item/card/id/id_card) + builtin_bodycamera = new(user) + builtin_bodycamera.internal_light = FALSE + builtin_bodycamera.network = cameranetwork + builtin_bodycamera.c_tag = "-Body Camera: [(id_card.registered_name)] ([id_card.assignment])" + playsound(loc, 'sound/machines/beep.ogg', get_clamped_volume(), TRUE, -1) + if(user) + user.balloon_alert(user, "bodycamera activated") + +/obj/item/bodycam/proc/turn_off(mob/user) + if(user) + user.balloon_alert(user, "bodycamera deactivated") + playsound(loc, 'sound/machines/beep.ogg', get_clamped_volume(), TRUE, -1) + QDEL_NULL(builtin_bodycamera) + + +/** + * Bodycamera component + * + * Allows anything to have a body camera inserted into it + */ +/datum/component/bodycamera_holder + ///The installed bodycamera + var/obj/item/bodycam/bodycamera_installed + ///The clothing part this needs to be on. This could possibly just be done by checking the clothing's slot + var/clothingtype_required = ITEM_SLOT_OCLOTHING + +/datum/component/bodycamera_holder/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(parent, COMSIG_PARENT_EXAMINE_MORE, PROC_REF(on_examine_more)) + RegisterSignal(parent, COMSIG_ATOM_SCREWDRIVER_ACT, PROC_REF(on_screwdriver_act)) + +/datum/component/bodycamera_holder/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ATOM_SCREWDRIVER_ACT) + UnregisterSignal(parent, COMSIG_PARENT_ATTACKBY) + UnregisterSignal(parent, COMSIG_PARENT_EXAMINE) + QDEL_NULL(bodycamera_installed) + return ..() + +/datum/component/bodycamera_holder/proc/turn_camera_on(mob/living/user, obj/item/card) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_unequip)) + bodycamera_installed.turn_on(user, card) + +/datum/component/bodycamera_holder/proc/turn_camera_off(mob/living/user) + UnregisterSignal(parent, COMSIG_ITEM_DROPPED) + bodycamera_installed.turn_off(user) + +/// When the camera holder is unequipped +/datum/component/bodycamera_holder/proc/on_unequip(mob/living/source, force, atom/newloc, no_move, invdrop, silent) + SIGNAL_HANDLER + turn_camera_off() + +/// When examining +/datum/component/bodycamera_holder/proc/on_examine_more(atom/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + if(bodycamera_installed) + examine_list += span_notice("It has [bodycamera_installed] installed.") + else + examine_list += span_notice("It has a spot to hook up a body camera onto.") + +/// When items are used on it. Bodycamera/ID card +/datum/component/bodycamera_holder/proc/on_attackby(datum/source, obj/item/item, mob/living/user) + SIGNAL_HANDLER + + if(istype(item, /obj/item/bodycam)) + if(bodycamera_installed) + user.balloon_alert(user, "camera already installed!") + playsound(source, 'sound/machines/buzz-two.ogg', item.get_clamped_volume(), TRUE, -1) + else + item.forceMove(source) + bodycamera_installed = item + playsound(source, 'sound/items/screwdriver.ogg', item.get_clamped_volume(), TRUE, -1) + return + + if(!bodycamera_installed) + return + + var/obj/item/card/id/card = item.GetID() + if(!card) + return + + if(source != user.get_item_by_slot(ITEM_SLOT_ICLOTHING)) + user.balloon_alert(user, "must be wearing item!") + return + + //Do we have a camera on or off? + if(bodycamera_installed.is_on()) + turn_camera_off(user) + else + turn_camera_on(user, card) + +/// When a screwdriver is used on it +/datum/component/bodycamera_holder/proc/on_screwdriver_act(atom/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + + if(!bodycamera_installed) + return + if(bodycamera_installed.is_on()) + turn_camera_off(user) + playsound(source, 'sound/items/screwdriver.ogg', tool.get_clamped_volume(), TRUE, -1) + bodycamera_installed.forceMove(user.loc) + INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, put_in_hands), bodycamera_installed) + bodycamera_installed = null diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index 124028009116..832423460cb0 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -112,6 +112,11 @@ 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/icons/obj/bodycamera.dmi b/icons/obj/bodycamera.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bcfb98afaac285bcb88beba5a031497370f1e91f GIT binary patch literal 454 zcmV;%0XhDOP)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRL zOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DJegtGC46fwJ1@Ei!&v&s2C_{$iC}snPumEHF-be{qQ_8?}vZL4Yjm%2Ww(PT>t<807*qoM6N<$g55v12LJ#7 literal 0 HcmV?d00001 diff --git a/shiptest.dme b/shiptest.dme index 113d1da2b1ff..3b008cdebf89 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -515,6 +515,7 @@ #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" #include "code\datums\components\shrink.dm" +#include "code\datums\components\simple_bodycam.dm" #include "code\datums\components\sitcomlaughter.dm" #include "code\datums\components\sizzle.dm" #include "code\datums\components\slippery.dm" @@ -1943,6 +1944,7 @@ #include "code\modules\client\verbs\ping.dm" #include "code\modules\client\verbs\reset_held_keys.dm" #include "code\modules\client\verbs\who.dm" +#include "code\modules\clothing\body_camera.dm" #include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\towels.dm" From 3056015e6af549a47c2779fd03e6c3393867d934 Mon Sep 17 00:00:00 2001 From: zevo Date: Sat, 11 May 2024 18:40:24 -0400 Subject: [PATCH 02/11] camera console message --- code/modules/clothing/body_camera.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/body_camera.dm b/code/modules/clothing/body_camera.dm index 4d057bdebde5..59fc51cedac6 100644 --- a/code/modules/clothing/body_camera.dm +++ b/code/modules/clothing/body_camera.dm @@ -22,6 +22,7 @@ . += list(span_notice("Use a [span_bold("screwdriver")] to remove it.")) . += list(span_notice("While equipped, use your ID card on the vest to activate/deactivate the camera.")) . += list(span_notice("Unequipping the clothing item will immediately deactivate the camera.")) + . += list(span_notice("[span_bold("Alt Click")] on a [span_bold("Security Camera Console")] to connect the camera to its network if it isn't showing up.")) /obj/item/bodycam/AltClick(mob/user) . = ..() From c6bb6dcf4306fb1fe3af66033c3bef62e7544a60 Mon Sep 17 00:00:00 2001 From: zevo Date: Sun, 12 May 2024 15:07:09 -0400 Subject: [PATCH 03/11] lint --- code/game/machinery/computer/camera.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 0ada95e0603e..55a94594924c 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -199,7 +199,7 @@ /obj/machinery/computer/security/attackby(obj/item/bodycam/bc, mob/user, params) bc.cameranetwork = network - user.balloon_alert(user, "Body camera linked to network.") + user.balloon_alert(user, "body camera linked to network.") return // SECURITY MONITORS From f9ebcaf541b7088b99d28022af8cc1bd55aa5ac4 Mon Sep 17 00:00:00 2001 From: zevo Date: Sun, 12 May 2024 23:37:28 -0400 Subject: [PATCH 04/11] fix desc --- code/modules/clothing/body_camera.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/body_camera.dm b/code/modules/clothing/body_camera.dm index 59fc51cedac6..c3fcb252a29c 100644 --- a/code/modules/clothing/body_camera.dm +++ b/code/modules/clothing/body_camera.dm @@ -20,9 +20,9 @@ . = ..() . += list(span_notice("Use [src] on any under clothing item to quickly install it.")) . += list(span_notice("Use a [span_bold("screwdriver")] to remove it.")) - . += list(span_notice("While equipped, use your ID card on the vest to activate/deactivate the camera.")) + . += list(span_notice("While equipped, use your ID card on the clothing item to activate/deactivate the camera.")) . += list(span_notice("Unequipping the clothing item will immediately deactivate the camera.")) - . += list(span_notice("[span_bold("Alt Click")] on a [span_bold("Security Camera Console")] to connect the camera to its network if it isn't showing up.")) + . += list(span_notice("[span_bold("Use the camera")] on a [span_bold("Security Camera Console")] to connect the camera to its network if it isn't showing up.")) /obj/item/bodycam/AltClick(mob/user) . = ..() From 07cd1df5b62edf538b52c53969bd7a25226609df Mon Sep 17 00:00:00 2001 From: zevo Date: Tue, 11 Jun 2024 11:18:10 -0400 Subject: [PATCH 05/11] sprite adjustment --- icons/obj/bodycamera.dmi | Bin 454 -> 418 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/bodycamera.dmi b/icons/obj/bodycamera.dmi index bcfb98afaac285bcb88beba5a031497370f1e91f..c3a0df0d5408775740111da3c217b3047ede0985 100644 GIT binary patch delta 207 zcmV;=05Jc?1EK?vBmp6jB_#ym#f{dHRGNRKNkl! z_$*myPlddLGPqlJkcBq5>lm^;{XMholC7oehq52$Bg=l+L_UfWOK-F@rtkm&002ov JPDHLkV1gBaUzY#? delta 243 zcmV Date: Tue, 11 Jun 2024 12:43:17 -0400 Subject: [PATCH 06/11] bodycams box and cargo pack --- code/game/objects/items/storage/boxes.dm | 9 +++++++++ code/modules/cargo/packs/sec_supply.dm | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 3cd1e72192ee..3986aad870d2 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1526,3 +1526,12 @@ ) generate_items_inside(items_inside,src) +/obj/item/storage/box/bodycams + name = "box of body cameras" + desc = "Contains four jumpsuit-mounted body cameras." + icon_state = "secbox" + +/obj/item/storage/box/bodycams/PopulateContents() + for(var/i in 1 to 4) + new/obj/item/bodycam(src) + diff --git a/code/modules/cargo/packs/sec_supply.dm b/code/modules/cargo/packs/sec_supply.dm index 8ff09a5dc38a..d2f2877f2ed5 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -6,6 +6,13 @@ Standard supplies */ +/datum/supply_pack/sec_supply/bodycams + name = "Body Cameras Crate" + desc = "Contains four jumpsuit-mounted body cameras. Does not include the security camera console needed to use them." + cost = 2000 + contains = list(/obj/item/storage/box/bodycams) + crate_name = "body cameras crate" + /datum/supply_pack/sec_supply/chemimp name = "Chemical Implants Crate" desc = "Contains five remote chemical implants." From 028aebb327c4c4902f62503b7d2ca7a3cc80f22d Mon Sep 17 00:00:00 2001 From: zevo Date: Tue, 11 Jun 2024 12:43:24 -0400 Subject: [PATCH 07/11] maps --- .../independent/independent_mudskipper.dmm | 10 ++++++---- .../shuttles/independent/independent_rigger.dmm | 4 +++- .../independent/independent_shetland.dmm | 2 ++ _maps/shuttles/inteq/inteq_talos.dmm | 5 +++-- _maps/shuttles/nanotrasen/nanotrasen_osprey.dmm | 1 + _maps/shuttles/nanotrasen/nanotrasen_ranger.dmm | 4 ++++ _maps/shuttles/pgf/pgf_crying_sun.dmm | 1 + _maps/shuttles/solgov/solgov_chronicle.dmm | 1 + .../shuttles/syndicate/syndicate_litieguai.dmm | 17 ++++++++++++----- 9 files changed, 33 insertions(+), 12 deletions(-) diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm index f82cdc7ba748..3334fe91a370 100644 --- a/_maps/shuttles/independent/independent_mudskipper.dmm +++ b/_maps/shuttles/independent/independent_mudskipper.dmm @@ -636,6 +636,8 @@ /obj/item/gun/energy/laser/e10, /obj/item/stock_parts/cell/gun, /obj/item/stock_parts/cell/gun, +/obj/item/bodycam, +/obj/item/bodycam, /turf/open/floor/plasteel/dark, /area/ship/bridge) "ot" = ( @@ -750,10 +752,6 @@ /obj/effect/turf_decal/corner/transparent/neutral{ dir = 4 }, -/obj/machinery/computer/crew{ - dir = 8; - icon_state = "computer-right" - }, /obj/machinery/button/door{ dir = 1; pixel_x = -6; @@ -761,6 +759,10 @@ name = "Bridge Lockdown"; id = "mudskipper_bridge" }, +/obj/machinery/computer/security{ + dir = 8; + icon_state = "computer-right" + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "qE" = ( diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index daf3cf9ecdb3..c633d859495d 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -992,6 +992,7 @@ pixel_x = 8; pixel_y = 12 }, +/obj/item/bodycam, /turf/open/floor/plasteel/grimy, /area/ship/security) "mD" = ( @@ -3012,7 +3013,7 @@ /area/ship/crew) "JE" = ( /obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/computer/crew, +/obj/machinery/computer/security, /turf/open/floor/plasteel/dark, /area/ship/bridge) "JF" = ( @@ -4121,6 +4122,7 @@ /obj/item/clothing/suit/toggle/hazard, /obj/item/clothing/head/hardhat/mining, /obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/bodycam, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/central) "WE" = ( diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index 13599cc298cf..842a3f9eaaa2 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -1815,6 +1815,8 @@ /obj/item/clothing/glasses/cheapsuns, /obj/item/melee/classic_baton, /obj/effect/decal/cleanable/dirt, +/obj/item/bodycam, +/obj/item/bodycam, /turf/open/floor/plasteel/dark, /area/ship/security) "pX" = ( diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 1e08e3912dc6..65c1dc8d189d 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -3419,10 +3419,10 @@ }, /obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ pixel_x = -8; - pixel_y = 8; + pixel_y = 8 }, /obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ - pixel_x = -12; + pixel_x = -12 }, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) @@ -7508,6 +7508,7 @@ /obj/item/clothing/glasses/hud/security/sunglasses/inteq, /obj/item/storage/box/handcuffs, /obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/storage/box/bodycams, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "Ya" = ( diff --git a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm index 774f1d57cc40..ce0fc71dd0a2 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm @@ -29,6 +29,7 @@ /obj/item/gun/ballistic/automatic/pistol/commander/no_mag, /obj/item/gun/energy/e_gun/mini, /obj/item/gun/energy/e_gun/mini, +/obj/item/storage/box/bodycams, /turf/open/floor/plasteel/dark, /area/ship/bridge) "aj" = ( diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 288fd6235cf8..a22d341efe7f 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -119,6 +119,7 @@ /obj/item/pinpointer/crew, /obj/item/storage/box/bodybags, /obj/item/storage/firstaid/regular, +/obj/item/bodycam, /turf/open/floor/wood, /area/ship/medical) "aP" = ( @@ -193,6 +194,7 @@ /obj/item/ammo_box/magazine/co9mm, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/belt/security/webbing, +/obj/item/bodycam, /turf/open/floor/wood, /area/ship/security) "bD" = ( @@ -1555,6 +1557,7 @@ /obj/item/clothing/glasses/meson/gar{ pixel_y = 8 }, +/obj/item/bodycam, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "pA" = ( @@ -3137,6 +3140,7 @@ /obj/item/ammo_box/c9mm/rubbershot, /obj/item/ammo_box/magazine/co9mm, /obj/item/ammo_box/magazine/co9mm, +/obj/item/bodycam, /turf/open/floor/wood, /area/ship/crew/dorm) "Hd" = ( diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm index f06f4e5dbc66..96802f0f5f83 100644 --- a/_maps/shuttles/pgf/pgf_crying_sun.dmm +++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm @@ -2443,6 +2443,7 @@ pixel_x = 8; pixel_y = 0 }, +/obj/item/storage/box/bodycams, /turf/open/floor/vault, /area/ship/security/armory) "vr" = ( diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index d0359b5ca240..99a08833f673 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -2020,6 +2020,7 @@ /obj/item/pen/solgov{ pixel_x = -5 }, +/obj/item/storage/box/bodycams, /turf/open/floor/wood/walnut, /area/ship/bridge) "tV" = ( diff --git a/_maps/shuttles/syndicate/syndicate_litieguai.dmm b/_maps/shuttles/syndicate/syndicate_litieguai.dmm index a7e6bb4dbcf5..c51fcd9339dd 100644 --- a/_maps/shuttles/syndicate/syndicate_litieguai.dmm +++ b/_maps/shuttles/syndicate/syndicate_litieguai.dmm @@ -1143,7 +1143,8 @@ /area/ship/cargo) "xF" = ( /obj/machinery/computer/helm{ - dir = 8 + dir = 8; + icon_state = "computer-left" }, /turf/open/floor/plasteel/dark, /area/ship/bridge) @@ -1198,8 +1199,9 @@ /turf/open/floor/engine, /area/ship/cargo) "yQ" = ( -/obj/machinery/computer/med_data{ - dir = 8 +/obj/machinery/computer/security{ + dir = 8; + icon_state = "computer-right" }, /turf/open/floor/plasteel/dark, /area/ship/bridge) @@ -1275,6 +1277,9 @@ /obj/machinery/recharger, /obj/machinery/light/small/directional/south, /obj/machinery/firealarm/directional/east, +/obj/item/storage/box/bodycams{ + pixel_x = -7 + }, /turf/open/floor/carpet/cyan, /area/ship/bridge) "zo" = ( @@ -1518,7 +1523,8 @@ /area/ship/storage/eva) "Ca" = ( /obj/machinery/computer/crew{ - dir = 8 + dir = 8; + icon_state = "computer-left" }, /turf/open/floor/plasteel/dark, /area/ship/bridge) @@ -2609,7 +2615,8 @@ /area/ship/hallway/central) "TA" = ( /obj/machinery/computer/cargo/express{ - dir = 8 + dir = 8; + icon_state = "computer-right" }, /turf/open/floor/plasteel/dark, /area/ship/bridge) From 60000f5319b86de4822ca6689e1358604cd46db5 Mon Sep 17 00:00:00 2001 From: zevo Date: Tue, 11 Jun 2024 12:46:06 -0400 Subject: [PATCH 08/11] komodo --- _maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index fc7e7a029b82..588fad9540b5 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -2166,6 +2166,9 @@ }, /obj/machinery/airalarm/directional/west, /obj/item/radio/intercom/directional/north, +/obj/item/storage/box/bodycams{ + pixel_x = 16 + }, /turf/open/floor/pod/dark, /area/ship/security/armory) "uh" = ( From 0b00fcb331e25e727056af718b2cfed48d610261 Mon Sep 17 00:00:00 2001 From: zevo Date: Tue, 11 Jun 2024 13:00:56 -0400 Subject: [PATCH 09/11] yeen --- _maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index ce77d98f5833..8a61543ea0e0 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -1313,6 +1313,9 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table, /obj/effect/turf_decal/industrial/outline, +/obj/item/storage/box/bodycams{ + pixel_y = 17 + }, /turf/open/floor/mineral/plastitanium/red, /area/ship/security/armory) "wO" = ( @@ -3032,12 +3035,13 @@ "Xj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/computer/crew{ - dir = 8 - }, /obj/effect/turf_decal/borderfloorblack{ dir = 4 }, +/obj/machinery/computer/security{ + dir = 8; + icon_state = "computer-left" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo/office) "Xz" = ( @@ -3259,7 +3263,8 @@ /obj/machinery/firealarm/directional/south, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/computer/rdconsole/core{ - dir = 8 + dir = 8; + icon_state = "computer-right" }, /obj/effect/turf_decal/borderfloorblack{ dir = 4 From 94dabe6e3e7ef729109f9d2668b508354cd26df8 Mon Sep 17 00:00:00 2001 From: zevo <95449138+Zevotech@users.noreply.github.com> Date: Sat, 15 Jun 2024 13:13:01 -0400 Subject: [PATCH 10/11] Update code/game/machinery/computer/camera.dm Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Signed-off-by: zevo <95449138+Zevotech@users.noreply.github.com> --- code/game/machinery/computer/camera.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 55a94594924c..ac5184a84f21 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -197,11 +197,13 @@ D["[C.c_tag]"] = C return D -/obj/machinery/computer/security/attackby(obj/item/bodycam/bc, mob/user, params) - bc.cameranetwork = network +/obj/machinery/computer/security/attackby(obj/item/I, mob/user, params) + if(istype(I, obj/item/bodycam)) + var/obj/item/bodycam/bodycam = I + bodycam.cameranetwork = network user.balloon_alert(user, "body camera linked to network.") - return - + else + return ..() // SECURITY MONITORS /obj/machinery/computer/security/wooden_tv From 18e909ba25bc8e074f7221302138f55344180e99 Mon Sep 17 00:00:00 2001 From: zevo Date: Sat, 15 Jun 2024 14:25:45 -0400 Subject: [PATCH 11/11] the fucking slash fallcon --- code/game/machinery/computer/camera.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index ac5184a84f21..a65362e99745 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -198,7 +198,7 @@ return D /obj/machinery/computer/security/attackby(obj/item/I, mob/user, params) - if(istype(I, obj/item/bodycam)) + if(istype(I, /obj/item/bodycam)) var/obj/item/bodycam/bodycam = I bodycam.cameranetwork = network user.balloon_alert(user, "body camera linked to network.")