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 - } - ] -}