From 4c34a12c679ec176163604c9cacfc370d37e0ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= <6766154+Zumorica@users.noreply.github.com> Date: Tue, 22 Sep 2020 15:34:30 +0200 Subject: [PATCH] Adds IThrowCollide, Creaming people with cream pies and tactical stun baton throws (#2122) --- .../Nutrition/CreamPiedVisualizer.cs | 33 ++++++++ .../Components/Fluids/SprayComponent.cs | 8 +- .../Components/Nutrition/CreamPieComponent.cs | 35 +++++++++ .../Nutrition/CreamPiedComponent.cs | 67 ++++++++++++++++ .../Projectiles/ThrownItemComponent.cs | 3 + .../Weapon/Melee/StunbatonComponent.cs | 12 ++- .../EntitySystems/Click/InteractionSystem.cs | 26 +++++++ .../Nutrition/SharedCreamPiedComponent.cs | 17 +++++ .../Components/Interaction/IThrowCollide.cs | 72 ++++++++++++++++++ Resources/Audio/Effects/desecration-01.ogg | Bin 0 -> 7486 bytes Resources/Audio/Effects/desecration-02.ogg | Bin 0 -> 7573 bytes Resources/Audio/Effects/desecration-03.ogg | Bin 0 -> 7101 bytes .../Entities/Mobs/Species/human.yml | 6 ++ .../Entities/Objects/Consumable/food.yml | 1 + .../SoundCollections/desceration.yml | 6 ++ .../Effects/creampie.rsi/creampie_ai.png | Bin 0 -> 613 bytes .../Effects/creampie.rsi/creampie_corgi.png | Bin 0 -> 478 bytes .../Effects/creampie.rsi/creampie_drone.png | Bin 0 -> 558 bytes .../Effects/creampie.rsi/creampie_engborg.png | Bin 0 -> 429 bytes .../creampie.rsi/creampie_hardsuit.png | Bin 0 -> 452 bytes .../Effects/creampie.rsi/creampie_helmet.png | Bin 0 -> 386 bytes .../Effects/creampie.rsi/creampie_human.png | Bin 0 -> 412 bytes .../Effects/creampie.rsi/creampie_janborg.png | Bin 0 -> 575 bytes .../Effects/creampie.rsi/creampie_lizard.png | Bin 0 -> 412 bytes .../Effects/creampie.rsi/creampie_medborg.png | Bin 0 -> 361 bytes .../Effects/creampie.rsi/creampie_monkey.png | Bin 0 -> 368 bytes .../Effects/creampie.rsi/creampie_secborg.png | Bin 0 -> 372 bytes .../creampie.rsi/creampie_standborg.png | Bin 0 -> 445 bytes .../creampie.rsi/creampie_xeno_crit.png | Bin 0 -> 225 bytes .../creampie.rsi/creampie_xeno_dead.png | Bin 0 -> 225 bytes .../creampie.rsi/creampie_xeno_sleep.png | Bin 0 -> 292 bytes .../creampie.rsi/creampie_xenomorph.png | Bin 0 -> 374 bytes .../Textures/Effects/creampie.rsi/meta.json | 1 + 33 files changed, 285 insertions(+), 2 deletions(-) create mode 100644 Content.Client/GameObjects/Components/Nutrition/CreamPiedVisualizer.cs create mode 100644 Content.Server/GameObjects/Components/Nutrition/CreamPieComponent.cs create mode 100644 Content.Server/GameObjects/Components/Nutrition/CreamPiedComponent.cs create mode 100644 Content.Shared/GameObjects/Components/Nutrition/SharedCreamPiedComponent.cs create mode 100644 Content.Shared/Interfaces/GameObjects/Components/Interaction/IThrowCollide.cs create mode 100644 Resources/Audio/Effects/desecration-01.ogg create mode 100644 Resources/Audio/Effects/desecration-02.ogg create mode 100644 Resources/Audio/Effects/desecration-03.ogg create mode 100644 Resources/Prototypes/SoundCollections/desceration.yml create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_ai.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_corgi.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_drone.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_engborg.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_hardsuit.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_helmet.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_human.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_janborg.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_lizard.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_medborg.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_monkey.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_secborg.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_standborg.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_xeno_crit.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_xeno_dead.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_xeno_sleep.png create mode 100644 Resources/Textures/Effects/creampie.rsi/creampie_xenomorph.png create mode 100644 Resources/Textures/Effects/creampie.rsi/meta.json diff --git a/Content.Client/GameObjects/Components/Nutrition/CreamPiedVisualizer.cs b/Content.Client/GameObjects/Components/Nutrition/CreamPiedVisualizer.cs new file mode 100644 index 0000000000..2bb5ad6541 --- /dev/null +++ b/Content.Client/GameObjects/Components/Nutrition/CreamPiedVisualizer.cs @@ -0,0 +1,33 @@ +using Content.Shared.GameObjects.Components.Nutrition; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Interfaces.GameObjects.Components; + +namespace Content.Client.GameObjects.Components.Nutrition +{ + [UsedImplicitly] + public class CreamPiedVisualizer : AppearanceVisualizer + { + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (component.TryGetData(CreamPiedVisuals.Creamed, out var pied)) + { + SetPied(component, pied); + } + } + + private void SetPied(AppearanceComponent component, bool pied) + { + var sprite = component.Owner.GetComponent(); + + sprite.LayerSetVisible(CreamPiedVisualLayers.Pie, pied); + } + } + + public enum CreamPiedVisualLayers + { + Pie, + } +} diff --git a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs index 644149c31e..febe086fb6 100644 --- a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs @@ -27,7 +27,7 @@ using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Fluids { [RegisterComponent] - class SprayComponent : SharedSprayComponent, IAfterInteract, IUse, IActivate + class SprayComponent : SharedSprayComponent, IAfterInteract, IUse, IActivate, IDropped { public const float SprayDistance = 3f; @@ -211,5 +211,11 @@ namespace Content.Server.GameObjects.Components.Fluids if(Owner.TryGetComponent(out AppearanceComponent appearance)) appearance.SetData(SprayVisuals.Safety, _safety); } + + public void Dropped(DroppedEventArgs eventArgs) + { + if(_hasSafety && Owner.TryGetComponent(out AppearanceComponent appearance)) + appearance.SetData(SprayVisuals.Safety, _safety); + } } } diff --git a/Content.Server/GameObjects/Components/Nutrition/CreamPieComponent.cs b/Content.Server/GameObjects/Components/Nutrition/CreamPieComponent.cs new file mode 100644 index 0000000000..96f1ef2719 --- /dev/null +++ b/Content.Server/GameObjects/Components/Nutrition/CreamPieComponent.cs @@ -0,0 +1,35 @@ +using Content.Server.GameObjects.Components.Chemistry; +using Content.Server.GameObjects.Components.Fluids; +using Content.Shared.Audio; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; + +namespace Content.Server.GameObjects.Components.Nutrition +{ + [RegisterComponent] + public class CreamPieComponent : Component, ILand + { + public override string Name => "CreamPie"; + + public void PlaySound() + { + EntitySystem.Get() + .PlayFromEntity(AudioHelpers.GetRandomFileFromSoundCollection("desecration"), Owner, + AudioHelpers.WithVariation(0.125f)); + } + + public void Land(LandEventArgs eventArgs) + { + PlaySound(); + + if (Owner.TryGetComponent(out SolutionContainerComponent solution)) + { + solution.Solution.SpillAt(Owner, "PuddleSmear", false); + } + + Owner.Delete(); + } + } +} diff --git a/Content.Server/GameObjects/Components/Nutrition/CreamPiedComponent.cs b/Content.Server/GameObjects/Components/Nutrition/CreamPiedComponent.cs new file mode 100644 index 0000000000..917ca65617 --- /dev/null +++ b/Content.Server/GameObjects/Components/Nutrition/CreamPiedComponent.cs @@ -0,0 +1,67 @@ +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.Utility; +using Content.Shared.Chemistry; +using Content.Shared.GameObjects.Components.Nutrition; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.Localization; +using Robust.Shared.ViewVariables; +using Serilog; + +namespace Content.Server.GameObjects.Components.Nutrition +{ + [RegisterComponent] + public class CreamPiedComponent : SharedCreamPiedComponent, IReagentReaction, IThrowCollide + { + private bool _creamPied; + + [ViewVariables] + public bool CreamPied + { + get => _creamPied; + private set + { + _creamPied = value; + if (Owner.TryGetComponent(out AppearanceComponent appearance)) + { + appearance.SetData(CreamPiedVisuals.Creamed, CreamPied); + } + } + } + + public void Wash() + { + if(CreamPied) + CreamPied = false; + } + + public ReagentUnit ReagentReactTouch(ReagentPrototype reagent, ReagentUnit volume) + { + switch (reagent.ID) + { + case "chem.SpaceCleaner": + case "chem.H2O": + Wash(); + break; + } + + return ReagentUnit.Zero; + } + + public void HitBy(ThrowCollideEventArgs eventArgs) + { + if (!eventArgs.Thrown.TryGetComponent(out CreamPieComponent creamPie) || CreamPied) return; + + CreamPied = true; + Owner.PopupMessage(Loc.GetString("You have been creamed by {0:theName}!", eventArgs.Thrown)); + Owner.PopupMessageOtherClients(Loc.GetString("{0:theName} has been creamed by {1:theName}!", Owner, eventArgs.Thrown)); + + if (Owner.TryGetComponent(out StunnableComponent stun)) + { + stun.Paralyze(1f); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs index e3d2c73f04..68aba32267 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs @@ -39,6 +39,9 @@ namespace Content.Server.GameObjects.Components.Projectiles return; _shouldStop = true; // hit something hard => stop after this collision + + // Raise an event. + EntitySystem.Get().ThrowCollideInteraction(User, Owner, entity, Owner.Transform.Coordinates); } if (entity.TryGetComponent(out IDamageableComponent damage)) { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs index 78d7c24bbd..377748da11 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs @@ -28,7 +28,7 @@ using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Weapon.Melee { [RegisterComponent] - public class StunbatonComponent : MeleeWeaponComponent, IUse, IExamine, IMapInit, IInteractUsing + public class StunbatonComponent : MeleeWeaponComponent, IUse, IExamine, IMapInit, IInteractUsing, IThrowCollide { [Dependency] private readonly IRobustRandom _robustRandom = default!; @@ -282,5 +282,15 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee component.EjectCell(user); } } + + public void DoHit(ThrowCollideEventArgs eventArgs) + { + if (!Activated || Cell == null || !Cell.TryUseCharge(EnergyPerUse) || !eventArgs.Target.TryGetComponent(out StunnableComponent stunnable)) + return; + + EntitySystem.Get().PlayAtCoords("/Audio/Weapons/egloves.ogg", Owner.Transform.Coordinates, AudioHelpers.WithVariation(0.25f)); + + stunnable.Paralyze(_paralyzeTime); + } } } diff --git a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs index a2c2ab5fe9..1849062235 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs @@ -625,6 +625,32 @@ namespace Content.Server.GameObjects.EntitySystems.Click } } + /// + /// Calls ThrowCollide on all components that implement the IThrowCollide interface + /// on a thrown entity and the target entity it hit. + /// + public void ThrowCollideInteraction(IEntity user, IEntity thrown, IEntity target, EntityCoordinates location) + { + var collideMsg = new ThrowCollideMessage(user, thrown, target, location); + RaiseLocalEvent(collideMsg); + if (collideMsg.Handled) + { + return; + } + + var eventArgs = new ThrowCollideEventArgs(user, thrown, target, location); + + foreach (var comp in thrown.GetAllComponents().ToArray()) + { + comp.DoHit(eventArgs); + } + + foreach (var comp in target.GetAllComponents().ToArray()) + { + comp.HitBy(eventArgs); + } + } + /// /// Calls Equipped on all components that implement the IEquipped interface /// on an entity that has been equipped. diff --git a/Content.Shared/GameObjects/Components/Nutrition/SharedCreamPiedComponent.cs b/Content.Shared/GameObjects/Components/Nutrition/SharedCreamPiedComponent.cs new file mode 100644 index 0000000000..9a427f6366 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Nutrition/SharedCreamPiedComponent.cs @@ -0,0 +1,17 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Nutrition +{ + public class SharedCreamPiedComponent : Component + { + public override string Name => "CreamPied"; + } + + [Serializable, NetSerializable] + public enum CreamPiedVisuals + { + Creamed, + } +} diff --git a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IThrowCollide.cs b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IThrowCollide.cs new file mode 100644 index 0000000000..d5a255cad9 --- /dev/null +++ b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IThrowCollide.cs @@ -0,0 +1,72 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Map; + +namespace Content.Shared.Interfaces.GameObjects.Components +{ + public interface IThrowCollide + { + void HitBy(ThrowCollideEventArgs eventArgs) {} + void DoHit(ThrowCollideEventArgs eventArgs) {} + } + + public class ThrowCollideEventArgs : EventArgs + { + /// + /// The entity that threw and hit . + /// + public IEntity User { get; } + + /// + /// The entity thrown by that hit + /// + public IEntity Thrown { get; } + + /// + /// The entity hit with by + /// + public IEntity Target { get; } + public EntityCoordinates Location { get; } + + public ThrowCollideEventArgs(IEntity user, IEntity thrown, IEntity target, EntityCoordinates location) + { + User = user; + Thrown = thrown; + Target = target; + Location = location; + } + } + + public class ThrowCollideMessage : EntitySystemMessage + { + /// + /// If this message has already been "handled" by a previous system. + /// + public bool Handled { get; set; } + + /// + /// The entity that threw . + /// + public IEntity User { get; } + + /// + /// The entity thrown by that hit + /// + public IEntity Thrown { get; } + + /// + /// The entity hit with by + /// + public IEntity Target { get; } + public EntityCoordinates Location { get; } + + public ThrowCollideMessage(IEntity user, IEntity thrown, IEntity target, EntityCoordinates location) + { + User = user; + Thrown = thrown; + Target = target; + Location = location; + } + } +} diff --git a/Resources/Audio/Effects/desecration-01.ogg b/Resources/Audio/Effects/desecration-01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..29bc568c57515400de1dc42e8920218000a169fa GIT binary patch literal 7486 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/desecration-02.ogg b/Resources/Audio/Effects/desecration-02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..761a73a7b9f82db26285fd29fa0e7489d7b4bf29 GIT binary patch literal 7573 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 H1&sa$v+&H1 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/desecration-03.ogg b/Resources/Audio/Effects/desecration-03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..876de18de507598b89b78c60f17ea887c1e677d9 GIT binary patch literal 7101 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 VXz|0J-27GyOdkeH0KeISe*uZ0f?xmu literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index a10b7404e9..dd896b04ba 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -112,6 +112,10 @@ sprite: Mobs/Customization/human_hair.rsi - map: ["enum.Slots.MASK"] - map: ["enum.Slots.HEAD"] + - map: ["enum.CreamPiedVisualLayers.Pie"] + sprite: Effects/creampie.rsi + state: creampie_human + visible: false - type: Icon sprite: Mobs/Species/Human/parts.rsi state: full @@ -159,6 +163,7 @@ visuals: - type: RotationVisualizer - type: BuckleVisualizer + - type: CreamPiedVisualizer - type: CombatMode - type: Climbing - type: Cuffable @@ -176,6 +181,7 @@ proper: true - type: Pullable - type: DoAfter + - type: CreamPied - type: Strippable - type: UserInterface interfaces: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/food.yml b/Resources/Prototypes/Entities/Objects/Consumable/food.yml index 8f9755ceb2..947092610f 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/food.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/food.yml @@ -231,6 +231,7 @@ components: - type: Food trash: TrashPlate + - type: CreamPie - type: SolutionContainer contents: reagents: diff --git a/Resources/Prototypes/SoundCollections/desceration.yml b/Resources/Prototypes/SoundCollections/desceration.yml new file mode 100644 index 0000000000..a6c4be7b00 --- /dev/null +++ b/Resources/Prototypes/SoundCollections/desceration.yml @@ -0,0 +1,6 @@ +- type: soundCollection + id: desecration + files: + - /Audio/Effects/desecration-01.ogg + - /Audio/Effects/desecration-02.ogg + - /Audio/Effects/desecration-03.ogg diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_ai.png b/Resources/Textures/Effects/creampie.rsi/creampie_ai.png new file mode 100644 index 0000000000000000000000000000000000000000..9d00d4f1fa2353494fd2ae3a2c8c419f491c59cc GIT binary patch literal 613 zcmV-r0-F7aP)+SxnF;j1B~?4`;_iGIxp+j=$F z*MuKvx}aF3ZN1X$*eABFS6a7gt=qNUHXo8A#)uq!NQzBi;@b>GsAl)(9TPB_TmwK> zR1^~!6%Z`P`;X|F4cdCuOS78YJC0+dQe03aaLh#4Y+y+K2mk z-S!=p`2(_|qEtq_88GUm3o?!+d0qnhE!5R*&%SFmz{Mq&`GXU+Zw(|e5IV#nSWpTa zy?%bw926s(0j@O@N`%Pmtf;&+gN&vNvKxF*2GqPj_f)4$kL3F;FkANeL**sx$Qj-Y z$Sai<6;XCWYF_lotc<9wuzO>tBQ$jK`#MkFLVnA4GZZgxE4(rYEYjDrv%(2 zY|KN(?g3{lujtRu4yj#2uK@d+WJN{Y{@OWY*WVE`|I{PTii*0Y8d__olsy5GoaZ|$ zS9$4eDk;W1|N3Ek$Y6-b8S&9;C>?MqZ~2*K8o2q#(ufxk0mK=*MX43uyEp zJ7w~n-DfB(C;fE%EsV;-Im+<=;jI6I{|bHs)UK!;bTvEH00000NkvXXu0mjf81x<& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_corgi.png b/Resources/Textures/Effects/creampie.rsi/creampie_corgi.png new file mode 100644 index 0000000000000000000000000000000000000000..fc971385f3a79d80de59934c93efcbadf71444d8 GIT binary patch literal 478 zcmV<40U`d0P)As=6bJBsYH^Vx84H4oE$O5mAzLS>?p<9w_&FT9y80FJ1u}IulL1|XLdJyPBFJ?p zFGQ-XNlZ%W|2LWBp4@xfT>^Ii5fKp)T_>YV@N#Zz`Th73l=`o~a$6)w62BXa(CYND z->$KoLj%n#MDETm=eD+c4q{88)#<1A_uDnhC_%9C8dZdwya9I40f2+#Q-nCh%E&h4uVV(WLh+>2)PRoY&_WbO19g5P4CB!5;?Gfdd;DCnrBEaZ?TvM8 zsVcg3pwRYs9-;37gV8}k)^K`sA2C`?Gys@Ug4j|BeHUiM2QDfd0fsX(Z zXjZhCXxU+wwsy~f;mj)Cbgg^}2st?M@ceYLjXbOKkVP$PfDCDMzeBQWADsf$aB3v0 zHq`y@Af{@yi~vdKRPsWKP*?Im4FxcxBpuQ}B`>5+Hm=dieg|B#FGNH{L`0PO1Ubp5 U6PTC$X#fBK07*qoM6N<$f{|Ize*gdg literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_drone.png b/Resources/Textures/Effects/creampie.rsi/creampie_drone.png new file mode 100644 index 0000000000000000000000000000000000000000..4530d20115ba221211fd2b85670f519306b3cdb7 GIT binary patch literal 558 zcmV+}0@3}6P)w(TLcN*(|yO;F>8+L4LJYYR}R|p$+Y_3mMkW2+|lW#-`0F!98DMD<#QWoK#3oz`q zY-~IhgC42h=F5lotd`?V5f+0UvGEvoTcs*OrZ>Q?yz6_%wSoJ*Ofqd;(e;IGLxRYviC#%$Hq)$07*qoM6N<$g7C}_vj6}9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_engborg.png b/Resources/Textures/Effects/creampie.rsi/creampie_engborg.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4a6d94d8d243fbb4c900d19049c9d3a2fd718f GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU@Y-;aSW-L^Y+&M+-3(6wh!k6 zqf$ckaxEz3%}CK%CILc z>;3&Zlfu(WuT2%Ze_W7(hk4_2#~sz&KBDWtROUw~eUx0l+8=)KUIl-{yRW-8u8{8D zrjvKBvEF-n*;Hx4*`2>{*52FH?}7xjh;E$OaduCB_q1)FxBe));x6z0LDMZqt$$Yz zuN6by#qWHFcKo=oI^n9qVGCQPJ8|>3ry5EwSW%>`zucICC-)AIQ-{c@RoV%6Hm(#n zI_Kl>$7?r~{ZjFmlB(w=yubF$zx3~4^@2CcD^-2o^NoL3+W{Bm2PMZg?p}1N_e?IM z?mk`aE%x_!H}Bk*kf>(6r{vj}njg7hcfa46TH;|}F1%-!>2!s}T`e6TAoo<-OZ(0r URXb}zU^Fmzy85}Sb4q9e0DXbHfdBvi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_hardsuit.png b/Resources/Textures/Effects/creampie.rsi/creampie_hardsuit.png new file mode 100644 index 0000000000000000000000000000000000000000..115cb78751abda18aa7c0738eddd31e50cacf384 GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVC?pEaSW-L^Y)fuUz39f+k^R~ z)~W%sX55HyNZrFI{()=Dz4Yklbq`oqY%>iDxG`ZufK$QgvpJicO}sZAkmmXLU#gkY z_;cJn9!~y-7fT~+^SqS&D_=8gzslGBr^lrGVSDEKjq~2Fea&n2sFXtWtB6YLAs# z?U-~T`1D&jzsSeiZkhhq|75In-L25l_npC;5XQP0QAeMCS$=1^l#Rgy!yR|t&3?U- zjsJ@eLqof8{i=h)f-rD#wd5bG=%ehc30K5+z6)k*5S3v+dvmAxjc1a*fh#TVySg#f z-F_UU(S^XAwx16oBdYjRl>7f^dD$Oh6uV(0TzW8M+``_t|tp($@Or>02zu$BFZU4U9a$hmG zcY7PpdUFMR?UdQM8_X4M=S-epe&*zqUct?or)Dg&PbjnHymV#p7oNVYe1b4=aeoQx Y^V<2R(t4IG0ER7tr>mdKI;Vst0I0^K%K!iX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_human.png b/Resources/Textures/Effects/creampie.rsi/creampie_human.png new file mode 100644 index 0000000000000000000000000000000000000000..7bfc562907f387d347cad6b57bfef46ffc074eec GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU`+OOaSW-L^Y)gZ-(dq0wg>hl zIumWflHN@4YnA@OwAbl+Ohd8327{8fqD759YfOT*4n}A$RzBQurXfbvz;dIo(!czb zLYjs5;!mHhW)Lh*{B-5Tb@k*=S9<>H*2a`po_MlyWhxKDiqsy>_6ITzx^-spObltC zpDuAO;96j#vi6a#v{R*rnt0P^J^`=CpC9u+e}4Sh`T(mV-&w_X+AZk&?xxZEefI9t zdtZO%&XRP#XJ@fLKWA=PgDu0_sAK=r*%|JqA57Z2HzwS*?dm&|o%QlBBp4d5HJV?2 z)Y$dM)A>h?{ERNMYgMMWg{JJEwM_Af z5s)F^rF`p6_4X%w-ZmVq;$B#CL9z4G1c`+vvwCmt+cTGOTdv%uz+JcIE_xPaSHXE8 z@4sRiOU}p8iLCLbPfqyk7(B;S2@ZYgTe~DWM4f2tv1U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_janborg.png b/Resources/Textures/Effects/creampie.rsi/creampie_janborg.png new file mode 100644 index 0000000000000000000000000000000000000000..6d8a6772e03ac5022d761ad03c76df7f5d515ea1 GIT binary patch literal 575 zcmV-F0>J%=P);&WER`h^l1C8s zXwkvB6xu}cHP9C6`)y#jzW3IiZ*3kni}&)9-F(Smp905)vrp?lYLzJCSiT!gVIjlE_TMohDHT^=_zLjS{; zUV@Q7+*ZzHar}?xUW8c~{ZXAdhgE;TOD?ZB7u(1CR@K;4iSvis&XpoF#xz^An=k7+ zWM3t?&H;dS5SkN(Zb2~bHUrz|;-RN40LLICF%@Bi_dHP(gmanqP35`o#Y0aSV31zX=Od}Bo3SqS@aO;l N002ovPDHLkV1nEm2mSy6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_lizard.png b/Resources/Textures/Effects/creampie.rsi/creampie_lizard.png new file mode 100644 index 0000000000000000000000000000000000000000..866cb6b314476f5928c2de349069fb5c0ca71d96 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU`+OOaSW-L^Y)fuUbBG++k^RO zK7w+}p|2)2`eo)FU@dB07qj5`iwjGguf;TSSG>Aqq#Cq2r0WRBB3bS76+J#?&5aR% z_p2%i@$Wx=xLe-AC01kRs$Y*?HD|6`dHvGy(CM?M_=KuDF*v9?{fJ?C&Gh0)`e#*! z1he?6SeDgHZ^{d`D}BWi_jm8rZYpJWN$s8gUfFN``L*{~tZ9$9|A6VX^r`ReqEk)x zi8?IuPKE#!NpWy00#? zwCO!1<+!O-EdKZ!mky=#0{7MY9$CL``1~Z+IC(bv=32|!%x7444i|KSn_*Lhp- z?K%C8y+Pq7TUyRv$(SjI&zo!JxGKTHE{^?4MjQ7${&d9*80rk3u6{1-oD!M091t<-HgCx37hh95KW%AB{hq~=>X&+0 z5>Dn7>2usW`hH(^mE5NH-><(b^5eUA^lIAj_S3uX$-P%U{y?;v+bNJOhWpUZ9q)~p zyTs#)j`Y9HZx~qKFN)4ruXb49b?MuuUqZ+A?dR~F)@*zb z>tpV){a#r#)6v-pzarO50-X;5(-!ZVInm5B%G_hk{OP6&g}H_=*EE=1x$`MJGkIH? z#^N2edbMu0%aLIH}iQ#*q>g)(snuV z8_x!*QwExiAJ5&H^);aFWd64b#o~Yb2^!20`+nLnXe%6dym^p25hUR0>gTe~DWM4f DlqHrQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_monkey.png b/Resources/Textures/Effects/creampie.rsi/creampie_monkey.png new file mode 100644 index 0000000000000000000000000000000000000000..0456b10fa2343e9fff52cbca17fd92ca9c6569ca GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU^Mr1aSW-L^Y)fvQL}@{v5)=d zLQ;)f+>YiYFM74pVO_xKg;_hD^c(n>ElXIebByR2-w z>mGH+a$T;s5ozcCe7@{0YIE*JlUiKbxjR~x`@?_NZ0i1SVXN~@%jmpqla?G#(({bU z+qU2D$dr<(2BYF<*E%2V3fy{Lw0>*u-4kmkd+Iqo7hdo<^Z8w^iw`&EiWk4EXuiq2 z;B)!w@}KWz6?{J%?fJbQ=z1vl;Gg;|r)SNFt&hH)dU;dNbiVGtntEv+_ZQhBk9JK= z3;Oa$N@ja?)t=PdSC-5_^Fg8}$9}rNU;l=ZRlGAiuO5Hvomw-otzWaZgh|EIwNP({ z#1@A~Mrnaxq*i^;i=21s0;|w;SE)dueZRwvuf-?4m;trcpz=Oe? Jmvv4FO#r|Nq{#pP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_secborg.png b/Resources/Textures/Effects/creampie.rsi/creampie_secborg.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8a1558d32dc4b1bba91376549057077e9b24bc GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV6^shaSW-L^Y+%p+`|R}tq+qY zT-%^tpq;p;_T}6W z6Z|8u^|H*{BHxE^BmXXn6@75~K;_Tv8P~IXlc(=4-mh}-dtLVG{B6dJY3o&HY>oUS zbos{9%r~>Fz5!hh1}j{yYOcFk_%DP%qO2>sSNhlNHJr+C`KC|Sscz?by5m&W1l0uD zJw;2M>bZeD6%U~YZ#POE++8Yk>VIu}3HOxA!Sy?8Y`%V*q;^34yM^qN@YG8((>G3) zkBFREWm$DPW-sfRxX=eDL$^FhJ-)y{O=|6}nQM9WtcogU+tCenK*JI7md_^^7p^LN P0OEVP`njxgN@xNAraG%M literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_standborg.png b/Resources/Textures/Effects/creampie.rsi/creampie_standborg.png new file mode 100644 index 0000000000000000000000000000000000000000..8b79077dc4260283b9bf0d39f11ea1dfebcc3a6c GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU~KVpaSW-L^Y+&MyruvVwh#T6 zd^!76dS*RviLw64w5Mrxv-kX^-tFu5G3g(8k~KqRWj80MGMg-~?3W;?|0>%pm+XD{ zJzBvUfZ5@jIVQOu@Hi&jx&I(rPri#LFj^QqUHx3vIVCg!0K)dX;{X5v literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_xeno_crit.png b/Resources/Textures/Effects/creampie.rsi/creampie_xeno_crit.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bfcc51415235bd7f21de5eeb97caef769105be GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ6`n4RAr*7pUN+=Aq#(iipuJGl z$f~sUq;>)0`UAI|cYag3vuMp+8C5xk<+H-1mww!S`M297`8YWS4y}#4s@qb}o{4+( zVBcm|hD!qB=e0Ty=RQu)&g>{q41K%zx9NcpGpU;yH;&my|148YV%&7G`}L`KJ2OSG z2L-$Lw@OC;$Yv0q6jfDo{PNDMxF_O0%XAqIl&)sbQ@L6`bP0l+XkK;r3eI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_xeno_dead.png b/Resources/Textures/Effects/creampie.rsi/creampie_xeno_dead.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bfcc51415235bd7f21de5eeb97caef769105be GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ6`n4RAr*7pUN+=Aq#(iipuJGl z$f~sUq;>)0`UAI|cYag3vuMp+8C5xk<+H-1mww!S`M297`8YWS4y}#4s@qb}o{4+( zVBcm|hD!qB=e0Ty=RQu)&g>{q41K%zx9NcpGpU;yH;&my|148YV%&7G`}L`KJ2OSG z2L-$Lw@OC;$Yv0q6jfDo{PNDMxF_O0%XAqIl&)sbQ@L6`bP0l+XkK;r3eI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_xeno_sleep.png b/Resources/Textures/Effects/creampie.rsi/creampie_xeno_sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..94cb3aa63e0c91ec30a3630a0f85154b711b7be7 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=uRUEHLn`LHy}6OM$$_Eu;d0x9 zle)yT!x9+73#>rof~IR-LWdY4Vx4$28XxOT_^++`=cMcU51tGgf~KlFPgOrW@%MDy zk1FR>Jiq={_1tCu`s)1WtM|WZ_1&|ZmFsrgUEK*Prl}8~2;_WQA02n($l-0_!D3#I zeDvyt%zn-0J8-0SWL%17GCmQm)bY~J?~oo(ZuZD!`jAeWCyW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_xenomorph.png b/Resources/Textures/Effects/creampie.rsi/creampie_xenomorph.png new file mode 100644 index 0000000000000000000000000000000000000000..e51fed1e4f58f2d4f060b5908ecf3fc6d7e2e25b GIT binary patch literal 374 zcmV-+0g3*JP)7Pi=t007gK4gKSB=e+&Cy{`tx`D?usw}HE5aXDAjrKB_q(JSHO&Uv>i z)XsCwPUla@sxFf&!d0J}?Wun?`0n+T^eTW&_3ogp2;J)`8T1XfxqHy_)8pmbVzpLt z*e5srrGcw}eG5#A@4lJ*G6(YYW=QrWQ=y6%c*#cRgF*XgD3@P4tq5UJOk?SdHt%;t3aq&00000005Ks0+8T@ Uo^FZM3IG5A07*qoM6N<$f-Ci_kpKVy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/creampie.rsi/meta.json b/Resources/Textures/Effects/creampie.rsi/meta.json new file mode 100644 index 0000000000..4ae015b294 --- /dev/null +++ b/Resources/Textures/Effects/creampie.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA 3.0", "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0", "states": [{"name": "creampie_ai", "directions": 1, "delays": [[1.0]]}, {"name": "creampie_corgi", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_drone", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_engborg", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_hardsuit", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_helmet", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_human", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_janborg", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_lizard", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_medborg", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_monkey", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_secborg", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_standborg", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_xeno_crit", "directions": 1, "delays": [[1.0]]}, {"name": "creampie_xeno_dead", "directions": 1, "delays": [[1.0]]}, {"name": "creampie_xeno_sleep", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "creampie_xenomorph", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]} \ No newline at end of file