From 62f5a31c4abcaaca09af84f591cbe727e6fcb7cb Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:03:42 +0200 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 --- .../SolutionInjectWhileEmbeddedComponent.cs | 24 +++++++ .../SolutionInjectOnEventSystem.cs | 7 ++ .../SolutionInjectWhileEmbeddedSystem.cs | 60 ++++++++++++++++++ .../Chemistry/InjectOverTimeEvent.cs | 13 ++++ .../EmbeddableProjectileComponent.cs | 18 ++++-- .../Projectiles/SharedProjectileSystem.cs | 4 ++ .../Weapons/Guns/Gunshots/attributions.yml | 7 +- .../Weapons/Guns/Gunshots/syringe_gun.ogg | Bin 0 -> 9476 bytes .../Entities/Objects/Specific/chemistry.yml | 60 ++++++++++++++++++ .../Objects/Weapons/Guns/pneumatic_cannon.yml | 37 +++++++++++ Resources/Prototypes/tags.yml | 3 + .../Specific/Chemistry/syringe.rsi/meta.json | 9 +++ .../Chemistry/syringe.rsi/minisyringe1.png | Bin 0 -> 5346 bytes .../Chemistry/syringe.rsi/minisyringe2.png | Bin 0 -> 5371 bytes .../Chemistry/syringe.rsi/minisyringe3.png | Bin 0 -> 5378 bytes .../Chemistry/syringe.rsi/syringeproj.png | Bin 257 -> 5589 bytes .../Cannons/syringe_gun.rsi/inhand-left.png | Bin 0 -> 337 bytes .../Cannons/syringe_gun.rsi/inhand-right.png | Bin 0 -> 341 bytes .../Guns/Cannons/syringe_gun.rsi/meta.json | 22 +++++++ .../Cannons/syringe_gun.rsi/syringe_gun.png | Bin 0 -> 446 bytes 20 files changed, 257 insertions(+), 7 deletions(-) create mode 100644 Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs create mode 100644 Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs create mode 100644 Content.Shared/Chemistry/InjectOverTimeEvent.cs create mode 100644 Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg create mode 100644 Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe2.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png diff --git a/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs new file mode 100644 index 0000000000..0f10e2a449 --- /dev/null +++ b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + + +namespace Content.Server.Chemistry.Components; + +/// +/// Used for embeddable entities that should try to inject a +/// contained solution into a target over time while they are embbeded into. +/// +[RegisterComponent, AutoGenerateComponentPause] +public sealed partial class SolutionInjectWhileEmbeddedComponent : BaseSolutionInjectOnEventComponent { + /// + ///The time at which the injection will happen. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextUpdate; + + /// + ///The delay between each injection in seconds. + /// + [DataField] + public TimeSpan UpdateInterval = TimeSpan.FromSeconds(3); +} + diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs index d56fded024..f15edcf067 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs @@ -2,6 +2,7 @@ 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; @@ -29,6 +30,7 @@ public sealed class SolutionInjectOnCollideSystem : EntitySystem SubscribeLocalEvent(HandleProjectileHit); SubscribeLocalEvent(HandleEmbed); SubscribeLocalEvent(HandleMeleeHit); + SubscribeLocalEvent(OnInjectOverTime); } private void HandleProjectileHit(Entity entity, ref ProjectileHitEvent args) @@ -49,6 +51,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.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 008b7c2ced..e4125945d2 100644 --- a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs +++ b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs @@ -13,37 +13,43 @@ 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 = 3f; /// /// 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; + + /// + /// Uid of the entity the projectile is embed into. + /// + [DataField, AutoNetworkedField] + public EntityUid? EmbeddedIntoUid; } diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 1b7d6d6f99..85e75d6d29 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -71,6 +71,8 @@ public abstract partial class SharedProjectileSystem : EntitySystem TryComp(uid, out var physics); _physics.SetBodyType(uid, BodyType.Dynamic, body: physics, xform: xform); _transform.AttachToGridOrMap(uid, xform); + component.EmbeddedIntoUid = null; + Dirty(uid, component); // Reset whether the projectile has damaged anything if it successfully was removed if (TryComp(uid, out var projectile)) @@ -127,8 +129,10 @@ public abstract partial class SharedProjectileSystem : EntitySystem } _audio.PlayPredicted(component.Sound, uid, null); + component.EmbeddedIntoUid = target; var ev = new EmbedEvent(user, target); RaiseLocalEvent(uid, ref ev); + Dirty(uid, component); } private void PreventCollision(EntityUid uid, ProjectileComponent component, ref PreventCollideEvent args) diff --git a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml index 7c46974818..89db045c96 100644 --- a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml +++ b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml @@ -26,4 +26,9 @@ - files: ["ship_duster.ogg", "ship_friendship.ogg", "ship_svalinn.ogg", "ship_perforator.ogg"] license: "CC0-1.0" copyright: "Created by MIXnikita for Space Station 14" - source: "https://github.com/MIXnikita" \ No newline at end of file + source: "https://github.com/MIXnikita" + +- files: ["syringe_gun.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from vgstation" + source: "https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730" \ No newline at end of file diff --git a/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg b/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2132808ecdc37a11856fbe10774236ffbb5a6954 GIT binary patch literal 9476 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 F{||ulwNwBA literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 0f74b4afaf..3f2ac403ac 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -386,6 +386,66 @@ - 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 parent: BaseSyringe id: PrefilledSyringe diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 1d18c2b050..63a7acd257 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -103,6 +103,43 @@ containers: storagebase: !type:Container ents: [] + +- type: entity + name: syringe gun + parent: BaseStorageItem + id: LauncherSyringe + description: Load full of poisoned syringes for optimal fun. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Cannons/syringe_gun.rsi + layers: + - state: syringe_gun + - type: Storage + maxItemSize: Normal + grid: + - 0,0,2,0 + whitelist: + tags: + - SyringeGunAmmo + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + - FullAuto + 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 + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] # shoots bullets instead of throwing them, no other changes - type: entity diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index d3ffcdcac1..8962da5790 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1300,6 +1300,9 @@ - type: Tag id: Syringe +- type: Tag + id: SyringeGunAmmo + - type: Tag id: Spellbook diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json index 1495eccd7a..0c29f3e3fb 100644 --- a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json @@ -57,6 +57,15 @@ { "name": "syringe2" }, + { + "name": "minisyringe1" + }, + { + "name": "minisyringe2" + }, + { + "name": "minisyringe3" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png new file mode 100644 index 0000000000000000000000000000000000000000..66c49a744cdf0d198ca46d7ec4223ae4c08d5529 GIT binary patch literal 5346 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png new file mode 100644 index 0000000000000000000000000000000000000000..71d3bad044a03e00c9ba8121e17e4cff6018b21d GIT binary patch literal 5378 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 literal 0 HcmV?d00001 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/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b59a4d52682c1a0f290c8751b524b1eb04fa2f04 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|O(o zr;B4q#hkad4EdTI1RO3NJakQ3Kr3o}1Lw3VF6(Okhmw0*m&P2L#8@GkZ3wDax^L4r?g`I}SH9kyGd)}KliH5C*DKDxzRzvw{+Y?fZ_BE_PVJ_58G$9XV-3sUGBheYLCwo=;brR<;~lL*dJ97*N@tj!Nl#I8T5}?; z_2>UrXW#w4x2!sw2WTt1RLY9Mo@}UVj2?5r}BG_R+E^>(QF!@0ssC{VeNPHZ6Orl)|>3ySaV$ zMRL6Hjtef7ay;+nzWK&`-&xDHe%E=oe)joe-`0I!|A&3W0*iSycJ=Ek!v39g%9hLd hF>k-|ZFZoU)#7d}nUb|HE`b7&!PC{xWt~$(69AhukQV>| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json new file mode 100644 index 0000000000..dae584eb81 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vgstation13 at https://github.com/vgstation-coders/vgstation13 at f91dfe2e0dba1b7a8b9a0fa18251340920979a62, held sprite by ScarKy0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "syringe_gun" + }, + { + "name": "inhand-left", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png new file mode 100644 index 0000000000000000000000000000000000000000..972714d1c71f2fc95c69fece78e47569596df0cb GIT binary patch literal 446 zcmV;v0YUzWP)T z$h|u$ExPE+g#`;L#t^B+XrV?7f*ogKQff?^M4EIn2QrzNT<-mH=4SzO76;$}9DoCG zfM9@PkwDXO-cSU{ryztT(RDqC7!m}5_+$S9(Bk`hyEtor2&0iRwIL}uvijI+HvQ2j zm-V`On9mbY(=ZK^saoBk?fEZ=KnE5p6`;{_`VuX^vIHETws2c2`9oFK9EdWtNk)_` z>&DuzRIJlA`E4^3#>AI{q} zjoAAk6o9S!*Zoi7LSYT^=DJgSFnFO)Z)&on#RCD{B*YtEUBiK3VgUask_fl`e zmZ+^y6ynZ>kl1H3ONdw(5!(wFZ4+rI_D$%yk_o`1{p{~&z3!0!St=1g8cu|s0=P#p oP5VOuvM3x0kd-(92bep+HV!Z literal 0 HcmV?d00001 -- 2.52.0