From e8b4a4a54b9e55be624f3872ba02baaf6804ca6a Mon Sep 17 00:00:00 2001 From: Babaev <129369024+babaevlsdd@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:47:19 +0600 Subject: [PATCH] print --- .../Components/FootPrintsComponent.cs | 51 ++++++ .../Components/PuddleFootPrintsComponent.cs | 8 + .../_Sunrise/FootPrints/FootPrintsSystem.cs | 124 +++++++++++++++ .../FootPrints/PuddleFootPrintsSystem.cs | 37 +++++ .../Prototypes/Entities/Effects/puddle.yml | 1 + .../Entities/Mobs/Species/arachnid.yml | 3 + .../Prototypes/Entities/Mobs/Species/base.yml | 1 + .../Entities/Mobs/Species/diona.yml | 5 + .../Entities/Mobs/Species/dwarf.yml | 5 + .../Entities/Mobs/Species/reptilian.yml | 5 + .../Entities/Mobs/Species/slime.yml | 5 + .../Prototypes/_Sunrise/Decals/footprints.yml | 148 ++++++++++++++++++ .../Entities/Mobs/Species/felinid.yml | 3 + .../_Sunrise/Entities/Mobs/Species/swine.yml | 3 + .../_Sunrise/Entities/Mobs/Species/synth.yml | 1 + .../Entities/Mobs/Species/vulpkanin.yml | 5 +- .../Effects/footprints.rsi/dragging-1.png | Bin 0 -> 828 bytes .../Effects/footprints.rsi/dragging-2.png | Bin 0 -> 1012 bytes .../Effects/footprints.rsi/dragging-3.png | Bin 0 -> 842 bytes .../Effects/footprints.rsi/dragging-4.png | Bin 0 -> 838 bytes .../Effects/footprints.rsi/dragging-5.png | Bin 0 -> 796 bytes .../Effects/footprints.rsi/dragging-test.png | Bin 0 -> 414 bytes .../footprint-left-bare-diona.png | Bin 0 -> 255 bytes .../footprint-left-bare-dwarf.png | Bin 0 -> 209 bytes .../footprint-left-bare-human.png | Bin 0 -> 168 bytes .../footprint-left-bare-lizard.png | Bin 0 -> 195 bytes .../footprint-left-bare-slime.png | Bin 0 -> 199 bytes .../footprint-left-bare-spider.png | Bin 0 -> 175 bytes .../footprint-left-bare-swine.png | Bin 0 -> 176 bytes .../footprint-left-bare-vulp.png | Bin 0 -> 176 bytes .../footprint-right-bare-diona.png | Bin 0 -> 250 bytes .../footprint-right-bare-dwarf.png | Bin 0 -> 213 bytes .../footprint-right-bare-human.png | Bin 0 -> 166 bytes .../footprint-right-bare-lizard.png | Bin 0 -> 195 bytes .../footprint-right-bare-slime.png | Bin 0 -> 200 bytes .../footprint-right-bare-spider.png | Bin 0 -> 172 bytes .../footprint-right-bare-swine.png | Bin 0 -> 181 bytes .../footprint-right-bare-vulp.png | Bin 0 -> 178 bytes .../footprints.rsi/footprint-shoes.png | Bin 0 -> 146 bytes .../Effects/footprints.rsi/footprint-suit.png | Bin 0 -> 219 bytes .../Textures/Effects/footprints.rsi/meta.json | 83 ++++++++++ 41 files changed, 487 insertions(+), 1 deletion(-) create mode 100644 Content.Server/_Sunrise/FootPrints/Components/FootPrintsComponent.cs create mode 100644 Content.Server/_Sunrise/FootPrints/Components/PuddleFootPrintsComponent.cs create mode 100644 Content.Server/_Sunrise/FootPrints/FootPrintsSystem.cs create mode 100644 Content.Server/_Sunrise/FootPrints/PuddleFootPrintsSystem.cs create mode 100644 Resources/Prototypes/_Sunrise/Decals/footprints.yml create mode 100644 Resources/Textures/Effects/footprints.rsi/dragging-1.png create mode 100644 Resources/Textures/Effects/footprints.rsi/dragging-2.png create mode 100644 Resources/Textures/Effects/footprints.rsi/dragging-3.png create mode 100644 Resources/Textures/Effects/footprints.rsi/dragging-4.png create mode 100644 Resources/Textures/Effects/footprints.rsi/dragging-5.png create mode 100644 Resources/Textures/Effects/footprints.rsi/dragging-test.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-diona.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-dwarf.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-human.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-lizard.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-slime.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-spider.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-swine.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-left-bare-vulp.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-diona.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-dwarf.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-human.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-lizard.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-slime.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-spider.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-swine.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-right-bare-vulp.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-shoes.png create mode 100644 Resources/Textures/Effects/footprints.rsi/footprint-suit.png create mode 100644 Resources/Textures/Effects/footprints.rsi/meta.json diff --git a/Content.Server/_Sunrise/FootPrints/Components/FootPrintsComponent.cs b/Content.Server/_Sunrise/FootPrints/Components/FootPrintsComponent.cs new file mode 100644 index 00000000000..82c0e71fa0d --- /dev/null +++ b/Content.Server/_Sunrise/FootPrints/Components/FootPrintsComponent.cs @@ -0,0 +1,51 @@ +using System.Numerics; + +namespace Content.Server.FootPrints.Components; + +[RegisterComponent] +public sealed partial class FootPrintsComponent : Component +{ + [DataField] + public string LeftBarePrint = "footprint-left-bare-human"; + + [DataField] + public string RightBarePrint = "footprint-right-bare-human"; + + [DataField] + public string ShoesPrint = "footprint-shoes"; + + [DataField] + public string SuitPrint = "footprint-suit"; + + [DataField] + public string[] DraggingPrint = + { + "dragging-1", + "dragging-2", + "dragging-3", + "dragging-4", + "dragging-5" + }; + + [DataField] + public Vector2 OffsetCenter = new(-0.5f, -1f); + + [DataField] + public Vector2 OffsetPrint = new(0.1f, 0f); + + [DataField] + public Color PrintsColor = Color.FromHex("#00000000"); + + [DataField] + public float StepSize = 0.7f; + + [DataField] + public float DragSize = 0.5f; + + [DataField] + public float ColorQuantity; + + public Vector2 StepPos = Vector2.Zero; + + public bool RightStep = true; +} diff --git a/Content.Server/_Sunrise/FootPrints/Components/PuddleFootPrintsComponent.cs b/Content.Server/_Sunrise/FootPrints/Components/PuddleFootPrintsComponent.cs new file mode 100644 index 00000000000..257e9a7432c --- /dev/null +++ b/Content.Server/_Sunrise/FootPrints/Components/PuddleFootPrintsComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server.FootPrints.Components; + +[RegisterComponent] +public sealed partial class PuddleFootPrintsComponent : Component +{ + public float SizeRatio = 0.3f; + public float OffPercent = 80f; +} diff --git a/Content.Server/_Sunrise/FootPrints/FootPrintsSystem.cs b/Content.Server/_Sunrise/FootPrints/FootPrintsSystem.cs new file mode 100644 index 00000000000..e4016af1843 --- /dev/null +++ b/Content.Server/_Sunrise/FootPrints/FootPrintsSystem.cs @@ -0,0 +1,124 @@ +using System.Linq; +using Content.Server.Atmos.Components; +using Content.Server.Decals; +using Content.Server.FootPrints.Components; +using Content.Shared.Inventory; +using Content.Shared.Standing; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server.FootPrints; + +public sealed class FootPrintsSystem : EntitySystem +{ + [Dependency] private readonly DecalSystem _decals = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + + private const float AlphaReduce = 0.15f; + + private List> _storedDecals = new(); + private const int MaxStoredDecals = 750; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMove); + } + + private void OnMove(EntityUid uid, FootPrintsComponent component, ref MoveEvent args) + { + if (component.PrintsColor.A <= 0f) + return; + + if (!TryComp(uid, out var transform)) + return; + + var dragging = _standing.IsDown(uid); + var distance = (transform.LocalPosition - component.StepPos).Length(); + var stepSize = dragging ? component.DragSize : component.StepSize; + + if (!(distance > stepSize)) + return; + + + if (!PrintDecal((uid, component, transform), dragging)) + return; + + var newAlpha = Math.Max(component.PrintsColor.A - AlphaReduce, 0f); + + component.PrintsColor = component.PrintsColor.WithAlpha(newAlpha); + component.StepPos = transform.LocalPosition; + component.RightStep = !component.RightStep; + } + + private bool PrintDecal(Entity prints, bool dragging) + { + if (prints.Comp2.GridUid is not { } gridUid) + return false; + + if (_storedDecals.Count > MaxStoredDecals) + { + var excessDecals = _storedDecals.Count - MaxStoredDecals; + RemoveExcessDecals(excessDecals); + } + + var print = PickPrint(prints, dragging); + var coords = CalculateEntityCoordinates(prints, dragging); + var colors = prints.Comp1.PrintsColor; + var rotation = dragging + ? (prints.Comp2.LocalPosition - prints.Comp1.StepPos).ToAngle() + Angle.FromDegrees(-90f) + : prints.Comp2.LocalRotation + Angle.FromDegrees(180f); + + + if (!_decals.TryAddDecal(print, coords, out var decalId, colors, rotation, 0, true)) + return false; + + _storedDecals.Add(new KeyValuePair(gridUid, decalId)); + return true; + } + + private EntityCoordinates CalculateEntityCoordinates(Entity entity, + bool isDragging) + { + var printComp = entity.Comp1; + var transform = entity.Comp2; + + if (isDragging) + return new EntityCoordinates(entity, transform.LocalPosition + printComp.OffsetCenter); + + var offset = printComp.OffsetCenter + (printComp.RightStep + ? new Angle(Angle.FromDegrees(180f) + transform.LocalRotation).RotateVec(printComp.OffsetPrint) + : new Angle(transform.LocalRotation).RotateVec(printComp.OffsetPrint)); + + return new EntityCoordinates(entity, transform.LocalPosition + offset); + } + + + private string PickPrint(Entity prints, bool dragging) + { + if (dragging) + return _random.Pick(prints.Comp.DraggingPrint); + + if (_inventorySystem.TryGetSlotEntity(prints, "shoes", out _)) + return prints.Comp.ShoesPrint; + + if (_inventorySystem.TryGetSlotEntity(prints, "outerClothing", out var suit) && + TryComp(suit, out _)) + return prints.Comp.SuitPrint; + + return prints.Comp.RightStep ? prints.Comp.RightBarePrint : prints.Comp.LeftBarePrint; + } + + private void RemoveExcessDecals(int excessDecals) + { + for (var i = 0; i < excessDecals; i++) + { + var decalToRemove = _storedDecals[i]; + _decals.RemoveDecal(decalToRemove.Key, decalToRemove.Value); + } + + _storedDecals = _storedDecals.Skip(excessDecals).ToList(); + } +} diff --git a/Content.Server/_Sunrise/FootPrints/PuddleFootPrintsSystem.cs b/Content.Server/_Sunrise/FootPrints/PuddleFootPrintsSystem.cs new file mode 100644 index 00000000000..52cd0012bdd --- /dev/null +++ b/Content.Server/_Sunrise/FootPrints/PuddleFootPrintsSystem.cs @@ -0,0 +1,37 @@ +using Content.Server.FootPrints.Components; +using Content.Shared.Fluids.Components; +using Robust.Shared.Physics.Events; +using Robust.Shared.Prototypes; + +namespace Content.Server.FootPrints; + +public sealed class PuddleFootPrintsSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnStepTrigger); + } + + private void OnStepTrigger(EntityUid uid, PuddleFootPrintsComponent comp, ref EndCollideEvent args) + { + if (!TryComp(args.OtherEntity, out var footPrints)) + return; + + if (!TryComp(uid, out var puddle) || puddle.Solution is not { } entSolution) + return; + + + var solution = entSolution.Comp.Solution; + var quantity = solution.Volume; + var color = solution.GetColor(_prototype); + + footPrints.PrintsColor = footPrints.ColorQuantity == 0f + ? color + : Color.InterpolateBetween(footPrints.PrintsColor, color, 0.3f); + footPrints.ColorQuantity += quantity.Float() * 1.2f; + } + +} diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index fecf9f19a47..9175fc049cf 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -163,3 +163,4 @@ solution: puddle - type: BadDrink - type: IgnoresFingerprints + - type: PuddleFootPrints # Sunrise-edit diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index feca2afaad3..182e071fa09 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -128,6 +128,9 @@ state: "creampie_arachnid" visible: false # Sunrise-start + - type: FootPrints + leftBarePrint: "footprint-left-bare-spider" + rightBarePrint: "footprint-right-bare-spider" - type: FootstepModifier footstepSoundCollection: collection: FootstepSpiderLegs diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 075e3aa369a..82ddb204637 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -244,6 +244,7 @@ components: - type: Carriable # Sunrise-edit - type: CanEscapeInventory # Sunrise-edit + - type: FootPrints # Sunrise-edit - type: Barotrauma damage: types: diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 7edb3a19dba..cde7d17235b 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -101,6 +101,11 @@ actionPrototype: DionaGibAction allowedStates: - Dead + # Sunrise-start + - type: FootPrints + leftBarePrint: "footprint-left-bare-diona" + rightBarePrint: "footprint-right-bare-diona" + # Sunrise-end - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml index 5a54b56c48e..a99c39d36c5 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml @@ -56,6 +56,11 @@ hideLayersOnEquip: - Hair - Snout + # Sunrise-start + - type: FootPrints + leftBarePrint: "footprint-left-bare-dwarf" + rightBarePrint: "footprint-right-bare-dwarf" + # Sunrise-end - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index ad543620cf8..b2ca1efd218 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -62,6 +62,11 @@ types: Heat : 1.5 #per second, scales with temperature & other constants - type: Wagging + # Sunrise-start + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" + # Sunrise-end - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index caa3690e5d2..761701fef2c 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -110,6 +110,11 @@ types: Asphyxiation: -1.0 maxSaturation: 15 + # Sunrise-start + - type: FootPrints + leftBarePrint: "footprint-left-bare-slime" + rightBarePrint: "footprint-right-bare-slime" + # Sunrise-end - type: entity parent: MobHumanDummy diff --git a/Resources/Prototypes/_Sunrise/Decals/footprints.yml b/Resources/Prototypes/_Sunrise/Decals/footprints.yml new file mode 100644 index 00000000000..2aea33ad274 --- /dev/null +++ b/Resources/Prototypes/_Sunrise/Decals/footprints.yml @@ -0,0 +1,148 @@ +#diona +- type: decal + id: footprint-left-bare-diona + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-left-bare-diona + +- type: decal + id: footprint-right-bare-diona + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-right-bare-diona + +#dwarf +- type: decal + id: footprint-left-bare-dwarf + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-left-bare-dwarf + +- type: decal + id: footprint-right-bare-dwarf + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-right-bare-dwarf + +#human +- type: decal + id: footprint-left-bare-human + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-left-bare-human + +- type: decal + id: footprint-right-bare-human + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-right-bare-human + +#lizard +- type: decal + id: footprint-left-bare-lizard + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-left-bare-lizard + +- type: decal + id: footprint-right-bare-lizard + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-right-bare-lizard + +#slime +- type: decal + id: footprint-left-bare-slime + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-left-bare-slime + +- type: decal + id: footprint-right-bare-slime + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-right-bare-slime + +#spider +- type: decal + id: footprint-left-bare-spider + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-left-bare-spider + +- type: decal + id: footprint-right-bare-spider + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-right-bare-spider + +#shoes +- type: decal + id: footprint-shoes + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-shoes + +#space suit +- type: decal + id: footprint-suit + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: footprint-suit + +#dragging +- type: decal + id: dragging-1 + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: dragging-1 + +- type: decal + id: dragging-2 + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: dragging-2 + +- type: decal + id: dragging-3 + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: dragging-3 + +- type: decal + id: dragging-4 + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: dragging-4 + +- type: decal + id: dragging-5 + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: dragging-5 + +- type: decal + id: dragging-test + tags: ["footprint"] + sprite: + sprite: Effects/footprints.rsi + state: dragging-test diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/felinid.yml index b475ea99c2c..6aeaefe906d 100644 --- a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/felinid.yml @@ -83,6 +83,9 @@ - !type:Emote emote: Hisses showInChat: true + - type: FootPrints + leftBarePrint: "footprint-left-bare-dwarf" + rightBarePrint: "footprint-right-bare-dwarf" - type: entity save: false diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/swine.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/swine.yml index 43e9fa5e00b..5750cfddc3c 100644 --- a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/swine.yml +++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/swine.yml @@ -45,6 +45,9 @@ amount: 10 - type: Stamina critThreshold: 200 + - type: FootPrints + leftBarePrint: "footprint-left-bare-swine" + rightBarePrint: "footprint-right-bare-swine" - type: entity save: false diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml index 28f4c5e4376..f0d04c6a997 100644 --- a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml +++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/synth.yml @@ -312,6 +312,7 @@ Slash: -5 Piercing: -5 - type: EyeProtection + - type: entity name: Urist McSynth diff --git a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/vulpkanin.yml index c3dbc6b743d..bf4b5e53ce0 100644 --- a/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/_Sunrise/Entities/Mobs/Species/vulpkanin.yml @@ -16,7 +16,10 @@ - type: Inventory speciesId: reptilian - type: VulpaAccent - + - type: FootPrints + leftBarePrint: "footprint-left-bare-vulp" + rightBarePrint: "footprint-right-bare-vulp" + # Sunrise-end - type: entity save: false diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-1.png b/Resources/Textures/Effects/footprints.rsi/dragging-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d631e8cbfcaa9b7bbbffd0a7559904f6bb06685 GIT binary patch literal 828 zcmV-C1H=4@P)Px%_DMuRR9J=0SG#WFKomWW!C;&Sp(sfinpMh`#J`r;3Gn{ACQ97 zwzTy&ppB5CP2@#@j7_Xb0W-RG?06v3?w-nXXXc(W_c6AC{~et3yE41)`!_}QvOPsO zQdyKIqGL)%?M31a7EpqIo{TZpqjM@EJ`_M45Ax2Y(h4| zS&}4}&1R}@l?3!xtCbuO5u-2+3q?@T2MZ|5pKy3}bu|dXu;1x)FB` zmf{Z*z&XF$k-5UQTCMtm8~`?(O(xvW&(8pW<#JiYSuG$4f?vDGF#ycx^Na`~;PLSh zi^T%7*-YBW>6K9XXp%A3qxpY&dcyJXu^g}0Yv{TT0EpvwFJb|uE{Nk8LP!)vh@uGf zdL008a&jWqy}Z195zjPQdke5_`&-$DG)-Zerc8?f=e#idRoAjo1fnPc05qFTNhTry z0PS`=Gfyz8@~wOk|-opt;j^JtLsg>7Z7t$qvXkJd!R)q@DK{005R{jeu+#s1rUXU^1B` z0B~_}F-p@Ex~^k7oyz$}qahfd@h+eUg5Vy& z{n^>splDvCLBMrg@8RL0(r;-5G)?om-LBE?cE2Ngnm?^p3yZ}fL%i8+-uZAG=Wqc# zWWs3M_OQ`t{HE0|LSC=el`kI(r4;PK{|=UAAqawd#+WcEwH}2^7hE&OdbVv30pR@n z{0AT}p%Ji6S6<|JJXZQSQ7%FOP18J1uf-i~+aCJ9ulzZ#4DqW)3(EKX8(|mk499Wc zIF4A)#kdNUDR5oab6wXHBmi)Gdpo3SREYj6_W3#e=Xe7oS!Q)pGqx=N0000Px&u1Q2eR9J=OSG#WGI21jSLX#GihZ6&Gm1IA}DYnQIQ@a>wu(f|-|0G-6Td5r& zz!uZwM{GA1oH#H7$uY&q+QK10*|PkY?e;XG$V=YCd(XXefd4zJU)dZ*QD2Q)t=9Md zlt8=PE}egTe9QqLj^n=p!1KI-bB?>aI|~59Fzk0a9Zlxx>FF3=MI!BX8&MSX<2cSo zqfst|$b}HOnp23PsITVKzFn|)Iq&s)_WN>Ns?ebpTqZkWLbvkbc%Yt4ges8KnQ_GqY>D)9hiG}MPV-j03d{b<2Z<-Xk%?W z9v8kj=Lo~FzhPK{ld8pDuXoQFBfjtd0D#xmR{%h*Rs*FJlv2FBylDG4j!nV=V+;WP zsq(Qk0%qu*pPw-t4gmn3=jnMu2x_%j!MW?YrFuA+001z?i064f9LLdfoO7gU3fFa! zrfI?6BzJv%4Pdtrw-N}$@GG#&J+KOUmSwQ4RqHUrtuUL-3Mo;j65=iqe!IN9gp?9# zn&Ry23{uKcLqZ75NF_-E&+`Jt*dJ96stA1ZeLpbs`SJ0g$BKw@N-5QADr%qOpehY} zm7#LHSS*m|Ia;k­b?&iOt^Zzmvx2vpf+S+=pR1gIjQs^RqXbiUJdc6+LIUL79k|a1eIoUXKCjk?#>lVJ1!mqBbO6@Jn z!gM+X0R6WLTM5{<-7Py@VZ93it4JvIf4&16+cZ%57*R^0#Mo>$F`v&1>#FN{o(CzV zPL-+})sCf<-SxEXML-DglMwRz#l?l5Gdp3U(SYMPIxWp+6VvGwi^T$q#R730cP-0$ z0FKZ=tJV4oK;ivAKR?%HnPnLmW3X+z&;=P|TlH}e0RWIvjtL>)oI?olQ{BGVY{GS2 z9d?zbvS&EY^RBwg!2|$2nFp)-R}O)d(#^E&+k*EZU^16dj@Q?P5U_2#JD<<>@5Iq) zwDpWKREkg`j$>7lfeQUPD5Y2~m&)#8ALqaxjcD8Z&pC&bvI_w3@9%|{eMlO163FxX zi@J%F5}xN-WgU)E+67j(9u9|J)*I2$1WerA+~`(leYQn2%$-h0kA2_&rT;rCvEEh( igTeh^F!=MBv;GA&Kf02QqUp;30000Px&1W80eR9J=WmoabJKp2K!<1_XNY{`letSp)OGct9^A1IT%m%YEDL-uBOrpuV2 z3lqO2krJX%VueW90h{Xp-{~-58``0j`Y!ezzWbi#C?f#yJTJ_$42-dl z0Fb6B7+dBrpU)LUF@fI#0PqRGO`hlBDgZd=DzGm4?e_Lo7U6#fU`2yM}n8X-Ep67_;cq^pu`wHS903zp{hYt@AYk>ja z<>h5#OdQ8}etuT%cDoHBL{#QNsRL0INze1v`gH4ei7~ddM)n2(mUikBll1MkO<9(~ zb=}HkCwvu#obOe1|)smGu;5bg{U^hprfK5s?QH{QZvfl2d&NHA_tlYWnkE{J_2G`=DBxDBh1qOY8oU&ML~9%b0Tzpe zI_rVuI{<)c>qXmYwa{oZz&YQVOf7)PWOB_phwuAXEEX^fL;XgDrk@GTW>X!-_xJah zOeQ`3XxEl(I+390D)^po(oc9IBvFN?4YK;c$rQbXqr${Q!tu-{VqBNGSmPx&07*naR9J=WmoZPWvDx-64liuP+A zyp~9-&Y<7#7xXBK^1%*(zeWjy;AB+-qAq9@MVDb1o?KmB{gzU?k3YW$5JKz$d&YJ& z8UYZ7;fdJ?FdPn-5@>t{v)SzHW6)zE#J&(>Kfms}u9fpyTFBVT2pA`x=N-p!jO)6@ zaZJ12#^?Y_spH(XgC@Q!2@D2eAnsfKuwCIVHfu!$YZEr_)(E3zY=4*56=$Qmr*fk|3o7 zuwR4g>+4b?(VK#Q%dbs`EEqOAW0Hht*4n~ z0t2kCuLI!wKI8GYiM!PZq-jd8*8{+DoWk04I<>N~f%!}@tywpwD+%1*-fAOjtx40A zIF79j(Cv1g?K4->1WO4lwvZ6wSqAE`Fql>&08is}JRaK<`@UbWNs~uQ7Q~DjpdDb z0gF&dS=+jyw3LA7dEbq^n0AA^yE}VIrBvYy^XsT9$dz71S(X*ZIF4fr({zKW6@dHu z`&yr+1X``uhmDPm78Fn9`@Su*eENkDwg~e>D*r}UhSC?2W!G+70%iSfu-KkP*IE}c zQW~S|$DN&>v%KEx^*B5{YytM92HkEKt@UXc!OhLh+BfHac@+mia3Q5U&5vUvS7ojd z0mpHWQl1)TTI*A-wbhd(`Sl9!)inUv)B{K<|Ab+90WcU0&hvJj=bcL_|2(S0AP6o1 zOffG*Wd`!WVgB4UvdMzMW1wN)2A=<~ScyOtOeT(wj?Vi1ej$)qdqWfa142SU%^$V# QCIA2c07*qoM6N<$g0LWsQ~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/dragging-5.png b/Resources/Textures/Effects/footprints.rsi/dragging-5.png new file mode 100644 index 0000000000000000000000000000000000000000..18aed3607ed8d406c02811db9e5bdf2bc1c5468e GIT binary patch literal 796 zcmV+%1LOROP)Px%)=5M`R9J=Wm%D1?Koo{Q-=qjDf{-E#n6!C=Ewb2e;mVL^3+IuXB27rAHg90q zcL)RmCg5@56h3UmpLql0tE-&%7NoJGZ}obSl~F$ zEL|EF5vfw4lt2|J%d!C2Znpr$aV$y9i}vMJY(yYeSVLg8SS$|wEXyJYf|*V&_5W@PRPHUynp8Pzserv&z!51BLOkT=PljRKL{X${rfC))DC+|1 zz$$M+R6YHQ#PcnibuAh?cvItGJ5rXxJhdnnvkM!NO|>D5davE$G-qhPEIoR%gajuf*>Hh41xVq7vL7Hiy9H| zJa6ha&Lju|_2g0sfL^ahtJPBT_xJbA{y2^?4CAIMcqIXV&1S=9vjO&bj^p^C7UZ?8 zL$+&Py`}_auzwQ0x=qvM{QMjs(|$!MC?eN{fP%bSeBVD-Bnt_B=_wP#Y7_k#9jAvMwykA`C-1oz7Q}{W^iu(^Ce6LFM7LZL7l5>*o3Sxm1SQ zPqI9sD5CCWgnb8nMTtrU`u#otwr#g$AzoZu(Cv2V_xoI5UuS&fm28?OVHm3M(F6e1 zaylUi{nabSMd~Px$SV=@dR9J=8mqBiXFbqXMRd;hAmXYQJT&4S7qF3Prm9m`s%$jZz6j`?O9bnY? zn;9VB$B$!&35K?9`vR~ur{?neP=?RqxQR|rr(+ZP$cKwgaYt=CcvIdr1e@t9s;0( zkLHC7Q1d`qoOAwlZmW(h&KM3rlNLPZ`~*}Nx)7g%z|ZoRo#T}Opd4s|9~u(^Xo?Xv zm!nbvoaW)$uesngA`{@1asiB!2Zi-xD%~lGg8%>k07*qo IM6N<$f?hzfr~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-diona.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-diona.png new file mode 100644 index 0000000000000000000000000000000000000000..fa40e0f2977b3ee9794d3a2fcb228476c62b3247 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}J3U<-Ln2z= zPTt6S$Uwk#zaV$O2FC0;)?o<@*I!1qSTU#Yn7^FC(AmT&@i6!agLY`mG^GjeLdCs* zet+_Zq3^N9x&2O?w9^F*pXTW3zue?fbm6DX^eC?l94{6{$UOB=;FvyZ&01FnONJMW zDz$cP0%g3Frv(Kkyz#K}u=9-bbAybW(a9Q~MWWss9J2xE{pVzhjchF2_ z^3Y_QKmWzutGV~fJtysct<89b$8*)zQ)k-l^DDM|kiK{Kr$zVqOv4_avlu*G{an^L HB{Ts55bjZ* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-human.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-human.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ab3257c583dbeb76012e533a90e386b13dc8ab GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}NuDl_ArY-_ zFBoziFyLW!*v)_X|Ne(JD^80w?b;G>X{DJ-ciwgt9VZu;5QAe33^|&|mwx9n{$1a) z`?2Qi#WxRc4G9g7bT2!Qdv2zlK5xd_OqY%mzop}sOkaO=s=k1rU~VZ>&{WH*w}S)U Q0BvLNboFyt=akR{0LZL8O#lD@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-lizard.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-lizard.png new file mode 100644 index 0000000000000000000000000000000000000000..e53ba99227e429913d603028577ba1464040bb23 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}wVp1HArY-_ zFKy&yR^(}Y_}_@R=do|ZJSM4NXGWpxs$P|DUQ+dQxuegs6`Zqt&i8cAchCQ)Z>?Ar z?ZO}+_-xKHh3lRS4FXJSO&OAU`k&9#zfjG-;M%Xy|5H}wh2C8{<$JMB>OO{=ZE@K% s(`8saG-H!_g1nyXe=?`|+~2#rw1j)78&qol`;+07#lh)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-slime.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-slime.png new file mode 100644 index 0000000000000000000000000000000000000000..87561cb16196846accc1779665c29c31d6a8a06d GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}jh-%!ArY-_ zFYo0&tRUic(ffo_UO&dw=)D4|@R z^Cae<-DiHr%MaHl-&rfj?|q=8f+b^Z?ls>qCO^ZLfcHERpSl~kCIp=dXMf}HcCULw x(5X_!&)MJa&3-TcVCSY8kAHV|bgZdhUOhu{+EOWH9-w0wJYD@<);T3K0RTmdPk#Ua literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-spider.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-spider.png new file mode 100644 index 0000000000000000000000000000000000000000..4939e72c4b55171a84c2f8b6c9130f99d9bc75e5 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}nVv3=ArY-_ zFDUXIFyLW!$o}j4f71Eynyi5VnU12BB^J(?YmR746LoNLd2-t0(@fFuuLbXY%h?%r zSSu|uS!9#2w)LL1$EP{XXV!#Wogw*bj>^f71v95sosws0xOR)7;fzdvm5YnZzqf3S X(~VtjTgTe~DWM4fM$yD*NRG0prEHC#Sqpo_F%hkFxyUA5RJe1%LKR Y#}%2$@m3e+0BvRPboFyt=akR{0Q6fyj{pDw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-vulp.png b/Resources/Textures/Effects/footprints.rsi/footprint-left-bare-vulp.png new file mode 100644 index 0000000000000000000000000000000000000000..32d624812e8ac50965cc29a159b58252558620ab GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}S)MMAArY-_ zFK*;Lpuod&!2h9Y#-9HXc^MK1Sy#%aYVayVdVRSbvFL$3kAUFC=`$nupZ}6jUVmnb z(%P-p7idg6c6ay8uX7(HtJl~FPki}%8rP9^-kR4V*NQSMSarI8me76q)=S_0U0l9M Zs~3ehAM|k3)BxJb;OXk;vd$@?2>>QmLYV*n literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-diona.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-diona.png new file mode 100644 index 0000000000000000000000000000000000000000..21f3a117741b54b3825101703651b0fb0e236d03 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}TRdGHLn2z= zPTt6S$Uwk#zM%F7#_S)*5*n_&lxz?UN^j_S*w)86K|`WJ(9Tun6~(uewe_Ycdt`&+u^S=^B`gdZoR$k53aO4OW#4pCclP|o zDcAo_*y2&;@ynyiTPoW9!e_R$2dsA*7oL>0xF*&jpys)u?*WTV^x1_AnP(n6qqkon_}w(1{$rfFzQ^s!whwA5>3XN=14tZ9;&;&Y16{oOsgbi;SO zhSJzh!&(1#)(i0!$gofP^6u|-?mbb{T5Ip0{rrr{GM(YsoECv~x&dC5?`nDy`OL*D z-q!oR&GtRbJ!fEy|>&mXzkZeHP7c1?|;gY*lF6mI>W95=rjgT LS3j3^P6yZVy@Cw?UlFq_Q`JW$yQQQlJ+n%{&}*{IN7D3(w0I0 z&R!V?YsS3phD+-fOEEA!n{)N!Uxw9?&t;ucLK6TVI6R90 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-lizard.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-lizard.png new file mode 100644 index 0000000000000000000000000000000000000000..e53ba99227e429913d603028577ba1464040bb23 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}wVp1HArY-_ zFKy&yR^(}Y_}_@R=do|ZJSM4NXGWpxs$P|DUQ+dQxuegs6`Zqt&i8cAchCQ)Z>?Ar z?ZO}+_-xKHh3lRS4FXJSO&OAU`k&9#zfjG-;M%Xy|5H}wh2C8{<$JMB>OO{=ZE@K% s(`8saG-H!_g1nyXe=?`|+~2#rw1j)78&qol`;+07#lh)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-slime.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-slime.png new file mode 100644 index 0000000000000000000000000000000000000000..c10fe24f0b0c139e4615a2c66410f41b393af1df GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}O`a}}ArY-_ zFYo4UP!MT-*lfX`9C68dYL2V_ONlp*8+Jzopr0M}kaO8@`> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-swine.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-swine.png new file mode 100644 index 0000000000000000000000000000000000000000..74e678e7bb1e3277d50d7104c666d0b2a86bdc36 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}`JOJ0ArY-_ zFKy&Hpuod&Vet<}zkmO?bMoCRE!yGd^m3V?*X`=+Gpd3Df)n)(jMrV0+db?1z3EOn zm}1n|Z*6)~!ttH0O+vZo+~v}D44SG84%xhlEbogydt5pb;T8F><9+G;UlVnEmi@PB d?C5w?z@+7FCTDxG{s_=&22WQ%mvv4FO#n-=L>~YE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-vulp.png b/Resources/Textures/Effects/footprints.rsi/footprint-right-bare-vulp.png new file mode 100644 index 0000000000000000000000000000000000000000..c63793299cb1f4aa183effde01b31e294bbedf6d GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ii4<#ArY-_ zFB*sL#ZQ9EX4%Ja6Ko3puwQ9)_Z`hcrt>mD|reG_!J z>BoV%wWejlY1cxw_A>S6tZw^mE4cIPx7Q4HucutPsJ)bdq3E2qoyF7F-yQtVJGi)f a$+!00?|kqcyXvKmgzlV#bP0l+XkKYGOFD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/footprint-suit.png b/Resources/Textures/Effects/footprints.rsi/footprint-suit.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc32d343c7b4989d76804ca145da19dd67736d1 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Q$1ZALn2z= zPI2UNR^)M6ED}@2%)0*RUDmHGd7Edx^LiWqr9A4E>*oV!9~@Df(IL^6_{X}>l<7d& z3CmStsjv1Xuicty=yuX_e@s8n(zRQCwU-9O?l539+;OXk;vd$@?2>=|MRyF_t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/footprints.rsi/meta.json b/Resources/Textures/Effects/footprints.rsi/meta.json new file mode 100644 index 00000000000..7e9a1652dea --- /dev/null +++ b/Resources/Textures/Effects/footprints.rsi/meta.json @@ -0,0 +1,83 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CLA", + "copyright": "SUNRISE", + "states": [ + { + "name": "footprint-left-bare-diona" + }, + { + "name": "footprint-left-bare-dwarf" + }, + { + "name": "footprint-left-bare-swine" + }, + { + "name": "footprint-left-bare-vulp" + }, + { + "name": "footprint-left-bare-human" + }, + { + "name": "footprint-left-bare-lizard" + }, + { + "name": "footprint-left-bare-slime" + }, + { + "name": "footprint-left-bare-spider" + }, + { + "name": "footprint-right-bare-diona" + }, + { + "name": "footprint-right-bare-dwarf" + }, + { + "name": "footprint-right-bare-swine" + }, + { + "name": "footprint-right-bare-vulp" + }, + { + "name": "footprint-right-bare-human" + }, + { + "name": "footprint-right-bare-lizard" + }, + { + "name": "footprint-right-bare-slime" + }, + { + "name": "footprint-right-bare-spider" + }, + { + "name": "footprint-shoes" + }, + { + "name": "footprint-suit" + }, + { + "name": "dragging-1" + }, + { + "name": "dragging-2" + }, + { + "name": "dragging-3" + }, + { + "name": "dragging-4" + }, + { + "name": "dragging-5" + }, + { + "name": "dragging-test" + } + ] +}