diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm
index f9e7b67c74..b842742d1a 100644
--- a/code/controllers/communications.dm
+++ b/code/controllers/communications.dm
@@ -108,6 +108,7 @@ var/const/ERT_FREQ = 1345
var/const/AI_FREQ = 1343
var/const/DTH_FREQ = 1341
var/const/SYND_FREQ = 1213
+var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency.
// department channels
var/const/PUB_FREQ = 1459
@@ -135,6 +136,7 @@ var/list/radiochannels = list(
"Supply" = SUP_FREQ,
"Service" = SRV_FREQ,
"AI Private" = AI_FREQ,
+ "Entertainment" = ENT_FREQ,
"Medical(I)" = MED_I_FREQ,
"Security(I)" = SEC_I_FREQ
)
@@ -146,7 +148,7 @@ var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ)
var/list/ANTAG_FREQS = list(SYND_FREQ)
//Department channels, arranged lexically
-var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ)
+var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ, ENT_FREQ)
#define TRANSMISSION_WIRE 0
#define TRANSMISSION_RADIO 1
@@ -177,6 +179,8 @@ var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI
return "supradio"
if(frequency == SRV_FREQ) // service
return "srvradio"
+ if(frequency == ENT_FREQ) // entertainment
+ return "entradio"
if(frequency in DEPT_FREQS)
return "deptradio"
diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm
index 4a6aded43b..93d6743b8e 100644
--- a/code/game/machinery/telecomms/presets.dm
+++ b/code/game/machinery/telecomms/presets.dm
@@ -56,7 +56,7 @@
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)
+ freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ)
//Common and other radio frequencies for people to freely use
New()
@@ -102,7 +102,7 @@
/obj/machinery/telecomms/bus/preset_four
id = "Bus 4"
network = "tcommsat"
- freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ)
+ freq_listening = list(ENG_FREQ, AI_FREQ, PUB_FREQ, ENT_FREQ)
autolinkers = list("processor4", "engineering", "common")
/obj/machinery/telecomms/bus/preset_cent
@@ -168,7 +168,7 @@
/obj/machinery/telecomms/server/presets/common
id = "Common Server"
- freq_listening = list(PUB_FREQ, AI_FREQ) // AI Private and Common
+ freq_listening = list(PUB_FREQ, AI_FREQ, ENT_FREQ) // AI Private and Common
autolinkers = list("common")
// "Unused" channels, AKA all others.
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 72d4c50685..216e2e59d0 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -43,6 +43,10 @@
icon_state = "medintercom"
frequency = SEC_I_FREQ
+/obj/item/device/radio/intercom/entertainment
+ name = "entertainment intercom"
+ frequency = ENT_FREQ
+
/obj/item/device/radio/intercom/New()
..()
processing_objects += src
@@ -59,6 +63,13 @@
num2text(SEC_I_FREQ) = list(access_security)
)
+/obj/item/device/radio/intercom/entertainment/New()
+ ..()
+ internal_channels = list(
+ num2text(PUB_FREQ) = list(),
+ num2text(ENT_FREQ) = list()
+ )
+
/obj/item/device/radio/intercom/syndicate
name = "illicit intercom"
desc = "Talk through this. Evilly"
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index c173e0344e..cec23e818f 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -2,6 +2,7 @@
var/global/list/default_internal_channels = list(
num2text(PUB_FREQ) = list(),
num2text(AI_FREQ) = list(access_synth),
+ num2text(ENT_FREQ) = list(),
num2text(ERT_FREQ) = list(access_cent_specops),
num2text(COMM_FREQ)= list(access_heads),
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm
new file mode 100644
index 0000000000..b449a6ce3b
--- /dev/null
+++ b/code/game/objects/items/devices/tvcamera.dm
@@ -0,0 +1,95 @@
+/obj/item/device/tvcamera
+ name = "press camera drone"
+ desc = "A Ward-Takahashi EyeBuddy media streaming hovercam. Weapon of choice for war correspondents and reality show cameramen."
+ icon_state = "camcorder"
+ item_state = "camcorder"
+ w_class = ITEMSIZE_LARGE
+ slot_flags = SLOT_BELT
+ var/channel = "NCS Northern Star News Feed"
+ var/obj/machinery/camera/network/thunder/camera
+ var/obj/item/device/radio/radio
+
+/obj/item/device/tvcamera/New()
+ ..()
+ listening_objects += src
+
+/obj/item/device/tvcamera/Destroy()
+ listening_objects -= src
+ qdel(camera)
+ qdel(radio)
+ camera = null
+ radio = null
+ ..()
+
+/obj/item/device/tvcamera/examine()
+ ..()
+ to_chat(usr, "Video feed is [camera.status ? "on" : "off"]")
+ to_chat(usr, "Audio feed is [radio.broadcasting ? "on" : "off"]")
+
+/obj/item/device/tvcamera/initialize()
+ ..()
+ camera = new(src)
+ camera.c_tag = channel
+ camera.status = FALSE
+ radio = new(src)
+ radio.listening = FALSE
+ radio.set_frequency(ENT_FREQ)
+ radio.icon = src.icon
+ radio.icon_state = src.icon_state
+ update_icon()
+
+/obj/item/device/tvcamera/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null)
+ radio.hear_talk(M,msg,verb,speaking)
+ ..()
+
+/obj/item/device/tvcamera/attack_self(mob/user)
+ add_fingerprint(user)
+ user.set_machine(src)
+ var/dat = list()
+ dat += "Channel name is: [channel ? channel : "unidentified broadcast"]
"
+ dat += "Video streaming is [camera.status ? "on" : "off"]
"
+ dat += "Mic is [radio.broadcasting ? "on" : "off"]
"
+ dat += "Sound is being broadcasted on frequency [format_frequency(radio.frequency)] ([get_frequency_name(radio.frequency)])
"
+ var/datum/browser/popup = new(user, "Hovercamera", "Eye Buddy", 300, 390, src)
+ popup.set_content(jointext(dat,null))
+ popup.open()
+
+/obj/item/device/tvcamera/Topic(bred, href_list, state = physical_state)
+ if(..())
+ return 1
+ if(href_list["channel"])
+ var/nc = input(usr, "Channel name", "Select new channel name", channel) as text|null
+ if(nc)
+ channel = nc
+ camera.c_tag = channel
+ to_chat(usr, "New channel name - '[channel]' is set")
+ if(href_list["video"])
+ camera.set_status(!camera.status)
+ if(camera.status)
+ to_chat(usr,"Video streaming activated. Broadcasting on channel '[channel]'")
+ else
+ to_chat(usr,"Video streaming deactivated.")
+ update_icon()
+ if(href_list["sound"])
+ radio.ToggleBroadcast()
+ if(radio.broadcasting)
+ to_chat(usr,"Audio streaming activated. Broadcasting on frequency [format_frequency(radio.frequency)].")
+ else
+ to_chat(usr,"Audio streaming deactivated.")
+ if(!href_list["close"])
+ attack_self(usr)
+
+/obj/item/device/tvcamera/update_icon()
+ ..()
+ if(camera.status)
+ icon_state = "camcorder_on"
+ item_state = "camcorder_on"
+ else
+ icon_state = "camcorder"
+ item_state = "camcorder"
+ var/mob/living/carbon/human/H = loc
+ if(istype(H))
+ H.update_inv_r_hand()
+ H.update_inv_l_hand()
+ H.update_inv_belt()
+
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index c7b7300113..2cade230af 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -47,6 +47,7 @@ em {font-style: normal;font-weight: bold;}
.syndradio {color: #6D3F40;}
.centradio {color: #5C5C8A;}
.airadio {color: #FF00FF;}
+.entradio {color: #339966;}
.secradio {color: #A30000;}
.engradio {color: #A66300;}
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index 18c6f0e46c..134f719c3a 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 55f131159d..9b95d51dc3 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 158f56b45f..754d4309e9 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 8714d670a1..3c5b0ce667 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/polaris.dme b/polaris.dme
index 413a2fd1ca..0c0b3034a9 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -777,6 +777,7 @@
#include "code\game\objects\items\devices\taperecorder.dm"
#include "code\game\objects\items\devices\traitordevices.dm"
#include "code\game\objects\items\devices\transfer_valve.dm"
+#include "code\game\objects\items\devices\tvcamera.dm"
#include "code\game\objects\items\devices\uplink.dm"
#include "code\game\objects\items\devices\uplink_random_lists.dm"
#include "code\game\objects\items\devices\violin.dm"