diff --git a/Content.Server/SurveillanceCamera/Components/SurveillanceBodyCameraComponent.cs b/Content.Server/SurveillanceCamera/Components/SurveillanceBodyCameraComponent.cs
new file mode 100644
index 0000000000..99235dd7a5
--- /dev/null
+++ b/Content.Server/SurveillanceCamera/Components/SurveillanceBodyCameraComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server.SurveillanceCamera;
+
+[RegisterComponent]
+public sealed partial class SurveillanceBodyCameraComponent : Component
+{
+ [DataField("wattage"), ViewVariables(VVAccess.ReadWrite)]
+ public float Wattage = 0.3f;
+
+ public bool lastState = false;
+}
diff --git a/Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs b/Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs
index 8473462f80..0cbaba66ca 100644
--- a/Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs
+++ b/Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs
@@ -4,7 +4,7 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototy
namespace Content.Server.SurveillanceCamera;
[RegisterComponent]
-[Access(typeof(SurveillanceCameraSystem))]
+[Access(typeof(SurveillanceCameraSystem), typeof(SurveillanceBodyCameraSystem))]
public sealed partial class SurveillanceCameraComponent : Component
{
// List of active viewers. This is for bookkeeping purposes,
diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceBodyCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceBodyCameraSystem.cs
new file mode 100644
index 0000000000..6435623dd5
--- /dev/null
+++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceBodyCameraSystem.cs
@@ -0,0 +1,116 @@
+using Content.Server.Popups;
+using Content.Server.PowerCell;
+using Content.Shared.Clothing.EntitySystems;
+using Content.Shared.Examine;
+using Content.Shared.Interaction;
+using Content.Shared.Item;
+using Content.Shared.PowerCell.Components;
+using Content.Shared.Toggleable;
+
+namespace Content.Server.SurveillanceCamera;
+
+///
+/// This handles the bodycamera all itself. Activation, examine,init, powercell stuff.
+///
+public sealed class SurveillanceBodyCameraSystem : EntitySystem
+{
+ [Dependency] private readonly PowerCellSystem _powerCell = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly SurveillanceCameraSystem _surveillanceCameras = default!;
+ [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+ [Dependency] private readonly SharedItemSystem _item = default!;
+ [Dependency] private readonly ClothingSystem _clothing = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnActivate);
+ SubscribeLocalEvent(OnPowerCellChanged);
+ SubscribeLocalEvent(OnExamine);
+ SubscribeLocalEvent(OnInit);
+ }
+
+ public void OnInit(EntityUid uid, SurveillanceBodyCameraComponent comp, ComponentInit args)
+ {
+
+ if (!TryComp(uid, out var surComp))
+ return;
+
+ _surveillanceCameras.SetActive(uid, false, surComp);
+ surComp.NetworkSet = true;
+ AppearanceChange(uid, surComp.Active);
+ }
+ public override void Update(float frameTime)
+ {
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var uid, out var cam))
+ {
+ if (!_powerCell.TryGetBatteryFromSlot(uid, out var battery))
+ continue;
+
+ if (!TryComp(uid, out var surComp))
+ continue;
+
+ if (!surComp.Active)
+ continue;
+
+ if (!battery.TryUseCharge(cam.Wattage * frameTime))
+ {
+ _surveillanceCameras.SetActive(uid, false, surComp);
+ AppearanceChange(uid, surComp.Active);
+ }
+ }
+ }
+ public void OnActivate(EntityUid uid, SurveillanceBodyCameraComponent comp, ActivateInWorldEvent args)
+ {
+ if (!TryComp(uid, out var surComp))
+ return;
+
+ if (!_powerCell.TryGetBatteryFromSlot(uid, out var battery))
+ return;
+
+ _surveillanceCameras.SetActive(uid, battery.CurrentCharge > comp.Wattage && !surComp.Active, surComp);
+ AppearanceChange(uid, surComp.Active);
+
+ var message = Loc.GetString(surComp.Active ? "surveillance-body-camera-on" : "surveillance-body-camera-off");
+ _popup.PopupEntity(message, args.User, args.User);
+ args.Handled = true;
+ }
+
+ public void OnPowerCellChanged(EntityUid uid, SurveillanceBodyCameraComponent comp, PowerCellChangedEvent args)
+ {
+ if (!TryComp(uid, out var surComp))
+ return;
+
+ if (args.Ejected)
+ {
+ _surveillanceCameras.SetActive(uid, false, surComp);
+ AppearanceChange(uid, surComp.Active);
+ }
+ }
+
+ public void OnExamine(EntityUid uid, SurveillanceBodyCameraComponent comp, ExaminedEvent args)
+ {
+ if (!TryComp(uid, out var surComp))
+ return;
+
+ if (args.IsInDetailsRange)
+ {
+ var message =
+ Loc.GetString(surComp.Active ? "surveillance-body-camera-on" : "surveillance-body-camera-off");
+ args.PushMarkup(message);
+ }
+ }
+
+ public void AppearanceChange(EntityUid uid, Boolean isActive)
+ {
+ if (TryComp(uid, out var appearance) &&
+ TryComp(uid, out var item))
+ {
+ _item.SetHeldPrefix(uid, isActive ? "on" : "off", false, item);
+ _clothing.SetEquippedPrefix(uid, isActive ? null : "off");
+ _appearance.SetData(uid, ToggleVisuals.Toggled, isActive, appearance);
+ }
+ }
+}
diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs
index c1b46c3d91..7c389f5a8d 100644
--- a/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs
+++ b/Content.Shared/Containers/ItemSlot/ItemSlotsComponent.cs
@@ -1,3 +1,4 @@
+using Content.Shared.Clothing.EntitySystems;
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.Containers;
diff --git a/Resources/Locale/ru-RU/prototypes/catalog/fills/crates/security-crates.ftl b/Resources/Locale/ru-RU/prototypes/catalog/fills/crates/security-crates.ftl
index 14d20802f7..3213b1025d 100644
--- a/Resources/Locale/ru-RU/prototypes/catalog/fills/crates/security-crates.ftl
+++ b/Resources/Locale/ru-RU/prototypes/catalog/fills/crates/security-crates.ftl
@@ -14,3 +14,5 @@ ent-CrateSecurityBiosuit = ящик биокостюмов безопаснос
.desc = Содержит 2 костюма биологической защиты, гарантирующих, что никакая болезнь не отвлечет вас от ваших обязанностей. Для открытия требуется доступ СБ.
ent-CreateSecurityMindShield = ящик имплантов защиты разума
.desc = Содержит в себе 5 имплантов защиты разума. Чтобы открыть необходим уровень доступа Служба безопасности.
+ent-CrateSecurityBodyCamera = ящик нагрудных камер
+ .desc = Содержит 10 нагрудных камер. Чтобы открыть необходим уровень доступа Служба безопасности.
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/boxes/security.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/boxes/security.ftl
index 38a1b55087..2792ae52bf 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/boxes/security.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/boxes/security.ftl
@@ -16,3 +16,6 @@ ent-BoxZiptie = коробка стяжек
ent-BoxForensicPad = коробка криминалистических пластинок
.desc = Коробка криминалистических пластинок.
.suffix = { "" }
+ent-BoxBodyCamera = коробка бодикамер
+ .desc = Коробка нагрудных камер службы безопасности.
+ .suffix = { "" }
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/security.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/security.ftl
index ceaccd2212..36c0645131 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/security.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/security.ftl
@@ -10,3 +10,6 @@ ent-PortableFlasher = переносная вспышка
ent-DeskBell = настольный звонок
.desc = Краеугольный камень любой работы по обслуживанию клиентов. Вы испытываете непреодолимое желание позвонить в него.
.suffix = { "" }
+ent-SurveillanceBodyCamera = бодикамера
+ .desc = Следи за собой! Или за другими. Или за всеми сразу. Или ни за кем. Как хочешь. Нательная камера, записывающая все, что происходит вокруг.
+ .suffix = { "" }
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/surveillance_camera_routers.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/surveillance_camera_routers.ftl
index 5da4e56c19..05bb76bc2e 100644
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/surveillance_camera_routers.ftl
+++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/machines/surveillance_camera_routers.ftl
@@ -31,6 +31,9 @@ ent-SurveillanceCameraRouterGeneral = { ent-SurveillanceCameraRouterBase }
ent-SurveillanceCameraWirelessRouterBase = маршрутизатор беспроводных камер
.desc = Маршрутизатор для беспроводных камер наблюдения. Он маршрутизирует. Возможно.
.suffix = { "" }
+ent-SurveillanceCameraWirelessRouterSecurity = { ent-SurveillanceCameraWirelessRouterBase }
+ .suffix = Охранный
+ .desc = { ent-SurveillanceCameraWirelessRouterBase.desc }
ent-SurveillanceCameraWirelessRouterConstructed = { ent-SurveillanceCameraWirelessRouterBase }
.suffix = Построенный
.desc = { ent-SurveillanceCameraWirelessRouterBase.desc }
diff --git a/Resources/Locale/ru-RU/surveillance-camera/surveillance-camera-ui.ftl b/Resources/Locale/ru-RU/surveillance-camera/surveillance-camera-ui.ftl
index 4b0c5535fa..4ab4bbecf0 100644
--- a/Resources/Locale/ru-RU/surveillance-camera/surveillance-camera-ui.ftl
+++ b/Resources/Locale/ru-RU/surveillance-camera/surveillance-camera-ui.ftl
@@ -9,3 +9,5 @@ surveillance-camera-monitor-ui-status-disconnected = Отключено
surveillance-camera-monitor-ui-no-subnets = Нет подсетей
surveillance-camera-setup = Настроить
surveillance-camera-setup-ui-set = Установить
+surveillance-body-camera-on = Камера включена
+surveillance-body-camera-off = Камера выключена
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml
index 091501b7fd..10fa382a3c 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml
@@ -77,3 +77,13 @@
cost: 1000
category: Security
group: market
+
+- type: cargoProduct
+ id: SecurityBodycam
+ icon:
+ sprite: Objects/Specific/Security/body-camera.rsi
+ state: unpowered
+ product: CrateSecurityBodyCamera
+ cost: 2000
+ category: Security
+ group: market
diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml
index 9975f4f3f0..2a4a444d23 100644
--- a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml
+++ b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml
@@ -81,3 +81,20 @@
layers:
- state: box_security
- state: forensic
+
+#White
+
+- type: entity
+ name: body camera box
+ parent: BoxCardboard
+ id: BoxBodyCamera
+ description: A box full of body cameras.
+ components:
+ - type: StorageFill
+ contents:
+ - id: SurveillanceBodyCamera
+ amount: 5
+ - type: Sprite
+ layers:
+ - state: box_security
+ - state: bodycam
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/security.yml b/Resources/Prototypes/Catalog/Fills/Crates/security.yml
index ea8c7ce0d3..87b3344237 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/security.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/security.yml
@@ -97,5 +97,14 @@
amount: 4
- id: TrackingImplanter
amount: 4
-
+
# Cosmetic Crates
+
+- type: entity
+ id: CrateSecurityBodyCamera
+ parent: CrateSecgear
+ components:
+ - type: StorageFill
+ contents:
+ - id: BoxBodyCamera
+ amount: 2
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml
index 1334ffd23e..ca35ae0952 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml
@@ -21,6 +21,7 @@
- id: ClothingOuterHardsuitWarden
- id: HoloprojectorSecurity
- id: ClothingEyesHudSecurity
+ - id: BoxBodyCamera
- type: entity
id: LockerWardenFilled
@@ -45,6 +46,7 @@
- id: DoorRemoteArmory
- id: HoloprojectorSecurity
- id: ClothingEyesHudSecurity
+ - id: BoxBodyCamera
- type: entity
id: LockerSecurityFilled
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Security/body-camera.yml b/Resources/Prototypes/Entities/Objects/Specific/Security/body-camera.yml
new file mode 100644
index 0000000000..65b71eed02
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Specific/Security/body-camera.yml
@@ -0,0 +1,73 @@
+- type: entity
+ parent: BaseItem
+ id: SurveillanceBodyCamera
+ name: Security Body Camera
+ description: MP3 player sized pocket camera for security officers.
+ components:
+ - type: SurveillanceBodyCamera
+ - type: Sprite # Sprites section
+ sprite: Objects/Specific/Security/body-camera.rsi
+ layers:
+ - state: unpowered
+ - state: active-animated
+ map: ["active"]
+ visible: false
+ - type: Clothing
+ sprite: Objects/Specific/Security/body-camera.rsi
+ quickEquip: false
+ slots:
+ - neck
+ - type: ToggleableLightVisuals
+ spriteLayer: active
+ inhandVisuals:
+ left:
+ - state: inhand-left-active
+ shader: unshaded
+ right:
+ - state: inhand-left-active
+ shader: unshaded
+ - type: Item
+ heldPrefix: off
+ sprite: Objects/Specific/Security/body-camera.rsi
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.ToggleVisuals.Toggled:
+ enum.ToggleVisuals.Layer:
+ True: { state: active-animated }
+ False: { state: unpowered } # END
+ - type: Eye
+ - type: WirelessNetworkConnection
+ range: 300
+ - type: ActiveListener
+ range: 5
+ - type: SurveillanceCameraMicrophone
+ blacklist:
+ components:
+ - SurveillanceCamera
+ - SurveillanceCameraMonitor
+ - RadioSpeaker
+ - type: DeviceNetwork
+ deviceNetId: Wireless
+ receiveFrequencyId: SurveillanceCameraSecurity
+ transmitFrequencyId: SurveillanceCamera
+ - type: SurveillanceCamera
+ setupAvailableNetworks:
+ - SurveillanceCameraSecurity
+ - type: PowerCellSlot
+ cellSlotId: cell_slot
+ - type: ContainerContainer
+ containers:
+ cell_slot: !type:ContainerSlot
+ - type: ItemSlots
+ slots:
+ cell_slot:
+ name: power-cell-slot-component-slot-name-default
+ startingItem: PowerCellMedium
+ - type: UserInterface
+ interfaces:
+ - key: enum.SurveillanceCameraSetupUiKey.Camera
+ type: SurveillanceCameraSetupBoundUi
+ - type: Tag
+ tags:
+ - SurveillanceBodyCamera
diff --git a/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml b/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml
index 1eeaec9b7c..f7021fbe52 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/surveillance_camera_routers.yml
@@ -135,6 +135,7 @@
- type: SurveillanceCameraRouter
setupAvailableNetworks:
- SurveillanceCameraEntertainment
+ - SurveillanceCameraSecurity
- type: entity
parent: SurveillanceCameraWirelessRouterBase
@@ -143,3 +144,12 @@
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraEntertainment
+
+# Body Camera Separate Router
+- type: entity
+ parent: SurveillanceCameraWirelessRouterBase
+ id: SurveillanceCameraWirelessRouterSecurity
+ suffix: Security
+ components:
+ - type: SurveillanceCameraRouter
+ subnetFrequency: SurveillanceCameraSecurity
diff --git a/Resources/Prototypes/White/tags.yml b/Resources/Prototypes/White/tags.yml
index 9b53e3b41c..febef3d7ce 100644
--- a/Resources/Prototypes/White/tags.yml
+++ b/Resources/Prototypes/White/tags.yml
@@ -42,3 +42,6 @@
- type: Tag
id: Telecrystal
+
+- type: Tag
+ id: SurveillanceBodyCamera
diff --git a/Resources/Textures/Clothing/Uniforms/Overlay.rsi/camera.png b/Resources/Textures/Clothing/Uniforms/Overlay.rsi/camera.png
new file mode 100644
index 0000000000..32cb4e7ab2
Binary files /dev/null and b/Resources/Textures/Clothing/Uniforms/Overlay.rsi/camera.png differ
diff --git a/Resources/Textures/Clothing/Uniforms/Overlay.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Overlay.rsi/meta.json
new file mode 100644
index 0000000000..f96e46ffda
--- /dev/null
+++ b/Resources/Textures/Clothing/Uniforms/Overlay.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version" : 1,
+ "license" : "CC-BY-SA-3.0",
+ "copyright" : "Copyright (c) White Dream Space Station 14",
+ "size" : {
+ "x" : 32,
+ "y" : 32
+ },
+ "states" : [
+ {
+ "name" : "camera"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/active-animated.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/active-animated.png
new file mode 100644
index 0000000000..070a9a42b7
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/active-animated.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/active.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/active.png
new file mode 100644
index 0000000000..dceb8e3976
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/active.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/equipped-INNERCLOTHING.png
new file mode 100644
index 0000000000..c2716229e0
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/equipped-INNERCLOTHING.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/equipped-NECK.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/equipped-NECK.png
new file mode 100644
index 0000000000..66c5cdbfe2
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/equipped-NECK.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/inactive.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/inactive.png
new file mode 100644
index 0000000000..87a051d173
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/inactive.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/meta.json b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/meta.json
new file mode 100644
index 0000000000..6e6fd3aec3
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/meta.json
@@ -0,0 +1,108 @@
+{
+ "version" : 1,
+ "license" : "CC-BY-SA-3.0",
+ "copyright" : "Copyright (c) White Dream Space Station 14",
+ "size" : {
+ "x" : 32,
+ "y" : 32
+ },
+ "states" : [
+ {
+ "name" : "unpowered"
+ },
+ {
+ "name" : "active"
+ },
+ {
+ "name" : "active-animated",
+ "delays" : [
+ [
+ 1,
+ 2
+ ]
+ ]
+ },
+ {
+ "name" : "off-inhand-right",
+ "directions" : 4
+ },
+ {
+ "name" : "off-inhand-left",
+ "directions" : 4
+ },
+ {
+ "name" : "on-inhand-right",
+ "directions" : 4,
+ "delays" : [
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ]
+ ]
+ },
+ {
+ "name" : "on-inhand-left",
+ "directions" : 4,
+ "delays" : [
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "equipped-NECK",
+ "directions": 4,
+ "delays" : [
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ]
+ ]
+ },
+ {
+ "name" : "off-equipped-NECK",
+ "directions" : 4
+ },
+ {
+ "name": "equipped-INNERCLOTHING",
+ "directions" : 4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-equipped-NECK.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-equipped-NECK.png
new file mode 100644
index 0000000000..7587e067f3
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-equipped-NECK.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-inhand-left.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-inhand-left.png
new file mode 100644
index 0000000000..043847e22b
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-inhand-right.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-inhand-right.png
new file mode 100644
index 0000000000..ecae3b2b56
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/off-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/on-inhand-left.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/on-inhand-left.png
new file mode 100644
index 0000000000..87e1b4346b
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/on-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/on-inhand-right.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/on-inhand-right.png
new file mode 100644
index 0000000000..e5e017579b
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/on-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Specific/Security/body-camera.rsi/unpowered.png b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/unpowered.png
new file mode 100644
index 0000000000..edd9c172d0
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Security/body-camera.rsi/unpowered.png differ
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/bodycam.png b/Resources/Textures/Objects/Storage/boxes.rsi/bodycam.png
new file mode 100644
index 0000000000..8958224c6f
Binary files /dev/null and b/Resources/Textures/Objects/Storage/boxes.rsi/bodycam.png differ
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
index 47c69de027..d47a015fd4 100644
--- a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
+++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
@@ -205,6 +205,9 @@
},
{
"name": "vials"
+ },
+ {
+ "name": "bodycam"
}
]
}
diff --git a/Resources/Textures/Structures/Machines/computers.rsi/bodycammonitor.png b/Resources/Textures/Structures/Machines/computers.rsi/bodycammonitor.png
new file mode 100644
index 0000000000..d203398790
Binary files /dev/null and b/Resources/Textures/Structures/Machines/computers.rsi/bodycammonitor.png differ
diff --git a/Resources/Textures/Structures/Machines/computers.rsi/bodycamprogram.png b/Resources/Textures/Structures/Machines/computers.rsi/bodycamprogram.png
new file mode 100644
index 0000000000..1282216d16
Binary files /dev/null and b/Resources/Textures/Structures/Machines/computers.rsi/bodycamprogram.png differ
diff --git a/Resources/Textures/Structures/Machines/computers.rsi/meta.json b/Resources/Textures/Structures/Machines/computers.rsi/meta.json
index b6741b195d..bfb9a8ccff 100644
--- a/Resources/Textures/Structures/Machines/computers.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/computers.rsi/meta.json
@@ -7,6 +7,12 @@
"y": 32
},
"states": [
+ {
+ "name" : "bodycammonitor"
+ },
+ {
+ "name" : "bodycamprogram"
+ },
{
"name": "ai-fixer",
"directions": 4