From 2849008ba13dbd893eecd3b333668db7f4a9461b Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+scarky0@users.noreply.github.com> Date: Tue, 22 Oct 2024 16:03:42 +0300 Subject: [PATCH] Syringe gun! (#32112) * Init testing * copyright * oops * Tracking the embed entity uid * testing stuff for gradual injection * work * weh * god save me * bleh * Yippee! * Again * Mini syringe ammo * cleaning up * mini syringes have a texture for fill amount * -3 cool points :( * hitboxes * init cleanup * much needed fixes * Fixes (cherry picked from commit 62f5a31c4abcaaca09af84f591cbe727e6fcb7cb) --- .../SolutionInjectOnEmbedComponent.cs | 9 +- .../SolutionInjectWhileEmbeddedComponent.cs | 46 +++---- .../SolutionInjectOnEventSystem.cs | 16 ++- .../SolutionInjectWhileEmbeddedSystem.cs | 60 +++++++++ .../Items/BloodSpear/BloodSpearSystem.cs | 2 +- .../Weapons/Ranged/SyringeGunSystem.cs | 40 ------ .../Chemistry/InjectOverTimeEvent.cs | 13 ++ .../EmbeddableProjectileComponent.cs | 34 ++--- .../Projectiles/SharedProjectileSystem.cs | 11 +- .../BloodCult/Items/CultItemSystem.cs | 2 +- .../Weapons/Ranged/SyringeGunComponent.cs | 21 --- .../catalog/uplink/job_specific.ftl | 3 - .../objects/weapons/guns/pneumatic_cannon.ftl | 6 - .../objects/weapons/guns/pneumatic_cannon.ftl | 2 - .../catalog/uplink/job_specific.ftl | 3 - .../objects/specific/chemistry/syringes.ftl | 2 - .../objects/weapons/guns/pneumatic_cannon.ftl | 6 - .../objects/weapons/guns/pneumatic_cannon.ftl | 2 - .../Entities/Objects/Specific/chemistry.yml | 123 +++++++++--------- .../Objects/Weapons/Guns/pneumatic_cannon.yml | 2 +- .../Entities/Structures/Machines/lathe.yml | 2 - .../Prototypes/Recipes/Lathes/chemistry.yml | 8 -- .../Prototypes/Recipes/Lathes/medical.yml | 11 -- .../Objects/Weapons/Guns/syringe_gun.yml | 101 -------------- .../_White/Catalog/Uplink/job_specific.yml | 18 --- Resources/Prototypes/_White/tags.yml | 3 - Resources/Prototypes/tags.yml | 3 + .../Chemistry/syringe.rsi/syringeproj.png | Bin 257 -> 5589 bytes .../equipped-BACKPACK.png | Bin 886 -> 0 bytes .../equipped-SUITSTORAGE.png | Bin 886 -> 0 bytes .../Cannons/rapid_syringe_gun.rsi/icon.png | Bin 324 -> 0 bytes .../rapid_syringe_gun.rsi/inhand-left.png | Bin 804 -> 0 bytes .../rapid_syringe_gun.rsi/inhand-right.png | Bin 801 -> 0 bytes .../Cannons/rapid_syringe_gun.rsi/meta.json | 30 ----- .../syringe_gun.rsi/equipped-BACKPACK.png | Bin 975 -> 0 bytes .../syringe_gun.rsi/equipped-SUITSTORAGE.png | Bin 975 -> 0 bytes .../Cannons/syringe_gun.rsi/icon-dart.png | Bin 287 -> 0 bytes .../Guns/Cannons/syringe_gun.rsi/icon.png | Bin 288 -> 0 bytes .../Cannons/syringe_gun.rsi/inhand-left.png | Bin 769 -> 0 bytes .../Cannons/syringe_gun.rsi/inhand-right.png | Bin 795 -> 0 bytes .../Guns/Cannons/syringe_gun.rsi/meta.json | 33 ----- 41 files changed, 188 insertions(+), 424 deletions(-) create mode 100644 Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs delete mode 100644 Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs create mode 100644 Content.Shared/Chemistry/InjectOverTimeEvent.cs delete mode 100644 Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs delete mode 100644 Resources/Locale/en-US/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl delete mode 100644 Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl delete mode 100644 Resources/Locale/ru-RU/_white/prototypes/entities/objects/specific/chemistry/syringes.ftl delete mode 100644 Resources/Locale/ru-RU/ss14-ru/prototypes/_goobstation/entities/objects/weapons/guns/pneumatic_cannon.ftl delete mode 100644 Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/weapons/guns/pneumatic_cannon.ftl delete mode 100644 Resources/Prototypes/_Goobstation/Entities/Objects/Weapons/Guns/syringe_gun.yml delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-BACKPACK.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/equipped-SUITSTORAGE.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/icon.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-left.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/inhand-right.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/rapid_syringe_gun.rsi/meta.json delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-BACKPACK.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/equipped-SUITSTORAGE.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon-dart.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/icon.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png delete mode 100644 Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json 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 7819a48c6615c15c509e9d02952b74d9f8439bd8..5faf746ae3aaad62de818aab2cd36a9c0716641c 100644 GIT binary patch literal 5589 zcmeHKX;f3!77kKo0a0*zC?U`y+ROq)|E6QitJ_yE+TC0_l9A_;V{^d2 zvHInwx12w%s&~&TZqIwPbkc^%N_bw&g3HH>$PaoKcJs2I`=nQXG`iGwOm5uSJHId6 zPRS5Ou4=Pf`&hSA7`9&D+Tw6gIpN5(&U$X<89Uc!n+rx1jBmMy(R(Yi{hWE@{rBG< zRrSlGEBtNEa~^&{N);8XYGekj-tOh$6#U2TVUw(_gdw#-E5;zz6Zbs2Yd7TA+4+Z@ z=VV9E+Ut`3)gn);lga5Bt-Q_8@^;)4Pj+5-MfBnXc7Id5PkQ0mI_cWpZ=3h+YZfF& zOQ(iDI$UyU))SYJeoF+MxhShXjMjY2jpcCqhSQl-&EGCCBX<3~S-LU*pgiD3=~T(Y ztx=cD<16AD>JF65-UnA`mvh~Bx9zO|#J8d*-U_R4a&wrkx(-j5#Hz1-yfNNS9Lqa(r$x(FGw$tL9=TO{rcqjSj`2%SX<6l^ybYTuap>ihYAAMG>b_PwFRudec1RzHKq+)L^4KQSvd-xE#kc6wPRr`dm(^27MA1U*QW|RKUP!n7use6#j)tzz8crr_T1jzqS*sy?=~1=> zEnRf9;bmQQL)Ss8hi5Evl3PN;3(oCM_YJKzHw2c#6!xBF^P76M*>kcx#>5-! z&sR?R>9OxcN%=8?i~G7+(d8?om%7fyepzq0=Y2gQo;pQ!F)=+zZrHQwg=4W++Pz~+ zr)aTFb=z4_(Xl&I=0ke5@VsAH!y3Wa=ht@>PHWgYv}<{t zZU*P$R>#&YlIeGozX-PtgA^y&GN#Cx0Er@Bth@pN)wOq{Uu0|zLU9Wlc@ zKA`oM2liqC*3dRFYaL>N7O!;=c%qz4#Jt@hF^fiW2_KwI@CMRX>Cg z{$Of%vwPde(w>V`D@wB0WPGQ(*?Od;A?%@L?u!@8j!DPP!d~BlE>19+g z7_h*80D#J%(YRz9gUsMj&F#UeL^5El*7d6h^rRXgEtO88QB|rz7CL=M@@s!@w9rL@ z%ZnO;>NH6hf`%lcYQ2}aQ*C0B&fI5`4#lTTaVN^;R1lQOv$@SQu_S!J2A5HxRB25X zINBU3Lk4i#BrMT{ks(wx5mkXebby&Y2(MSlUmwt*{opHq3Iw22slRrboz64kIikjSREdEHX>Zz@HF0nF~H_gp1JRGCwmav0A5x z)Ch`G0dk5G@W3(}#AC|YWH}E)$t)SfB|~gEgUn%anSLmn#X(@68ATYT1eE|Knn#6G z$p94#VF9>|L+0?Hkm7DAaaNYg5|JGRQNgY1H;8a5`#i}JrkY?>E#+s z1aN)#Kc)2qDsFE}&%{v7=)b8}dqwMe5) z0aYBY4>PFW>i!MDK86`e1Xb%aZwuWV(kF}AMFe8*n*$ddxG$*#7iNE!;Dz)ze)_ZT zZ}b4D-#d9Hec#LVUaogi;GMwlv+KQF@1(#xf!}A>|4lCY*RR~D8vNg9058;^IiYjF z%eXZ>eOfU1JwiC(+CF>?c(T)m&ejnKPPO>g;*_RX1}1IvVo8Wihuv@|&wrdN3ZR0i zCF0<~$e7v(8~yF;XhW^q%fI}@dhtpL6rQ@RrszpXUV_Xa>YBf|h0Cvd7Qq*7fJ?8fk8QeIQ2M)Jc4(9^IAe=))w<2RJ(dOw3tK_-@y6nw zPWed1PqB|Ky5xl3cWTRDV6}h9?)5R5v6JTT36w`Rw?w0VOItDj3W$dw4w)IeH)vkg FzX9(%I#2)r delta 211 zcmV;^04)F2D}e%#BO3q#b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1(OjK7=M;YL_t(o zNA1)x3dA4~1<=`THl);jVwDW&^f!V@z~!z`%=c<-g*>=vj7gb<|RR0Cp+(u^@EqAv*{8uaeH$_oGh N002ovPDHLkV1h*+Sk?dl 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 1cb200e678133a7ae98b8029ce8ad63df6ed1b80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmV-+1Bv{JP)Px&FiAu~RCt{2n%_%PVHn51i%Mwt1H#;#yYa?dG^m7iVJi>^ia5NQ6G6S|V%VJ$ zf`m1}LjM9ms2~!%DD=WG7|a;xQqdN)YZp5%8JJKo4W2ISj5FKL&e@JgGT9um`Y&XAX|g%U-rkd8 zOk;iLid3(?y$5nh$eI8Eh()#l02@1NikxPOTq#*vGQxjq~o#Bmsi zqprRYw{P6dE3CH0h#yBk^S0B1+8Sfl_b#75otRi;3x@~sytcBAfc zGsqbk92nMpipcrg*jaWiSI>0`USx1!m>SGx?EJcteisQW zD+*dl&P6aEV(yIY!^J6~bnVHk#C7=~dOhG7^cD=wd(q;*0$6dj7%oV{do_Ll!~Q~@YD5mHiR ztyDBW5-SJt-3gFVaBc7`UQfSnQ$&fc=*M@8&JYzPU_Tl*)YUiU{4Un&^|~P<^;s-M zj{s?vSdZ$A)Q8k}p%j$>sQ|q$N1XMQEeTe8D>U5(O*RL~?F6N$63h9VPX;lc3~J}B zy3I+|ZO(r(T8g_tN;GT|(I%00+HxhJT-odEAn82p`XIWf+EG7^XD*0aD#+DSu%D@c;k- M07*qoM6N<$f*tUTH2?qr 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 1cb200e678133a7ae98b8029ce8ad63df6ed1b80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmV-+1Bv{JP)Px&FiAu~RCt{2n%_%PVHn51i%Mwt1H#;#yYa?dG^m7iVJi>^ia5NQ6G6S|V%VJ$ zf`m1}LjM9ms2~!%DD=WG7|a;xQqdN)YZp5%8JJKo4W2ISj5FKL&e@JgGT9um`Y&XAX|g%U-rkd8 zOk;iLid3(?y$5nh$eI8Eh()#l02@1NikxPOTq#*vGQxjq~o#Bmsi zqprRYw{P6dE3CH0h#yBk^S0B1+8Sfl_b#75otRi;3x@~sytcBAfc zGsqbk92nMpipcrg*jaWiSI>0`USx1!m>SGx?EJcteisQW zD+*dl&P6aEV(yIY!^J6~bnVHk#C7=~dOhG7^cD=wd(q;*0$6dj7%oV{do_Ll!~Q~@YD5mHiR ztyDBW5-SJt-3gFVaBc7`UQfSnQ$&fc=*M@8&JYzPU_Tl*)YUiU{4Un&^|~P<^;s-M zj{s?vSdZ$A)Q8k}p%j$>sQ|q$N1XMQEeTe8D>U5(O*RL~?F6N$63h9VPX;lc3~J}B zy3I+|ZO(r(T8g_tN;GT|(I%00+HxhJT-odEAn82p`XIWf+EG7^XD*0aD#+DSu%D@c;k- M07*qoM6N<$f*tUTH2?qr 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 3da5fb737976407f18262df7e6da7c846c891526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|JOX?|Tn`*L zz{@N6pTWh@$i^=$-pbrAE;>P3Nu!{)=HtsdN6#G<6p&iFX_e*9y}Z`8I`bFHq@-Os zazH}E>`}POgGhG`+W^JsHV-+#WBR9_ieu; z-(dwF7RyN*0V&5%|F4g_Eg}`Pa=FLO6an^Y$p(rxcNl8R9_(+@o28sSCqUig6U$l- z$JlGk7n2%AZ@DhI)WUg{B{N-c^Mlp?PJ4IXO>piqZrSCQix@mz{an^LB{Ts5$PS5v 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 96a8016af5fc2f90e963065bfe6e5b8f6131458d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmV+<1Ka$GP)Px%-bqA3RCt{2nlWe-VHC&zS40=1rqV(PU0P{_WN9NQ*v6qWjv13~=^!0KhJr&K znh^@b;@A2zV|WCde)ChQKy zK0@Ir6)Qywg`;G5EVePwCM5O>6pW?Gbp_~ETlO&;q(UKzgw(=SPP<@r{_}Tn^7IAX7{}!DI!ZQHq zPPj^|)s*u4St<+<C10?{iZ;1jo|wCU+6`+7ROwGTE#+te+!g}NXg^?pe^2;OyTG4Ylefg2!xr=unJ{msnoserKNv@TkzD}zq*n*uG7njFRYCY(5 zw=kXQnR&AN)}|U@xp-i}udLm$npnTQ;u(fv7=~dOhG7_nVfq<8zZcp*BP0s%LI~ZM zFt7%6+math1N6)z3>+f*hq|z8!0D`g^!5vc904VhLzzgJ3EGbIN%XepOgBLEfRlF3 zIJx1N3mDqN^bwi-aUF;(V@EnRd+9c#OF_iRjr?&P-ed|Q+wnc&^7w`H5VdQnXWeK9 z2*Yd>P7~kvm}SC+6tBgI2?NuS)(V-PneQm3A7&9uM~@(@#9J~etfEeXk56@;937t; i!`9}m`acZAh~Y1Hs-AvjB+1$U0000Px%+et)0RCt{2nm=e7aTLeDmO{zk)FO!3K`2^~LNjQ=N+EcwV{}V~;vjAvbZAAa zLkk^ChmxgRn$b>TX$T^S34%qaC6K`qgpe+=P&&O1^=D5#lRNe9*R$_4Dfj31-uu1Z z_jh;i0Sv=148t)0DGu2N$UsS#XzlzMKED^&WE&%cwew?Sb19sB{U+NK>xpk}QN2~C z_~sVLw#9OEIqwdHNJ*FI*-mX`BGgO7sF#RoIzJ|Y?m&ow8*u=@gY`!Mfai~+wie1G zA_4$cQbC41DDS-+^Jhu~JDYJyw(S+be9F2Ab zgBi{P8X6$zcbg8asM%?EXtXN`<_mB}qBCvQ{Uq3ES4O|Zwz8morZcG59GzkTgL=() z2B`UQ^9F+X0vhegXm>c|b_1@*EtD%`r4fQY2fg<@hGuB2jUFf$O&H(CeSdG*Bb^|~@(l76@8I0Ptj z?=G^r6yoHe$tNtUn4EFTcPZI#SK{5p9SDuBeZ9<;0cwUbPuW}w0O;qfJC@GEa7oG+ zW7(N7FAHaYKxBf??_Jg{8HQmPhG7_nVHk#Cr>VR&v3J+FQip?6wP^09mE(^0O#YaSRwp%sj-V1e#IwMiakZ1JYj2W72 zbXqoZ7e<_sC=z3_VjHg=r%N3-*cYAr==`A z2)1%wu&f~1(s?zD1i`LV<|)*U++Tlqr87#pWQvYR#fU?)oL^dhfEGr227G=mUcPuc f)y>T?jH&zvof?pSapoyH00000NkvXXu0mjfcL{4J 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 64b30219b44f80d02d2e005c638330004fc92be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 zcmV;=12FuFP)Px&h)G02RCr$PT1{vZK@@%q{sc;t6oMq$OO<%(#irmP?Xg%9il?9m>PfF2lqysy zD)sl^RZmtBrN=;N@n8>O( zY&Jbz;3)uYjwnPnn+iXXci|!dh;$HcTo))n&@p-A`YpD#xd|vhr>X>f zKg{RoHWc7cCIe5NKCp;5_BuZ3T0h&j=j=)VB#*&R0CzRQ5EJPI*HCNA)RK)Ro7)Ym7PhE7ll1 z9^P@tkKCDq^}BOmmp=$`5?YK&vHysCR6XBbIjnr1tvUai92|81o|>G3rHyZJ=I{~W zeMm?EI)gE3ug`n0HX-XT6-QuoxdgV|dduT^Kj^vz!X}Z?^B7~gc!|y2yaJCNzSu>c z;v+uM!U#D)7LhP<+R2v|7o_2q7KlidKbBcxv>+|+iP3R3bnGZlt;&+gstI{vlWv+T>~uOPefBt+K$!}POG-!TH{R1Fnaj004tu2W9q z0G+C#0*i5g3e|PWX&j(aHB?|R4p5=GPC1PObgG65EdQkgXgbU@(dH6BB%q2ax^s%) zT*ATNJT1u4)+7x z`%h#7=x{#($-Bq%k!^w`fQtJ8NZczw4N$K_@bx~fV=!5mXk9yV&EB#1Roo9~w|plI zbbnyXvI6-9F2H170_b%1w_}m-fMn}MXuL3?>|Ow`*f=6TyRzXdm)8P)Ccy0cjB|&8 zXP(H_0yy&K4ai%mUak|tYXsn_govU%@p`>R1TU8Za7K@yWz73~O&;Tm;N=n^3ec)@ x7y(o%uS;Iz09`7f3WsrkD&=*_8+!-*0iToNP;U}$V*mgE07*qoM6N<$f&jL6!cYJJ 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 64b30219b44f80d02d2e005c638330004fc92be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 zcmV;=12FuFP)Px&h)G02RCr$PT1{vZK@@%q{sc;t6oMq$OO<%(#irmP?Xg%9il?9m>PfF2lqysy zD)sl^RZmtBrN=;N@n8>O( zY&Jbz;3)uYjwnPnn+iXXci|!dh;$HcTo))n&@p-A`YpD#xd|vhr>X>f zKg{RoHWc7cCIe5NKCp;5_BuZ3T0h&j=j=)VB#*&R0CzRQ5EJPI*HCNA)RK)Ro7)Ym7PhE7ll1 z9^P@tkKCDq^}BOmmp=$`5?YK&vHysCR6XBbIjnr1tvUai92|81o|>G3rHyZJ=I{~W zeMm?EI)gE3ug`n0HX-XT6-QuoxdgV|dduT^Kj^vz!X}Z?^B7~gc!|y2yaJCNzSu>c z;v+uM!U#D)7LhP<+R2v|7o_2q7KlidKbBcxv>+|+iP3R3bnGZlt;&+gstI{vlWv+T>~uOPefBt+K$!}POG-!TH{R1Fnaj004tu2W9q z0G+C#0*i5g3e|PWX&j(aHB?|R4p5=GPC1PObgG65EdQkgXgbU@(dH6BB%q2ax^s%) zT*ATNJT1u4)+7x z`%h#7=x{#($-Bq%k!^w`fQtJ8NZczw4N$K_@bx~fV=!5mXk9yV&EB#1Roo9~w|plI zbbnyXvI6-9F2H170_b%1w_}m-fMn}MXuL3?>|Ow`*f=6TyRzXdm)8P)Ccy0cjB|&8 zXP(H_0yy&K4ai%mUak|tYXsn_govU%@p`>R1TU8Za7K@yWz73~O&;Tm;N=n^3ec)@ x7y(o%uS;Iz09`7f3WsrkD&=*_8+!-*0iToNP;U}$V*mgE07*qoM6N<$f&jL6!cYJJ 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 4ba496709508ec781dd4a821f789569444d46521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|3<7*YTn`*L z@Snkjmsilx$i^=$-pbrAE;>P3Nu!{)=HtsdN6#Hyx@py3OY6ltdbYfLX)J=yn@(X78j|vV1bUOp(8a-VcLo9mVPH^NqtiZ!^^475>ickLUe=Eew6m&KEs`oR7 zLvoSXP8C1oPhZz#x*&h4Yihu2fw?)Y>tU=vuv V-0iKmN&@H@22WQ%mvv4FO#qP*cU%Af 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 5ac09c0077c87bd0edb3adca86f817ceaf5e1ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|%mREuTn`*L z@Snkjmsilx$i^=$-pbrAE;>P3Nu!{)=HtsdN6#G<6p&iFX_e*9y*l$3^IF@=q@-Os zazJ&P*F>NRLM1_d!3_V=LEOPMJD_Zpr;B5VMep1Gi+rsLJkA?ad7l3Ne?9lk>Wm(L zwS5&GiCa?7OtHI{va57r!&?XOro5ZSYYwPrwzX(3TJzZ`AU4dNy_Q+z T;4({4STK0H`njxgN@xNAqcD3a 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 3c23139337785203b81b838148213b1e2c394c21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)Px%yGcYrRCt{2n!Rh=P!z?FO1AQbXHbiVEN)RCXh{_4kYwys$mop8)Hz!_B*tV) z`yZrR){cRY(Ls*}ipiPM5n8Gk5Ddj+M%7lHyw2#<|5i_O(#PL5NzV8D7Wm$G-u{->H-~pgF z0AgyP1<;b`87+)fieR4SH$Df^JU+xxEh@g79tp-r0B|k*>gsC5eKW6ld`Ksi3ih(9 z;mj-;kmoss5J-|_C&{APlp*nc=6u;9RdV!CbAK&pm z!pn%|Rmx9Kru!+-BBGdD08ogJ>J9YgqajBQrz}1Q0#dh^P9}19A8{f6b)^E}`rb8h z<$@p}Aq0dF#c%C)d*T=qkASwfgx&Q`^!q4=yoq6}3hCwLW$`|7SIx0T`Q2TJ!LPVF zky26^hQ($p?hRZ{T%?qw>cOzNg?1JeSIG6OO-e~>vmV^Fc;{^GY(HM{48t%C!!QiP zFbu;m)66*k7dr0|GKKH^7{!DKYrrVI2!N&j0NbQ#>N*8?I9n`H*lKXPFV48@1x9K> zOf9sCjG0hgk-p8iOY+(cFx}u(KIc&_f>>UiD28?enin1Hu5Y64E$KdWfm)GnUUU%E z8xxzL9Vw-eHN^5c)xAD-;uX40xJ&%hBZM9kT=gPoV-gb{%!+hb$im{vP%+cci=drx z1lbaAbuOT~!K-t#L-(!D&Emt}Cv^Px%)k#D_RCt{2nlVq?P!Pxet~x}jJiNhF9`ULNg z!!QiPFfSBCw*fj>D^;nuyoAM-B3|h>MhC^^CG6~Oqy76_w<)t{y}n7!(m+igdoeZ005?G0sws9&vl|~5fK3RMj6L-7e}8D zNA!#(K`G_Pcb;kBE{c!qE>6B2jh*xQ{tx|rAN_tGg+gH%1$o9d%Gecc3@*UlVPf zxDX10!02>3V}H!k?9jC>xO@9BE47I>$GV$B2pX)qSm^Zd)>^>kkADDw_n7|~!mQLt zHoqm0fG~qq7w+CZy0&%mOabtyHJoDR3CD5Bw(X%^4~Yj7Y=)F4g%AV)U$3tL++?Hn!j!<>c0;j1n)U#O38BfSaj2b4*jvJZvl+ z$07Am(K%CeJ3;MTY}=m70Tb5&ak*Vv)6VWT0MPlLzxa9jeP%h~cJZb^8S9ROX?b!4 zC{!dYt`yT6l3^HzVHk#C7=~dOMjz_En{GR@;L+FO;kw{+BvxG@?^WW5i1kiT^$fgt zo@*Y6O;q7QH6Ueu?X0eos8KT9K@ukGN^y&bJZfb!_LDkA%}R}q>+bM4i#v3`(J5`F zc7R!_k-N8#lZ$rdm15s0<6vV8Cl~F^t}zv=^+bqlD#hV3wN!qSkhT+YC0>zM&p>z# z)69wZFi&wpUaQPwgoUh?s*j3UD^=&B<0Ms*2+}1!wf=x8lJpELt`za{!>6%sZiZnp Z