diff --git a/Content.Server/Stunnable/Systems/StunbatonSystem.cs b/Content.Server/Stunnable/Systems/StunbatonSystem.cs index c1782efaba..614331fe0a 100644 --- a/Content.Server/Stunnable/Systems/StunbatonSystem.cs +++ b/Content.Server/Stunnable/Systems/StunbatonSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Power.Events; @@ -9,7 +10,9 @@ using Content.Shared.Item.ItemToggle; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Popups; +using Content.Shared.PowerCell.Components; using Content.Shared.Stunnable; +using Robust.Shared.Containers; namespace Content.Server.Stunnable.Systems { @@ -20,6 +23,7 @@ public sealed class StunbatonSystem : SharedStunbatonSystem [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly BatterySystem _battery = default!; [Dependency] private readonly SharedItemToggleSystem _itemToggle = default!; + [Dependency] private readonly SharedContainerSystem _containers = default!; // WD EDIT public override void Initialize() { @@ -31,15 +35,17 @@ public override void Initialize() SubscribeLocalEvent(TryTurnOn); SubscribeLocalEvent(ToggleDone); SubscribeLocalEvent(OnChargeChanged); + SubscribeLocalEvent(OnPowerCellChanged); // WD EDIT } private void OnStaminaHitAttempt(Entity entity, ref StaminaDamageOnHitAttemptEvent args) { - if (!_itemToggle.IsActivated(entity.Owner) || - !TryComp(entity.Owner, out var battery) || !_battery.TryUseCharge(entity.Owner, entity.Comp.EnergyPerUse, battery)) - { + // WD EDIT START + if (!_itemToggle.IsActivated(entity.Owner) + || !TryGetBatteryComponent(entity, out var battery, out var batteryUid) + || !_battery.TryUseCharge(batteryUid.Value, entity.Comp.EnergyPerUse, battery)) args.Cancelled = true; - } + // WD EDIT END } private void OnExamined(Entity entity, ref ExaminedEvent args) @@ -49,7 +55,7 @@ private void OnExamined(Entity entity, ref ExaminedEvent arg : Loc.GetString("comp-stunbaton-examined-off"); args.PushMarkup(onMsg); - if (TryComp(entity.Owner, out var battery)) + if (TryGetBatteryComponent(entity, out var battery, out _)) // WD EDIT { var count = (int) (battery.CurrentCharge / entity.Comp.EnergyPerUse); args.PushMarkup(Loc.GetString("melee-battery-examine", ("color", "yellow"), ("count", count))); @@ -63,15 +69,22 @@ private void ToggleDone(Entity entity, ref ItemToggledEvent private void TryTurnOn(Entity entity, ref ItemToggleActivateAttemptEvent args) { - if (!TryComp(entity, out var battery) || battery.CurrentCharge < entity.Comp.EnergyPerUse) + // WD EDIT START + if (!TryGetBatteryComponent(entity, out var battery, out _) + || battery.CurrentCharge < entity.Comp.EnergyPerUse) { + args.Cancelled = true; + if (args.User != null) { - _popup.PopupEntity(Loc.GetString("stunbaton-component-low-charge"), (EntityUid) args.User, (EntityUid) args.User); + _popup.PopupEntity(Loc.GetString("stunbaton-component-low-charge"), (EntityUid) args.User, + (EntityUid) args.User); } + return; } + // WD EDIT END if (TryComp(entity, out var rig) && rig.IsRigged) { @@ -102,11 +115,47 @@ private void SendPowerPulse(EntityUid target, EntityUid? user, EntityUid used) private void OnChargeChanged(Entity entity, ref ChargeChangedEvent args) { - if (TryComp(entity.Owner, out var battery) && - battery.CurrentCharge < entity.Comp.EnergyPerUse) - { + CheckCharge(entity); // WD EDIT + } + + // WD EDIT START + private void OnPowerCellChanged(Entity entity, ref PowerCellChangedEvent args) + { + CheckCharge(entity); + } + + private void CheckCharge(Entity entity) + { + if (!TryGetBatteryComponent(entity, out var battery, out _) + || battery.CurrentCharge < entity.Comp.EnergyPerUse) _itemToggle.TryDeactivate(entity.Owner, predicted: false); + } + + private bool TryGetBatteryComponent(EntityUid uid, [NotNullWhen(true)] out BatteryComponent? battery, + [NotNullWhen(true)] out EntityUid? batteryUid) + { + if (TryComp(uid, out battery)) + { + batteryUid = uid; + return true; + } + + if (!_containers.TryGetContainer(uid, "cell_slot", out var container) + || container is not ContainerSlot slot) + { + battery = null; + batteryUid = null; + return false; } + + batteryUid = slot.ContainedEntity; + + if (batteryUid != null) + return TryComp(batteryUid, out battery); + + battery = null; + return false; } + // WD EDIT END } } diff --git a/Content.Server/_White/Melee/Snatch/SnatchOnMeleeHitComponent.cs b/Content.Server/_White/Melee/Snatch/SnatchOnMeleeHitComponent.cs new file mode 100644 index 0000000000..2988b7ba23 --- /dev/null +++ b/Content.Server/_White/Melee/Snatch/SnatchOnMeleeHitComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Server._White.Melee.Snatch; + +[RegisterComponent] +public sealed partial class SnatchOnMeleeHitComponent : Component; diff --git a/Content.Server/_White/Melee/Snatch/SnatchOnMeleeHitSystem.cs b/Content.Server/_White/Melee/Snatch/SnatchOnMeleeHitSystem.cs new file mode 100644 index 0000000000..26340e52ab --- /dev/null +++ b/Content.Server/_White/Melee/Snatch/SnatchOnMeleeHitSystem.cs @@ -0,0 +1,40 @@ +using System.Linq; +using Content.Server.Hands.Systems; +using Content.Server.Item; +using Content.Shared.Hands.Components; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server._White.Melee.Snatch; + +public sealed class SnatchOnMeleeHitSystem : EntitySystem +{ + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly ItemToggleSystem _itemToggle = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHit); + } + + private void OnHit(EntityUid uid, SnatchOnMeleeHitComponent component, MeleeHitEvent args) + { + if (!_itemToggle.IsActivated(uid) || args.HitEntities.Count == 0) + return; + + var entity = args.HitEntities.First(); + + if (entity == uid || !TryComp(entity, out HandsComponent? hands)) + return; + + foreach (var heldEntity in _hands.EnumerateHeld(entity, hands)) + { + if (!_hands.TryDrop(entity, heldEntity, null, false, false, hands)) + continue; + + _hands.PickupOrDrop(args.User, heldEntity, false); + break; + } + } +} diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml index 1a402713a0..df4c10799d 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml @@ -54,9 +54,10 @@ startBreakoutSound: path: /Audio/Items/Handcuffs/rope_takeoff.ogg uncuffEasierWhenLarge: true - - type: Construction - graph: makeshifthandcuffs - node: cuffscable + - type: Construction # WD EDIT + deconstructionTarget: cuffs + graph: StunprodGraph + node: cuffs - type: Item inhandVisuals: left: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml index d8955b4def..5a75c3202b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml @@ -1,14 +1,10 @@ - type: entity name: stun prod parent: BaseItem - id: Stunprod - description: A stun prod for illegal incapacitation. + id: StunprodBase # WD EDIT + abstract: true + noSpawn: true components: - - type: Sprite - sprite: Objects/Weapons/Melee/stunprod.rsi - layers: - - state: stunprod_off - map: [ "enum.ToggleVisuals.Layer" ] - type: ItemToggle soundActivate: collection: sparks @@ -48,29 +44,82 @@ - type: StaminaDamageOnCollide damage: 22 sound: /Audio/Weapons/egloves.ogg - - type: Battery - maxCharge: 360 - startingCharge: 360 - type: UseDelay - type: Item heldPrefix: off size: Normal + shape: # WD EDIT + - 0,0,2,0 + - type: DisarmMalus + malus: 0.225 + - type: Appearance + - type: StaticPrice + price: 100 +# WD EDIT START + - type: PowerCellSlot + cellSlotId: cell_slot + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot {} + +- type: entity + name: stun prod + parent: StunprodBase + id: Stunprod + description: A stun prod for illegal incapacitation. + components: + - type: Sprite + sprite: Objects/Weapons/Melee/stunprod.rsi + layers: + - state: stunprod + - state: stunprod_on + visible: false + map: [ "enum.ToggleVisuals.Layer" ] + - state: stunprod_cell + visible: false + map: [ "enum.PowerDeviceVisualLayers.Powered" ] + - type: Item + sprite: Objects/Weapons/Melee/stunprod.rsi - type: Clothing sprite: Objects/Weapons/Melee/stunprod.rsi quickEquip: false slots: - back - - type: DisarmMalus - malus: 0.225 - - type: Appearance - type: GenericVisualizer visuals: enum.ToggleVisuals.Toggled: enum.ToggleVisuals.Layer: - True: {state: stunprod_on} - False: {state: stunprod_off} - - type: StaticPrice - price: 100 + True: {visible: true} + False: {visible: false} + enum.PowerCellSlotVisuals.Enabled: + enum.PowerDeviceVisualLayers.Powered: + True: {visible: true} + False: {visible: false} + - type: Construction + deconstructionTarget: cuffs + graph: StunprodGraph + node: stunprod + +- type: entity + parent: BaseItem + id: ProdUnfinished + name: wound rod + description: A rod with wires. + components: + - type: Sprite + sprite: _White/Objects/Weapons/Melee/prod.rsi + state: prod_unfinished + - type: Item + size: Small + shape: + - 0,0,1,0 + storedRotation: 44 - type: Construction - graph: makeshiftstunprod - node: msstunprod + deconstructionTarget: cuffs + graph: StunprodGraph + node: unfinished +# WD EDIT END diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml deleted file mode 100644 index fa006a938b..0000000000 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml +++ /dev/null @@ -1,31 +0,0 @@ -- type: constructionGraph - id: makeshiftstunprod - start: start - graph: - - node: start - edges: - - to: msstunprod - steps: - - material: MetalRod - amount: 1 - - material: Cable - amount: 15 - - tag: DrinkSpaceGlue - name: Drink Space Glue - icon: - sprite: Objects/Consumable/Drinks/glue-tube.rsi - state: icon - - tag: PowerCellSmall - name: Power Cell Small - icon: - sprite: Objects/Power/power_cells.rsi - state: small - - tag: CapacitorStockPart - name: Capacitor Stock Part - icon: - sprite: Objects/Misc/stock_parts.rsi - state: capacitor - doAfter: 20 - - node: msstunprod - entity: Stunprod - diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 3f8458f58d..fb1ce2f7d2 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -35,17 +35,6 @@ icon: { sprite: Objects/Misc/cablecuffs.rsi, state: cuff } objectType: Item -- type: construction - name: makeshift stunprod - id: makeshiftstunprod - graph: makeshiftstunprod - startNode: start - targetNode: msstunprod - category: construction-category-weapons - description: "Homemade stunprod." - icon: { sprite: Objects/Weapons/Melee/stunprod.rsi, state: stunprod_off } - objectType: Item - - type: construction name: muzzle id: muzzle diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Melee/snatcherprod.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Melee/snatcherprod.yml new file mode 100644 index 0000000000..9352c3ef60 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Melee/snatcherprod.yml @@ -0,0 +1,33 @@ +- type: entity + parent: StunprodBase + id: Snatcherprod + name: snatcher prod + description: It sparkles with a thirst for theft and treachery. + components: + - type: Sprite + sprite: _White/Objects/Weapons/Melee/snatcherprod.rsi + layers: + - state: snatcherprod + - state: snatcherprod_on + visible: false + map: [ "enum.ToggleVisuals.Layer" ] + - state: snatcherprod_cell + visible: false + map: [ "enum.PowerDeviceVisualLayers.Powered" ] + - type: Item + sprite: _White/Objects/Weapons/Melee/snatcherprod.rsi + - type: GenericVisualizer + visuals: + enum.ToggleVisuals.Toggled: + enum.ToggleVisuals.Layer: + True: {visible: true} + False: {visible: false} + enum.PowerCellSlotVisuals.Enabled: + enum.PowerDeviceVisualLayers.Powered: + True: {visible: true} + False: {visible: false} + - type: SnatchOnMeleeHit + - type: Construction + deconstructionTarget: cuffs + graph: StunprodGraph + node: snatcherprod \ No newline at end of file diff --git a/Resources/Prototypes/_White/Recipes/hidden_crafts.yml b/Resources/Prototypes/_White/Recipes/hidden_crafts.yml index c55b8e544d..830ecf0e43 100644 --- a/Resources/Prototypes/_White/Recipes/hidden_crafts.yml +++ b/Resources/Prototypes/_White/Recipes/hidden_crafts.yml @@ -8,4 +8,80 @@ steps: - tag: EnergySword - node: desword - entity: EnergySwordDouble \ No newline at end of file + entity: EnergySwordDouble + +- type: constructionGraph + id: StunprodGraph + start: cuffs + graph: + - node: cuffs + edges: + - to: unfinished + steps: + - material: MetalRod + amount: 1 + doAfter: 1 + - node: unfinished + entity: ProdUnfinished + edges: + - to: Igniter + steps: + - tag: Igniter + - to: cuffs + steps: + - tool: Cutting + doAfter: 5 + completed: + - !type:SpawnPrototype + prototype: PartRodMetal1 + - !type:DeleteEntity + - node: Igniter + edges: + - to: snatcherprod + steps: + - material: Telecrystal + - to: stunprod + steps: + - tag: CapacitorStockPart + - to: cuffs + steps: + - tool: Cutting + doAfter: 5 + completed: + - !type:SpawnPrototype + prototype: PartRodMetal1 + - !type:SpawnPrototype + prototype: Igniter + - !type:DeleteEntity + - node: snatcherprod + entity: Snatcherprod + edges: + - to: cuffs + steps: + - tool: Cutting + doAfter: 5 + completed: + - !type:SpawnPrototype + prototype: Telecrystal1 + - !type:SpawnPrototype + prototype: PartRodMetal1 + - !type:SpawnPrototype + prototype: Igniter + - !type:EmptyAllContainers + - !type:DeleteEntity + - node: stunprod + entity: Stunprod + edges: + - to: cuffs + steps: + - tool: Cutting + doAfter: 5 + completed: + - !type:SpawnPrototype + prototype: CapacitorStockPart + - !type:SpawnPrototype + prototype: PartRodMetal1 + - !type:SpawnPrototype + prototype: Igniter + - !type:EmptyAllContainers + - !type:DeleteEntity \ No newline at end of file diff --git a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/meta.json index d854da81c4..55e3730c72 100644 --- a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/meta.json @@ -1,17 +1,17 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprite by https://github.com/noudoit", + "copyright": "Sprite by https://github.com/noudoit. Edit by Spatison(discord)", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "stunprod_off" + "name": "stunprod" }, { - "name": "stunprod_nocell" + "name": "stunprod_cell" }, { "name": "stunprod_on", diff --git a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_nocell.png b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod.png similarity index 100% rename from Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_nocell.png rename to Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod.png diff --git a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_cell.png b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_cell.png new file mode 100644 index 0000000000..c292329f43 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_cell.png differ diff --git a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_off.png b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_off.png deleted file mode 100644 index 32057f57a2..0000000000 Binary files a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_off.png and /dev/null differ diff --git a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_on.png b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_on.png index 8617954346..cdfd07cdcd 100644 Binary files a/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_on.png and b/Resources/Textures/Objects/Weapons/Melee/stunprod.rsi/stunprod_on.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/prod.rsi/meta.json b/Resources/Textures/_White/Objects/Weapons/Melee/prod.rsi/meta.json new file mode 100644 index 0000000000..d9a85e7f34 --- /dev/null +++ b/Resources/Textures/_White/Objects/Weapons/Melee/prod.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/ at d0dffe7ca643db2624424fdcebf45863f85c0448", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "prod_unfinished" + } + ] +} diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/prod.rsi/prod_unfinished.png b/Resources/Textures/_White/Objects/Weapons/Melee/prod.rsi/prod_unfinished.png new file mode 100644 index 0000000000..288cf4c0cc Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/prod.rsi/prod_unfinished.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/meta.json b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/meta.json new file mode 100644 index 0000000000..bf0e135663 --- /dev/null +++ b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/meta.json @@ -0,0 +1,78 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/ at d0dffe7ca643db2624424fdcebf45863f85c0448, on inhand sprites by Aviu. Edit by Spatison(discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "snatcherprod" + }, + { + "name": "snatcherprod_cell" + }, + { + "name": "snatcherprod_on", + "delays": [ + [ + 0.1, + 0.1 + ] + ] + }, + { + "name": "off-inhand-left", + "directions": 4 + }, + { + "name": "off-inhand-right", + "directions": 4 + }, + { + "name": "on-inhand-left", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ] + ] + }, + { + "name": "on-inhand-right", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ], + [ + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/off-inhand-left.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/off-inhand-left.png new file mode 100644 index 0000000000..d4d553fc69 Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/off-inhand-left.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/off-inhand-right.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/off-inhand-right.png new file mode 100644 index 0000000000..a58f0e1088 Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/off-inhand-right.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/on-inhand-left.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/on-inhand-left.png new file mode 100644 index 0000000000..ba9bfd4df3 Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/on-inhand-left.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/on-inhand-right.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/on-inhand-right.png new file mode 100644 index 0000000000..c0586fa9cc Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/on-inhand-right.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod.png new file mode 100644 index 0000000000..5d75de014e Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod_cell.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod_cell.png new file mode 100644 index 0000000000..8319db4e99 Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod_cell.png differ diff --git a/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod_on.png b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod_on.png new file mode 100644 index 0000000000..d15abc6223 Binary files /dev/null and b/Resources/Textures/_White/Objects/Weapons/Melee/snatcherprod.rsi/snatcherprod_on.png differ