From 95e32dd323f6b5eba96ec7e62016bd24c6a10ed7 Mon Sep 17 00:00:00 2001 From: Etheo Date: Mon, 22 Jan 2024 00:50:04 -0600 Subject: [PATCH] Bodycams :) (#7573) --- code/__defines/machinery.dm | 1 + code/controllers/communications.dm | 6 +- code/controllers/subsystems/machines.dm | 2 +- code/datums/autolathe/engineering.dm | 8 +- code/game/machinery/camera/presets.dm | 11 +- code/game/machinery/computer/camera.dm | 130 ++++++++++++++ code/game/machinery/telecomms/presets.dm | 11 +- code/game/objects/items/devices/paicard.dm | 2 + .../game/objects/items/devices/radio/radio.dm | 2 + code/game/objects/items/devices/tvcamera.dm | 166 ++++++++++++++++++ .../circuitboards/computer/camera_monitor.dm | 12 ++ .../crates_lockers/closets/secure/security.dm | 12 +- code/modules/economy/vending_machines.dm | 3 +- maps/southern_cross/southern_cross-2.dmm | 21 ++- maps/southern_cross/southern_cross_presets.dm | 5 +- maps/~map_system/maps.dm | 1 + 16 files changed, 375 insertions(+), 18 deletions(-) diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index 9d882883a4..f8baaa0a3b 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -73,6 +73,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called #define NETWORK_EXPLORATION "Exploration" #define NETWORK_XENOBIO "Xenobiology" #define NETWORK_THUNDER "Entertainment" //VOREStation Edit: broader definition +#define NETWORK_BODYCAM "Body Cameras" // CHOMPStation Edit #define NETWORK_COMMUNICATORS "Communicators" #define NETWORK_ALARM_ATMOS "Atmosphere Alarms" #define NETWORK_ALARM_POWER "Power Alarms" diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index b129bc2a63..79115bea8f 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -110,6 +110,7 @@ var/const/DTH_FREQ = 1341 var/const/SYND_FREQ = 1213 var/const/RAID_FREQ = 1277 var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency. +var/const/BDCM_FREQ = 1481 // CHOMPEdit // department channels var/const/PUB_FREQ = 1459 @@ -135,6 +136,7 @@ var/list/radiochannels = list( "Medical" = MED_FREQ, "Engineering" = ENG_FREQ, "Security" = SEC_FREQ, + "Bodycam" = BDCM_FREQ, // CHOMPEdit "Response Team" = ERT_FREQ, "Special Ops" = DTH_FREQ, "Mercenary" = SYND_FREQ, @@ -192,7 +194,7 @@ var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ) var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ) //Department channels, arranged lexically -var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ) +var/list/DEPT_FREQS = list(AI_FREQ, BDCM_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ) // CHOMPEdit var/list/OFFMAP_FREQS = list(TALON_FREQ, CSN_FREQ) //VOREStation Add @@ -212,6 +214,8 @@ var/list/OFFMAP_FREQS = list(TALON_FREQ, CSN_FREQ) //VOREStation Add // department radio formatting (poorly optimized, ugh) if(frequency == SEC_FREQ) return "secradio" + if(frequency == BDCM_FREQ) // CHOMPEdit + return "bdcmradio" if (frequency == ENG_FREQ) return "engradio" if(frequency == SCI_FREQ) diff --git a/code/controllers/subsystems/machines.dm b/code/controllers/subsystems/machines.dm index 100811f5c0..8de7c35276 100644 --- a/code/controllers/subsystems/machines.dm +++ b/code/controllers/subsystems/machines.dm @@ -56,7 +56,7 @@ SUBSYSTEM_DEF(machines) /datum/controller/subsystem/machines/proc/setup_atmos_machinery(list/atmos_machines) var/list/actual_atmos_machines = list() - + for(var/obj/machinery/atmospherics/machine in atmos_machines) machine.atmos_init() actual_atmos_machines += machine diff --git a/code/datums/autolathe/engineering.dm b/code/datums/autolathe/engineering.dm index 87dbe9d574..91fb48aa02 100644 --- a/code/datums/autolathe/engineering.dm +++ b/code/datums/autolathe/engineering.dm @@ -46,6 +46,11 @@ name = "entertainment camera electronics" path =/obj/item/weapon/circuitboard/security/telescreen/entertainment +// CHOMPEdit Begin - Bodycams +/datum/category_item/autolathe/engineering/entertainment/bodycamera + name = "bodycamera monitor electronics" + path =/obj/item/weapon/circuitboard/security/telescreen/bodycamera +// CHOMPEdit End /datum/category_item/autolathe/engineering/keycard name = "keycard authenticator electronics" path =/obj/item/weapon/circuitboard/keycard_auth @@ -115,5 +120,4 @@ /datum/category_item/autolathe/engineering/rpd name = "rapid piping device" path =/obj/item/weapon/pipe_dispenser -//YW Addtion End - +//YW Addtion End diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 7f997919e0..7538415cf4 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -81,7 +81,7 @@ var/global/list/engineering_networks = list( /obj/machinery/camera/network/northern_star network = list(NETWORK_NORTHERN_STAR) - + /obj/machinery/camera/network/outside network = list(NETWORK_OUTSIDE) @@ -120,6 +120,13 @@ var/global/list/engineering_networks = list( invuln = 1 always_visible = TRUE +// CHOMPEdit Begin - Bodycams +/obj/machinery/camera/network/bodycamera + network = list(NETWORK_BODYCAM) + invuln = 1 + always_visible = TRUE +// CHOMPEdit End + // EMP /obj/machinery/camera/emp_proof/New() @@ -161,7 +168,7 @@ var/global/list/engineering_networks = list( /obj/machinery/camera/motion/command network = list(NETWORK_COMMAND) - + /obj/machinery/camera/motion/telecom network = list(NETWORK_TCOMMS) //yw edit diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 42dcb9c6d0..4421ac7479 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -69,6 +69,8 @@ circuit = null GLOBAL_LIST_EMPTY(entertainment_screens) +GLOBAL_LIST_EMPTY(bodycamera_screens) // CHOMPEdit + /obj/machinery/computer/security/telescreen/entertainment name = "entertainment monitor" desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)" @@ -172,6 +174,134 @@ GLOBAL_LIST_EMPTY(entertainment_screens) else if(enabled) radio?.on = TRUE +// CHOMPEdit Start - Bodycams +/obj/machinery/computer/security/telescreen/bodycamera + name = "bodycamera monitor" + desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)" + icon = 'icons/obj/entertainment_monitor.dmi' + icon_state = "screen" + icon_screen = null + light_color = "#FFEEDB" + light_range_on = 2 + network = list(NETWORK_BODYCAM) + circuit = /obj/item/weapon/circuitboard/security/telescreen/bodycamera + camera_datum_type = /datum/tgui_module/camera/bigscreen + + var/obj/item/device/radio/bradio = null + var/obj/effect/overlay/vis/bpinboard + var/datum/weakref/showing + var/datum/weakref/the_camera + + var/enabled = TRUE // on or off + +/obj/machinery/computer/security/telescreen/bodycamera/Initialize() + GLOB.bodycamera_screens += src + + var/static/icon/mask = icon('icons/obj/entertainment_monitor.dmi', "mask") + + add_overlay("glass") + + bpinboard = new() + bpinboard.icon = icon + bpinboard.icon_state = "pinboard" + bpinboard.layer = 0.1 + bpinboard.vis_flags = VIS_UNDERLAY|VIS_INHERIT_ID|VIS_INHERIT_PLANE + bpinboard.appearance_flags = KEEP_TOGETHER + bpinboard.add_filter("screen cutter", 1, alpha_mask_filter(icon = mask)) + vis_contents += bpinboard + + . = ..() + + bradio = new(src) + bradio.listening = TRUE + bradio.broadcasting = FALSE + bradio.set_frequency(BDCM_FREQ) + bradio.canhear_range = world.view // Same as default sight range. + power_change() + +/obj/machinery/computer/security/telescreen/bodycamera/Destroy() + if(showing) + stop_showing() + vis_contents.Cut() + qdel_null(bpinboard) + qdel_null(bradio) + return ..() + +/obj/machinery/computer/security/telescreen/bodycamera/proc/bodycam_toggle() + enabled = !enabled + if(!enabled) + stop_showing() + bradio?.on = FALSE + else if(operable()) + bradio?.on = TRUE + +/obj/machinery/computer/security/telescreen/bodycamera/Click(location, control, params) + var/list/modifiers = params2list(params) + if(modifiers["alt"]) + if(isliving(usr) && Adjacent(usr) && !usr.incapacitated()) + bodycam_toggle() + visible_message("[usr] toggles [src] [enabled ? "on" : "off"].","You toggle [src] [enabled ? "on" : "off"].", runemessage = "click") + //CHOMPEdit start - Changing click to only come into play when shift or alt clicking. These things are ANNOYING. + return + if(modifiers["shift"]) + attack_hand(usr) + return + ..() + //CHOMPEdit end + +/obj/machinery/computer/security/telescreen/bodycamera/update_icon() + return // NUH + +/obj/machinery/computer/security/telescreen/bodycamera/process() + if(!showing || !the_camera) + stop_showing() + return + var/atom/them = showing.resolve() + var/obj/item/clothing/accessory/bodycam/bo_cam = the_camera.resolve() + var/turf/here = get_turf(them) + var/turf/there = get_turf(bo_cam) + if(here != there) + stop_showing() + +/obj/machinery/computer/security/telescreen/bodycamera/proc/show_thing(atom/thing, obj/item/clothing/accessory/bodycam/other_thing) + if(!enabled) + return + if(showing) + stop_showing() + if(stat & NOPOWER) + return + if(!thing || !other_thing) + return + the_camera = WEAKREF(other_thing) + var/tries = 10 + var/atom/recursive_loc = thing + while(--tries) + recursive_loc = thing.loc + if(!istype(recursive_loc, /atom/movable)) + break + thing = recursive_loc // should get the topmost atom, which *should* be a mob, or a locker, or something that isnt just ~clothes~ + showing = WEAKREF(thing) + bpinboard.vis_contents = list(thing) + +/obj/machinery/computer/security/telescreen/bodycamera/proc/stop_showing() + // Reverse of the above + bpinboard.vis_contents = null + showing = null + the_camera = null + +/obj/machinery/computer/security/telescreen/bodycamera/proc/maybe_stop_showing(datum/weakref/thingref) + if(showing == thingref) + stop_showing() + +/obj/machinery/computer/security/telescreen/bodycamera/power_change() + ..() + if(stat & NOPOWER) + bradio?.on = FALSE + stop_showing() + else if(enabled) + bradio?.on = TRUE +// CHOMPEdit End + /obj/machinery/computer/security/wooden_tv name = "security camera monitor" desc = "An old TV hooked into the station's camera network." diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 6ddc92c1a3..65fec5a304 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -55,7 +55,8 @@ id = "Receiver A" network = "tcommsat" autolinkers = list("receiverA") // link to relay - freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ) + freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, BDCM_FREQ, ENT_FREQ) // CHOMPEdit + //Common and other radio frequencies for people to freely use /obj/machinery/telecomms/receiver/preset_right/New() @@ -101,7 +102,8 @@ /obj/machinery/telecomms/bus/preset_four id = "Bus 4" network = "tcommsat" - freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ, ENT_FREQ) + freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ, ENT_FREQ, BDCM_FREQ) // CHOMPEdit + autolinkers = list("processor4", "engineering", "common") /obj/machinery/telecomms/bus/preset_cent @@ -167,7 +169,8 @@ /obj/machinery/telecomms/server/presets/common id = "Common Server" - freq_listening = list(PUB_FREQ, AI_FREQ, ENT_FREQ) // AI Private and Common + freq_listening = list(PUB_FREQ, AI_FREQ, ENT_FREQ, BDCM_FREQ) // AI Private and Common // CHOMPEdit + autolinkers = list("common") // "Unused" channels, AKA all others. @@ -218,4 +221,4 @@ id = "CentCom Broadcaster" network = "tcommsat" produces_heat = 0 - autolinkers = list("broadcasterCent") \ No newline at end of file + autolinkers = list("broadcasterCent") diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index bc5c9a30f7..c76f4623d6 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -7,6 +7,8 @@ var/global/list/radio_channels_by_freq = list( num2text(ENG_FREQ) = "Engineering", num2text(MED_FREQ) = "Medical", num2text(MED_I_FREQ)="Medical(I)", + num2text(BDCM_FREQ) ="Bodycam", // CHOMPEdit + num2text(SEC_FREQ) = "Security", num2text(SEC_I_FREQ)="Security(I)", num2text(SCI_FREQ) = "Science", diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 011317edae..b2b6b73b75 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -9,6 +9,8 @@ var/global/list/default_internal_channels = list( num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), num2text(MED_FREQ) = list(access_medical_equip), num2text(MED_I_FREQ)=list(access_medical_equip), + num2text(BDCM_FREQ) =list(access_security), // CHOMPEdit + num2text(SEC_FREQ) = list(access_security), num2text(SEC_I_FREQ)=list(access_security), num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology), diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index bacf8a6b83..f6d8bf83f7 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -118,6 +118,9 @@ /obj/item/device/tvcamera/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() + // CHOMPEdit + if(!camera) + return if(camera.status && !isturf(target)) show_tvs(target) user.visible_message("[user] aims [src] at [target].", "You aim [src] at [target].") @@ -149,6 +152,169 @@ H.update_inv_l_hand() H.update_inv_belt() +// CHOMPEdit Start - Bodycam +// Security Bodycam + +/obj/item/clothing/accessory/bodycam + name = "Body Camera" + desc = "A small body camera for security personnel. It can be attached to your uniform! Use in hand to configure." + icon_state = "eshield" + item_state = "eshield" + w_class = ITEMSIZE_COST_TINY + slot_flags = ACCESSORY_SLOT_DECOR + appearance_flags = RESET_COLOR + icon = 'icons/obj/weapons.dmi' + var/channel = "Default Bodycamera Feed" + var/obj/machinery/camera/network/bodycamera/bcamera + var/obj/item/device/radio/bradio + var/datum/weakref/showing + var/showing_name + +/obj/item/clothing/accessory/bodycam/New() + ..() + listening_objects += src + +/obj/item/clothing/accessory/bodycam/Destroy() + listening_objects -= src + qdel(bcamera) + qdel(bradio) + bcamera = null + bradio = null + ..() + +/obj/item/clothing/accessory/bodycam/examine() + . = ..() + . += "Video feed is [bcamera.status ? "on" : "off"]" + . += "Audio feed is [bradio.broadcasting ? "on" : "off"]" + +/obj/item/clothing/accessory/bodycam/Initialize() + . = ..() + bcamera = new(src) + bcamera.c_tag = channel + bcamera.status = FALSE + bradio = new(src) + bradio.listening = FALSE + bradio.set_frequency(BDCM_FREQ) + bradio.icon = src.icon + bradio.icon_state = src.icon_state + update_icon() + +/obj/item/clothing/accessory/bodycam/hear_talk(mob/M, list/message_pieces, verb) + bradio.hear_talk(M, message_pieces, verb) + . = ..() + +/obj/item/clothing/accessory/bodycam/attack_self(mob/user) + add_fingerprint(user) + //user.set_machine(src) + show_bodycam_ui(user) + +/obj/item/clothing/accessory/bodycam/proc/show_bodycam_ui(mob/user) + var/dat = list() + dat += "Channel name is: [channel ? channel : "unidentified broadcast"]
" + dat += "Video streaming is [bcamera.status ? "on" : "off"]
" + if(bcamera.status && showing_name) + dat += "- You're showing [showing_name] to your viewers.
" + dat += "Mic is [bradio.broadcasting ? "on" : "off"]
" + dat += "Sound is being broadcasted on frequency [format_frequency(bradio.frequency)] ([get_frequency_name(bradio.frequency)])
" + var/datum/browser/popup = new(user, "Hovercamera", "Eye Buddy", 300, 390, src) + popup.set_content(jointext(dat,null)) + popup.open() + +/obj/item/clothing/accessory/bodycam/Topic(bred, href_list, state = GLOB.tgui_physical_state) + + if(..()) + return 1 + if(href_list["channel"]) + var/nc = tgui_input_text(usr, "Channel name", "Select new channel name", channel, MAX_NAME_LEN) + nc = sanitize(nc,MAX_NAME_LEN) + if(nc) + channel = nc + bcamera.c_tag = channel + to_chat(usr, "New channel name - '[channel]' is set") + if(href_list["video"]) + bcamera.set_status(!bcamera.status) + var/turf/here = get_turf(usr) + if(bcamera.status) + to_chat(usr,"Video streaming activated. Broadcasting on channel '[channel]'") + if(here) + here.visible_message("[usr] turns on their body camera.") + show_bodycamera_tvs(loc) + else + to_chat(usr,"Video streaming deactivated.") + if(here) + here.visible_message("[usr] turns off their body camera!") + hide_bodycamera_tvs() + for(var/obj/machinery/computer/security/telescreen/bodycamera/ES as anything in GLOB.bodycamera_screens) + ES.stop_showing() + update_icon() + if(href_list["sound"]) + bradio.ToggleBroadcast() + if(bradio.broadcasting) + to_chat(usr,"Audio streaming activated. Broadcasting on frequency [format_frequency(bradio.frequency)].") + else + to_chat(usr,"Audio streaming deactivated.") + if(!href_list["close"]) + attack_self(usr) + +/obj/item/clothing/accessory/bodycam/proc/show_bodycamera_tvs(atom/thing) + if(showing) + hide_bodycamera_tvs(showing) + + showing = WEAKREF(thing) + showing_name = "[thing]" + for(var/obj/machinery/computer/security/telescreen/bodycamera/ES as anything in GLOB.bodycamera_screens) + ES.show_thing(thing, src) + + START_PROCESSING(SSobj, src) + +/obj/item/clothing/accessory/bodycam/proc/hide_bodycamera_tvs() + if(!showing) + return + for(var/obj/machinery/computer/security/telescreen/bodycamera/ES as anything in GLOB.bodycamera_screens) + ES.maybe_stop_showing(showing) + STOP_PROCESSING(SSobj, src) + showing = null + showing_name = null + +/obj/item/clothing/accessory/bodycam/Moved(atom/old_loc, direction, forced = FALSE, movetime) + . = ..() + if(bcamera.status && loc != old_loc) + show_bodycamera_tvs(loc) + +/* // Kinda unneeded, since this one is worn on the suit. +/obj/item/clothing/accessory/bodycam/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(bcamera.status && !isturf(target)) + show_bodycamera_tvs(target) + user.visible_message("[user] aims [src] at [target].", "You aim [src] at [target].") + if(user.machine == src) + show_bodycam_ui(user) // refresh the UI +*/ +/obj/item/clothing/accessory/bodycam/process() + if(!showing) + return PROCESS_KILL + + var/atom/A = showing.resolve() + if(!A || QDELETED(A)) + show_bodycamera_tvs(loc) + + if(get_dist(get_turf(src), get_turf(A)) > 5) + show_bodycamera_tvs(loc) + +/obj/item/clothing/accessory/bodycam/update_icon() + ..() + if(bcamera.status) + icon_state = "eshield" + item_state = "eshield" + else + icon_state = "eshield" + item_state = "eshield" + var/mob/living/carbon/human/H = loc + if(istype(H)) + H.update_inv_r_hand() + H.update_inv_l_hand() + H.update_inv_belt() +// CHOMPEdit End //Assembly by roboticist diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm index 57a7406c82..8c9c6001d8 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -42,6 +42,18 @@ ..() network = NETWORK_THUNDER +// CHOMPEdit Begin - Bodycam +/obj/item/weapon/circuitboard/security/telescreen/bodycamera + name = T_BOARD("security bodycamera monitor") + build_path = /obj/machinery/computer/security/telescreen/bodycamera + board_type = new /datum/frame/frame_types/display + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + +/obj/item/weapon/circuitboard/security/telescreen/bodycamera/New() + ..() + network = NETWORK_BODYCAM +// CHOMPEdit End + /obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) if (..(C)) C.set_network(network.Copy()) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 958ec5228e..8371e24eb0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -114,7 +114,9 @@ /obj/item/clothing/shoes/boots/winter/security, /obj/item/device/flashlight/maglight, /obj/item/clothing/mask/gas/half, - /obj/item/clothing/mask/gas/sechailer/swat/hos) + /obj/item/clothing/mask/gas/sechailer/swat/hos, // CHOMPEdit + /obj/item/clothing/accessory/bodycam) // CHOMPEdit + /obj/structure/closet/secure_closet/hos/Initialize() if(prob(50)) @@ -172,7 +174,9 @@ /obj/item/ammo_magazine/m12gdrumjack/beanbag, /obj/item/ammo_magazine/m12gdrumjack/beanbag, /obj/item/device/ticket_printer, //CHOMPStation addition - /obj/item/device/retail_scanner/security //CHOMPStation addition + /obj/item/device/retail_scanner/security, //CHOMPStation addition + /obj/item/clothing/accessory/bodycam // CHOMPEdit + ) /obj/structure/closet/secure_closet/warden/Initialize() @@ -217,7 +221,9 @@ /obj/item/device/holowarrant, //CHOMPStation addition /obj/item/device/retail_scanner/security, //CHOMPStation addition /obj/item/clothing/glasses/hud/security, //CHOMPStation addition - /obj/item/device/ticket_printer //CHOMPStation addition + /obj/item/device/ticket_printer, //CHOMPStation addition + /obj/item/clothing/accessory/bodycam // CHOMPEdit + ) /obj/structure/closet/secure_closet/security/Initialize() diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index 4379d49ce2..a49b1d0db2 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -490,7 +490,8 @@ /obj/item/device/flash = 5, /obj/item/weapon/reagent_containers/food/snacks/donut/plain = 6, /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 6, - /obj/item/weapon/storage/box/evidence = 6) + /obj/item/weapon/storage/box/evidence = 6, // CHOMPEdit + /obj/item/clothing/accessory/bodycam = 10) // CHOMPEdit contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/weapon/storage/box/donut = 2) req_log_access = access_armory diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm index fd274af39a..039c2e6a93 100644 --- a/maps/southern_cross/southern_cross-2.dmm +++ b/maps/southern_cross/southern_cross-2.dmm @@ -12496,6 +12496,9 @@ /obj/effect/floor_decal/corner/red/border{ dir = 9 }, +/obj/machinery/computer/security/telescreen/bodycamera{ + pixel_y = 32 + }, /turf/simulated/floor/tiled, /area/security/main) "aMs" = ( @@ -15113,7 +15116,11 @@ /obj/item/device/radio/intercom{ dir = 1; name = "Station Intercom (General)"; - pixel_y = 21 + pixel_y = 5; + pixel_x = -31 + }, +/obj/machinery/computer/security/telescreen/bodycamera{ + pixel_y = 32 }, /turf/simulated/floor/tiled/dark, /area/security/warden) @@ -28755,6 +28762,9 @@ /obj/effect/floor_decal/corner/red/border{ dir = 1 }, +/obj/machinery/computer/security/telescreen/bodycamera{ + pixel_x = 32 + }, /turf/simulated/floor/tiled, /area/security/lobby) "bJA" = ( @@ -34395,6 +34405,9 @@ /obj/machinery/computer/secure_data{ dir = 1 }, +/obj/machinery/computer/security/telescreen/bodycamera{ + pixel_y = -34 + }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/sc/hos) "cdx" = ( @@ -72782,6 +72795,10 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) +"swo" = ( +/obj/machinery/computer/security/telescreen/bodycamera, +/turf/simulated/wall, +/area/security/aid_station) "sxa" = ( /obj/structure/sign/warning/hot_exhaust, /turf/simulated/wall/r_wall, @@ -119902,7 +119919,7 @@ aPD aTc aPz bbU -biE +swo biE biE bva diff --git a/maps/southern_cross/southern_cross_presets.dm b/maps/southern_cross/southern_cross_presets.dm index a0d72a7c02..b40172436b 100644 --- a/maps/southern_cross/southern_cross_presets.dm +++ b/maps/southern_cross/southern_cross_presets.dm @@ -115,7 +115,7 @@ var/const/NETWORK_CARRIER = "Exploration Carrier" //CHOMPedit: Exploration outp ) /obj/machinery/telecomms/receiver/preset_right/southerncross - freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ, EXP_FREQ) + freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ, BDCM_FREQ, EXP_FREQ) /obj/machinery/telecomms/bus/preset_two/southerncross freq_listening = list(SUP_FREQ, SRV_FREQ, EXP_FREQ) @@ -134,10 +134,11 @@ var/const/NETWORK_CARRIER = "Exploration Carrier" //CHOMPedit: Exploration outp num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), num2text(MED_FREQ) = list(access_medical_equip), num2text(MED_I_FREQ)=list(access_medical_equip), + num2text(BDCM_FREQ) =list(access_security), num2text(SEC_FREQ) = list(access_security), num2text(SEC_I_FREQ)=list(access_security), num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology), num2text(SUP_FREQ) = list(access_cargo), num2text(SRV_FREQ) = list(access_janitor, access_hydroponics), num2text(EXP_FREQ) = list(access_explorer) - ) \ No newline at end of file + ) diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 037824482b..07ff20317e 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -274,6 +274,7 @@ var/list/all_maps = list() num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), num2text(MED_FREQ) = list(access_medical_equip), num2text(MED_I_FREQ) = list(access_medical_equip), + num2text(BDCM_FREQ) = list(access_security), // CHOMPEdit num2text(SEC_FREQ) = list(access_security), num2text(SEC_I_FREQ) = list(access_security), num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),