From 391b15532a637524006bad0ada53fe06c3526b0c Mon Sep 17 00:00:00 2001 From: Spatison <137375981+Spatison@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:29:36 +0300 Subject: [PATCH] add: FootSteps --- .../FootPrint/FootPrintsVisualizerSystem.cs | 84 +++++++++++ .../_White/FootPrint/FootPrintsSystem.cs | 131 ++++++++++++++++++ .../FootPrint/PuddleFootPrintsSystem.cs | 53 +++++++ .../_White/Footprint/FootPrintComponent.cs | 23 +++ .../_White/Footprint/FootPrintVisuals.cs | 25 ++++ .../_White/Footprint/FootPrintsComponent.cs | 64 +++++++++ .../Footprint/PuddleFootPrintsComponent.cs | 11 ++ .../Prototypes/Entities/Effects/puddle.yml | 1 + .../Entities/Mobs/Player/arachnid.yml | 2 +- .../Prototypes/Entities/Mobs/Player/human.yml | 2 +- .../Entities/Mobs/Species/arachne.yml | 5 + .../Entities/Mobs/Species/arachnid.yml | 3 + .../Entities/Mobs/Species/diona.yml | 5 + .../Entities/Mobs/Species/dwarf.yml | 5 + .../Entities/Mobs/Species/harpy.yml | 5 + .../Entities/Mobs/Species/human.yml | 1 + .../Prototypes/Entities/Mobs/Species/moth.yml | 1 + .../Entities/Mobs/Species/reptilian.yml | 5 + .../Entities/Mobs/Species/skeleton.yml | 1 + .../Entities/Mobs/Species/slime.yml | 5 + .../Prototypes/Entities/Mobs/Species/vox.yml | 3 + .../_White/Entities/Effects/puddle.yml | 37 +++++ .../Effects/footprints.rsi/dragging-1.png | Bin 0 -> 591 bytes .../Effects/footprints.rsi/dragging-2.png | Bin 0 -> 563 bytes .../Effects/footprints.rsi/dragging-3.png | Bin 0 -> 615 bytes .../Effects/footprints.rsi/dragging-4.png | Bin 0 -> 504 bytes .../Effects/footprints.rsi/dragging-5.png | Bin 0 -> 558 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-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 .../footprints.rsi/footprint-shoes.png | Bin 0 -> 146 bytes .../Effects/footprints.rsi/footprint-suit.png | Bin 0 -> 219 bytes .../_White/Effects/footprints.rsi/meta.json | 71 ++++++++++ 43 files changed, 541 insertions(+), 2 deletions(-) create mode 100644 Content.Client/_White/FootPrint/FootPrintsVisualizerSystem.cs create mode 100644 Content.Server/_White/FootPrint/FootPrintsSystem.cs create mode 100644 Content.Server/_White/FootPrint/PuddleFootPrintsSystem.cs create mode 100644 Content.Shared/_White/Footprint/FootPrintComponent.cs create mode 100644 Content.Shared/_White/Footprint/FootPrintVisuals.cs create mode 100644 Content.Shared/_White/Footprint/FootPrintsComponent.cs create mode 100644 Content.Shared/_White/Footprint/PuddleFootPrintsComponent.cs create mode 100644 Resources/Prototypes/_White/Entities/Effects/puddle.yml create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/dragging-1.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/dragging-2.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/dragging-3.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/dragging-4.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/dragging-5.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/dragging-test.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-left-bare-diona.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-left-bare-dwarf.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-left-bare-human.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-left-bare-lizard.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-left-bare-slime.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-left-bare-spider.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-right-bare-diona.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-right-bare-dwarf.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-right-bare-human.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-right-bare-lizard.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-right-bare-slime.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-right-bare-spider.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-shoes.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/footprint-suit.png create mode 100644 Resources/Textures/_White/Effects/footprints.rsi/meta.json diff --git a/Content.Client/_White/FootPrint/FootPrintsVisualizerSystem.cs b/Content.Client/_White/FootPrint/FootPrintsVisualizerSystem.cs new file mode 100644 index 0000000000..676ecc117e --- /dev/null +++ b/Content.Client/_White/FootPrint/FootPrintsVisualizerSystem.cs @@ -0,0 +1,84 @@ +using Content.Shared._White.FootPrint; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Random; + +namespace Content.Client._White.FootPrint; + +public sealed class FootPrintsVisualizerSystem : VisualizerSystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInitialized); + SubscribeLocalEvent(OnShutdown); + } + + private void OnInitialized(EntityUid uid, FootPrintComponent comp, ComponentInit args) + { + if (!TryComp(uid, out var sprite)) + return; + + sprite.LayerMapReserveBlank(FootPrintVisualLayers.Print); + UpdateAppearance(uid, comp, sprite); + } + + private void OnShutdown(EntityUid uid, FootPrintComponent comp, ComponentShutdown args) + { + if (TryComp(uid, out var sprite) && + sprite.LayerMapTryGet(FootPrintVisualLayers.Print, out var layer)) + { + sprite.RemoveLayer(layer); + } + } + + private void UpdateAppearance(EntityUid uid, FootPrintComponent component, SpriteComponent sprite) + { + if (!sprite.LayerMapTryGet(FootPrintVisualLayers.Print, out var layer) + || !TryComp(component.PrintOwner, out var printsComponent) + || !TryComp(uid, out var appearance)) + return; + + if (_appearance.TryGetData(uid, FootPrintVisualState.State, out var printVisuals, appearance)) + { + switch (printVisuals) + { + case FootPrintVisuals.BareFootPrint: + sprite.LayerSetState(layer, + printsComponent.RightStep + ? new RSI.StateId(printsComponent.RightBarePrint) + : new RSI.StateId(printsComponent.LeftBarePrint), + printsComponent.RsiPath); + break; + case FootPrintVisuals.ShoesPrint: + sprite.LayerSetState(layer, new RSI.StateId(printsComponent.ShoesPrint), printsComponent.RsiPath); + break; + case FootPrintVisuals.SuitPrint: + sprite.LayerSetState(layer, new RSI.StateId(printsComponent.SuitPrint), printsComponent.RsiPath); + break; + case FootPrintVisuals.Dragging: + sprite.LayerSetState(layer, new RSI.StateId(_random.Pick(printsComponent.DraggingPrint)), printsComponent.RsiPath); + break; + default: + throw new ArgumentOutOfRangeException($"Unknown {printVisuals} parameter."); + } + } + + if (!_appearance.TryGetData(uid, FootPrintVisualState.Color, out var printColor, appearance)) + return; + + sprite.LayerSetColor(layer, printColor); + } + + protected override void OnAppearanceChange (EntityUid uid, FootPrintComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite is not { } sprite) + return; + + UpdateAppearance(uid, component, sprite); + } +} diff --git a/Content.Server/_White/FootPrint/FootPrintsSystem.cs b/Content.Server/_White/FootPrint/FootPrintsSystem.cs new file mode 100644 index 0000000000..fbe903b826 --- /dev/null +++ b/Content.Server/_White/FootPrint/FootPrintsSystem.cs @@ -0,0 +1,131 @@ +using Content.Server.Atmos.Components; +using Content.Shared.Inventory; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared._White.FootPrint; +using Content.Shared.Standing; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server._White.FootPrint; + +public sealed class FootPrintsSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly IMapManager _map = default!; + + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private EntityQuery _transformQuery; + private EntityQuery _mobThresholdQuery; + private EntityQuery _appearanceQuery; + private EntityQuery _layingQuery; + + public override void Initialize() + { + base.Initialize(); + + _transformQuery = GetEntityQuery(); + _mobThresholdQuery = GetEntityQuery(); + _appearanceQuery = GetEntityQuery(); + _layingQuery = GetEntityQuery(); + + SubscribeLocalEvent(OnStartupComponent); + SubscribeLocalEvent(OnMove); + } + + private void OnStartupComponent(EntityUid uid, FootPrintsComponent comp, ComponentStartup args) + { + comp.StepSize += _random.NextFloat(-0.05f, 0.05f); + } + + private void OnMove(EntityUid uid, FootPrintsComponent comp, ref MoveEvent args) + { + if (comp.PrintsColor.A <= 0f + || !_transformQuery.TryComp(uid, out var transform) + || !_mobThresholdQuery.TryComp(uid, out var mobThreshHolds) + || !_map.TryFindGridAt(_transform.GetMapCoordinates((uid, transform)), out var gridUid, out _)) + return; + + var dragging = mobThreshHolds.CurrentThresholdState is MobState.Critical or MobState.Dead || _layingQuery.TryComp(uid, out var laying) && laying.IsCrawlingUnder; + var distance = (transform.LocalPosition - comp.StepPos).Length(); + var stepSize = dragging ? comp.DragSize : comp.StepSize; + + if (!(distance > stepSize)) + return; + + comp.RightStep = !comp.RightStep; + + var entity = Spawn(comp.StepProtoId, CalcCoords(gridUid, comp, transform, dragging)); + var footPrintComponent = Comp(entity); // There's NO way there's no footprint commponent in a FOOTPRINT + + footPrintComponent.PrintOwner = uid; + Dirty(entity, footPrintComponent); + + if (_appearanceQuery.TryComp(entity, out var appearance)) + { + _appearance.SetData(entity, FootPrintVisualState.State, PickState(uid, dragging), appearance); + _appearance.SetData(entity, FootPrintVisualState.Color, comp.PrintsColor, appearance); + } + + if (!_transformQuery.TryComp(entity, out var stepTransform)) + return; + + stepTransform.LocalRotation = dragging + ? (transform.LocalPosition - comp.StepPos).ToAngle() + Angle.FromDegrees(-90f) + : transform.LocalRotation + Angle.FromDegrees(180f); + + comp.PrintsColor = comp.PrintsColor.WithAlpha(ReduceAlpha(comp.PrintsColor.A, comp.ColorReduceAlpha)); + comp.StepPos = transform.LocalPosition; + + if (!TryComp(entity, out var solutionContainer) + || !_solution.ResolveSolution((entity, solutionContainer), footPrintComponent.SolutionName, ref footPrintComponent.Solution, out var solution) + || string.IsNullOrWhiteSpace(comp.ReagentToTransfer) || solution.Volume >= 1) + return; + + _solution.TryAddReagent(footPrintComponent.Solution.Value, comp.ReagentToTransfer, 1, out _); + } + + private EntityCoordinates CalcCoords(EntityUid uid, FootPrintsComponent comp, TransformComponent transform, bool state) + { + if (state) + return new EntityCoordinates(uid, transform.LocalPosition); + + var offset = comp.RightStep + ? new Angle(Angle.FromDegrees(180f) + transform.LocalRotation).RotateVec(comp.OffsetPrint) + : new Angle(transform.LocalRotation).RotateVec(comp.OffsetPrint); + + return new EntityCoordinates(uid, transform.LocalPosition + offset); + } + + private FootPrintVisuals PickState(EntityUid uid, bool dragging) + { + var state = FootPrintVisuals.BareFootPrint; + + if (_inventory.TryGetSlotEntity(uid, "shoes", out _)) + state = FootPrintVisuals.ShoesPrint; + + if (_inventory.TryGetSlotEntity(uid, "outerClothing", out var suit) && TryComp(suit, out _)) + state = FootPrintVisuals.SuitPrint; + + if (dragging) + state = FootPrintVisuals.Dragging; + + return state; + } + + private float ReduceAlpha(float alpha, float reductionAmount) + { + if (alpha - reductionAmount > 0f) + alpha -= reductionAmount; + else + alpha = 0f; + + return alpha; + } +} diff --git a/Content.Server/_White/FootPrint/PuddleFootPrintsSystem.cs b/Content.Server/_White/FootPrint/PuddleFootPrintsSystem.cs new file mode 100644 index 0000000000..e3a8555dab --- /dev/null +++ b/Content.Server/_White/FootPrint/PuddleFootPrintsSystem.cs @@ -0,0 +1,53 @@ +using System.Linq; +using Content.Shared._White.FootPrint; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Fluids; +using Content.Shared.Fluids.Components; +using Robust.Shared.Physics.Events; + +namespace Content.Server._White.FootPrint; + +public sealed class PuddleFootPrintsSystem : EntitySystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnStepTrigger); + } + + private void OnStepTrigger(EntityUid uid, PuddleFootPrintsComponent comp, ref EndCollideEvent args) + { + if (!TryComp(uid, out var appearance) + || !TryComp(uid, out var puddle) + || !TryComp(args.OtherEntity, out var tripper) + || !TryComp(uid, out var solutionManager) + ||!_solutionContainer.ResolveSolution((uid, solutionManager), puddle.SolutionName, ref puddle.Solution, out var solutions)) + return; + + // alles gut! + var totalSolutionQuantity = solutions.Contents.Sum(sol => (float)sol.Quantity); + var waterQuantity = (from sol in solutions.Contents where sol.Reagent.Prototype == "Water" select (float) sol.Quantity).FirstOrDefault(); + + if (waterQuantity / (totalSolutionQuantity / 100f) > comp.OffPercent || solutions.Contents.Count <= 0) + return; + + tripper.ReagentToTransfer = + solutions.Contents.Aggregate((l, r) => l.Quantity > r.Quantity ? l : r).Reagent.Prototype; + + if (_appearance.TryGetData(uid, PuddleVisuals.SolutionColor, out var color, appearance) + && _appearance.TryGetData(uid, PuddleVisuals.CurrentVolume, out var volume, appearance)) + AddColor((Color)color, (float)volume * comp.SizeRatio, tripper); + + _solutionContainer.RemoveEachReagent(puddle.Solution.Value, 1); + } + + private void AddColor(Color col, float quantity, FootPrintsComponent comp) + { + comp.PrintsColor = comp.ColorQuantity == 0f ? col : Color.InterpolateBetween(comp.PrintsColor, col, 0.2f); + comp.ColorQuantity += quantity; + } +} diff --git a/Content.Shared/_White/Footprint/FootPrintComponent.cs b/Content.Shared/_White/Footprint/FootPrintComponent.cs new file mode 100644 index 0000000000..85e9207086 --- /dev/null +++ b/Content.Shared/_White/Footprint/FootPrintComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.Chemistry.Components; +using Robust.Shared.GameStates; + +namespace Content.Shared._White.FootPrint; + +/// +/// This is used for marking footsteps, handling footprint drawing. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FootPrintComponent : Component +{ + /// + /// Owner (with ) of a print (this component). + /// + [AutoNetworkedField] + public EntityUid PrintOwner; + + [DataField] + public string SolutionName = "step"; + + [DataField] + public Entity? Solution; +} diff --git a/Content.Shared/_White/Footprint/FootPrintVisuals.cs b/Content.Shared/_White/Footprint/FootPrintVisuals.cs new file mode 100644 index 0000000000..f35e93ce96 --- /dev/null +++ b/Content.Shared/_White/Footprint/FootPrintVisuals.cs @@ -0,0 +1,25 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared._White.FootPrint; + +[Serializable, NetSerializable] +public enum FootPrintVisuals : byte +{ + BareFootPrint, + ShoesPrint, + SuitPrint, + Dragging +} + +[Serializable, NetSerializable] +public enum FootPrintVisualState : byte +{ + State, + Color +} + +[Serializable, NetSerializable] +public enum FootPrintVisualLayers : byte +{ + Print +} diff --git a/Content.Shared/_White/Footprint/FootPrintsComponent.cs b/Content.Shared/_White/Footprint/FootPrintsComponent.cs new file mode 100644 index 0000000000..05fd07e371 --- /dev/null +++ b/Content.Shared/_White/Footprint/FootPrintsComponent.cs @@ -0,0 +1,64 @@ +using System.Numerics; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared._White.FootPrint; + +[RegisterComponent] +public sealed partial class FootPrintsComponent : Component +{ + [ViewVariables(VVAccess.ReadOnly), DataField] + public ResPath RsiPath = new("/Textures/_White/Effects/footprints.rsi"); + + // all of those are set as a layer + [ViewVariables(VVAccess.ReadOnly), DataField] + public string LeftBarePrint = "footprint-left-bare-human"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string RightBarePrint = "footprint-right-bare-human"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string ShoesPrint = "footprint-shoes"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string SuitPrint = "footprint-suit"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public string[] DraggingPrint = + [ + "dragging-1", + "dragging-2", + "dragging-3", + "dragging-4", + "dragging-5", + ]; + // yea, those + + [ViewVariables(VVAccess.ReadOnly), DataField] + public EntProtoId StepProtoId = "Footstep"; + + [ViewVariables(VVAccess.ReadOnly), DataField] + public Color PrintsColor = Color.FromHex("#00000000"); + + [DataField] + public float StepSize = 0.7f; + + [DataField] + public float DragSize = 0.5f; + + [DataField] + public float ColorQuantity; + + [DataField] + public float ColorReduceAlpha = 0.1f; + + [DataField] + public string? ReagentToTransfer; + + [DataField] + public Vector2 OffsetPrint = new(0.1f, 0f); + + public bool RightStep = true; + + public Vector2 StepPos = Vector2.Zero; +} diff --git a/Content.Shared/_White/Footprint/PuddleFootPrintsComponent.cs b/Content.Shared/_White/Footprint/PuddleFootPrintsComponent.cs new file mode 100644 index 0000000000..27e8606904 --- /dev/null +++ b/Content.Shared/_White/Footprint/PuddleFootPrintsComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared._White.FootPrint; + +[RegisterComponent] +public sealed partial class PuddleFootPrintsComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite)] + public float SizeRatio = 0.2f; + + [ViewVariables(VVAccess.ReadWrite)] + public float OffPercent = 80f; +} diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index 6a29a8af45..0d2c49d5c9 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -166,3 +166,4 @@ solution: puddle - type: BadDrink - type: IgnoresFingerprints + - type: PuddleFootPrints # WD EDIT diff --git a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml index d9dea3c18d..2cb3a3da3e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml @@ -10,4 +10,4 @@ Asphyxiation: 1.5 # This makes space and crit more lethal to arachnids. damageRecovery: types: - Asphyxiation: -0.5 + Asphyxiation: -0.5 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index aa87f81a83..6438d9f649 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -3,7 +3,7 @@ name: Urist McHands parent: BaseMobHuman id: MobHuman - + #Syndie - type: entity parent: MobHuman diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml index 24ebafd91d..8cdd16aeef 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml @@ -135,6 +135,11 @@ fireStackAlternateState: 3 - type: Spider - type: IgnoreSpiderWeb + # WD EDIT START + - type: FootPrints + leftBarePrint: "footprint-left-bare-spider" + rightBarePrint: "footprint-right-bare-spider" + # WD EDIT END - type: entity save: false diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index b5c450ba1d..3e10932dba 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -130,6 +130,9 @@ # White Dream Start - transfer features from Arachne - type: Spider - type: IgnoreSpiderWeb + - type: FootPrints + leftBarePrint: "footprint-left-bare-spider" + rightBarePrint: "footprint-right-bare-spider" # White Dream End - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 113151ad08..da4634833a 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -120,6 +120,11 @@ whitelist: types: - Shard + # WD EDIT START + - type: FootPrints + leftBarePrint: "footprint-left-bare-diona" + rightBarePrint: "footprint-right-bare-diona" + # WD EDIT END - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml index aff836bec4..21d2900a11 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml @@ -66,6 +66,11 @@ boozeStrengthMultiplier: 0.5 - type: Stamina # White Dream: Make dwarfs a bit more durable. critThreshold: 115 + # WD EDIT START + - type: FootPrints + leftBarePrint: "footprint-left-bare-dwarf" + rightBarePrint: "footprint-right-bare-dwarf" + # WD EDIT END - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml index ce87e10549..a0ba9b77c3 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml @@ -127,6 +127,11 @@ - Shard - Landmine - Mousetrap + # WD EDIT START + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" + # WD EDIT END - type: entity save: false diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 013789cd2b..15d71016c7 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -28,6 +28,7 @@ understands: - TauCetiBasic - SolCommon + - type: FootPrints # WD EDIT - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml index fef380d1d5..30067d38bb 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -122,6 +122,7 @@ sprite: "Effects/creampie.rsi" state: "creampie_moth" visible: false + - type: FootPrints # WD EDIT - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index b27b4c6029..8c55272403 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -66,6 +66,11 @@ understands: - TauCetiBasic - Draconic + # WD EDIT START + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" + # WD EDIT END - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index 28ea5b030f..ca11d94d87 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -102,6 +102,7 @@ probability: 0.5 - type: FireVisuals alternateState: Standing + - type: FootPrints # WD EDIT - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index 1e2924ca82..0972d6c782 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -119,6 +119,11 @@ understands: - TauCetiBasic - Bubblish + # WD EDIT START + - type: FootPrints + leftBarePrint: "footprint-left-bare-slime" + rightBarePrint: "footprint-right-bare-slime" + # WD EDIT END - type: entity parent: MobHumanDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml index ec8035563b..58e2b3b646 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -102,6 +102,9 @@ sprite: "Effects/creampie.rsi" state: "creampie_vox" # Not default visible: false + - type: FootPrints + leftBarePrint: "footprint-left-bare-lizard" + rightBarePrint: "footprint-right-bare-lizard" - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/_White/Entities/Effects/puddle.yml b/Resources/Prototypes/_White/Entities/Effects/puddle.yml new file mode 100644 index 0000000000..3a726e10fb --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Effects/puddle.yml @@ -0,0 +1,37 @@ +- type: entity + name: Footstep + id: Footstep + save: false + description: Trace of liquid + components: + - type: Clickable + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepWater + params: + volume: 3 + - type: Transform + noRot: false + - type: Sprite + drawdepth: FloorObjects + color: "#FFFFFF80" + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + slipFixture: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + mask: + - ItemMask + layer: + - SlipLayer + hard: false + - type: SolutionContainerManager + solutions: + step: { maxVol: 2 } + - type: FootPrint + - type: Puddle + solution: step + - type: Appearance \ No newline at end of file diff --git a/Resources/Textures/_White/Effects/footprints.rsi/dragging-1.png b/Resources/Textures/_White/Effects/footprints.rsi/dragging-1.png new file mode 100644 index 0000000000000000000000000000000000000000..74d2aeb0743125350069ff66773c5083326555ff GIT binary patch literal 591 zcmV-V0Px%2}wjjR9J=0SG#fJFc5v~@mQ(>i8v~O${Dx-M`RJch@~j9iV&kKz=0GCC1`*| zHHfFt-~tmqXoVjwd3-P75DQ}8?!E;;;Dzuz^hoNt8B9K7M2OKhWE{Pxk7UdhaYpp}k*Nn{92ypNPXR}$* z+2L@=T{errRjLPcuH6@LP8LRKz%DqHgcJLGKOT=)W1|QdW7dPSiaX$Xu<7Q{TzCmM zJ-lIyUPQFt@2%5hq@xH}@ETf&KJx(Ed;&;k0ApQHO3edvd08DpU<-i1T)~)ZZes8`#V&U0bNy9 z$s;*cf@BS2ST2`eKMesuDfI#Xr_;+&+)hylvYR5jC+J@;%z{rdCag5co)c%vP4AeI0!-NNPYS^%A+;b(RDtx!G)@ zr(iY#4(rHQ`Px$?MXyIR9J=OmpzWcFc5`bwjoG#NVX*;a+2g0sn~vVq@~YRz6G3wNJzHpNZ=}4 zAfsUXM}oH5SE0e4`R0usCBT1IHfOUCqBXx6W1nvYD9h3rKO7DN07xl+0Dw}u1AwZk zG63M5w{>0LVUEY+6s|{*vMeElXa`GnObF4MnAsQ8N33{Aru#Vx0{C<~ot$w>>CT3V zH8Bam1=RQbLyU9YdX~Qqz&USycKh7WTJKUIya2X!zCv>qbs*HeZTnc;?e;wYK1nH` zVoE8eQ=x+x1Tfv7&*uqxHzI^2+aCn5W!&%;_GuV~#xyep;Ng|l1Qg4WGy*AQ1IrB`%or$EJQ=_zQ*6!{q5wrvWaCbK(1reEG+?~fpvp9=s0002ovPDHLkV1i%0 B_D=u+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_White/Effects/footprints.rsi/dragging-3.png b/Resources/Textures/_White/Effects/footprints.rsi/dragging-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f7274dd3c0ed0a8aaf2d10114e96917e78a3f7 GIT binary patch literal 615 zcmV-t0+{`YP)Px%AxT6*R9J=Wm(7Z+Fcim+!+;9nreLInx|+wZZ{fVK z$K$cnc3rmxg1{yhtN;ihIa;i$u4^dEvUkjKxwLX^5CF-2-_K8{Q|G%7qSIHFWy_r) z2!Jt0$6Oe7fKn>;3ZR|7IcsV@<;JWTs?~9_SskEOdQ9% z&1U1Mm(nZ%9YzJggxHs5*$&{(KO#bi)1Bc5>Nk`70ue$P*4O|5002ovPDHLkV1k|! B8~6YK literal 0 HcmV?d00001 diff --git a/Resources/Textures/_White/Effects/footprints.rsi/dragging-4.png b/Resources/Textures/_White/Effects/footprints.rsi/dragging-4.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb34b5d5708e656752f60d2fa245aaf270f5925 GIT binary patch literal 504 zcmVPx$vPnciR9J=WRxxhFFbupF1T<*$;xS9VkR|X3vTJho=1K9MOxp7Sqkr*|EgAyD zK!=8f;#w9Zd+Y&0B#S1GM^P5=k3@7`cb*#O;(e)ur9|Fh231wP%&oP4upNLeo|I*I zNF_kApw`;6G3GD|{s90)v;nYT+pg;X0LGYu|6bd+K?33uaBw23iD*kiTYp_C^~ZKR z&L+T4wAS_geuq*D<9`4chN1Re+ev({vI!Y|--C$ixMcb8!!T@CAprbHD_P4?Axc0Z|CoqU>g8O>CXm`v zIS3Mvv``F^{WGh8R7M|MibW-`)_(HAQxrvZi%Is+szUjjQ)`@+pPeMrBm$uu%#uJ!1f~M-_xs@eF{IXN1SD|I9dpVOBv6)R<2(1q z<9RAsAJI1SrFYI6{R%?BN0J9|+*PXA~Pcoc&>&;u= uX39qrfjO`e#+ZhG{+e^{5)1wh0Qd$W5WavLR`q-U0000Px$=t)FDR9J=WS38dCFcdwB9v@4{1&t{XJ8^cAD$_Gd$}Hej?1JnhmEBN8P#{Cz z6vK@i<9y7(lSY~&Malhe@8N#(0eO$kjT?Q#->i~c>O+TcRO(G#g zPKn8f{7FapU;>2QZnyQxl$_44-&k}KumifmIp;ZDmt|?o(nqAP3WF8!kz$Os^o%hg zQS|-pI|QV4&dajAb6||Y7<1Q-q1FUdfH0fQg8b7o{dfui##q*8uj{%s52P;&Z)d^? zaL)6|WHRV?I-Q#9F`Lm#zz)C|YliQ9J~uv##RB$B#Btor0&Z1!XbbGVU9VSf>9y7{ z#x(L~v$4&E8z+ds4HAI7TrRy%?oh7RYwt!pLIBh0G>c=un-IdQKO7Ep**$$@3C!p7 zA(wBV_g2g~&x|ps>pD2Fvy$Ni0HCTWR8`f|*&6_Kw_z;$2;{)mKXIn}PIgHV+-F88 zfu~@o4ZQ>&Dev)kY{^4acu578%jIa_m$ks2ll^}G@4pimi(mro2E3fWvlF_Ax(rIG zExqvqfY$mi00<#6S4XgIcZs6No9j;qTYNoSvRm?Z*Qm8FY|>*e>U|)JqG+{Ry#YXy wBvFziot4vCztdssLP&L@>(k5qMEgPx$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/_White/Effects/footprints.rsi/footprint-left-bare-diona.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/footprint-left-bare-human.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/footprint-left-bare-lizard.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/footprint-left-bare-slime.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/footprint-left-bare-spider.png b/Resources/Textures/_White/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$6~(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/_White/Effects/footprints.rsi/footprint-right-bare-lizard.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/footprint-right-bare-slime.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/footprint-shoes.png b/Resources/Textures/_White/Effects/footprints.rsi/footprint-shoes.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf329a9b6fe8ddc5af18ec0b463c3a621a252a4 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJNKY5Xkcv5PFKy&HV8Fq0Vafmh zlXrQUZRfbId0}1DtD^kt)<+CGIy$%*65jVtD-dkl{rJaT2Dvjju?b;Zd&JJpyf;-$ v@agCHn+JvWT$5UL>vKmgzlV#bP0l+XkKYGOFD literal 0 HcmV?d00001 diff --git a/Resources/Textures/_White/Effects/footprints.rsi/footprint-suit.png b/Resources/Textures/_White/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/_White/Effects/footprints.rsi/meta.json b/Resources/Textures/_White/Effects/footprints.rsi/meta.json new file mode 100644 index 0000000000..0ce2e096ac --- /dev/null +++ b/Resources/Textures/_White/Effects/footprints.rsi/meta.json @@ -0,0 +1,71 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "IMPERIAL SPACE", + "states": [ + { + "name": "footprint-left-bare-diona" + }, + { + "name": "footprint-left-bare-dwarf" + }, + { + "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-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" + } + ] +}