diff --git a/Content.Server/Damage/Components/ActiveStaminaComponent.cs b/Content.Server/Damage/Components/ActiveStaminaComponent.cs
new file mode 100644
index 0000000000..073d394728
--- /dev/null
+++ b/Content.Server/Damage/Components/ActiveStaminaComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server.Damage.Components;
+
+///
+/// Tracks whether an entity has ANY stamina damage for update purposes only.
+///
+[RegisterComponent]
+public sealed class ActiveStaminaComponent : Component
+{
+
+}
diff --git a/Content.Server/Damage/Components/StaminaComponent.cs b/Content.Server/Damage/Components/StaminaComponent.cs
new file mode 100644
index 0000000000..87e881016b
--- /dev/null
+++ b/Content.Server/Damage/Components/StaminaComponent.cs
@@ -0,0 +1,47 @@
+using Content.Server.Damage.Systems;
+using Robust.Shared.GameStates;
+
+namespace Content.Server.Damage.Components;
+
+///
+/// Add to an entity to paralyze it whenever it reaches critical amounts of Stamina DamageType.
+///
+[RegisterComponent]
+public sealed class StaminaComponent : Component
+{
+ ///
+ /// Have we reached peak stamina damage and been paralyzed?
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("critical")]
+ public bool Critical;
+
+ ///
+ /// How much stamina reduces per second.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("decay")]
+ public float Decay = 3f;
+
+ ///
+ /// How much time after receiving damage until stamina starts decreasing.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("cooldown")]
+ public float DecayCooldown = 5f;
+
+ ///
+ /// How much stamina damage this entity has taken.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("staminaDamage")]
+ public float StaminaDamage;
+
+ ///
+ /// How much stamina damage is required to entire stam crit.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("excess")]
+ public float CritThreshold = 100f;
+
+ ///
+ /// Next time we're allowed to decrease stamina damage. Refreshes whenever the stam damage is changed.
+ ///
+ [ViewVariables(VVAccess.ReadWrite), DataField("decayAccumulator")]
+ public float StaminaDecayAccumulator;
+}
diff --git a/Content.Server/Damage/Components/StaminaDamageOnCollideComponent.cs b/Content.Server/Damage/Components/StaminaDamageOnCollideComponent.cs
new file mode 100644
index 0000000000..450fb56aab
--- /dev/null
+++ b/Content.Server/Damage/Components/StaminaDamageOnCollideComponent.cs
@@ -0,0 +1,13 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Server.Damage.Components;
+
+///
+/// Applies stamina damage when colliding with an entity.
+///
+[RegisterComponent]
+public sealed class StaminaDamageOnCollideComponent : Component
+{
+ [ViewVariables(VVAccess.ReadWrite), DataField("damage")]
+ public float Damage = 55f;
+}
diff --git a/Content.Server/Damage/Components/StaminaDamageOnHitComponent.cs b/Content.Server/Damage/Components/StaminaDamageOnHitComponent.cs
new file mode 100644
index 0000000000..fafe2a366f
--- /dev/null
+++ b/Content.Server/Damage/Components/StaminaDamageOnHitComponent.cs
@@ -0,0 +1,8 @@
+namespace Content.Server.Damage.Components;
+
+[RegisterComponent]
+public sealed class StaminaDamageOnHitComponent : Component
+{
+ [ViewVariables(VVAccess.ReadWrite), DataField("damage")]
+ public float Damage = 30f;
+}
diff --git a/Content.Server/Damage/Events/StaminaDamageOnHitAttemptEvent.cs b/Content.Server/Damage/Events/StaminaDamageOnHitAttemptEvent.cs
new file mode 100644
index 0000000000..40bb1ae1a8
--- /dev/null
+++ b/Content.Server/Damage/Events/StaminaDamageOnHitAttemptEvent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server.Damage.Events;
+
+///
+/// Attempting to apply stamina damage on a melee hit to an entity.
+///
+[ByRefEvent]
+public struct StaminaDamageOnHitAttemptEvent
+{
+ public bool Cancelled;
+}
diff --git a/Content.Server/Damage/Systems/StaminaSystem.cs b/Content.Server/Damage/Systems/StaminaSystem.cs
new file mode 100644
index 0000000000..dc906711e2
--- /dev/null
+++ b/Content.Server/Damage/Systems/StaminaSystem.cs
@@ -0,0 +1,221 @@
+using Content.Server.Damage.Components;
+using Content.Server.Damage.Events;
+using Content.Server.Popups;
+using Content.Server.Weapon.Melee;
+using Content.Shared.Alert;
+using Content.Shared.Rounding;
+using Content.Shared.Stunnable;
+using Robust.Shared.Collections;
+using Robust.Shared.Physics.Dynamics;
+using Robust.Shared.Player;
+using Robust.Shared.Timing;
+
+namespace Content.Server.Damage.Systems;
+
+public sealed class StaminaSystem : EntitySystem
+{
+ [Dependency] private readonly IGameTiming _timing = default!;
+ [Dependency] private readonly AlertsSystem _alerts = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly SharedStunSystem _stunSystem = default!;
+
+ private const float UpdateCooldown = 2f;
+ private float _accumulator;
+
+ private const string CollideFixture = "projectile";
+
+ ///
+ /// How much of a buffer is there between the stun duration and when stuns can be re-applied.
+ ///
+ private const float StamCritBufferTime = 3f;
+
+ private readonly List _dirtyEntities = new();
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnCollide);
+ SubscribeLocalEvent(OnHit);
+ SubscribeLocalEvent(OnStartup);
+ SubscribeLocalEvent(OnShutdown);
+ }
+
+ private void OnShutdown(EntityUid uid, StaminaComponent component, ComponentShutdown args)
+ {
+ SetStaminaAlert(uid);
+ }
+
+ private void OnStartup(EntityUid uid, StaminaComponent component, ComponentStartup args)
+ {
+ SetStaminaAlert(uid, component);
+ }
+
+ private void OnHit(EntityUid uid, StaminaDamageOnHitComponent component, MeleeHitEvent args)
+ {
+ if (component.Damage <= 0f) return;
+
+ var ev = new StaminaDamageOnHitAttemptEvent();
+ RaiseLocalEvent(uid, ref ev);
+
+ if (ev.Cancelled) return;
+
+ var stamQuery = GetEntityQuery();
+ var toHit = new ValueList();
+
+ // Split stamina damage between all eligible targets.
+ foreach (var ent in args.HitEntities)
+ {
+ if (!stamQuery.TryGetComponent(ent, out var stam)) continue;
+ toHit.Add(stam);
+ }
+
+ foreach (var comp in toHit)
+ {
+ var oldDamage = comp.StaminaDamage;
+ TakeStaminaDamage(comp.Owner, component.Damage / toHit.Count, comp);
+ if (comp.StaminaDamage.Equals(oldDamage))
+ {
+ _popup.PopupEntity(Loc.GetString("stamina-resist"), comp.Owner, Filter.Entities(args.User));
+ }
+ }
+ }
+
+ private void OnCollide(EntityUid uid, StaminaDamageOnCollideComponent component, StartCollideEvent args)
+ {
+ if (!args.OurFixture.ID.Equals(CollideFixture)) return;
+
+ TakeStaminaDamage(args.OtherFixture.Body.Owner, component.Damage);
+ }
+
+ private void SetStaminaAlert(EntityUid uid, StaminaComponent? component = null)
+ {
+ if (!Resolve(uid, ref component, false) || component.Deleted)
+ {
+ _alerts.ClearAlert(uid, AlertType.Stamina);
+ return;
+ }
+
+ var severity = ContentHelpers.RoundToLevels(MathF.Max(0f, component.CritThreshold - component.StaminaDamage), component.CritThreshold, 7);
+ _alerts.ShowAlert(uid, AlertType.Stamina, (short) severity);
+ }
+
+ public void TakeStaminaDamage(EntityUid uid, float value, StaminaComponent? component = null)
+ {
+ if (!Resolve(uid, ref component, false) || component.Critical) return;
+
+ var oldDamage = component.StaminaDamage;
+ component.StaminaDamage = MathF.Max(0f, component.StaminaDamage + value);
+
+ // Reset the decay cooldown upon taking damage.
+ if (oldDamage < component.StaminaDamage)
+ {
+ component.StaminaDecayAccumulator = component.DecayCooldown;
+ }
+
+ var slowdownThreshold = component.CritThreshold / 2f;
+
+ // If we go above n% then apply slowdown
+ if (oldDamage < slowdownThreshold &&
+ component.StaminaDamage > slowdownThreshold)
+ {
+ _stunSystem.TrySlowdown(uid, TimeSpan.FromSeconds(3), true, 0.8f, 0.8f);
+ }
+
+ SetStaminaAlert(uid, component);
+
+ // Can't do it here as resetting prediction gets cooked.
+ _dirtyEntities.Add(uid);
+
+ if (!component.Critical)
+ {
+ if (component.StaminaDamage >= component.CritThreshold)
+ {
+ EnterStamCrit(uid, component);
+ }
+ }
+ else
+ {
+ if (component.StaminaDamage < component.CritThreshold)
+ {
+ ExitStamCrit(uid, component);
+ }
+ }
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ if (!_timing.IsFirstTimePredicted) return;
+
+ _accumulator -= frameTime;
+
+ if (_accumulator > 0f) return;
+
+ var stamQuery = GetEntityQuery();
+
+ foreach (var uid in _dirtyEntities)
+ {
+ // Don't need to RemComp as they will get handled below.
+ if (!stamQuery.TryGetComponent(uid, out var comp) || comp.StaminaDamage <= 0f) continue;
+ EnsureComp(uid);
+ }
+
+ _dirtyEntities.Clear();
+ _accumulator += UpdateCooldown;
+
+ foreach (var active in EntityQuery())
+ {
+ // Just in case we have active but not stamina we'll check and account for it.
+ if (!stamQuery.TryGetComponent(active.Owner, out var comp) ||
+ comp.StaminaDamage <= 0f)
+ {
+ RemComp(active.Owner);
+ continue;
+ }
+
+ comp.StaminaDecayAccumulator -= UpdateCooldown;
+
+ if (comp.StaminaDecayAccumulator > 0f) continue;
+
+ // We were in crit so come out of it and continue.
+ if (comp.Critical)
+ {
+ ExitStamCrit(active.Owner, comp);
+ continue;
+ }
+
+ comp.StaminaDecayAccumulator = 0f;
+ TakeStaminaDamage(comp.Owner, -comp.Decay * UpdateCooldown, comp);
+ }
+ }
+
+ private void EnterStamCrit(EntityUid uid, StaminaComponent? component = null)
+ {
+ if (!Resolve(uid, ref component) ||
+ component.Critical) return;
+
+ // To make the difference between a stun and a stamcrit clear
+ // TODO: Mask?
+
+ component.Critical = true;
+ component.StaminaDamage = component.CritThreshold;
+ component.StaminaDecayAccumulator = 0f;
+
+ var stunTime = TimeSpan.FromSeconds(6);
+ _stunSystem.TryParalyze(uid, stunTime, true);
+
+ // Give them buffer before being able to be re-stunned
+ component.StaminaDecayAccumulator = (float) stunTime.TotalSeconds + StamCritBufferTime;
+ }
+
+ private void ExitStamCrit(EntityUid uid, StaminaComponent? component = null)
+ {
+ if (!Resolve(uid, ref component) ||
+ !component.Critical) return;
+
+ component.Critical = false;
+ component.StaminaDamage = 0f;
+ SetStaminaAlert(uid, component);
+ }
+}
diff --git a/Content.Server/Flash/FlashSystem.cs b/Content.Server/Flash/FlashSystem.cs
index 0e053b02b5..db79e8ab75 100644
--- a/Content.Server/Flash/FlashSystem.cs
+++ b/Content.Server/Flash/FlashSystem.cs
@@ -30,7 +30,6 @@ namespace Content.Server.Flash
{
base.Initialize();
SubscribeLocalEvent(OnFlashMeleeHit);
- SubscribeLocalEvent(OnFlashUseInHand);
SubscribeLocalEvent(OnFlashExamined);
SubscribeLocalEvent(OnInventoryFlashAttempt);
@@ -78,16 +77,6 @@ namespace Content.Server.Flash
}
}
- private void OnFlashUseInHand(EntityUid uid, FlashComponent comp, UseInHandEvent args)
- {
- if (!UseFlash(comp, args.User))
- {
- return;
- }
-
- FlashArea(uid, args.User, comp.Range, comp.AoeFlashDuration, comp.SlowTo, true);
- }
-
private bool UseFlash(FlashComponent comp, EntityUid user)
{
if (comp.HasUses)
@@ -121,39 +110,40 @@ namespace Content.Server.Flash
return false;
}
- public void Flash(EntityUid target, EntityUid? user, EntityUid? used, float flashDuration, float slowTo, bool displayPopup = true)
+ public void Flash(EntityUid target, EntityUid? user, EntityUid? used, float flashDuration, float slowTo, bool displayPopup = true, FlashableComponent? flashable = null)
{
+ if (!Resolve(target, ref flashable, false)) return;
+
var attempt = new FlashAttemptEvent(target, user, used);
RaiseLocalEvent(target, attempt, true);
if (attempt.Cancelled)
return;
- if (EntityManager.TryGetComponent(target, out var flashable))
+ flashable.LastFlash = _gameTiming.CurTime;
+ flashable.Duration = flashDuration / 1000f; // TODO: Make this sane...
+ Dirty(flashable);
+
+ _stunSystem.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true,
+ slowTo, slowTo);
+
+ if (displayPopup && user != null && target != user && EntityManager.EntityExists(user.Value))
{
- flashable.LastFlash = _gameTiming.CurTime;
- flashable.Duration = flashDuration / 1000f; // TODO: Make this sane...
- Dirty(flashable);
-
- _stunSystem.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true,
- slowTo, slowTo);
-
- if (displayPopup && user != null && target != user && EntityManager.EntityExists(user.Value))
- {
- user.Value.PopupMessage(target, Loc.GetString("flash-component-user-blinds-you",
- ("user", user.Value)));
- }
+ user.Value.PopupMessage(target, Loc.GetString("flash-component-user-blinds-you",
+ ("user", user.Value)));
}
}
- public void FlashArea(EntityUid source, EntityUid? user, float range, float duration, float slowTo = 0f, bool displayPopup = false, SoundSpecifier? sound = null)
+ public void FlashArea(EntityUid source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, SoundSpecifier? sound = null)
{
var transform = EntityManager.GetComponent(source);
+ var mapPosition = transform.MapPosition;
var flashableEntities = new List();
+ var flashableQuery = GetEntityQuery();
foreach (var entity in _entityLookup.GetEntitiesInRange(transform.Coordinates, range))
{
- if (!EntityManager.HasComponent(entity))
+ if (!flashableQuery.HasComponent(entity))
continue;
flashableEntities.Add(entity);
@@ -162,14 +152,15 @@ namespace Content.Server.Flash
foreach (var entity in flashableEntities)
{
// Check for unobstructed entities while ignoring the mobs with flashable components.
- if (!_interactionSystem.InRangeUnobstructed(entity, transform.MapPosition, range, CollisionGroup.Opaque, (e) => flashableEntities.Contains(e)))
+ if (!_interactionSystem.InRangeUnobstructed(entity, mapPosition, range, CollisionGroup.Opaque, (e) => flashableEntities.Contains(e)))
continue;
- Flash(entity, user, source, duration, slowTo, displayPopup);
+ // They shouldn't have flash removed in between right?
+ Flash(entity, user, source, duration, slowTo, displayPopup, flashableQuery.GetComponent(entity));
}
if (sound != null)
{
- SoundSystem.Play(sound.GetSound(), Filter.Pvs(transform), transform.Coordinates);
+ SoundSystem.Play(sound.GetSound(), Filter.Pvs(transform), source);
}
}
diff --git a/Content.Server/Stunnable/Components/StunbatonComponent.cs b/Content.Server/Stunnable/Components/StunbatonComponent.cs
index 631af4b0d8..780dae688b 100644
--- a/Content.Server/Stunnable/Components/StunbatonComponent.cs
+++ b/Content.Server/Stunnable/Components/StunbatonComponent.cs
@@ -1,3 +1,4 @@
+using Content.Server.Stunnable.Systems;
using Content.Shared.Sound;
using Content.Shared.Timing;
@@ -8,21 +9,6 @@ namespace Content.Server.Stunnable.Components
{
public bool Activated = false;
- ///
- /// What the is when the stun baton is active.
- ///
- [ViewVariables(VVAccess.ReadWrite), DataField("activeCooldown")]
- public TimeSpan ActiveDelay = TimeSpan.FromSeconds(4);
-
- ///
- /// Store what the was before being activated.
- ///
- public TimeSpan? OldDelay;
-
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("paralyzeTime")]
- public float ParalyzeTime { get; set; } = 5f;
-
[ViewVariables(VVAccess.ReadWrite)]
[DataField("energyPerUse")]
public float EnergyPerUse { get; set; } = 350;
diff --git a/Content.Server/Stunnable/StunOnCollideSystem.cs b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs
similarity index 100%
rename from Content.Server/Stunnable/StunOnCollideSystem.cs
rename to Content.Server/Stunnable/Systems/StunOnCollideSystem.cs
diff --git a/Content.Server/Stunnable/StunSystem.cs b/Content.Server/Stunnable/Systems/StunSystem.cs
similarity index 100%
rename from Content.Server/Stunnable/StunSystem.cs
rename to Content.Server/Stunnable/Systems/StunSystem.cs
diff --git a/Content.Server/Stunnable/StunbatonSystem.cs b/Content.Server/Stunnable/Systems/StunbatonSystem.cs
similarity index 54%
rename from Content.Server/Stunnable/StunbatonSystem.cs
rename to Content.Server/Stunnable/Systems/StunbatonSystem.cs
index 60f4d30630..2dd6f67469 100644
--- a/Content.Server/Stunnable/StunbatonSystem.cs
+++ b/Content.Server/Stunnable/Systems/StunbatonSystem.cs
@@ -1,10 +1,11 @@
using System.Linq;
+using Content.Server.Damage.Components;
+using Content.Server.Damage.Events;
using Content.Server.Power.Components;
using Content.Server.Power.Events;
using Content.Server.Speech.EntitySystems;
using Content.Server.Stunnable.Components;
using Content.Server.Weapon.Melee;
-using Content.Server.Weapon.Melee.Components;
using Content.Shared.Audio;
using Content.Shared.Examine;
using Content.Shared.Interaction.Events;
@@ -12,55 +13,48 @@ using Content.Shared.Item;
using Content.Shared.Jittering;
using Content.Shared.Popups;
using Content.Shared.StatusEffect;
-using Content.Shared.Stunnable;
using Content.Shared.Throwing;
-using Content.Shared.Timing;
using Robust.Server.GameObjects;
using Robust.Shared.Audio;
using Robust.Shared.Player;
using Robust.Shared.Random;
-using Robust.Shared.Timing;
-namespace Content.Server.Stunnable
+namespace Content.Server.Stunnable.Systems
{
public sealed class StunbatonSystem : EntitySystem
{
- [Dependency] private readonly MeleeWeaponSystem _melee = default!;
- [Dependency] private readonly StunSystem _stunSystem = default!;
- [Dependency] private readonly StutteringSystem _stutteringSystem = default!;
- [Dependency] private readonly SharedJitteringSystem _jitterSystem = default!;
- [Dependency] private readonly UseDelaySystem _useDelay = default!;
- [Dependency] private readonly IGameTiming _timing = default!;
- [Dependency] private readonly IRobustRandom _robustRandom = default!;
-
public override void Initialize()
{
base.Initialize();
- SubscribeLocalEvent(OnMeleeHit);
SubscribeLocalEvent(OnUseInHand);
- SubscribeLocalEvent(OnThrowCollide);
SubscribeLocalEvent(OnExamined);
+ SubscribeLocalEvent(OnStaminaHitAttempt);
+ SubscribeLocalEvent(OnMeleeHit);
}
- private void OnMeleeHit(EntityUid uid, StunbatonComponent comp, MeleeHitEvent args)
+ private void OnMeleeHit(EntityUid uid, StunbatonComponent component, MeleeHitEvent args)
{
- if (!comp.Activated || !args.HitEntities.Any() || args.Handled || _useDelay.ActiveDelay(uid))
- return;
+ if (!component.Activated) return;
- if (!TryComp(uid, out var battery) || !battery.TryUseCharge(comp.EnergyPerUse))
- return;
+ // Don't apply damage if it's activated; just do stamina damage.
+ args.BonusDamage -= args.BaseDamage;
+ }
- foreach (var entity in args.HitEntities)
+ private void OnStaminaHitAttempt(EntityUid uid, StunbatonComponent component, ref StaminaDamageOnHitAttemptEvent args)
+ {
+ if (!component.Activated ||
+ !TryComp(uid, out var battery) || !battery.TryUseCharge(component.EnergyPerUse))
{
- StunEntity(entity, comp);
- SendPowerPulse(entity, args.User, uid);
+ args.Cancelled = true;
+ return;
}
- _melee.SetAttackCooldown(uid, _timing.CurTime + comp.ActiveDelay);
- _useDelay.BeginDelay(uid);
- // No combat should occur if we successfully stunned.
- args.Handled = true;
+ if (battery.CurrentCharge < component.EnergyPerUse)
+ {
+ SoundSystem.Play(component.SparksSound.GetSound(), Filter.Pvs(component.Owner, entityManager: EntityManager), uid, AudioHelpers.WithVariation(0.25f));
+ TurnOff(component);
+ }
}
private void OnUseInHand(EntityUid uid, StunbatonComponent comp, UseInHandEvent args)
@@ -75,21 +69,6 @@ namespace Content.Server.Stunnable
}
}
- private void OnThrowCollide(EntityUid uid, StunbatonComponent comp, ThrowDoHitEvent args)
- {
- if (!comp.Activated)
- return;
-
- if (!TryComp(uid, out var battery))
- return;
-
- if (_robustRandom.Prob(comp.OnThrowStunChance) && battery.TryUseCharge(comp.EnergyPerUse))
- {
- SendPowerPulse(args.Target, args.User, uid);
- StunEntity(args.Target, comp);
- }
- }
-
private void OnExamined(EntityUid uid, StunbatonComponent comp, ExaminedEvent args)
{
var msg = comp.Activated
@@ -101,24 +80,6 @@ namespace Content.Server.Stunnable
("charge", (int)((battery.CurrentCharge/battery.MaxCharge) * 100))));
}
- private void StunEntity(EntityUid entity, StunbatonComponent comp)
- {
- if (!EntityManager.TryGetComponent(entity, out StatusEffectsComponent? status) || !comp.Activated) return;
-
- SoundSystem.Play(comp.StunSound.GetSound(), Filter.Pvs(comp.Owner), comp.Owner, AudioHelpers.WithVariation(0.25f));
- _stunSystem.TryParalyze(entity, TimeSpan.FromSeconds(comp.ParalyzeTime), true, status);
-
- var slowdownTime = TimeSpan.FromSeconds(comp.ParalyzeTime);
- _jitterSystem.DoJitter(entity, slowdownTime, true, status:status);
- _stutteringSystem.DoStutter(entity, slowdownTime, true, status);
-
- if (!TryComp(comp.Owner, out var battery) || !(battery.CurrentCharge < comp.EnergyPerUse))
- return;
-
- SoundSystem.Play(comp.SparksSound.GetSound(), Filter.Pvs(comp.Owner), comp.Owner, AudioHelpers.WithVariation(0.25f));
- TurnOff(comp);
- }
-
private void TurnOff(StunbatonComponent comp)
{
if (!comp.Activated)
@@ -135,11 +96,6 @@ namespace Content.Server.Stunnable
SoundSystem.Play(comp.SparksSound.GetSound(), Filter.Pvs(comp.Owner), comp.Owner, AudioHelpers.WithVariation(0.25f));
comp.Activated = false;
- if (TryComp(comp.Owner, out var useDelay) && comp.OldDelay != null)
- {
- useDelay.Delay = comp.OldDelay.Value;
- comp.OldDelay = null;
- }
}
private void TurnOn(StunbatonComponent comp, EntityUid user)
@@ -147,13 +103,6 @@ namespace Content.Server.Stunnable
if (comp.Activated)
return;
- if (EntityManager.TryGetComponent(comp.Owner, out var sprite) &&
- EntityManager.TryGetComponent(comp.Owner, out var item))
- {
- item.EquippedPrefix = "on";
- sprite.LayerSetState(0, "stunbaton_on");
- }
-
var playerFilter = Filter.Pvs(comp.Owner, entityManager: EntityManager);
if (!TryComp(comp.Owner, out var battery) || battery.CurrentCharge < comp.EnergyPerUse)
{
@@ -162,14 +111,15 @@ namespace Content.Server.Stunnable
return;
}
- SoundSystem.Play(comp.SparksSound.GetSound(), playerFilter, comp.Owner, AudioHelpers.WithVariation(0.25f));
-
- comp.Activated = true;
- if (TryComp(comp.Owner, out var useDelay))
+ if (EntityManager.TryGetComponent(comp.Owner, out var sprite) &&
+ EntityManager.TryGetComponent(comp.Owner, out var item))
{
- comp.OldDelay = useDelay.Delay;
- useDelay.Delay = comp.ActiveDelay;
+ item.EquippedPrefix = "on";
+ sprite.LayerSetState(0, "stunbaton_on");
}
+
+ SoundSystem.Play(comp.SparksSound.GetSound(), playerFilter, comp.Owner, AudioHelpers.WithVariation(0.25f));
+ comp.Activated = true;
}
private void SendPowerPulse(EntityUid target, EntityUid? user, EntityUid used)
diff --git a/Content.Server/Weapon/Ranged/Systems/GunSystem.cs b/Content.Server/Weapon/Ranged/Systems/GunSystem.cs
index 3d7cde1f99..8d4405bd7c 100644
--- a/Content.Server/Weapon/Ranged/Systems/GunSystem.cs
+++ b/Content.Server/Weapon/Ranged/Systems/GunSystem.cs
@@ -1,4 +1,5 @@
using System.Linq;
+using Content.Server.Damage.Systems;
using Content.Server.Projectiles.Components;
using Content.Server.Weapon.Melee;
using Content.Server.Weapon.Ranged.Components;
@@ -24,6 +25,7 @@ namespace Content.Server.Weapon.Ranged.Systems;
public sealed partial class GunSystem : SharedGunSystem
{
[Dependency] private readonly EffectSystem _effects = default!;
+ [Dependency] private readonly StaminaSystem _stamina = default!;
public const float DamagePitchVariation = MeleeWeaponSystem.DamagePitchVariation;
@@ -116,6 +118,9 @@ public sealed partial class GunSystem : SharedGunSystem
var distance = result.Distance;
FireEffects(fromCoordinates, distance, entityDirection.ToAngle(), hitscan, result.HitEntity);
+ if (hitscan.StaminaDamage > 0f)
+ _stamina.TakeStaminaDamage(result.HitEntity, hitscan.StaminaDamage);
+
var dmg = hitscan.Damage;
if (dmg != null)
diff --git a/Content.Shared/Alert/AlertCategory.cs b/Content.Shared/Alert/AlertCategory.cs
index db81212271..df310ca469 100644
--- a/Content.Shared/Alert/AlertCategory.cs
+++ b/Content.Shared/Alert/AlertCategory.cs
@@ -10,6 +10,7 @@ public enum AlertCategory
Breathing,
Buckled,
Health,
+ Stamina,
Piloting,
Hunger,
Thirst,
diff --git a/Content.Shared/Alert/AlertType.cs b/Content.Shared/Alert/AlertType.cs
index 2a42b20d6f..c348edca5a 100644
--- a/Content.Shared/Alert/AlertType.cs
+++ b/Content.Shared/Alert/AlertType.cs
@@ -28,6 +28,7 @@
Overhydrated,
Thirsty,
Parched,
+ Stamina,
Pulled,
Pulling,
Magboots,
diff --git a/Content.Shared/Alert/AlertsSystem.cs b/Content.Shared/Alert/AlertsSystem.cs
index b0cfdfd11b..60a609538e 100644
--- a/Content.Shared/Alert/AlertsSystem.cs
+++ b/Content.Shared/Alert/AlertsSystem.cs
@@ -85,7 +85,7 @@ public abstract class AlertsSystem : EntitySystem
AfterShowAlert(alertsComponent);
- alertsComponent.Dirty();
+ Dirty(alertsComponent);
}
else
{
diff --git a/Content.Shared/StatusEffect/StatusEffectsComponent.cs b/Content.Shared/StatusEffect/StatusEffectsComponent.cs
index e412a41d76..c18c89168e 100644
--- a/Content.Shared/StatusEffect/StatusEffectsComponent.cs
+++ b/Content.Shared/StatusEffect/StatusEffectsComponent.cs
@@ -14,7 +14,7 @@ namespace Content.Shared.StatusEffect
///
/// A list of status effect IDs to be allowed
///
- [DataField("allowed", required: true)]
+ [DataField("allowed", required: true), Access(typeof(StatusEffectsSystem), Other = AccessPermissions.ReadExecute)]
public List AllowedEffects = default!;
}
diff --git a/Content.Shared/Weapons/Ranged/HitscanPrototype.cs b/Content.Shared/Weapons/Ranged/HitscanPrototype.cs
index 764b8c3218..2918918162 100644
--- a/Content.Shared/Weapons/Ranged/HitscanPrototype.cs
+++ b/Content.Shared/Weapons/Ranged/HitscanPrototype.cs
@@ -14,6 +14,9 @@ public sealed class HitscanPrototype : IPrototype, IShootable
[IdDataFieldAttribute]
public string ID { get; } = default!;
+ [ViewVariables(VVAccess.ReadWrite), DataField("staminaDamage")]
+ public float StaminaDamage;
+
[ViewVariables(VVAccess.ReadWrite), DataField("damage")]
public DamageSpecifier? Damage;
diff --git a/Resources/Audio/Weapons/Guns/Gunshots/license.txt b/Resources/Audio/Weapons/Guns/Gunshots/license.txt
index acff754062..9b375674fc 100644
--- a/Resources/Audio/Weapons/Guns/Gunshots/license.txt
+++ b/Resources/Audio/Weapons/Guns/Gunshots/license.txt
@@ -1,2 +1,5 @@
atreides.ogg, c-20r.ogg, flaregun.ogg, mateba.ogg, minigun.ogg, mk58.ogg were taken from https://gitlab.com/cmdevs/colonial-warfare/-/tree/32cb5892413243cc74bb2d11df8e3085f8ef1164/sound/weapons
They are licensed under CC-BY-SA 3.0
+
+taser2.ogg was taken from https://github.com/tgstation/tgstation/tree/88d7dbfc105fbf40284d7b7c4587f8d23c0ac3ac
+It is licensed under CC-BY-SA 3.0
\ No newline at end of file
diff --git a/Resources/Audio/Weapons/Guns/Gunshots/taser2.ogg b/Resources/Audio/Weapons/Guns/Gunshots/taser2.ogg
new file mode 100644
index 0000000000..b53f9db5c3
Binary files /dev/null and b/Resources/Audio/Weapons/Guns/Gunshots/taser2.ogg differ
diff --git a/Resources/Locale/en-US/damage/stamina.ftl b/Resources/Locale/en-US/damage/stamina.ftl
new file mode 100644
index 0000000000..9afe540b9d
--- /dev/null
+++ b/Resources/Locale/en-US/damage/stamina.ftl
@@ -0,0 +1 @@
+stamina-resist = Resisted
\ No newline at end of file
diff --git a/Resources/Locale/en-US/stunnable/components/stunbaton-component.ftl b/Resources/Locale/en-US/stunnable/components/stunbaton-component.ftl
index 8c6f09d098..61e8adf4a9 100644
--- a/Resources/Locale/en-US/stunnable/components/stunbaton-component.ftl
+++ b/Resources/Locale/en-US/stunnable/components/stunbaton-component.ftl
@@ -1,5 +1,7 @@
### Stunbaton component
+comp-stunbaton-stun = Stunned
+
## Used when examining the stunbaton
comp-stunbaton-examined-on = The light is currently [color=darkgreen]on[/color].
@@ -11,4 +13,4 @@ comp-stunbaton-activated-low-charge = Insufficient charge...
stunbaton-component-low-charge = Insufficient charge...
stunbaton-component-on-examine = The light is currently [color=darkgreen]on[/color].
-stunbaton-component-on-examine-charge = The charge indicator reads {$charge} %
\ No newline at end of file
+stunbaton-component-on-examine-charge = The charge indicator reads {$charge} %
diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml
index d247697ce8..f026e80bcc 100644
--- a/Resources/Maps/bagel.yml
+++ b/Resources/Maps/bagel.yml
@@ -41157,23 +41157,6 @@ entities:
pos: 13.5,-38.5
parent: 60
type: Transform
-- uid: 2177
- type: ShellShotgunFlash
- components:
- - pos: 11.711429,-35.299614
- parent: 60
- type: Transform
- - canCollide: False
- type: Physics
-- uid: 2178
- type: ShellShotgunFlash
- components:
- - rot: 0.0007520564831793308 rad
- pos: 11.738948,-35.53393
- parent: 60
- type: Transform
- - canCollide: False
- type: Physics
- uid: 2179
type: ShellShotgunBeanbag
components:
diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml
index cd37b4f3dd..450f34c409 100644
--- a/Resources/Maps/marathon.yml
+++ b/Resources/Maps/marathon.yml
@@ -27317,30 +27317,6 @@ entities:
type: Transform
- canCollide: False
type: Physics
-- uid: 680
- type: ShellShotgunFlash
- components:
- - pos: -11.704681,19.266298
- parent: 30
- type: Transform
- - canCollide: False
- type: Physics
-- uid: 681
- type: ShellShotgunFlash
- components:
- - pos: -11.517181,19.250673
- parent: 30
- type: Transform
- - canCollide: False
- type: Physics
-- uid: 682
- type: ShellShotgunFlash
- components:
- - pos: -11.329681,19.250673
- parent: 30
- type: Transform
- - canCollide: False
- type: Physics
- uid: 683
type: ClothingEyesGlassesSunglasses
components:
diff --git a/Resources/Maps/nss_pillar.yml b/Resources/Maps/nss_pillar.yml
index 0cd7285c5d..2444b7238b 100644
--- a/Resources/Maps/nss_pillar.yml
+++ b/Resources/Maps/nss_pillar.yml
@@ -74639,14 +74639,6 @@ entities:
- pos: 11.5,13.5
parent: 130
type: Transform
-- uid: 7568
- type: ShellShotgunFlash
- components:
- - pos: 1.4405079,19.67595
- parent: 130
- type: Transform
- - canCollide: False
- type: Physics
- uid: 7569
type: CableApcExtension
components:
@@ -75226,14 +75218,6 @@ entities:
- pos: 0.5,4.5
parent: 130
type: Transform
-- uid: 7664
- type: ShellShotgunFlash
- components:
- - pos: 1.5967579,19.660324
- parent: 130
- type: Transform
- - canCollide: False
- type: Physics
- uid: 7665
type: WallReinforced
components:
@@ -77007,14 +76991,6 @@ entities:
type: Physics
- solution: drink
type: DrainableSolution
-- uid: 7889
- type: ShellShotgunFlash
- components:
- - pos: 1.3155079,19.691576
- parent: 130
- type: Transform
- - canCollide: False
- type: Physics
- uid: 7890
type: DrinkGlass
components:
@@ -92463,18 +92439,6 @@ entities:
ballistic-ammo: !type:Container
ents: []
type: ContainerContainer
-- uid: 9852
- type: BoxShotgunFlash
- components:
- - pos: -50.401936,33.396786
- parent: 130
- type: Transform
- - canCollide: False
- type: Physics
- - containers:
- storagebase: !type:Container
- ents: []
- type: ContainerContainer
- uid: 9853
type: WeaponShotgunKammerer
components:
@@ -148567,14 +148531,6 @@ entities:
type: Airtight
- canCollide: False
type: Physics
-- uid: 17447
- type: ShellShotgunFlash
- components:
- - pos: 1.7061329,19.660326
- parent: 130
- type: Transform
- - canCollide: False
- type: Physics
- uid: 17448
type: CarpetBlack
components:
diff --git a/Resources/Maps/splitstation.yml b/Resources/Maps/splitstation.yml
index 5247ac9cd8..7b716b4625 100644
--- a/Resources/Maps/splitstation.yml
+++ b/Resources/Maps/splitstation.yml
@@ -190355,18 +190355,6 @@ entities:
- pos: 48.5,6.5
parent: 69
type: Transform
-- uid: 22390
- type: BoxShotgunFlash
- components:
- - pos: 6.6360016,-56.489788
- parent: 69
- type: Transform
- - canCollide: False
- type: Physics
- - containers:
- storagebase: !type:Container
- ents: []
- type: ContainerContainer
- uid: 22391
type: DisposalPipe
components:
diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml
index 064dd91717..f2635768fb 100644
--- a/Resources/Prototypes/Alerts/alerts.yml
+++ b/Resources/Prototypes/Alerts/alerts.yml
@@ -63,6 +63,7 @@
name: "[color=red]On Fire[/color]"
description: "You're [color=red]on fire[/color]. Click the alert to stop, drop and roll to put the fire out or move to a vacuum area."
+
- type: alert
id: Cold
category: Temperature
@@ -163,6 +164,17 @@
name: "[color=yellow]Peckish[/color]"
description: Some food would be good right about now.
+- type: alert
+ id: Stamina
+ category: Stamina
+ icon:
+ sprite: /Textures/Interface/Alerts/stamina.rsi
+ state: stamina
+ name: Stamina
+ description: "Stuns you if it is too low."
+ minSeverity: 0
+ maxSeverity: 6
+
- type: alert
id: Starving
category: Hunger
diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
index 1de7f1f50f..c476b546db 100644
--- a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
+++ b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
@@ -101,17 +101,6 @@
- id: MagazineMagnum
amount: 6
-- type: entity
- name: box of .40 Lamia (flash) magazines.
- parent: BoxCardboard
- id: BoxMagazineMagnumFlash
- description: A box full of .40 Lamia (flash) magazines.
- components:
- - type: StorageFill
- contents:
- - id: MagazineMagnumFlash
- amount: 6
-
- type: entity
name: box of .40 Lamia (high-velocity) magazines
parent: BoxCardboard
@@ -212,17 +201,6 @@
- id: MagazinePistol
amount: 6
-- type: entity
- name: box of pistol .35 auto (flash) magazines
- parent: BoxCardboard
- id: BoxMagazinePistolFlash
- description: A box full of pistol .35 auto (flash) magazines.
- components:
- - type: StorageFill
- contents:
- - id: MagazinePistolFlash
- amount: 6
-
- type: entity
name: box of pistol .35 auto (high-velocity) magazines
parent: BoxCardboard
@@ -311,17 +289,6 @@
- id: MagazinePistolSubMachineGun
amount: 3
-- type: entity
- name: box of SMG .35 auto (flash) magazines
- parent: BoxCardboard
- id: BoxMagazinePistolSubMachineGunFlash
- description: A box full of SMG .35 auto (flash) magazines.
- components:
- - type: StorageFill
- contents:
- - id: MagazinePistolSubMachineGunFlash
- amount: 3
-
- type: entity
name: box of SMG .35 auto (high-velocity) magazines
parent: BoxCardboard
@@ -412,17 +379,6 @@
- id: MagazineRifle
amount: 6
-- type: entity
- name: box of .20 rifle (flash) magazines
- parent: BoxCardboard
- id: BoxMagazineRifleFlash
- description: A box full of .20 rifle (flash) magazines.
- components:
- - type: StorageFill
- contents:
- - id: MagazineRifleFlash
- amount: 6
-
- type: entity
name: box of .20 rifle (high-velocity) magazines
parent: BoxCardboard
diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml
index bb49741ccf..ba4432f392 100644
--- a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml
+++ b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml
@@ -133,21 +133,6 @@
- state: boxwide
- state: shellflare
-- type: entity
- name: box of shotgun flash cartridges
- parent: BoxCardboard
- id: BoxShotgunFlash
- description: A box full of shotgun flash cartridges, designed for riot shotguns.
- components:
- - type: StorageFill
- contents:
- - id: ShellShotgunFlash
- amount: 6
- - type: Sprite
- layers:
- - state: boxwide
- - state: shellflash
-
- type: entity
name: box of shotgun incendiary cartridges
parent: BoxCardboard
@@ -205,17 +190,6 @@
- id: MagazineRifle
amount: 6
-- type: entity
- name: box of .20 rifle (flash) magazines
- parent: BoxCardboard
- id: BoxMagazineRifleFlash
- description: A box full of .20 rifle (flash) magazines.
- components:
- - type: StorageFill
- contents:
- - id: MagazineRifleFlash
- amount: 6
-
- type: entity
name: box of .20 rifle (high-velocity) magazines
parent: BoxCardboard
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml
index e0ca8bf664..bd06ac0dd5 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/ammo.yml
@@ -4,7 +4,6 @@
spriteName: ammo
startingInventory:
MagazineBoxCaselessRifle: 3
- MagazineBoxCaselessRifleFlash: 3
MagazineBoxCaselessRifleHighVelocity: 3
MagazineBoxCaselessRiflePractice: 3
MagazineBoxCaselessRifleRubber: 3
@@ -15,19 +14,16 @@
MagazineBoxLightRifleRubber: 3
MagazineBoxMagnum: 3
- MagazineBoxMagnumFlash: 3
MagazineBoxMagnumHighVelocity: 3
MagazineBoxMagnumPractice: 3
MagazineBoxMagnumRubber: 3
MagazineBoxPistol: 3
- MagazineBoxPistolFlash: 3
MagazineBoxPistolHighVelocity: 3
MagazineBoxPistolPractice: 3
MagazineBoxPistolRubber: 3
MagazineBoxRifle: 3
- MagazineBoxRifleFlash: 3
MagazineBoxRifleHighVelocity: 3
MagazineBoxRiflePractice: 3
MagazineBoxRifleRubber: 3
diff --git a/Resources/Prototypes/Damage/types.yml b/Resources/Prototypes/Damage/types.yml
index 105ebb5de2..7a8b9a8df4 100644
--- a/Resources/Prototypes/Damage/types.yml
+++ b/Resources/Prototypes/Damage/types.yml
@@ -1,28 +1,3 @@
-- type: damageType
- id: Blunt
-
-- type: damageType
- id: Slash
-
-- type: damageType
- id: Piercing
-
-- type: damageType
- id: Heat
-
-- type: damageType
- id: Shock
-
-- type: damageType
- id: Cold
-
-# Poison damage. Generally caused by various reagents being metabolised.
-- type: damageType
- id: Poison
-
-- type: damageType
- id: Radiation
-
# Damage due to being unable to breathe.
# Represents not enough oxygen (or equivalent) getting to the blood.
# Usually healed automatically if entity can breathe
@@ -34,9 +9,34 @@
- type: damageType
id: Bloodloss
+- type: damageType
+ id: Blunt
+
- type: damageType
id: Cellular
+- type: damageType
+ id: Cold
+
+- type: damageType
+ id: Heat
+
+- type: damageType
+ id: Piercing
+
+# Poison damage. Generally caused by various reagents being metabolised.
+- type: damageType
+ id: Poison
+
+- type: damageType
+ id: Radiation
+
+- type: damageType
+ id: Shock
+
+- type: damageType
+ id: Slash
+
# Damage represent structures internal integrity.
# Exclusive for structures such as walls, airlocks and others.
- type: damageType
diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml
index e6195740c2..e2eab6419a 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/human.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml
@@ -67,6 +67,7 @@
types:
Bloodloss:
-0.25
+ - type: Stamina
- type: StatusEffects
allowed:
- Stun
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml
index 7e68320b77..fc59ad9279 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml
@@ -100,21 +100,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- parent: BaseMagazineBoxCaselessRifle
- id: MagazineBoxCaselessRifleFlash
- name: ammunition box (.25 caseless flash)
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeCaselessRifleFlash
- - type: Sprite
- layers:
- - state: base
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
- - state: flash
-
- type: entity
parent: BaseMagazineBoxCaselessRifle
id: MagazineBoxCaselessRifleHighVelocity
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml
index 663c09b678..97fa45c71a 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml
@@ -38,21 +38,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- parent: BaseMagazineBoxMagnum
- id: MagazineBoxMagnumFlash
- name: ammunition box (.40 magnum flash)
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeMagnumFlash
- - type: Sprite
- layers:
- - state: base
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
- - state: flash
-
- type: entity
parent: BaseMagazineBoxMagnum
id: MagazineBoxMagnumHighVelocity
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml
index 2ab51c8638..0a9829871d 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml
@@ -39,21 +39,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- parent: BaseMagazineBoxPistol
- id: MagazineBoxPistolFlash
- name: ammunition box (.35 auto flash)
- components:
- - type: BallisticAmmoProvider
- proto: CartridgePistolFlash
- - type: Sprite
- layers:
- - state: base
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
- - state: flash
-
- type: entity
parent: BaseMagazineBoxPistol
id: MagazineBoxPistolHighVelocity
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml
index 06429dbf62..dcaf9d4142 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml
@@ -79,21 +79,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- parent: BaseMagazineBoxRifle
- id: MagazineBoxRifleFlash
- name: ammunition box (.20 rifle flash)
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeRifleFlash
- - type: Sprite
- layers:
- - state: base
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
- - state: flash
-
- type: entity
parent: BaseMagazineBoxRifle
id: MagazineBoxRifleHighVelocity
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml
index 3a62649f1e..4d9b184c5f 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml
@@ -28,14 +28,6 @@
- type: CartridgeAmmo
proto: BulletCaselessRifle
-- type: entity
- id: CartridgeCaselessRifleFlash
- name: cartridge (.25 caseless flash)
- parent: BaseCartridgeCaselessRifle
- components:
- - type: CartridgeAmmo
- proto: BulletCaselessRifleFlash
-
- type: entity
id: CartridgeCaselessRifleHighVelocity
name: cartridge (.25 caseless high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml
index 69606f88df..8eadd268b1 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml
@@ -27,14 +27,6 @@
- type: CartridgeAmmo
proto: BulletLightRifle
-- type: entity
- id: CartridgeLightRifleFlash
- name: cartridge (.30 rifle flash)
- parent: BaseCartridgeLightRifle
- components:
- - type: CartridgeAmmo
- proto: BulletLightRifleFlash
-
- type: entity
id: CartridgeLightRifleHighVelocity
name: cartridge (.30 rifle high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
index 4e922b0556..335dfbd402 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
@@ -27,14 +27,6 @@
- type: CartridgeAmmo
proto: BulletMagnum
-- type: entity
- id: CartridgeMagnumFlash
- name: cartridge (.40 magnum flash)
- parent: BaseCartridgeMagnum
- components:
- - type: CartridgeAmmo
- proto: BulletMagnumFlash
-
- type: entity
id: CartridgeMagnumHighVelocity
name: cartridge (.40 magnum high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml
index fdae513161..dde7304678 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml
@@ -27,14 +27,6 @@
- type: CartridgeAmmo
proto: BulletPistol
-- type: entity
- id: CartridgePistolFlash
- name: cartridge (.35 auto flash)
- parent: BaseCartridgePistol
- components:
- - type: CartridgeAmmo
- proto: BulletPistolFlash
-
- type: entity
id: CartridgePistolHighVelocity
name: cartridge (.35 auto high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml
index 92b1c82979..e058757a50 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml
@@ -27,14 +27,6 @@
- type: CartridgeAmmo
proto: BulletRifle
-- type: entity
- id: CartridgeRifleFlash
- name: cartridge (.20 rifle flash)
- parent: BaseCartridgeRifle
- components:
- - type: CartridgeAmmo
- proto: BulletRifleFlash
-
- type: entity
id: CartridgeRifleHighVelocity
name: cartridge (.20 rifle high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml
index 9af047668d..ed4278ba31 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml
@@ -80,20 +80,6 @@
- type: CartridgeAmmo
proto: PelletShotgun
-- type: entity
- id: ShellShotgunFlash
- name: shell (.50 flash)
- parent: BaseShellShotgun
- components:
- - type: Sprite
- layers:
- - state: flash
- map: [ "enum.AmmoVisualLayers.Base" ]
- - type: CartridgeAmmo
- proto: PelletShotgunFlash
- - type: SpentAmmoVisuals
- state: "flash"
-
- type: entity
id: ShellShotgunIncendiary
name: shell (.50 incendiary)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml
index b4e6e240b5..b66bff9f2c 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml
@@ -112,8 +112,6 @@
zeroVisible: false
- type: Appearance
-# No flash
-
- type: entity
id: MagazinePistolCaselessRifleHighVelocity
name: "pistol magazine (.25 caseless high-velocity)"
@@ -245,21 +243,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- id: MagazineCaselessRifleShortFlash
- name: "short magazine (.25 caseless flash)"
- parent: BaseMagazineCaselessRifleShort
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeCaselessRifleFlash
- capacity: 20
- - type: Sprite
- layers:
- - state: flash
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
-
- type: entity
id: MagazineCaselessRifleShortHighVelocity
name: "short magazine (.25 caseless high-velocity)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml
index 0bb4e4e4e6..11c5d26b69 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml
@@ -68,20 +68,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- id: MagazineLightRifleFlash
- name: "magazine (.30 rifle flash)"
- parent: BaseMagazineLightRifle
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeLightRifleFlash
- - type: Sprite
- layers:
- - state: flash
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
-
- type: entity
id: MagazineLightRifleHighVelocity
name: "magazine (.30 rifle high-velocity)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml
index 7229cf2dc9..02c4edf366 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml
@@ -78,20 +78,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- id: MagazineMagnumFlash
- name: "Lamia magazine (.40 magnum flash)"
- parent: BaseMagazineMagnum
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeMagnumFlash
- - type: Sprite
- layers:
- - state: flash
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
-
- type: entity
id: MagazineMagnumHighVelocity
name: "Lamia magazine (.40 magnum high-velocity)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml
index edd8753f18..ce41644de1 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml
@@ -159,20 +159,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- id: MagazinePistolFlash
- name: pistol magazine (.35 auto flash)
- parent: BaseMagazinePistol
- components:
- - type: BallisticAmmoProvider
- proto: CartridgePistolFlash
- - type: Sprite
- layers:
- - state: flash
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
-
- type: entity
id: MagazinePistolHighVelocity
name: pistol magazine (.35 auto high-velocity)
@@ -291,20 +277,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- id: MagazinePistolSubMachineGunFlash
- name: SMG magazine (.35 auto flash)
- parent: BaseMagazinePistolSubMachineGun
- components:
- - type: BallisticAmmoProvider
- proto: CartridgePistolFlash
- - type: Sprite
- layers:
- - state: flash
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
-
- type: entity
id: MagazinePistolSubMachineGunHighVelocity
name: SMG magazine (.35 auto high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml
index 8b58d6fb4b..f81296055d 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml
@@ -47,20 +47,6 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
-- type: entity
- id: MagazineRifleFlash
- name: "magazine (.20 rifle flash)"
- parent: BaseMagazineRifle
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeRifleFlash
- - type: Sprite
- layers:
- - state: flash
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-1
- map: ["enum.GunVisualLayers.Mag"]
-
- type: entity
id: MagazineRifleHighVelocity
name: "magazine (.20 rifle high-velocity)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml
index 2e81e92300..694d9589de 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml
@@ -9,17 +9,6 @@
types:
Piercing: 19
-- type: entity
- id: BulletCaselessRifleFlash
- name: bullet (.25 caseless flash)
- parent: BaseBulletFlash
- noSpawn: true
- components:
- - type: Projectile
- damage:
- types:
- Blunt: 3
-
- type: entity
id: BulletCaselessRifleHighVelocity
name: bullet (.25 caseless high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml
index 4cc3a4f46f..e4d2f35822 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml
@@ -9,17 +9,6 @@
types:
Piercing: 19
-- type: entity
- id: BulletLightRifleFlash
- name: bullet (.20 rifle flash)
- parent: BaseBulletFlash
- noSpawn: true
- components:
- - type: Projectile
- damage:
- types:
- Blunt: 3
-
- type: entity
id: BulletLightRifleHighVelocity
name: bullet (.20 rifle high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml
index fd729cb6f5..3781df4017 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml
@@ -9,17 +9,6 @@
types:
Piercing: 22
-- type: entity
- id: BulletMagnumFlash
- name: bullet (.40 magnum flash)
- parent: BaseBulletFlash
- noSpawn: true
- components:
- - type: Projectile
- damage:
- types:
- Blunt: 3
-
- type: entity
id: BulletMagnumHighVelocity
name: bullet (.40 magnum high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml
index c9a5e0565b..f26f7b4022 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml
@@ -9,17 +9,6 @@
types:
Piercing: 16
-- type: entity
- id: BulletPistolFlash
- name: bullet (.35 auto flash)
- parent: BaseBulletFlash
- noSpawn: true
- components:
- - type: Projectile
- damage:
- types:
- Blunt: 3
-
- type: entity
id: BulletPistolHighVelocity
name: bullet (.35 auto high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml
index 6e9a5873e5..606505bd68 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml
@@ -9,17 +9,6 @@
types:
Piercing: 17
-- type: entity
- id: BulletRifleFlash
- name: bullet (0.20 rifle flash)
- parent: BaseBulletFlash
- noSpawn: true
- components:
- - type: Projectile
- damage:
- types:
- Blunt: 3
-
- type: entity
id: BulletRifleHighVelocity
name: bullet (0.20 rifle high-velocity)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml
index d596111e4a..86d328099c 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml
@@ -25,9 +25,8 @@
damage:
types:
Blunt: 10
- - type: StunOnCollide
- stunAmount: 5
- knockdownAmount: 3
+ - type: StaminaDamageOnCollide
+ damage: 55
- type: entity
id: PelletShotgun
@@ -43,20 +42,6 @@
types:
Piercing: 5
-- type: entity
- id: PelletShotgunFlash
- name: pellet (.50 flash)
- noSpawn: true
- parent: BaseBulletFlash
- components:
- - type: Sprite
- sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
- state: buckshot
- - type: Projectile
- damage:
- types:
- Blunt: 2
-
- type: entity
id: PelletShotgunIncendiary
name: pellet (.50 incendiary)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml
index 64ccdb43b4..2dfe35663e 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml
@@ -32,26 +32,6 @@
zeroVisible: false
- type: Appearance
-- type: entity
- id: SpeedLoaderMagnumFlash
- name: "speed loader (.40 magnum flash)"
- parent: BaseSpeedLoaderMagnum
- components:
- - type: BallisticAmmoProvider
- proto: CartridgeMagnumFlash
- - type: Sprite
- sprite: Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi
- layers:
- - state: base
- map: [ "enum.GunVisualLayers.Base" ]
- - state: flash-6
- map: [ "enum.GunVisualLayers.Mag" ]
- - type: MagazineVisuals
- magState: flash
- steps: 7
- zeroVisible: false
- - type: Appearance
-
- type: entity
id: SpeedLoaderMagnumHighVelocity
name: "speed loader (.40 magnum high-velocity)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml
index 9165592042..4fb7b912c9 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/pistol.yml
@@ -32,25 +32,6 @@
zeroVisible: false
- type: Appearance
-- type: entity
- id: SpeedLoaderPistolFlash
- name: "speed loader (.35 auto flash)"
- parent: BaseSpeedLoaderPistol
- components:
- - type: BallisticAmmoProvider
- proto: CartridgePistolFlash
- - type: Sprite
- layers:
- - state: base
- map: ["enum.GunVisualLayers.Base"]
- - state: flash-6
- map: ["enum.GunVisualLayers.Mag"]
- - type: MagazineVisuals
- magState: flash
- steps: 7
- zeroVisible: false
- - type: Appearance
-
- type: entity
id: SpeedLoaderPistolHighVelocity
name: "speed loader (.35 auto high-velocity)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
index 89d3cb51c3..e87193c8d6 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
@@ -246,11 +246,49 @@
zeroVisible: true
- type: Appearance
+- type: entity
+ name: disabler
+ parent: BaseWeaponBattery
+ id: WeaponDisabler
+ description: A self-defense weapon that exhausts organic targets, weakening them until they collapse.
+ components:
+ - type: Tag
+ tags:
+ - Taser
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Battery/disabler.rsi
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+ - state: mag-unshaded-0
+ map: ["enum.GunVisualLayers.MagUnshaded"]
+ shader: unshaded
+ - type: Clothing
+ sprite: Objects/Weapons/Guns/Battery/disabler.rsi
+ size: 10
+ quickEquip: false
+ Slots:
+ - Belt
+ - type: Gun
+ fireRate: 2
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/taser2.ogg
+ - type: ProjectileBatteryAmmoProvider
+ proto: BulletDisabler
+ fireCost: 50
+ - type: MagazineVisuals
+ magState: mag
+ steps: 5
+ zeroVisible: true
+ - type: Appearance
+
- type: entity
name: taser
parent: BaseWeaponBattery
id: WeaponTaser
description: A low-capacity, energy-based stun gun used by security teams to subdue targets at range.
+ # Use Disabler
+ suffix: Obsolete
components:
- type: Tag
tags:
@@ -274,11 +312,8 @@
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/taser.ogg
- type: ProjectileBatteryAmmoProvider
- proto: BulletTaser
+ proto: BulletDisabler
fireCost: 50
- - type: Battery
- maxCharge: 100
- startingCharge: 100
- type: MagazineVisuals
magState: mag
steps: 5
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml
index 3cfe06efcb..75e77c9f65 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml
@@ -42,21 +42,6 @@
sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
state: impact_laser
-- type: hitscan
- id: OmniLaser
- damage:
- types:
- Heat: 21
- muzzleFlash:
- sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
- state: muzzle_omni
- travelFlash:
- sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
- state: beam_omni
- impactFlash:
- sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
- state: impact_omni
-
- type: hitscan
id: XrayLaser
damage:
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index 534a5ae7b2..e106f35451 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -57,21 +57,6 @@
- Impassable
- BulletImpassable
-- type: entity
- id: BaseBulletFlash
- name: base bullet flash
- parent: BaseBulletTrigger
- noSpawn: true
- components:
- - type: Projectile
- soundHit:
- path: /Audio/Weapons/Guns/Hits/snap.ogg
- - type: FlashOnTrigger
- range: 1
- - type: EmitSoundOnTrigger
- sound:
- path: "/Audio/Effects/flash_bang.ogg"
-
- type: entity
id: BaseBulletHighVelocity
name: base bullet high-velocity
@@ -106,14 +91,13 @@
Blunt: 3
soundHit:
path: /Audio/Weapons/Guns/Hits/snap.ogg
- - type: StunOnCollide
- stunAmount: 2
- knockdownAmount: 2
+ - type: StaminaDamageOnCollide
+ damage: 15
# Energy projectiles
- type: entity
- name : taser bolt
- id: BulletTaser
+ name : disabler bolt
+ id: BulletDisabler
parent: BaseBullet
noSpawn: true
components:
@@ -123,24 +107,24 @@
params:
volume: 5
- type: Sprite
- noRot: true
- sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
- color: "#ffff33"
+ sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
layers:
- - state: spark
+ - state: omnilaser
shader: unshaded
- type: Physics
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeAabb
- bounds: "-0.2,-0.2,0.2,0.2"
+ bounds: "-0.15,-0.3,0.15,0.3"
hard: false
id: projectile
mask:
- Impassable
- BulletImpassable
- type: Ammo
+ - type: StaminaDamageOnCollide
+ damage: 55
- type: Projectile
damage:
types:
@@ -148,9 +132,6 @@
soundHit:
path: "/Audio/Weapons/Guns/Hits/taser_hit.ogg"
soundForce: true
- - type: StunOnCollide
- stunAmount: 5
- knockdownAmount: 5
- type: entity
name: emitter bolt
@@ -246,9 +227,8 @@
Blunt: 1
soundHit:
path: /Audio/Effects/gen_hit.ogg
- - type: StunOnCollide
- stunAmount: 8
- knockdownAmount: 8
+ - type: StaminaDamageOnCollide
+ damage: 80
- type: entity
id: BulletGrenadeBlast
@@ -269,7 +249,7 @@
- type: entity
id: BulletGrenadeFlash
name: flash grenade
- parent: BaseBulletFlash
+ parent: BaseBulletTrigger
noSpawn: true
components:
- type: Sprite
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
index 92ea5655a2..1e4bdc1eb9 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
@@ -13,9 +13,8 @@
sound: /Audio/Weapons/bolathrow.ogg
- type: EmitSoundOnLand
sound: /Audio/Effects/snap.ogg
- - type: StunOnCollide
- stunAmount: 1
- knockdownAmount: 3
+ - type: StaminaDamageOnCollide
+ damage: 80
- type: Construction
graph: Bola
node: bola
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml
index 6c1b7e10a6..43e270f4cf 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml
@@ -16,8 +16,10 @@
range: 1.5
arcwidth: 60
arc: default
- - type: UseDelay
- delay: 4
+ cooldownTime: 1.5
+ arcCooldownTime: 1.5
+ - type: StaminaDamageOnHit
+ damage: 55
- type: Battery
maxCharge: 1000
startingCharge: 1000
@@ -50,7 +52,7 @@
arcWidth: 10
arc: default
- type: Item
- size: 2
+ size: 5
sprite: Objects/Weapons/Melee/flash.rsi
- type: ItemCooldown
diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml
index 170c364d94..8002dd1a3a 100644
--- a/Resources/Prototypes/Recipes/Lathes/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/security.yml
@@ -170,14 +170,3 @@
Plastic: 15
Steel: 10
Glass: 5
-
-- type: latheRecipe
- id: ShellShotgunFlash
- icon:
- sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi
- state: flash
- result: ShellShotgunFlash
- completetime: 2
- materials:
- Plastic: 20
- Steel: 5
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/meta.json b/Resources/Textures/Interface/Alerts/stamina.rsi/meta.json
new file mode 100644
index 0000000000..21122621e0
--- /dev/null
+++ b/Resources/Textures/Interface/Alerts/stamina.rsi/meta.json
@@ -0,0 +1,124 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "taken from tg station at commit https://github.com/tgstation/tgstation/blob/832ae532766d491d91db53746d15b4b55be3f2b0",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "stamina6",
+ "delays": [
+ [
+ 0.5,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "stamina5",
+ "delays": [
+ [
+ 0.5,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.5
+ ]
+ ]
+ },
+ {
+ "name": "stamina4",
+ "delays": [
+ [
+ 0.3,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "stamina3",
+ "delays": [
+ [
+ 0.3,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "stamina2",
+ "delays": [
+ [
+ 0.3,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "stamina1",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "stamina0",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina0.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina0.png
new file mode 100644
index 0000000000..10e3e8c956
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina0.png differ
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina1.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina1.png
new file mode 100644
index 0000000000..a34d57cf26
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina1.png differ
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina2.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina2.png
new file mode 100644
index 0000000000..a3d263d751
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina2.png differ
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina3.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina3.png
new file mode 100644
index 0000000000..356916dfe0
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina3.png differ
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina4.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina4.png
new file mode 100644
index 0000000000..d0645f4ebd
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina4.png differ
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina5.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina5.png
new file mode 100644
index 0000000000..46f439dfd5
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina5.png differ
diff --git a/Resources/Textures/Interface/Alerts/stamina.rsi/stamina6.png b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina6.png
new file mode 100644
index 0000000000..bbcba3803c
Binary files /dev/null and b/Resources/Textures/Interface/Alerts/stamina.rsi/stamina6.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/flash.png
deleted file mode 100644
index b50945ba8f..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json
index 632f0d68a9..8ce4d885e5 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json
@@ -25,9 +25,6 @@
{
"name": "mag10-1"
},
- {
- "name": "flash"
- },
{
"name": "hv"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/flash.png
deleted file mode 100644
index a2921b45fc..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json
index 5efc1be2a8..a85b6144c4 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json
@@ -13,9 +13,6 @@
{
"name": "mag-1"
},
- {
- "name": "flash"
- },
{
"name": "hv"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/flash.png
deleted file mode 100644
index 0698be7c2f..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json
index 5efc1be2a8..a85b6144c4 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json
@@ -13,9 +13,6 @@
{
"name": "mag-1"
},
- {
- "name": "flash"
- },
{
"name": "hv"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/flash.png
deleted file mode 100644
index 7de6be0c89..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json
index 52a51b7fc7..a92a8ed5d5 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json
@@ -19,9 +19,6 @@
{
"name": "magb-1"
},
- {
- "name": "flash"
- },
{
"name": "hv"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/flash-spent.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/flash-spent.png
deleted file mode 100644
index 075ef807e6..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/flash-spent.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/flash.png
deleted file mode 100644
index e0810018b8..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/meta.json
index 7ef062a143..a482d5c45a 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi/meta.json
@@ -31,12 +31,6 @@
{
"name": "flare-spent"
},
- {
- "name": "flash"
- },
- {
- "name": "flash-spent"
- },
{
"name": "incendiary"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/flash.png
deleted file mode 100644
index 2cd64d37e1..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json
index 0da5f470a4..8675d7f4ab 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/flash.png
deleted file mode 100644
index 9f1109656f..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/meta.json
index 0da5f470a4..8675d7f4ab 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/flash.png
deleted file mode 100644
index 837797e930..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/meta.json
index 0da5f470a4..8675d7f4ab 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/LightRifle/light_rifle_mag.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/flash.png
deleted file mode 100644
index cd402aac77..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/meta.json
index 542b70c21e..a3bcacb549 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/magnum_mag.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/flash.png
deleted file mode 100644
index dd4541b16b..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json
index 542b70c21e..a3bcacb549 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/flash.png
deleted file mode 100644
index 53f8421613..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/meta.json
index 0da5f470a4..8675d7f4ab 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/flash.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/flash.png
deleted file mode 100644
index 3b4a4dba15..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/flash.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json
index 0da5f470a4..8675d7f4ab 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Rifle/rifle_mag.rsi/meta.json
@@ -10,9 +10,6 @@
{
"name": "base"
},
- {
- "name": "flash"
- },
{
"name": "high_velocity"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-1.png
deleted file mode 100644
index 3b4d4dc717..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-1.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-2.png
deleted file mode 100644
index e3ce4d4455..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-2.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-3.png
deleted file mode 100644
index e2997462a0..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-3.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-4.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-4.png
deleted file mode 100644
index bce896fb47..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-4.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-5.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-5.png
deleted file mode 100644
index c7b19398d1..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-5.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-6.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-6.png
deleted file mode 100644
index c5c22638d8..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/flash-6.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json
index 1ff5766619..a6be819054 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi/meta.json
@@ -28,24 +28,6 @@
{
"name": "base-6"
},
- {
- "name": "flash-1"
- },
- {
- "name": "flash-2"
- },
- {
- "name": "flash-3"
- },
- {
- "name": "flash-4"
- },
- {
- "name": "flash-5"
- },
- {
- "name": "flash-6"
- },
{
"name": "high-velocity-1"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-1.png
deleted file mode 100644
index 5aabe56998..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-1.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-2.png
deleted file mode 100644
index 87c172f616..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-2.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-3.png
deleted file mode 100644
index 45dc0a2735..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-3.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-4.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-4.png
deleted file mode 100644
index 4826271b83..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-4.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-5.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-5.png
deleted file mode 100644
index d47f506850..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-5.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-6.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-6.png
deleted file mode 100644
index 10648a7e05..0000000000
Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/flash-6.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/meta.json
index f4c28a4760..cf40a0390e 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Pistol/pistol_speed_loader.rsi/meta.json
@@ -28,24 +28,6 @@
{
"name": "base-6"
},
- {
- "name": "flash-1"
- },
- {
- "name": "flash-2"
- },
- {
- "name": "flash-3"
- },
- {
- "name": "flash-4"
- },
- {
- "name": "flash-5"
- },
- {
- "name": "flash-6"
- },
{
"name": "high-velocity-1"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json
index 4aa7146472..1fe6e79dfe 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "taken from tg station at commithttps://github.com/tgstation/tgstation/commit/8b7f8ba6a3327c7381967c550f185dffafd11a57",
+ "copyright": "taken from tg station at commit https://github.com/tgstation/tgstation/commit/8b7f8ba6a3327c7381967c550f185dffafd11a57",
"size": {
"x": 32,
"y": 32
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/base.png
new file mode 100644
index 0000000000..bddfe41808
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-0.png
new file mode 100644
index 0000000000..fc80fcab15
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-0.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-1.png
new file mode 100644
index 0000000000..7c9b5f04b7
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-2.png
new file mode 100644
index 0000000000..7011a06474
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-3.png
new file mode 100644
index 0000000000..dc48564a9b
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-4.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-4.png
new file mode 100644
index 0000000000..338f0785d6
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-left-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-0.png
new file mode 100644
index 0000000000..750c2c06be
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-0.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-1.png
new file mode 100644
index 0000000000..81cc3ef2aa
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-2.png
new file mode 100644
index 0000000000..8dcead6e40
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-3.png
new file mode 100644
index 0000000000..6a6b08c6a7
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-4.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-4.png
new file mode 100644
index 0000000000..7c66b0dba7
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/inhand-right-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-0.png
new file mode 100644
index 0000000000..8a23628ff5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-0.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-1.png
new file mode 100644
index 0000000000..d47922661f
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-2.png
new file mode 100644
index 0000000000..22c37d1921
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-3.png
new file mode 100644
index 0000000000..2f0c2045c2
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-4.png b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-4.png
new file mode 100644
index 0000000000..1c4cd9c360
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/mag-unshaded-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/meta.json
new file mode 100644
index 0000000000..81fcb2729e
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Battery/disabler.rsi/meta.json
@@ -0,0 +1,65 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "taken from tg station at commit https://github.com/tgstation/tgstation/blob/832ae532766d491d91db53746d15b4b55be3f2b0",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "base"
+ },
+ {
+ "name": "mag-unshaded-4"
+ },
+ {
+ "name": "mag-unshaded-3"
+ },
+ {
+ "name": "mag-unshaded-2"
+ },
+ {
+ "name": "mag-unshaded-1"
+ },
+ {
+ "name": "mag-unshaded-0",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "inhand-left-0"
+ },
+ {
+ "name": "inhand-left-1"
+ },
+ {
+ "name": "inhand-left-2"
+ },
+ {
+ "name": "inhand-left-3"
+ },
+ {
+ "name": "inhand-left-4"
+ },
+ {
+ "name": "inhand-right-0"
+ },
+ {
+ "name": "inhand-right-1"
+ },
+ {
+ "name": "inhand-right-2"
+ },
+ {
+ "name": "inhand-right-3"
+ },
+ {
+ "name": "inhand-right-4"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/impact_bullet.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/impact_bullet.png
new file mode 100644
index 0000000000..9af9ad53d6
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/impact_bullet.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/impact_laser_blue.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/impact_laser_blue.png
new file mode 100644
index 0000000000..ad021a87cd
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/impact_laser_blue.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json
new file mode 100644
index 0000000000..f6b561e1de
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json
@@ -0,0 +1,37 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/tgstation/tgstation/tree/88d7dbfc105fbf40284d7b7c4587f8d23c0ac3ac",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "omnilaser"
+ },
+ {
+ "name": "impact_bullet",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "impact_laser_blue",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/omnilaser.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/omnilaser.png
new file mode 100644
index 0000000000..34ddcc86ba
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/omnilaser.png differ