diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index 1204393f095..3380355761e 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -392,7 +392,7 @@ Auto Patrol: []"},
..()
return
- if(type != /obj/item/clothing/head/helmet) //Eh, but we don't want people making secbots out of space helmets.
+ if(type != /obj/item/clothing/head/helmet && type != /obj/item/clothing/head/helmet/sec) //Eh, but we don't want people making secbots out of space helmets.
return
if(S.secured)
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 7429e162871..f93b7f48696 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -331,3 +331,18 @@
return 1
busy = 0
return 0
+
+
+/obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets.
+ var/turf/prev_turf
+
+/obj/machinery/camera/portable/New()
+ ..()
+ assembly.state = 0 //These cameras are portable, and so shall be in the portable state if removed.
+ assembly.anchored = 0
+ assembly.update_icon()
+
+/obj/machinery/camera/portable/process() //Updates whenever the camera is moved.
+ if(cameranet && get_turf(src) != prev_turf)
+ cameranet.updatePortableCamera(src)
+ prev_turf = get_turf(src)
\ No newline at end of file
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 8875e8fcb38..12d4290aea3 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -12,21 +12,27 @@
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
strip_delay = 60
can_flashlight = 1
- var/obj/machinery/camera/helmetCam = null
+ var/obj/machinery/camera/portable/helmetCam = null
var/spawnWithHelmetCam = 0
- var/canAttachCam = 1
+ var/canAttachCam = 0
/obj/item/clothing/head/helmet/New()
..()
if(spawnWithHelmetCam)
- helmetCam = new /obj/machinery/camera(src)
+ helmetCam = new /obj/machinery/camera/portable(src)
helmetCam.c_tag = "Helmet-Mounted Camera (No User)([rand(1,999)])"
helmetCam.network = list("SS13")
update_icon()
+/obj/item/clothing/head/helmet/emp_act(severity)
+ if(helmetCam)
+ helmetCam.emp_act(severity)
+ ..()
+
/obj/item/clothing/head/helmet/sec
spawnWithHelmetCam = 1
+ canAttachCam = 1
/obj/item/clothing/head/helmet/alt
name = "bulletproof helmet"
@@ -34,7 +40,6 @@
icon_state = "helmetalt"
item_state = "helmetalt"
armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0)
- canAttachCam = 0
/obj/item/clothing/head/helmet/riot
name = "riot helmet"
@@ -48,7 +53,6 @@
action_button_name = "Toggle Helmet Visor"
visor_flags = HEADCOVERSEYES|HEADCOVERSMOUTH
visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE
- canAttachCam = 0
/obj/item/clothing/head/helmet/riot/attack_self()
if(usr.canmove && !usr.stat && !usr.restrained())
@@ -78,7 +82,6 @@
heat_protection = HEAD
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
- canAttachCam = 0
/obj/item/clothing/head/helmet/thunderdome
name = "\improper Thunderdome helmet"
@@ -91,7 +94,6 @@
heat_protection = HEAD
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
- canAttachCam = 0
/obj/item/clothing/head/helmet/roman
name = "roman helmet"
@@ -101,14 +103,12 @@
icon_state = "roman"
item_state = "roman"
strip_delay = 100
- canAttachCam = 0
/obj/item/clothing/head/helmet/roman/legionaire
name = "roman legionaire helmet"
desc = "An ancient helmet made of bronze and leather. Has a red crest on top of it."
icon_state = "roman_c"
item_state = "roman_c"
- canAttachCam = 0
/obj/item/clothing/head/helmet/gladiator
name = "gladiator helmet"
@@ -117,7 +117,6 @@
flags = HEADCOVERSEYES|BLOCKHAIR
item_state = "gladiator"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
- canAttachCam = 0
obj/item/clothing/head/helmet/redtaghelm
name = "red laser tag helmet"
@@ -128,7 +127,6 @@ obj/item/clothing/head/helmet/redtaghelm
armor = list(melee = 30, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
flags_inv = HIDEEARS|HIDEEYES
- canAttachCam = 0
obj/item/clothing/head/helmet/bluetaghelm
name = "blue laser tag helmet"
@@ -139,7 +137,6 @@ obj/item/clothing/head/helmet/bluetaghelm
armor = list(melee = 30, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
flags_inv = HIDEEARS|HIDEEYES
- canAttachCam = 0
//LightToggle
@@ -203,7 +200,7 @@ obj/item/clothing/head/helmet/bluetaghelm
user << "[src] already has a mounted camera."
return
user.drop_item()
- helmetCam = new /obj/machinery/camera(src)
+ helmetCam = new /obj/machinery/camera/portable(src)
helmetCam.assembly = A
A.loc = helmetCam
helmetCam.c_tag = "Helmet-Mounted Camera (No User)([rand(1,999)])"
@@ -218,7 +215,7 @@ obj/item/clothing/head/helmet/bluetaghelm
return
user.visible_message("[user] removes [helmetCam] from [src]","You remove [helmetCam] from [src]")
helmetCam.assembly.loc = get_turf(src)
- helmetCam.assembly.state = 0//Not welded to a wall,. it was inside a helmet
+ helmetCam.assembly = null
qdel(helmetCam)
helmetCam = null
update_icon()
@@ -276,7 +273,8 @@ obj/item/clothing/head/helmet/bluetaghelm
/obj/item/clothing/head/helmet/equipped(mob/user)
if(helmetCam)
- helmetCam.c_tag = "Helmet-Mounted Camera ([user.name])([rand(1,999)])"
+ spawn(10) //Gives time for the game to set a name (lol rhyme) to roundstart officers.
+ helmetCam.c_tag = "Helmet-Mounted Camera ([user.name])([rand(1,999)])"
/obj/item/clothing/head/helmet/dropped(mob/user)
if(F)
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index 29122abb26c..a97a9964824 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -6,7 +6,6 @@
slowdown = 1
armor = list(melee = 60, bullet = 30/*bullet through the visor*/, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90)
var/obj/item/clothing/suit/space/chronos/suit = null
- canAttachCam = 0
/obj/item/clothing/head/helmet/space/chronos/dropped()
if(suit)
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 2aeb3fc768f..610f50c5642 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -10,7 +10,7 @@
item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite)
action_button_name = "Toggle Helmet Light"
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP
- canAttachCam = 0
+
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
if(!isturf(user.loc))
@@ -57,7 +57,7 @@
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/atmos
name = "atmospherics hardsuit"
@@ -80,7 +80,7 @@
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/elite
icon_state = "hardsuit-white"
@@ -102,7 +102,7 @@
item_color = "mining"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
brightness_on = 7
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/mining
icon_state = "hardsuit-mining"
@@ -211,7 +211,7 @@
icon_state = "hardsuit1-owl"
item_state = "s_helmet"
item_color = "owl"
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/syndi/owl
name = "owl hardsuit"
@@ -235,7 +235,7 @@
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/wizard
icon_state = "hardsuit-wiz"
@@ -263,7 +263,7 @@
flash_protect = 0
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/medical
icon_state = "hardsuit-medical"
@@ -284,7 +284,7 @@
item_state = "sec_helm"
item_color = "sec"
armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50)
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/security
icon_state = "hardsuit-sec"
@@ -301,7 +301,7 @@
icon_state = "hardsuit0-hos"
item_color = "hos"
armor = list(melee = 45, bullet = 25, laser = 30,energy = 10, bomb = 25, bio = 100, rad = 50)
- canAttachCam = 0
+
/obj/item/clothing/suit/space/hardsuit/security/hos
icon_state = "hardsuit-hos"
diff --git a/html/changelogs/Gun_Hog-RR-Steelpoint-PR-8439.yml b/html/changelogs/Gun_Hog-RR-Steelpoint-PR-8439.yml
new file mode 100644
index 00000000000..049a26b1027
--- /dev/null
+++ b/html/changelogs/Gun_Hog-RR-Steelpoint-PR-8439.yml
@@ -0,0 +1,11 @@
+
+# Your name.
+author: Steelpoint, RemieRichards, and Gun Hog
+
+
+delete-after: True
+
+
+changes:
+ - rscadd: "Nanotrasen Security has authorized modifications to the standard issue helmets for officers. These helmets are now issued with a mounted camera, automatically synced to your assigned station's camera network. In addition, the helmets also include mounting points for the Seclite model of flashlights, found in your station's security vendors."
+ - rscadd: "Nanotrasen Security helmets are designed for easy repairs in the field. Officers may remove their Seclite attachment with any screwdriver, and the camera's assembly may be pried off with a crowbar. The assembly is also compatible with analyzer upgrades for scanning through the station's structure, and EMP shielding is possible by applying a sheet of plasma.