diff --git a/code/__DEFINES/inventory/accessories.dm b/code/__DEFINES/inventory/accessories.dm index 36528fdb095..c19ae8a4d49 100644 --- a/code/__DEFINES/inventory/accessories.dm +++ b/code/__DEFINES/inventory/accessories.dm @@ -13,5 +13,6 @@ #define ACCESSORY_SLOT_ARMOR_S 0x1000 #define ACCESSORY_SLOT_ARMOR_M 0x2000 #define ACCESSORY_SLOT_HELM_C 0x4000 +#define ACCESSORY_SLOT_HELM_R 0x8000 #define ACCESSORY_SLOT_TORSO (ACCESSORY_SLOT_UTILITY|ACCESSORY_SLOT_WEAPON) diff --git a/code/__DEFINES/machinery.dm b/code/__DEFINES/machinery.dm index 209e432b011..97c31383a26 100644 --- a/code/__DEFINES/machinery.dm +++ b/code/__DEFINES/machinery.dm @@ -83,6 +83,8 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called manu #define NETWORK_OUTSIDE "Outside" #define NETWORK_EXPLORATION "Exploration" #define NETWORK_XENOBIO "Xenobiology" +#define NETWORK_CIV_HELMETS "Public Helmets" +#define NETWORK_SEC_HELMETS "Security Helmets" #define NETWORK_EXPLO_HELMETS "Exploration Helmets" //! Off Station Camera Networks diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 205e938419d..818c695a115 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -2,8 +2,8 @@ name = "helmet" desc = "Standard headgear. Protects well enough against a wide range of attacks." icon_state = "helmet" - valid_accessory_slots = (ACCESSORY_SLOT_HELM_C) - restricted_accessory_slots = (ACCESSORY_SLOT_HELM_C) + valid_accessory_slots = ACCESSORY_SLOT_HELM_C|ACCESSORY_SLOT_HELM_R + restricted_accessory_slots = ACCESSORY_SLOT_HELM_C|ACCESSORY_SLOT_HELM_R clothing_flags = THICKMATERIAL armor_type = /datum/armor/station/medium inv_hide_flags = HIDEEARS|BLOCKHEADHAIR @@ -26,7 +26,7 @@ desc = "A helmet painted in Peacekeeper blue. Stands out like a sore thumb." icon_state = "helmet_sol" armor_type = /datum/armor/oricon/peacekeeper - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R /obj/item/clothing/head/helmet/oricon/command name = "command helmet" @@ -61,7 +61,7 @@ armor_type = /datum/armor/station/riot item_state_slots = list(SLOT_ID_RIGHT_HAND = "swat", SLOT_ID_LEFT_HAND = "swat") siemens_coefficient = 0.5 - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R action_button_name = "Toggle Visor" /obj/item/clothing/head/helmet/riot/attack_self(mob/user) @@ -83,7 +83,7 @@ item_state_slots = list(SLOT_ID_RIGHT_HAND = "helmet", SLOT_ID_LEFT_HAND = "helmet") armor_type = /datum/armor/station/ablative siemens_coefficient = 0.2 - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R /obj/item/clothing/head/helmet/ballistic name = "ballistic helmet" @@ -92,7 +92,7 @@ item_state_slots = list(SLOT_ID_RIGHT_HAND = "helmet", SLOT_ID_LEFT_HAND = "helmet") armor_type = /datum/armor/station/ballistic siemens_coefficient = 0.7 - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R /obj/item/clothing/head/helmet/combat name = "combat helmet" @@ -102,7 +102,7 @@ armor_type = /datum/armor/station/combat inv_hide_flags = HIDEEARS|HIDEEYES|BLOCKHEADHAIR siemens_coefficient = 0.6 - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R /obj/item/clothing/head/helmet/redcombat name = "combat helmet" @@ -185,7 +185,7 @@ armor_type = /datum/armor/station/tactical inv_hide_flags = HIDEEARS|BLOCKHAIR siemens_coefficient = 0.7 - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R /obj/item/clothing/head/helmet/augment name = "Augment Array" @@ -232,7 +232,7 @@ icon_state = "erthelmet_cmd" item_state_slots = list(SLOT_ID_RIGHT_HAND = "syndicate-helm-green", SLOT_ID_LEFT_HAND = "syndicate-helm-green") armor_type = /datum/armor/centcom/ert - valid_accessory_slots = null + valid_accessory_slots = ACCESSORY_SLOT_HELM_R //Commander /obj/item/clothing/head/helmet/ert/command diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index 05adf8a2ead..007848b460a 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -193,6 +193,7 @@ armor_type = /datum/armor/station/secsuit siemens_coefficient = 0.7 light_overlay = "helmet_light_dual" + camera_networks = list(NETWORK_SEC_HELMETS) /obj/item/clothing/suit/space/void/security name = "security voidsuit" @@ -380,6 +381,7 @@ name = "head of security protosuit helmet" icon_state = "hosproto" armor_type = /datum/armor/security/hos/space + camera_networks = list(NETWORK_SEC_HELMETS) /obj/item/clothing/suit/space/void/headofsecurity desc = "A customized security voidsuit. Has additional composite armor." diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm index f71c2f837a9..227fc4aebe5 100644 --- a/code/modules/clothing/under/accessories/armor.dm +++ b/code/modules/clothing/under/accessories/armor.dm @@ -440,6 +440,70 @@ desc = "A fabric cover for armored helmets. This one has SAARE's colors." icon_state = "helmcover_saare" +///////////////// +//Helmet Cameras +///////////////// + +/obj/item/clothing/accessory/armor/helmetcamera + name = "helmet camera" + desc = "A small camera that attaches to helmets." + icon_override = 'icons/mob/clothing/ties.dmi' + icon = 'icons/obj/clothing/modular_armor.dmi' + icon_state = "helmcam" + slot = ACCESSORY_SLOT_HELM_R + var/obj/machinery/camera/camera + var/list/camera_networks + camera_networks = list(NETWORK_CIV_HELMETS) + + +/obj/item/clothing/accessory/armor/helmetcamera/attack_self(mob/user) + . = ..() + if(.) + return + if(camera_networks) + if(!camera) + camera = new /obj/machinery/camera(src) + camera.replace_networks(camera_networks) + camera.set_status(FALSE) //So the camera will activate in the following check. + + if(camera.status == TRUE) + camera.set_status(FALSE) + to_chat(usr, "Camera deactivated.") + else + camera.set_status(TRUE) + camera.c_tag = usr.name + to_chat(usr, "User scanned as [camera.c_tag]. Camera activated.") + else + to_chat(usr, "This object does not have a camera.") //Shouldnt ever be visible for helmet cams. + return + +/obj/item/clothing/accessory/armor/helmetcamera/examine(mob/user) + . = ..() + if(camera_networks && get_dist(user,src) <= 1) + . += "The [camera ? "" : "in"]active." + +/obj/item/clothing/accessory/armor/helmetcamera/body + name = "body camera" + desc = "A small camera that attaches to most uniforms." + icon_override = 'icons/mob/clothing/ties.dmi' + icon = 'icons/obj/clothing/modular_armor.dmi' + icon_state = "helmcam_body" + slot = ACCESSORY_SLOT_DECOR + camera_networks = list(NETWORK_CIV_HELMETS) + +/obj/item/clothing/accessory/armor/helmetcamera/security + name = "\improper Security helmet camera" + desc = "A small camera that attaches to helmets. This one has its feed restricted to Security." + icon_state = "helmcam_sec" + camera_networks = list(NETWORK_SEC_HELMETS) + +/obj/item/clothing/accessory/armor/helmetcamera/exploration + name = "\improper Exploration helmet camera" + desc = "A small camera that attaches to helmets. This one has its feed restricted to Exploration." + icon_state = "helmcam_explo" + camera_networks = list(NETWORK_EXPLO_HELMETS) + + //Lightweight Limb Plating - These are incompatible with plate carriers. //Debug variant diff --git a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm index 079a8a0b9d6..7e2351e67d8 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_laptop.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_laptop.dm @@ -64,3 +64,37 @@ card_slot = new/obj/item/computer_hardware/card_slot(src) battery_module = new/obj/item/computer_hardware/battery_module/super(src) battery_module.charge_to_full() + +/////// +//Roles +/////// + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security + name = "\improper Security Officer's laptop" + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security/install_default_programs() + ..() + hard_drive.store_file(new/datum/computer_file/program/camera_monitor()) + hard_drive.store_file(new/datum/computer_file/program/camera_monitor/sechelmet()) + hard_drive.store_file(new/datum/computer_file/program/digitalwarrant()) + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security/warden + name = "\improper Warden's laptop" + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security/warden/install_default_programs() + ..() + //hard_drive.store_file(new/datum/computer_file/program/warden()) This will hopefully have a working alert level shifter program that only has access to green, blue, and yellow. + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security/hos + name = "\improper Head of Security's laptop" + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/security/hos/install_default_programs() + ..() + hard_drive.store_file(new/datum/computer_file/program/comm()) + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/pathfinder + name = "\improper Pathfinder's laptop" + +/obj/item/modular_computer/laptop/preset/custom_loadout/standard/pathfinder/install_default_programs() + ..() + hard_drive.store_file(new/datum/computer_file/program/camera_monitor/explohelmet()) diff --git a/code/modules/modular_computers/file_system/programs/generic/camera.dm b/code/modules/modular_computers/file_system/programs/generic/camera.dm index 1dc18affcfb..b8db705ac9b 100644 --- a/code/modules/modular_computers/file_system/programs/generic/camera.dm +++ b/code/modules/modular_computers/file_system/programs/generic/camera.dm @@ -41,3 +41,42 @@ size = 14 tguimodule_path = /datum/tgui_module_old/camera/ntos/ert available_on_ntnet = 0 + +//Helmet Cameras +/datum/computer_file/program/camera_monitor/helmet + filename = "helmetcammon" + filedesc = "Helmet Camera Monitoring" + tguimodule_path = /datum/tgui_module_old/camera/ntos/helmet + program_icon_state = "cameras" + program_key_state = "generic_key" + program_menu_icon = "search" + extended_desc = "This program allows remote access to all civilian helmet cameras." + size = 8 + available_on_ntnet = 1 + requires_ntnet = 1 + +/datum/computer_file/program/camera_monitor/sechelmet + filename = "sechelmetcammon" + filedesc = "Security Helmet Camera Monitoring" + tguimodule_path = /datum/tgui_module_old/camera/ntos/security_helmet + program_icon_state = "cameras" + program_key_state = "generic_key" + program_menu_icon = "search" + extended_desc = "This program allows remote access to all civilian helmet cameras. This camera network requires Security clearance." + size = 8 + available_on_ntnet = 1 + requires_ntnet = 1 + required_access = ACCESS_SECURITY_EQUIPMENT + +/datum/computer_file/program/camera_monitor/explohelmet + filename = "explohelmetcammon" + filedesc = "Exploration Helmet Camera Monitoring" + tguimodule_path = /datum/tgui_module_old/camera/ntos/exploration_helmet + program_icon_state = "cameras" + program_key_state = "generic_key" + program_menu_icon = "search" + extended_desc = "This program allows remote access to all civilian helmet cameras. This camera network requires Exploration clearance." + size = 8 + available_on_ntnet = 1 + requires_ntnet = 1 + required_access = ACCESS_GENERAL_EXPLORER diff --git a/code/modules/tgui/modules/camera.dm b/code/modules/tgui/modules/camera.dm index f3397a72bb1..08f100bf7aa 100644 --- a/code/modules/tgui/modules/camera.dm +++ b/code/modules/tgui/modules/camera.dm @@ -296,3 +296,21 @@ /datum/tgui_module_old/camera/ntos/hacked/New(host) . = ..(host, GLOB.using_map.station_networks.Copy()) + +//Crew Helmet Cams +/datum/tgui_module_old/camera/ntos/helmet + name = "Public Helmet Camera Monitor" + +/datum/tgui_module_old/camera/ntos/helmet/New(host) + . = ..(host, list(NETWORK_CIV_HELMETS)) +/datum/tgui_module_old/camera/ntos/security_helmet + name = "Security Helmet Camera Monitor" + +/datum/tgui_module_old/camera/ntos/security_helmet/New(host) + . = ..(host, list(NETWORK_SEC_HELMETS)) + +/datum/tgui_module_old/camera/ntos/exploration_helmet + name = "Exploration Helmet Camera Monitor" + +/datum/tgui_module_old/camera/ntos/exploration_helmet/New(host) + . = ..(host, list(NETWORK_EXPLO_HELMETS)) diff --git a/icons/mob/clothing/ties.dmi b/icons/mob/clothing/ties.dmi index c2d53425c0b..e2e8dc6616a 100644 Binary files a/icons/mob/clothing/ties.dmi and b/icons/mob/clothing/ties.dmi differ diff --git a/icons/obj/clothing/Sprite-0002.dmi b/icons/obj/clothing/Sprite-0002.dmi new file mode 100644 index 00000000000..948401a6185 Binary files /dev/null and b/icons/obj/clothing/Sprite-0002.dmi differ diff --git a/icons/obj/clothing/modular_armor.dmi b/icons/obj/clothing/modular_armor.dmi index 79857a61fc1..f3003f37db6 100644 Binary files a/icons/obj/clothing/modular_armor.dmi and b/icons/obj/clothing/modular_armor.dmi differ diff --git a/maps/map_files/rift/rift-05-surface2.dmm b/maps/map_files/rift/rift-05-surface2.dmm index 753b7a9b83e..80f4a203839 100644 --- a/maps/map_files/rift/rift-05-surface2.dmm +++ b/maps/map_files/rift/rift-05-surface2.dmm @@ -13379,9 +13379,6 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/machinery/light{ - dir = 1 - }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_5) "iqx" = ( diff --git a/maps/rift/rift_defines.dm b/maps/rift/rift_defines.dm index 408e1715f13..9fa6cc79a9b 100644 --- a/maps/rift/rift_defines.dm +++ b/maps/rift/rift_defines.dm @@ -129,7 +129,6 @@ NETWORK_SECURITY, NETWORK_TCOMMS, NETWORK_LYTHIOS, - NETWORK_EXPLO_HELMETS ) secondary_networks = list( NETWORK_ERT, @@ -140,7 +139,10 @@ NETWORK_ALARM_POWER, NETWORK_ALARM_FIRE, NETWORK_TALON_HELMETS, - NETWORK_TALON_SHIP + NETWORK_TALON_SHIP, + NETWORK_CIV_HELMETS, + NETWORK_EXPLO_HELMETS, + NETWORK_SEC_HELMETS ) bot_patrolling = FALSE