diff --git a/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs
index 3754ab12a2..241da38045 100644
--- a/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs
+++ b/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs
@@ -5,11 +5,4 @@ namespace Content.Server.Chemistry.Components;
/// contained solution into a target when they become embedded in it.
///
[RegisterComponent]
-public sealed partial class SolutionInjectOnEmbedComponent : BaseSolutionInjectOnEventComponent
-{
- ///
- /// Used to override the PierceArmor setting when fired from a SyringeGun.
- ///
- [ViewVariables(VVAccess.ReadWrite)]
- public bool? PierceArmorOverride;
-}
+public sealed partial class SolutionInjectOnEmbedComponent : BaseSolutionInjectOnEventComponent { }
diff --git a/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs
index aa21b8ec80..bbf7c2a88a 100644
--- a/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs
+++ b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs
@@ -1,34 +1,24 @@
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
+
+
namespace Content.Server.Chemistry.Components;
///
-/// Used for embeddable entities that should try to inject their
-/// contained solution into the entity they are embedded in over time.
+/// Used for embeddable entities that should try to inject a
+/// contained solution into a target over time while they are embbeded into.
///
-[RegisterComponent]
-public sealed partial class SolutionInjectWhileEmbeddedComponent : BaseSolutionInjectOnEventComponent
-{
- ///
- /// The interval between injection attempts, in seconds.
- ///
- [DataField]
- public float UpdateInterval = 3.0f;
+[RegisterComponent, AutoGenerateComponentPause]
+public sealed partial class SolutionInjectWhileEmbeddedComponent : BaseSolutionInjectOnEventComponent {
+ ///
+ ///The time at which the injection will happen.
+ ///
+ [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
+ public TimeSpan NextUpdate;
- ///
- /// Maximum number of injections that can be performed before the component removes itself.
- /// Null means unlimited.
- ///
- [DataField]
- public int? Injections = 5;
+ ///
+ ///The delay between each injection in seconds.
+ ///
+ [DataField]
+ public TimeSpan UpdateInterval = TimeSpan.FromSeconds(3);
+}
- ///
- /// Used to override the PierceArmor setting when fired from a SyringeGun.
- ///
- [ViewVariables(VVAccess.ReadWrite)]
- public bool? PierceArmorOverride;
-
- ///
- /// Used to speed up injections when fired from a SyringeGun.
- ///
- [ViewVariables(VVAccess.ReadWrite)]
- public float SpeedMultiplier = 1f;
-}
\ No newline at end of file
diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs
index 07aa5a3774..86f4a3ebd6 100644
--- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs
+++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs
@@ -2,10 +2,9 @@ using Content.Server._White.Chemistry.Components;
using Content.Server.Body.Components;
using Content.Server.Body.Systems;
using Content.Server.Chemistry.Components;
-using Content.Server.Chemistry.Containers.EntitySystems;
-using Content.Server.Explosion.Components;
using Content.Shared._White.Blocking;
using Content.Shared.Chemistry.EntitySystems;
+using Content.Shared.Chemistry.Events;
using Content.Shared.Inventory;
using Content.Shared.Popups;
using Content.Shared.Projectiles;
@@ -33,11 +32,9 @@ public sealed class SolutionInjectOnCollideSystem : EntitySystem
base.Initialize();
SubscribeLocalEvent(HandleProjectileHit);
SubscribeLocalEvent(HandleEmbed);
- //WWDP edit start
- SubscribeLocalEvent(HandleMeleeHit,
- after: new[] {typeof(MeleeBlockSystem)});
- SubscribeLocalEvent(HandleTrigger);
- //WWDP edit end
+ SubscribeLocalEvent(HandleMeleeHit, after: new[] {typeof(MeleeBlockSystem)}); // WD EDIT
+ SubscribeLocalEvent(OnInjectOverTime);
+ SubscribeLocalEvent(HandleTrigger); // WD EDIT
}
private void HandleProjectileHit(Entity entity, ref ProjectileHitEvent args)
@@ -68,6 +65,11 @@ public sealed class SolutionInjectOnCollideSystem : EntitySystem
TryInjectTargets((entity.Owner, entity.Comp), args.HitEntities, args.User);
}
+ private void OnInjectOverTime(Entity entity, ref InjectOverTimeEvent args)
+ {
+ DoInjection((entity.Owner, entity.Comp), args.EmbeddedIntoUid);
+ }
+
private void DoInjection(Entity injectorEntity, EntityUid target, EntityUid? source = null)
{
TryInjectTargets(injectorEntity, [target], source);
diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs
new file mode 100644
index 0000000000..2baeba9da1
--- /dev/null
+++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs
@@ -0,0 +1,60 @@
+using Content.Server.Body.Components;
+using Content.Server.Body.Systems;
+using Content.Server.Chemistry.Components;
+using Content.Shared.Chemistry.EntitySystems;
+using Content.Shared.Chemistry.Events;
+using Content.Shared.Inventory;
+using Content.Shared.Popups;
+using Content.Shared.Projectiles;
+using Content.Shared.Tag;
+using Content.Shared.Weapons.Melee.Events;
+using Robust.Shared.Collections;
+using Robust.Shared.Timing;
+
+namespace Content.Server.Chemistry.EntitySystems;
+
+///
+/// System for handling injecting into an entity while a projectile is embedded.
+///
+public sealed class SolutionInjectWhileEmbeddedSystem : EntitySystem
+{
+ [Dependency] private readonly IGameTiming _gameTiming = default!;
+ [Dependency] private readonly BloodstreamSystem _bloodstream = default!;
+ [Dependency] private readonly InventorySystem _inventory = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
+ [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
+ [Dependency] private readonly TagSystem _tag = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnMapInit);
+ }
+
+ private void OnMapInit(Entity ent, ref MapInitEvent args)
+ {
+ ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.UpdateInterval;
+ }
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out var uid, out var injectComponent, out var projectileComponent))
+ {
+ if (_gameTiming.CurTime < injectComponent.NextUpdate)
+ continue;
+
+ injectComponent.NextUpdate += injectComponent.UpdateInterval;
+
+ if(projectileComponent.EmbeddedIntoUid == null)
+ continue;
+
+ var ev = new InjectOverTimeEvent(projectileComponent.EmbeddedIntoUid.Value);
+ RaiseLocalEvent(uid, ref ev);
+
+ }
+ }
+}
diff --git a/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs
index 7e0f552a36..ec1df38111 100644
--- a/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs
+++ b/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs
@@ -74,7 +74,7 @@ public sealed class BloodSpearSystem : EntitySystem
var cultistCoords = _transform.GetWorldPosition(cultist);
if (TryComp(spearUid, out var embeddableProjectile)
- && embeddableProjectile.Target.HasValue)
+ && embeddableProjectile.EmbeddedIntoUid.HasValue)
_projectile.RemoveEmbed(spearUid.Value, embeddableProjectile);
_transform.AttachToGridOrMap(spearUid.Value, spearXform);
diff --git a/Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs b/Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs
deleted file mode 100644
index a406bb34d2..0000000000
--- a/Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using Content.Server.Chemistry.Components;
-using Content.Shared._Goobstation.Weapons.Ranged;
-using Content.Shared.Weapons.Ranged.Events;
-using Content.Shared.Weapons.Ranged.Systems;
-
-namespace Content.Server._Goobstation.Weapons.Ranged;
-
-///
-/// System for handling projectiles and altering their properties when fired from a Syringe Gun.
-///
-public sealed class SyringeGunSystem : EntitySystem
-{
-
- public override void Initialize()
- {
- SubscribeLocalEvent(OnFire);
- SubscribeLocalEvent(OnShootAttempt);
- }
-
- private void OnShootAttempt(Entity ent, ref AttemptShootEvent args)
- {
- args.ThrowItems = true;
- }
-
- private void OnFire(Entity gun, ref AmmoShotEvent args)
- {
- foreach (var projectile in args.FiredProjectiles)
- {
- if (TryComp(projectile, out SolutionInjectWhileEmbeddedComponent? whileEmbedded))
- {
- whileEmbedded.Injections = null; // uncap the injection maximum
- whileEmbedded.PierceArmorOverride = gun.Comp.PierceArmor;
- whileEmbedded.SpeedMultiplier = gun.Comp.InjectionSpeedMultiplier; // store it in the component to reset it
- whileEmbedded.UpdateInterval /= whileEmbedded.SpeedMultiplier;
- }
- if (TryComp(projectile, out SolutionInjectOnEmbedComponent? onEmbed))
- onEmbed.PierceArmorOverride = gun.Comp.PierceArmor;
- }
- }
-}
\ No newline at end of file
diff --git a/Content.Shared/Chemistry/InjectOverTimeEvent.cs b/Content.Shared/Chemistry/InjectOverTimeEvent.cs
new file mode 100644
index 0000000000..ca5ab4213f
--- /dev/null
+++ b/Content.Shared/Chemistry/InjectOverTimeEvent.cs
@@ -0,0 +1,13 @@
+namespace Content.Shared.Chemistry.Events;
+
+///
+/// Raised directed on an entity when it embeds in another entity.
+///
+[ByRefEvent]
+public readonly record struct InjectOverTimeEvent(EntityUid embeddedIntoUid)
+{
+ ///
+ /// Entity that is embedded in.
+ ///
+ public readonly EntityUid EmbeddedIntoUid = embeddedIntoUid;
+}
diff --git a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs
index 048e1ab337..d25feb7a83 100644
--- a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs
+++ b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs
@@ -16,64 +16,64 @@ public sealed partial class EmbeddableProjectileComponent : Component
///
/// Minimum speed of the projectile to embed.
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public float MinimumSpeed = 5f;
///
/// Delete the entity on embedded removal?
/// Does nothing if there's no RemovalTime.
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public bool DeleteOnRemove;
///
/// How long it takes to remove the embedded object.
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public float? RemovalTime = 5f;
///
/// Whether this entity will embed when thrown, or only when shot as a projectile.
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public bool EmbedOnThrow = true;
///
/// How far into the entity should we offset (0 is wherever we collided).
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public Vector2 Offset = Vector2.Zero;
///
/// Sound to play after embedding into a hit target.
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public SoundSpecifier? Sound;
///
- /// The entity this embeddable is attached to.
+ /// Uid of the entity the projectile is embed into.
///
- [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
- public EntityUid? Target = null;
-
- ///
- /// The body part of the target this embeddable is attached to.
- ///
- [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
- public TargetBodyPart? TargetBodyPart = null;
+ [DataField, AutoNetworkedField]
+ public EntityUid? EmbeddedIntoUid;
///
/// How much time before this entity automatically falls off? (0 is never)
///
- [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
+ [DataField, AutoNetworkedField]
public float AutoRemoveDuration = 40f;
///
/// The time when this entity automatically falls off after being attached.
///
- [ViewVariables(VVAccess.ReadWrite), DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField]
+ [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField]
public TimeSpan? AutoRemoveTime = null;
+ ///
+ /// The body part of the target this embeddable is attached to.
+ ///
+ [ViewVariables, AutoNetworkedField]
+ public TargetBodyPart? TargetBodyPart = null;
+
// WD EDIT START
[DataField]
public DamageSpecifier Damage = new();
diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs
index 8aea690f65..bf6e810731 100644
--- a/Content.Shared/Projectiles/SharedProjectileSystem.cs
+++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs
@@ -74,7 +74,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
if (comp.AutoRemoveTime == null || comp.AutoRemoveTime > curTime)
continue;
- if (comp.Target is { } targetUid)
+ if (comp.EmbeddedIntoUid is { } targetUid)
_popup.PopupClient(Loc.GetString("throwing-embed-falloff", ("item", uid)), targetUid, targetUid);
RemoveEmbed(uid, comp);
@@ -92,7 +92,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
args.Handled = true;
- if (component.Target is {} targetUid)
+ if (component.EmbeddedIntoUid is {} targetUid)
_popup.PopupClient(Loc.GetString("throwing-embed-remove-alert-owner", ("item", uid), ("other", args.User)),
args.User, targetUid);
@@ -116,7 +116,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
public void RemoveEmbed(EntityUid uid, EmbeddableProjectileComponent component, EntityUid? remover = null)
{
component.AutoRemoveTime = null;
- component.Target = null;
+ component.EmbeddedIntoUid = null;
component.TargetBodyPart = null;
RemCompDeferred(uid);
@@ -225,14 +225,13 @@ public abstract partial class SharedProjectileSystem : EntitySystem
_audio.PlayPredicted(component.Sound, uid, null);
component.TargetBodyPart = targetPart;
+ component.EmbeddedIntoUid = target;
var ev = new EmbedEvent(user, target, targetPart);
RaiseLocalEvent(uid, ref ev);
if (component.AutoRemoveDuration != 0)
component.AutoRemoveTime = _timing.CurTime + TimeSpan.FromSeconds(component.AutoRemoveDuration);
- component.Target = target;
-
Dirty(uid, component);
return true;
}
@@ -254,7 +253,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
private void OnExamined(EntityUid uid, EmbeddableProjectileComponent component, ExaminedEvent args)
{
- if (!(component.Target is { } target))
+ if (!(component.EmbeddedIntoUid is { } target))
return;
var targetIdentity = Identity.Entity(target, EntityManager);
diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs
index 10348cda82..b4cf76f49a 100644
--- a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs
+++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs
@@ -42,7 +42,7 @@ public sealed class CultItemSystem : EntitySystem
{
if (CanUse(args.User, item) ||
// Allow non-cultists to remove embedded cultist weapons and getting knocked down afterwards on pickup
- (TryComp(item.Owner, out var embeddable) && embeddable.Target != null))
+ (TryComp(item.Owner, out var embeddable) && embeddable.EmbeddedIntoUid != null))
return;
args.Handled = true;
diff --git a/Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs b/Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs
deleted file mode 100644
index b7c4596957..0000000000
--- a/Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace Content.Shared._Goobstation.Weapons.Ranged;
-
-///
-/// Component that allows syringe-firing guns to uncap their injection limit on firing.
-///
-[RegisterComponent]
-public sealed partial class SyringeGunComponent : Component
-{
- ///
- /// Force fired projectiles to (not) pierce armor.
- /// Doesn't apply if null.
- ///
- [DataField]
- public bool? PierceArmor;
-
- ///
- /// Multiplies injection speed for fired syringes with SolutionInjectWhileEmbeddedComponent.
- ///
- [DataField]
- public float InjectionSpeedMultiplier = 1f;
-}
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_white/prototypes/catalog/uplink/job_specific.ftl b/Resources/Locale/en-US/_white/prototypes/catalog/uplink/job_specific.ftl
index b7094f4c66..04d31458d3 100644
--- a/Resources/Locale/en-US/_white/prototypes/catalog/uplink/job_specific.ftl
+++ b/Resources/Locale/en-US/_white/prototypes/catalog/uplink/job_specific.ftl
@@ -1,8 +1,5 @@
uplink-greytide-name = tider's toolbox
uplink-greytide-desc = A classic blue toolbox. Inside are some basic tools, insulated gloves and a gas mask.
-uplink-dart-syringe-gun-name = dart syringe gun
-uplink-dart-syringe-gun-desc = An illegally modified version of the syringe gun that allows projectiles to pierce through armor. Also pierces skin better, resulting in faster injection.
-
uplink-plasma-flood-law-board-name = law board (Plasma Flood)
uplink-plasma-flood-law-board-desc = A dangerous set of laws, that makes the station AI replace the station atmosphere with plasma.
diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl
deleted file mode 100644
index 917513ecea..0000000000
--- a/Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-ent-SyringeGun = syringe gun
-ent-SyringeGun-desc = A gun that allows you to fire syringes to slowly inject their contents on a target.
-ent-RapidSyringeGun = rapid syringe gun
-ent-RapidSyringeGun-desc = A finely-tuned syringe gun featuring a faster fire rate and more room for ammo, made for the most experienced medical officers.
-ent-DartSyringeGun = dart syringe gun
-ent-DartSyringeGun-desc = An illegally modified version of the syringe gun that allows projectiles to pierce through armor. Also pierces skin better, resulting in faster injection.
\ No newline at end of file
diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl
deleted file mode 100644
index 69d6a43c8d..0000000000
--- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-ent-LauncherSyringe = syringe gun
-ent-LauncherSyringe-desc = Load full of poisoned syringes for optimal fun.
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/_white/prototypes/catalog/uplink/job_specific.ftl b/Resources/Locale/ru-RU/_white/prototypes/catalog/uplink/job_specific.ftl
index 233bb1f91a..b48d2dfba6 100644
--- a/Resources/Locale/ru-RU/_white/prototypes/catalog/uplink/job_specific.ftl
+++ b/Resources/Locale/ru-RU/_white/prototypes/catalog/uplink/job_specific.ftl
@@ -1,8 +1,5 @@
uplink-greytide-name = Набор грейтайда
uplink-greytide-desc = Старый добрый синий тулбокс. Внутри лежат набор инструментов, изолированные перчатки и противогаз.
-uplink-dart-syringe-gun-name = шприцемёт дартс
-uplink-dart-syringe-gun-desc = Нелегально модифицированная версия шприцемёта, снаряды которого пробивают броню. Также лучше проникает в кожу, что обеспечивает более быструю инъекцию.
-
uplink-plasmaflood-lawboard-name = Набор законов ИИ (Плазмафлуд)
uplink-plasmaflood-lawboard-desc = Опасный набор законов, настраивающий ИИ станции на замену всей атмосферы на плазму.
diff --git a/Resources/Locale/ru-RU/_white/prototypes/entities/objects/specific/chemistry/syringes.ftl b/Resources/Locale/ru-RU/_white/prototypes/entities/objects/specific/chemistry/syringes.ftl
deleted file mode 100644
index a7ac5201d3..0000000000
--- a/Resources/Locale/ru-RU/_white/prototypes/entities/objects/specific/chemistry/syringes.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-ent-MiniSyringe = мини-шприц
-ent-MiniSyringe-desc = Обычный шприц, переделанный для использования в шприцемёте.
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl
deleted file mode 100644
index d1c8e19c0a..0000000000
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl
+++ /dev/null
@@ -1,6 +0,0 @@
-ent-SyringeGun = шприцемёт
-ent-SyringeGun-desc = Пистолет, который позволяет стрелять шприцами для медленного введения их содержимого в цель.
-ent-RapidSyringeGun = ускоренный шприцемёт
-ent-RapidSyringeGun-desc = Точно настроенный шприцемёт с более высокой скорострельностью и большим пространством для боеприпасов, созданный для самых опытных медицинских офицеров.
-ent-DartSyringeGun = шприцемёт синдиката
-ent-DartSyringeGun-desc = Незаконно модифицированная версия шприцемёта, которая позволяет снарядам пробивать броню. Также лучше проникает в кожу, что приводит к более быстрой инъекции.
diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl
deleted file mode 100644
index da23fc2ac1..0000000000
--- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl
+++ /dev/null
@@ -1,2 +0,0 @@
-ent-LauncherSyringe = шприцемёт
-ent-LauncherSyringe-desc = Заряжается ядовитыми шприцами для оптимального веселья.
diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
index 9218ea4b42..d54fddb97c 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
@@ -435,6 +435,65 @@
tags:
- Syringe
- Trash
+
+- type: entity
+ name: mini syringe
+ parent: Syringe
+ description: A regular syringe, reshaped to fit inside of a gun.
+ id: MiniSyringe
+ components:
+ - type: Sprite
+ sprite: Objects/Specific/Chemistry/syringe.rsi
+ layers:
+ - state: minisyringe1
+ map: ["enum.SolutionContainerLayers.Fill"]
+ visible: false
+ - state: syringeproj
+ - type: SolutionContainerVisuals
+ maxFillLevels: 3
+ fillBaseName: minisyringe
+ inHandsMaxFillLevels: 3
+ inHandsFillBaseName: -fill-
+ - type: EmbeddableProjectile
+ offset: "-0.1,0"
+ minimumSpeed: 3
+ removalTime: 0.25
+ embedOnThrow: false
+ - type: SolutionInjectWhileEmbedded
+ transferAmount: 1
+ solution: injector
+ updateInterval: 2
+ - type: SolutionInjectOnEmbed
+ transferAmount: 2
+ solution: injector
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape: !type:PhysShapeCircle
+ radius: 0.2
+ density: 5
+ mask:
+ - ItemMask
+ restitution: 0.3
+ friction: 0.2
+ projectile:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.1,-0.3,0.1,0.3"
+ hard: false
+ mask:
+ - Impassable
+ - BulletImpassable
+ - type: Projectile
+ deleteOnCollide: false
+ onlyCollideWhenShot: true
+ damage:
+ types:
+ Piercing: 5
+ - type: Tag
+ tags:
+ - Syringe
+ - Trash
- SyringeGunAmmo
- type: entity
@@ -474,7 +533,6 @@
tags:
- Syringe
- Trash
- - SyringeGunAmmo
- type: ReverseEngineering # Delta
difficulty: 4
recipes:
@@ -510,7 +568,6 @@
tags:
- Syringe
- Trash
- - SyringeGunAmmo
- type: ReverseEngineering # Delta
difficulty: 3
recipes:
@@ -588,65 +645,3 @@
storageRemoveSound: /Audio/Effects/pill_remove.ogg
- type: Dumpable
-- type: entity
- name: mini syringe
- parent: Syringe
- description: A regular syringe, reshaped to fit inside of a gun.
- id: MiniSyringe
- components:
- - type: Sprite
- sprite: Objects/Specific/Chemistry/syringe.rsi
- layers:
- - state: minisyringe1
- map: ["enum.SolutionContainerLayers.Fill"]
- visible: false
- - state: syringeproj
- - type: SolutionContainerVisuals
- maxFillLevels: 3
- fillBaseName: minisyringe
- inHandsMaxFillLevels: 3
- inHandsFillBaseName: -fill-
- - type: EmbeddableProjectile
- offset: "-0.1,0"
- minimumSpeed: 3
- removalTime: 0.25
- embedOnThrow: true
- - type: SolutionInjectWhileEmbedded
- transferAmount: 0.5
- solution: injector
- updateInterval: 2
- injections: 10
- pierceArmor: false
- - type: SolutionInjectOnEmbed
- transferAmount: 2
- solution: injector
- pierceArmor: false
- - type: Fixtures
- fixtures:
- fix1:
- shape: !type:PhysShapeCircle
- radius: 0.2
- density: 5
- mask:
- - ItemMask
- restitution: 0.3
- friction: 0.2
- projectile:
- shape:
- !type:PhysShapeAabb
- bounds: "-0.1,-0.3,0.1,0.3"
- hard: false
- mask:
- - Impassable
- - BulletImpassable
- - type: Projectile
- deleteOnCollide: false
- onlyCollideWhenShot: true
- damage:
- types:
- Piercing: 5
- - type: Tag
- tags:
- - Syringe
- - Trash
- - SyringeGunAmmo
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml
index 65237663de..d1664ff2a9 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml
@@ -116,7 +116,7 @@
containers:
storagebase: !type:Container
ents: []
- # - type: Execution # WWDP
+ # - type: Execution - WD EDIT
- type: entity
name: syringe gun
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index fb7cb10dd0..688a44febc 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -458,8 +458,6 @@
- AdvancedRetractor
- VehicleWheelchairFolded # Goobstation
# WD EDIT START
- - MiniSyringe
- - SyringeGun
- Intellicard
# WD EDIT END
- type: EmagLatheRecipes
diff --git a/Resources/Prototypes/Recipes/Lathes/chemistry.yml b/Resources/Prototypes/Recipes/Lathes/chemistry.yml
index 63bacef2ab..c17e42e346 100644
--- a/Resources/Prototypes/Recipes/Lathes/chemistry.yml
+++ b/Resources/Prototypes/Recipes/Lathes/chemistry.yml
@@ -44,14 +44,6 @@
Plastic: 100
Steel: 25
-- type: latheRecipe
- id: MiniSyringe
- result: MiniSyringe
- completetime: 2
- materials:
- Plastic: 75
- Steel: 20
-
- type: latheRecipe
id: DisposableSyringe
result: DisposableSyringe
diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml
index dc8cdfaf09..27443dce99 100644
--- a/Resources/Prototypes/Recipes/Lathes/medical.yml
+++ b/Resources/Prototypes/Recipes/Lathes/medical.yml
@@ -278,14 +278,3 @@
completetime: 2
materials:
Plastic: 100
-
-- type: latheRecipe
- id: SyringeGun
- result: SyringeGun
- completetime: 5
- materials:
- Steel: 500
- Glass: 500
- Plastic: 500
- Gold: 100
- Plasma: 100
diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Weapons/Guns/syringe_gun.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Weapons/Guns/syringe_gun.yml
deleted file mode 100644
index fc0a2c21cb..0000000000
--- a/Resources/Prototypes/_Goobstation/Entities/Objects/Weapons/Guns/syringe_gun.yml
+++ /dev/null
@@ -1,101 +0,0 @@
-- type: entity
- parent: BaseStorageItem
- id: BaseSyringeGun
- abstract: true
- components:
- - type: Sprite
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi
- state: icon
- - type: Storage
- maxItemSize: Tiny
- grid:
- - 0,0,0,0
- whitelist:
- tags:
- - SyringeGunAmmo
- - type: Gun
- fireRate: 1
- soundGunshot:
- path: /Audio/Weapons/Guns/Gunshots/syringe_gun.ogg
- soundEmpty:
- path: /Audio/Weapons/Guns/Empty/empty.ogg
- clumsyProof: true
- - type: ContainerAmmoProvider
- container: storagebase
- - type: Item
- size: Normal
- shape:
- - 0,0,3,0
- - type: ContainerContainer
- containers:
- storagebase: !type:Container
- ents: []
- - type: SyringeGun
-
-- type: entity
- parent: [ BaseSyringeGun, BaseGrandTheftContraband ]
- id: SyringeGun
- name: syringe gun
- description: A gun that allows you to fire syringes to slowly inject their contents on a target.
- components:
- - type: Sprite
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi
- state: icon
- - type: Item
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi
- - type: Tag
- tags:
- - SyringeGunAmmo
-
-- type: entity
- name: rapid syringe gun
- parent: [ BaseSyringeGun, BaseGrandTheftContraband ]
- id: RapidSyringeGun
- description: A finely-tuned syringe gun featuring a faster fire rate and more room for ammo, made for the most experienced medical officers.
- components:
- - type: Sprite
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi
- - type: Clothing
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi
- slots:
- - back
- - suitStorage
- quickEquip: false
- - type: Storage
- grid:
- - 0,0,2,1
- - type: Gun
- fireRate: 2
- - type: SyringeGun
- injectionSpeedMultiplier: 1.5
- - type: Item
- size: Large
- shape:
- - 0,0,3,1
- - type: StealTarget
- stealGroup: RapidSyringeGun
- - type: Tag
- tags:
- - HighRiskItem
-
-- type: entity
- parent: [ BaseSyringeGun, BaseSyndicateContraband ]
- id: DartSyringeGun
- name: dart syringe gun
- description: An illegally modified version of the syringe gun that allows projectiles to pierce through armor. Also pierces skin better, resulting in faster injection.
- components:
- - type: Sprite
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi
- state: icon-dart
- - type: Item
- sprite: _Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi
- - type: Storage
- grid:
- - 0,0,3,0
- - type: SyringeGun
- pierceArmor: true
- - type: Tag
- tags:
- - SyringeGunAmmo
-
-# TODO: Add the proper dart gun that regenerates every 25s, and draws from a 100u reservoir
diff --git a/Resources/Prototypes/_White/Catalog/Uplink/job_specific.yml b/Resources/Prototypes/_White/Catalog/Uplink/job_specific.yml
index a0dbdd2ce9..7365fe85d0 100644
--- a/Resources/Prototypes/_White/Catalog/Uplink/job_specific.yml
+++ b/Resources/Prototypes/_White/Catalog/Uplink/job_specific.yml
@@ -12,24 +12,6 @@
whitelist:
- Passenger
-- type: listing
- id: UplinkDartSyringeGun
- name: uplink-dart-syringe-gun-name
- description: uplink-dart-syringe-gun-desc
- icon: { sprite: /Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi, state: icon-dart }
- productEntity: DartSyringeGun
- discountCategory: usualDiscounts
- discountDownTo:
- Telecrystal: 1
- cost:
- Telecrystal: 4
- categories:
- - UplinkJob
- conditions:
- - !type:BuyerDepartmentCondition
- whitelist:
- - Medical
-
- type: listing
id: UplinkPlasmaFloodCircuitBoard
name: uplink-plasma-flood-law-board-name
diff --git a/Resources/Prototypes/_White/tags.yml b/Resources/Prototypes/_White/tags.yml
index 7c8f93acb6..d829709c5f 100644
--- a/Resources/Prototypes/_White/tags.yml
+++ b/Resources/Prototypes/_White/tags.yml
@@ -31,9 +31,6 @@
- type: Tag
id: RCDLight
-- type: Tag
- id: SyringeGunAmmo
-
- type: Tag
id: XenomorphItem
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 17a98d5dda..369697f8d7 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -1337,6 +1337,9 @@
- type: Tag
id: Syringe
+- type: Tag
+ id: SyringeGunAmmo
+
- type: Tag
id: Spellbook
diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png
index 7819a48c66..5faf746ae3 100644
Binary files a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png and b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-BACKPACK.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-BACKPACK.png
deleted file mode 100644
index 1cb200e678..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-BACKPACK.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-SUITSTORAGE.png
deleted file mode 100644
index 1cb200e678..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-SUITSTORAGE.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/icon.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/icon.png
deleted file mode 100644
index 3da5fb7379..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/icon.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-left.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-left.png
deleted file mode 100644
index 96a8016af5..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-left.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-right.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-right.png
deleted file mode 100644
index 66b6abaf6b..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-right.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/meta.json b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/meta.json
deleted file mode 100644
index 5cda9a7297..0000000000
--- a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/meta.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "version": 1,
- "license": "CC-BY-SA-3.0",
- "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5, slightly modified by Mocho, backpack and suitstorage states by @ShootsTheMoon, further modified by LuciferMkshelter",
- "size": {
- "x": 32,
- "y": 32
- },
- "states": [
- {
- "name": "icon"
- },
- {
- "name": "inhand-right",
- "directions": 4
- },
- {
- "name": "inhand-left",
- "directions": 4
- },
- {
- "name": "equipped-BACKPACK",
- "directions": 4
- },
- {
- "name": "equipped-SUITSTORAGE",
- "directions": 4
- }
- ]
- }
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-BACKPACK.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-BACKPACK.png
deleted file mode 100644
index 64b30219b4..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-BACKPACK.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-SUITSTORAGE.png
deleted file mode 100644
index 64b30219b4..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-SUITSTORAGE.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon-dart.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon-dart.png
deleted file mode 100644
index 4ba4967095..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon-dart.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon.png
deleted file mode 100644
index 5ac09c0077..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png
deleted file mode 100644
index 3c23139337..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png
deleted file mode 100644
index a1c9f852b4..0000000000
Binary files a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png and /dev/null differ
diff --git a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json b/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json
deleted file mode 100644
index b32c4a71f0..0000000000
--- a/Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "version": 1,
- "license": "CC-BY-SA-3.0",
- "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5, slightly modified by Mocho, backpack and suitstorage states by @ShootsTheMoon",
- "size": {
- "x": 32,
- "y": 32
- },
- "states": [
- {
- "name": "icon-dart"
- },
- {
- "name": "icon"
- },
- {
- "name": "inhand-right",
- "directions": 4
- },
- {
- "name": "inhand-left",
- "directions": 4
- },
- {
- "name": "equipped-BACKPACK",
- "directions": 4
- },
- {
- "name": "equipped-SUITSTORAGE",
- "directions": 4
- }
- ]
-}