diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs
index 2042216c68..4150612d96 100644
--- a/Content.Client/Entry/IgnoredComponents.cs
+++ b/Content.Client/Entry/IgnoredComponents.cs
@@ -78,7 +78,7 @@ namespace Content.Client.Entry
"SpeedLoader",
"Hitscan",
"ExplosiveProjectile",
- "StunnableProjectile",
+ "StunOnCollide",
"RandomPottedPlant",
"CommunicationsConsole",
"BarSign",
diff --git a/Content.Server/Stunnable/Components/StunOnCollideComponent.cs b/Content.Server/Stunnable/Components/StunOnCollideComponent.cs
new file mode 100644
index 0000000000..305604b134
--- /dev/null
+++ b/Content.Server/Stunnable/Components/StunOnCollideComponent.cs
@@ -0,0 +1,23 @@
+using Robust.Shared.GameObjects;
+using Robust.Shared.Serialization.Manager.Attributes;
+
+namespace Content.Server.Stunnable.Components
+{
+ ///
+ /// Adds stun when it collides with an entity
+ ///
+ [RegisterComponent]
+ internal sealed class StunOnCollideComponent : Component
+ {
+ // TODO: Can probably predict this.
+ public override string Name => "StunOnCollide";
+
+ // See stunnable for what these do
+ [DataField("stunAmount")]
+ internal int StunAmount = default;
+ [DataField("knockdownAmount")]
+ internal int KnockdownAmount = default;
+ [DataField("slowdownAmount")]
+ internal int SlowdownAmount = default;
+ }
+}
diff --git a/Content.Server/Stunnable/Components/StunnableProjectileComponent.cs b/Content.Server/Stunnable/Components/StunnableProjectileComponent.cs
deleted file mode 100644
index 9ebd0f6aad..0000000000
--- a/Content.Server/Stunnable/Components/StunnableProjectileComponent.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using Content.Server.Projectiles.Components;
-using Robust.Shared.GameObjects;
-using Robust.Shared.Physics.Collision;
-using Robust.Shared.Physics.Dynamics;
-using Robust.Shared.Serialization.Manager.Attributes;
-
-namespace Content.Server.Stunnable.Components
-{
- ///
- /// Adds stun when it collides with an entity
- ///
- [RegisterComponent]
- public sealed class StunnableProjectileComponent : Component, IStartCollide
- {
- public override string Name => "StunnableProjectile";
-
- // See stunnable for what these do
- [DataField("stunAmount")]
- private int _stunAmount = default;
- [DataField("knockdownAmount")]
- private int _knockdownAmount = default;
- [DataField("slowdownAmount")]
- private int _slowdownAmount = default;
-
- protected override void Initialize()
- {
- base.Initialize();
-
- Owner.EnsureComponentWarn(out ProjectileComponent _);
- }
-
- void IStartCollide.CollideWith(Fixture ourFixture, Fixture otherFixture, in Manifold manifold)
- {
- if (otherFixture.Body.Owner.TryGetComponent(out StunnableComponent? stunnableComponent))
- {
- stunnableComponent.Stun(_stunAmount);
- stunnableComponent.Knockdown(_knockdownAmount);
- stunnableComponent.Slowdown(_slowdownAmount);
- }
- }
- }
-}
diff --git a/Content.Server/Stunnable/StunOnCollideSystem.cs b/Content.Server/Stunnable/StunOnCollideSystem.cs
new file mode 100644
index 0000000000..178b733596
--- /dev/null
+++ b/Content.Server/Stunnable/StunOnCollideSystem.cs
@@ -0,0 +1,27 @@
+using Content.Server.Stunnable.Components;
+using JetBrains.Annotations;
+using Robust.Shared.GameObjects;
+using Robust.Shared.Physics.Dynamics;
+
+namespace Content.Server.Stunnable
+{
+ [UsedImplicitly]
+ internal sealed class StunOnCollideSystem : EntitySystem
+ {
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(HandleCollide);
+ }
+
+ private void HandleCollide(EntityUid uid, StunOnCollideComponent component, StartCollideEvent args)
+ {
+ if (args.OtherFixture.Body.Owner.TryGetComponent(out StunnableComponent? stunnableComponent))
+ {
+ stunnableComponent.Stun(component.StunAmount);
+ stunnableComponent.Knockdown(component.KnockdownAmount);
+ stunnableComponent.Slowdown(component.SlowdownAmount);
+ }
+ }
+ }
+}
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 f2156645d8..2bfe712a92 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml
@@ -23,7 +23,7 @@
- type: Projectile
damages:
Blunt: 10
- - type: StunnableProjectile
+ - type: StunOnCollide
- type: entity
id: PelletShotgun
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index 5f9b898de7..756de9f0cb 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -71,8 +71,9 @@
soundHit: /Audio/Weapons/Guns/Hits/snap.ogg
damages:
Blunt: 3
- - type: StunnableProjectile
- paralyzeAmount: 2
+ - type: StunOnCollide
+ stunAmount: 2
+ knockdownAmount: 2
# Energy projectiles
- type: entity
@@ -105,7 +106,7 @@
soundHitSpecies: "/Audio/Weapons/Guns/Hits/taser_hit.ogg"
damages:
Heat: 5
- - type: StunnableProjectile
+ - type: StunOnCollide
stunAmount: 5
knockdownAmount: 5
@@ -175,8 +176,9 @@
- type: Projectile
deleteOnCollide: false
soundHit: /Audio/Effects/gen_hit.ogg
- - type: StunnableProjectile
- paralyzeAmount: 8
+ - type: StunOnCollide
+ stunAmount: 8
+ knockdownAmount: 8
- type: entity
id: BulletGrenadeBlast