mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
Bodycams :) (#7573)
This commit is contained in:
@@ -73,6 +73,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
|
|||||||
#define NETWORK_EXPLORATION "Exploration"
|
#define NETWORK_EXPLORATION "Exploration"
|
||||||
#define NETWORK_XENOBIO "Xenobiology"
|
#define NETWORK_XENOBIO "Xenobiology"
|
||||||
#define NETWORK_THUNDER "Entertainment" //VOREStation Edit: broader definition
|
#define NETWORK_THUNDER "Entertainment" //VOREStation Edit: broader definition
|
||||||
|
#define NETWORK_BODYCAM "Body Cameras" // CHOMPStation Edit
|
||||||
#define NETWORK_COMMUNICATORS "Communicators"
|
#define NETWORK_COMMUNICATORS "Communicators"
|
||||||
#define NETWORK_ALARM_ATMOS "Atmosphere Alarms"
|
#define NETWORK_ALARM_ATMOS "Atmosphere Alarms"
|
||||||
#define NETWORK_ALARM_POWER "Power Alarms"
|
#define NETWORK_ALARM_POWER "Power Alarms"
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ var/const/DTH_FREQ = 1341
|
|||||||
var/const/SYND_FREQ = 1213
|
var/const/SYND_FREQ = 1213
|
||||||
var/const/RAID_FREQ = 1277
|
var/const/RAID_FREQ = 1277
|
||||||
var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency.
|
var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency.
|
||||||
|
var/const/BDCM_FREQ = 1481 // CHOMPEdit
|
||||||
|
|
||||||
// department channels
|
// department channels
|
||||||
var/const/PUB_FREQ = 1459
|
var/const/PUB_FREQ = 1459
|
||||||
@@ -135,6 +136,7 @@ var/list/radiochannels = list(
|
|||||||
"Medical" = MED_FREQ,
|
"Medical" = MED_FREQ,
|
||||||
"Engineering" = ENG_FREQ,
|
"Engineering" = ENG_FREQ,
|
||||||
"Security" = SEC_FREQ,
|
"Security" = SEC_FREQ,
|
||||||
|
"Bodycam" = BDCM_FREQ, // CHOMPEdit
|
||||||
"Response Team" = ERT_FREQ,
|
"Response Team" = ERT_FREQ,
|
||||||
"Special Ops" = DTH_FREQ,
|
"Special Ops" = DTH_FREQ,
|
||||||
"Mercenary" = SYND_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)
|
var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ)
|
||||||
|
|
||||||
//Department channels, arranged lexically
|
//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
|
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)
|
// department radio formatting (poorly optimized, ugh)
|
||||||
if(frequency == SEC_FREQ)
|
if(frequency == SEC_FREQ)
|
||||||
return "secradio"
|
return "secradio"
|
||||||
|
if(frequency == BDCM_FREQ) // CHOMPEdit
|
||||||
|
return "bdcmradio"
|
||||||
if (frequency == ENG_FREQ)
|
if (frequency == ENG_FREQ)
|
||||||
return "engradio"
|
return "engradio"
|
||||||
if(frequency == SCI_FREQ)
|
if(frequency == SCI_FREQ)
|
||||||
|
|||||||
@@ -46,6 +46,11 @@
|
|||||||
name = "entertainment camera electronics"
|
name = "entertainment camera electronics"
|
||||||
path =/obj/item/weapon/circuitboard/security/telescreen/entertainment
|
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
|
/datum/category_item/autolathe/engineering/keycard
|
||||||
name = "keycard authenticator electronics"
|
name = "keycard authenticator electronics"
|
||||||
path =/obj/item/weapon/circuitboard/keycard_auth
|
path =/obj/item/weapon/circuitboard/keycard_auth
|
||||||
@@ -116,4 +121,3 @@
|
|||||||
name = "rapid piping device"
|
name = "rapid piping device"
|
||||||
path =/obj/item/weapon/pipe_dispenser
|
path =/obj/item/weapon/pipe_dispenser
|
||||||
//YW Addtion End
|
//YW Addtion End
|
||||||
|
|
||||||
|
|||||||
@@ -120,6 +120,13 @@ var/global/list/engineering_networks = list(
|
|||||||
invuln = 1
|
invuln = 1
|
||||||
always_visible = TRUE
|
always_visible = TRUE
|
||||||
|
|
||||||
|
// CHOMPEdit Begin - Bodycams
|
||||||
|
/obj/machinery/camera/network/bodycamera
|
||||||
|
network = list(NETWORK_BODYCAM)
|
||||||
|
invuln = 1
|
||||||
|
always_visible = TRUE
|
||||||
|
// CHOMPEdit End
|
||||||
|
|
||||||
// EMP
|
// EMP
|
||||||
|
|
||||||
/obj/machinery/camera/emp_proof/New()
|
/obj/machinery/camera/emp_proof/New()
|
||||||
|
|||||||
@@ -69,6 +69,8 @@
|
|||||||
circuit = null
|
circuit = null
|
||||||
|
|
||||||
GLOBAL_LIST_EMPTY(entertainment_screens)
|
GLOBAL_LIST_EMPTY(entertainment_screens)
|
||||||
|
GLOBAL_LIST_EMPTY(bodycamera_screens) // CHOMPEdit
|
||||||
|
|
||||||
/obj/machinery/computer/security/telescreen/entertainment
|
/obj/machinery/computer/security/telescreen/entertainment
|
||||||
name = "entertainment monitor"
|
name = "entertainment monitor"
|
||||||
desc = "Damn, why do they never have anything interesting on these things? (Alt-click to toggle the display)"
|
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)
|
else if(enabled)
|
||||||
radio?.on = TRUE
|
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("<b>[usr]</b> 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
|
/obj/machinery/computer/security/wooden_tv
|
||||||
name = "security camera monitor"
|
name = "security camera monitor"
|
||||||
desc = "An old TV hooked into the station's camera network."
|
desc = "An old TV hooked into the station's camera network."
|
||||||
|
|||||||
@@ -55,7 +55,8 @@
|
|||||||
id = "Receiver A"
|
id = "Receiver A"
|
||||||
network = "tcommsat"
|
network = "tcommsat"
|
||||||
autolinkers = list("receiverA") // link to relay
|
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
|
//Common and other radio frequencies for people to freely use
|
||||||
/obj/machinery/telecomms/receiver/preset_right/New()
|
/obj/machinery/telecomms/receiver/preset_right/New()
|
||||||
@@ -101,7 +102,8 @@
|
|||||||
/obj/machinery/telecomms/bus/preset_four
|
/obj/machinery/telecomms/bus/preset_four
|
||||||
id = "Bus 4"
|
id = "Bus 4"
|
||||||
network = "tcommsat"
|
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")
|
autolinkers = list("processor4", "engineering", "common")
|
||||||
|
|
||||||
/obj/machinery/telecomms/bus/preset_cent
|
/obj/machinery/telecomms/bus/preset_cent
|
||||||
@@ -167,7 +169,8 @@
|
|||||||
|
|
||||||
/obj/machinery/telecomms/server/presets/common
|
/obj/machinery/telecomms/server/presets/common
|
||||||
id = "Common Server"
|
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")
|
autolinkers = list("common")
|
||||||
|
|
||||||
// "Unused" channels, AKA all others.
|
// "Unused" channels, AKA all others.
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ var/global/list/radio_channels_by_freq = list(
|
|||||||
num2text(ENG_FREQ) = "Engineering",
|
num2text(ENG_FREQ) = "Engineering",
|
||||||
num2text(MED_FREQ) = "Medical",
|
num2text(MED_FREQ) = "Medical",
|
||||||
num2text(MED_I_FREQ)="Medical(I)",
|
num2text(MED_I_FREQ)="Medical(I)",
|
||||||
|
num2text(BDCM_FREQ) ="Bodycam", // CHOMPEdit
|
||||||
|
|
||||||
num2text(SEC_FREQ) = "Security",
|
num2text(SEC_FREQ) = "Security",
|
||||||
num2text(SEC_I_FREQ)="Security(I)",
|
num2text(SEC_I_FREQ)="Security(I)",
|
||||||
num2text(SCI_FREQ) = "Science",
|
num2text(SCI_FREQ) = "Science",
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ var/global/list/default_internal_channels = list(
|
|||||||
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
||||||
num2text(MED_FREQ) = list(access_medical_equip),
|
num2text(MED_FREQ) = list(access_medical_equip),
|
||||||
num2text(MED_I_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_FREQ) = list(access_security),
|
||||||
num2text(SEC_I_FREQ)=list(access_security),
|
num2text(SEC_I_FREQ)=list(access_security),
|
||||||
num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology),
|
num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology),
|
||||||
|
|||||||
@@ -118,6 +118,9 @@
|
|||||||
|
|
||||||
/obj/item/device/tvcamera/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
/obj/item/device/tvcamera/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
// CHOMPEdit
|
||||||
|
if(!camera)
|
||||||
|
return
|
||||||
if(camera.status && !isturf(target))
|
if(camera.status && !isturf(target))
|
||||||
show_tvs(target)
|
show_tvs(target)
|
||||||
user.visible_message("<b>[user]</b> aims [src] at [target].", "You aim [src] at [target].")
|
user.visible_message("<b>[user]</b> aims [src] at [target].", "You aim [src] at [target].")
|
||||||
@@ -149,6 +152,169 @@
|
|||||||
H.update_inv_l_hand()
|
H.update_inv_l_hand()
|
||||||
H.update_inv_belt()
|
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: <a href='?src=\ref[src];channel=1'>[channel ? channel : "unidentified broadcast"]</a><br>"
|
||||||
|
dat += "Video streaming is <a href='?src=\ref[src];video=1'>[bcamera.status ? "on" : "off"]</a><br>"
|
||||||
|
if(bcamera.status && showing_name)
|
||||||
|
dat += "- You're showing [showing_name] to your viewers.<br>"
|
||||||
|
dat += "Mic is <a href='?src=\ref[src];sound=1'>[bradio.broadcasting ? "on" : "off"]</a><br>"
|
||||||
|
dat += "Sound is being broadcasted on frequency [format_frequency(bradio.frequency)] ([get_frequency_name(bradio.frequency)])<br>"
|
||||||
|
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, "<span class='notice'>New channel name - '[channel]' is set</span>")
|
||||||
|
if(href_list["video"])
|
||||||
|
bcamera.set_status(!bcamera.status)
|
||||||
|
var/turf/here = get_turf(usr)
|
||||||
|
if(bcamera.status)
|
||||||
|
to_chat(usr,"<span class='notice'>Video streaming activated. Broadcasting on channel '[channel]'</span>")
|
||||||
|
if(here)
|
||||||
|
here.visible_message("<span class='notice'>[usr] turns on their body camera.</span>")
|
||||||
|
show_bodycamera_tvs(loc)
|
||||||
|
else
|
||||||
|
to_chat(usr,"<span class='notice'>Video streaming deactivated.</span>")
|
||||||
|
if(here)
|
||||||
|
here.visible_message("<span class='warning'>[usr] turns off their body camera!</span>")
|
||||||
|
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,"<span class='notice'>Audio streaming activated. Broadcasting on frequency [format_frequency(bradio.frequency)].</span>")
|
||||||
|
else
|
||||||
|
to_chat(usr,"<span class='notice'>Audio streaming deactivated.</span>")
|
||||||
|
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("<b>[user]</b> 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
|
//Assembly by roboticist
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,18 @@
|
|||||||
..()
|
..()
|
||||||
network = NETWORK_THUNDER
|
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)
|
/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
|
||||||
if (..(C))
|
if (..(C))
|
||||||
C.set_network(network.Copy())
|
C.set_network(network.Copy())
|
||||||
|
|||||||
@@ -114,7 +114,9 @@
|
|||||||
/obj/item/clothing/shoes/boots/winter/security,
|
/obj/item/clothing/shoes/boots/winter/security,
|
||||||
/obj/item/device/flashlight/maglight,
|
/obj/item/device/flashlight/maglight,
|
||||||
/obj/item/clothing/mask/gas/half,
|
/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()
|
/obj/structure/closet/secure_closet/hos/Initialize()
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
@@ -172,7 +174,9 @@
|
|||||||
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
||||||
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
||||||
/obj/item/device/ticket_printer, //CHOMPStation addition
|
/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()
|
/obj/structure/closet/secure_closet/warden/Initialize()
|
||||||
@@ -217,7 +221,9 @@
|
|||||||
/obj/item/device/holowarrant, //CHOMPStation addition
|
/obj/item/device/holowarrant, //CHOMPStation addition
|
||||||
/obj/item/device/retail_scanner/security, //CHOMPStation addition
|
/obj/item/device/retail_scanner/security, //CHOMPStation addition
|
||||||
/obj/item/clothing/glasses/hud/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()
|
/obj/structure/closet/secure_closet/security/Initialize()
|
||||||
|
|||||||
@@ -490,7 +490,8 @@
|
|||||||
/obj/item/device/flash = 5,
|
/obj/item/device/flash = 5,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/donut/plain = 6,
|
/obj/item/weapon/reagent_containers/food/snacks/donut/plain = 6,
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 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,
|
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,
|
||||||
/obj/item/weapon/storage/box/donut = 2)
|
/obj/item/weapon/storage/box/donut = 2)
|
||||||
req_log_access = access_armory
|
req_log_access = access_armory
|
||||||
|
|||||||
@@ -12496,6 +12496,9 @@
|
|||||||
/obj/effect/floor_decal/corner/red/border{
|
/obj/effect/floor_decal/corner/red/border{
|
||||||
dir = 9
|
dir = 9
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/security/telescreen/bodycamera{
|
||||||
|
pixel_y = 32
|
||||||
|
},
|
||||||
/turf/simulated/floor/tiled,
|
/turf/simulated/floor/tiled,
|
||||||
/area/security/main)
|
/area/security/main)
|
||||||
"aMs" = (
|
"aMs" = (
|
||||||
@@ -15113,7 +15116,11 @@
|
|||||||
/obj/item/device/radio/intercom{
|
/obj/item/device/radio/intercom{
|
||||||
dir = 1;
|
dir = 1;
|
||||||
name = "Station Intercom (General)";
|
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,
|
/turf/simulated/floor/tiled/dark,
|
||||||
/area/security/warden)
|
/area/security/warden)
|
||||||
@@ -28755,6 +28762,9 @@
|
|||||||
/obj/effect/floor_decal/corner/red/border{
|
/obj/effect/floor_decal/corner/red/border{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/security/telescreen/bodycamera{
|
||||||
|
pixel_x = 32
|
||||||
|
},
|
||||||
/turf/simulated/floor/tiled,
|
/turf/simulated/floor/tiled,
|
||||||
/area/security/lobby)
|
/area/security/lobby)
|
||||||
"bJA" = (
|
"bJA" = (
|
||||||
@@ -34395,6 +34405,9 @@
|
|||||||
/obj/machinery/computer/secure_data{
|
/obj/machinery/computer/secure_data{
|
||||||
dir = 1
|
dir = 1
|
||||||
},
|
},
|
||||||
|
/obj/machinery/computer/security/telescreen/bodycamera{
|
||||||
|
pixel_y = -34
|
||||||
|
},
|
||||||
/turf/simulated/floor/tiled/dark,
|
/turf/simulated/floor/tiled/dark,
|
||||||
/area/crew_quarters/heads/sc/hos)
|
/area/crew_quarters/heads/sc/hos)
|
||||||
"cdx" = (
|
"cdx" = (
|
||||||
@@ -72782,6 +72795,10 @@
|
|||||||
},
|
},
|
||||||
/turf/simulated/floor/tiled,
|
/turf/simulated/floor/tiled,
|
||||||
/area/hallway/primary/seconddeck/fpcenter)
|
/area/hallway/primary/seconddeck/fpcenter)
|
||||||
|
"swo" = (
|
||||||
|
/obj/machinery/computer/security/telescreen/bodycamera,
|
||||||
|
/turf/simulated/wall,
|
||||||
|
/area/security/aid_station)
|
||||||
"sxa" = (
|
"sxa" = (
|
||||||
/obj/structure/sign/warning/hot_exhaust,
|
/obj/structure/sign/warning/hot_exhaust,
|
||||||
/turf/simulated/wall/r_wall,
|
/turf/simulated/wall/r_wall,
|
||||||
@@ -119902,7 +119919,7 @@ aPD
|
|||||||
aTc
|
aTc
|
||||||
aPz
|
aPz
|
||||||
bbU
|
bbU
|
||||||
biE
|
swo
|
||||||
biE
|
biE
|
||||||
biE
|
biE
|
||||||
bva
|
bva
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ var/const/NETWORK_CARRIER = "Exploration Carrier" //CHOMPedit: Exploration outp
|
|||||||
)
|
)
|
||||||
|
|
||||||
/obj/machinery/telecomms/receiver/preset_right/southerncross
|
/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
|
/obj/machinery/telecomms/bus/preset_two/southerncross
|
||||||
freq_listening = list(SUP_FREQ, SRV_FREQ, EXP_FREQ)
|
freq_listening = list(SUP_FREQ, SRV_FREQ, EXP_FREQ)
|
||||||
@@ -134,6 +134,7 @@ var/const/NETWORK_CARRIER = "Exploration Carrier" //CHOMPedit: Exploration outp
|
|||||||
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
||||||
num2text(MED_FREQ) = list(access_medical_equip),
|
num2text(MED_FREQ) = list(access_medical_equip),
|
||||||
num2text(MED_I_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_FREQ) = list(access_security),
|
||||||
num2text(SEC_I_FREQ)=list(access_security),
|
num2text(SEC_I_FREQ)=list(access_security),
|
||||||
num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),
|
num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),
|
||||||
|
|||||||
@@ -274,6 +274,7 @@ var/list/all_maps = list()
|
|||||||
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
||||||
num2text(MED_FREQ) = list(access_medical_equip),
|
num2text(MED_FREQ) = list(access_medical_equip),
|
||||||
num2text(MED_I_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_FREQ) = list(access_security),
|
||||||
num2text(SEC_I_FREQ) = list(access_security),
|
num2text(SEC_I_FREQ) = list(access_security),
|
||||||
num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),
|
num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),
|
||||||
|
|||||||
Reference in New Issue
Block a user