From ec4b9cb49be42b26629ac7951ed90f08107a36b3 Mon Sep 17 00:00:00 2001 From: TGRCDev Date: Sun, 8 Sep 2024 15:50:12 -0700 Subject: [PATCH 1/4] Mucin snail speed is working on spawned puddles --- .../Fluids/Components/PropulsedByComponent.cs | 15 +++++ .../Fluids/Components/PropulsionComponent.cs | 35 ++++++++++ .../Fluids/EntitySystems/PropulsionSystem.cs | 64 +++++++++++++++++++ .../Prototypes/Entities/Effects/puddle.yml | 9 ++- Resources/Prototypes/Reagents/biological.yml | 2 +- 5 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 Content.Shared/Fluids/Components/PropulsedByComponent.cs create mode 100644 Content.Shared/Fluids/Components/PropulsionComponent.cs create mode 100644 Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs diff --git a/Content.Shared/Fluids/Components/PropulsedByComponent.cs b/Content.Shared/Fluids/Components/PropulsedByComponent.cs new file mode 100644 index 00000000000000..7cfe9063b030ce --- /dev/null +++ b/Content.Shared/Fluids/Components/PropulsedByComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Fluids.Components +{ + [RegisterComponent, NetworkedComponent] + public sealed partial class PropulsedByComponent : Component + { + public HashSet> Sources; + + public PropulsedByComponent() + { + Sources = new HashSet>(); + } + } +} \ No newline at end of file diff --git a/Content.Shared/Fluids/Components/PropulsionComponent.cs b/Content.Shared/Fluids/Components/PropulsionComponent.cs new file mode 100644 index 00000000000000..bef8ddc5439bbb --- /dev/null +++ b/Content.Shared/Fluids/Components/PropulsionComponent.cs @@ -0,0 +1,35 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.Fluids.Components +{ + /// + /// This object will speed up the movement speed of entities + /// when collided with + /// + /// Used for mucin + /// + /// This partially replicates SpeedModifierContactsComponent because that + /// component is already heavily coupled with existing puddle code. + /// + [RegisterComponent, NetworkedComponent] + [AutoGenerateComponentState] + public sealed partial class PropulsionComponent : Component + { + [DataField, ViewVariables] + [AutoNetworkedField] + public float WalkSpeedModifier = 1.0f; + + [AutoNetworkedField] + [DataField, ViewVariables] + public float SprintSpeedModifier = 1.0f; + + /// + /// If an entity passes this, apply the speed modifier. + /// Passes all entities if not defined. + /// + [AutoNetworkedField] + [DataField, ViewVariables] + public EntityWhitelist? Whitelist; + } +} diff --git a/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs b/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs new file mode 100644 index 00000000000000..38a3fb9b04ce25 --- /dev/null +++ b/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs @@ -0,0 +1,64 @@ +using System.Linq; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Clothing; +using Content.Shared.Fluids.Components; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Content.Shared.Whitelist; +using Robust.Shared.Physics.Events; + +namespace Content.Shared.Fluids.EntitySystems; + +public sealed class PropulsionSystem : EntitySystem +{ + [Dependency] private readonly SpeedModifierContactsSystem _speedModifier = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnStartCollide); + SubscribeLocalEvent(OnEndCollide); + SubscribeLocalEvent(OnRefreshSpeed); + } + + public void OnComponentInit(Entity ent, ref ComponentInit args) + { + EnsureComp(ent); + } + + public void OnStartCollide(Entity ent, ref StartCollideEvent args) + { + if (!HasComp(args.OtherEntity)) + return; + + if (_whitelistSystem.IsWhitelistFail(ent.Comp.Whitelist, args.OtherEntity)) + return; + + _speedModifier.AddModifiedEntity(args.OtherEntity); + + var propulse = EnsureComp(args.OtherEntity); + propulse.Sources.Add(ent); + } + + public void OnEndCollide(Entity ent, ref EndCollideEvent args) + { + if (TryComp(args.OtherEntity, out var propulse)) + { + propulse.Sources.Remove(ent); + } + } + + public static void OnRefreshSpeed(Entity ent, ref RefreshMovementSpeedModifiersEvent args) + { + ent.Comp.Sources.RemoveWhere((ent) => !ent.Owner.IsValid() || ent.Comp.Deleted); + + if (ent.Comp.Sources.Count == 0) + return; + + var modifier = ent.Comp.Sources.First(); + args.ModifySpeed(modifier.Comp.WalkSpeedModifier, modifier.Comp.SprintSpeedModifier); + } +} diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index 825c68d3cf5241..8ef5e1e3835e71 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -76,9 +76,6 @@ parent: PuddleTemporary suffix: Mucin components: - - type: TimedDespawn - lifetime: 5 - - type: EvaporationSparkle - type: SolutionContainerManager solutions: puddle: @@ -86,6 +83,12 @@ reagents: - ReagentId: Mucin Quantity: 20 + - type: Propulsion + walkSpeedModifier: 2.0 + sprintSpeedModifier: 2.0 + whitelist: + components: + - SnailSpeed - type: entity id: PuddleFlour diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index 3b6215432fce3d..782bf953c351af 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -92,7 +92,7 @@ recognizable: true physicalDesc: reagent-physical-desc-viscous slippery: false - viscosity: -0.5 + viscosity: 0.1 metabolisms: Food: effects: From bf750e4b0e5ad33ad6f39f8889e72cd7e09c8fd4 Mon Sep 17 00:00:00 2001 From: TGRCDev Date: Sun, 8 Sep 2024 16:45:45 -0700 Subject: [PATCH 2/4] Mixed down snailstep to mono --- .../Audio/Effects/Footsteps/snailstep.ogg | Bin 31300 -> 13207 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Audio/Effects/Footsteps/snailstep.ogg b/Resources/Audio/Effects/Footsteps/snailstep.ogg index baa64c211ee1663ee5d0d217f245e5b3d5c72651..0aa236a61750d360de3609cf1dfe48d5759efe6b 100644 GIT binary patch delta 11848 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�Z65o@KHBqO*$pOeE;RbfFMzPhp+aZ0IvNp(V+z6yViCy^yRS^hNHFH4CC=biol9(KUhAmPh9g&;?G%x9Z3W@Q9!Ix4)OZR zAf29vk6OH6Z6FEJ0M-EKt7Sw;-JeKipZK|e^kEX_;vgWliDyanG_DfY>(llt5=pxDs6&g*DXfyqgDBROO16i z5ZxhI2)V_u`>P^?CpVQZQHk3sR~r6JLb9!Gz_ZeJeA1scDn@XQAovf?4$m)(+!0Px zDO-h~zrwI0%p;%gO2{Lrb-w|S0v*Or*%la(FReEdTfZm1KXg4inmGec)ZjnSl zq~e4BlUG^ozIBv{EqzU1)Z^G+EF_Or3PnRBn{05HW~q_nJ2+$I1cLqqox7vYN;y)W z^axJyO`QISf!tMg(6e-NL1fA%3@@;00APHVKQ5Z~MLxbO!Zw?LA< zgk8vudloI=s|p`q1a6%ixeY3Ku05hjyY$?b{}L6Eulm?0>EXz`(H{rf_kbXi?hFObJ~UTVoV+6?`=NE}X>9=EKy<@s;*P z@oW_g(1s5@UHK`hgye{BkKRll^dzOdf9JmUM-Mm%M&oSGihNm?zYeXp#0^g0O1k~2 zTqUvS;}#GMzT9vnye(>xU+E~>FHen{lJz+FJt{!aG=G}BT?+NmJZ<$651FKOsC49+ z{DCwbeLX4labcgnk=&A%kxrrLBNyS*GIpHbpGKXXbhT=bm+gZ7v)tPU+$)G zdKzX&Jxs2s+kT|u%9i96n@zJHdetkRLk6^ex+eae`#VdIZazHa%J1;#>C$*dzR2Hl z;Z|o3@>9vZog=@pUuIUB3KhBo+Ta_4q>7Q3uj=$WBGx+jkTZunbWgM$*4M+TnoDGD zClfafN?Ulp3UZDomj$DP#a~*QLIx_PoB0b#-YMOmUu!g@z<)o{u8i0vg$N3~i}eLs zcPMguAQ|m^p8{{6!o`&eaWlAXxp$N})E90ZhRam9| z-D~S&zJWS^)}Uc-)26$k;%U`Ke4nlXb14qIC%GXwU}(QMH@bd=`&*PoqAlVR6qOW_ z<6(k0r$dIUmuk&FzP>9IdEb)p=#bUwCYfT|rujms{5{_Y>LvbPlP!f@SYe>ZM`Z?{ z;&SwB@xzM#ZW7t*fJULY_fAIWY%6+@nt*P!o5o1$u$YiHujho8Tp(1BMOny1eMIMW UC~hV!MHkJiL#YFwn4>`cFZ<^K$N&HU delta 30089 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 Date: Sun, 8 Sep 2024 16:46:29 -0700 Subject: [PATCH 3/4] Added EnsureTileReaction for adding components and tags to reagent puddles --- .../TileReactions/EnsureTileReaction.cs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Content.Server/Chemistry/TileReactions/EnsureTileReaction.cs diff --git a/Content.Server/Chemistry/TileReactions/EnsureTileReaction.cs b/Content.Server/Chemistry/TileReactions/EnsureTileReaction.cs new file mode 100644 index 00000000000000..7be3803e743afe --- /dev/null +++ b/Content.Server/Chemistry/TileReactions/EnsureTileReaction.cs @@ -0,0 +1,47 @@ +using Content.Server.Fluids.EntitySystems; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Reaction; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Content.Shared.Tag; +using JetBrains.Annotations; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; + +namespace Content.Server.Chemistry.TileReactions +{ + [UsedImplicitly] + [DataDefinition] + public sealed partial class EnsureTileReaction : ITileReaction + { + [DataField, ViewVariables] + public ComponentRegistry Components = new(); + + [DataField, ViewVariables] + public HashSet> Tags = new(); + + [DataField, ViewVariables] + public bool Override = false; + + public FixedPoint2 TileReact(TileRef tile, + ReagentPrototype reagent, + FixedPoint2 reactVolume, + IEntityManager entityManager, + List? data) + { + if (reactVolume < 5) + return FixedPoint2.Zero; + + if (entityManager.EntitySysManager.GetEntitySystem() + .TrySpillAt(tile, new Solution(reagent.ID, reactVolume, data), out var puddleUid, false, false)) + { + entityManager.AddComponents(puddleUid, Components, Override); + entityManager.EntitySysManager.GetEntitySystem().AddTags(puddleUid, Tags); + + return reactVolume; + } + + return FixedPoint2.Zero; + } + } +} From 98803e8439ce3a40e3ac9fb19c13350091672c9a Mon Sep 17 00:00:00 2001 From: TGRCDev Date: Sun, 8 Sep 2024 17:32:25 -0700 Subject: [PATCH 4/4] Mucin now only speeds up snails --- Content.Shared/Fluids/Components/PropulsedByComponent.cs | 8 ++------ Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs | 2 -- Resources/Prototypes/Reagents/biological.yml | 9 ++++++++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Content.Shared/Fluids/Components/PropulsedByComponent.cs b/Content.Shared/Fluids/Components/PropulsedByComponent.cs index 7cfe9063b030ce..4a0f0ea8dd3230 100644 --- a/Content.Shared/Fluids/Components/PropulsedByComponent.cs +++ b/Content.Shared/Fluids/Components/PropulsedByComponent.cs @@ -5,11 +5,7 @@ namespace Content.Shared.Fluids.Components [RegisterComponent, NetworkedComponent] public sealed partial class PropulsedByComponent : Component { - public HashSet> Sources; - - public PropulsedByComponent() - { - Sources = new HashSet>(); - } + [ViewVariables(VVAccess.ReadOnly)] + public HashSet> Sources = new(); } } \ No newline at end of file diff --git a/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs b/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs index 38a3fb9b04ce25..982ae2fa78ed42 100644 --- a/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs +++ b/Content.Shared/Fluids/EntitySystems/PropulsionSystem.cs @@ -1,6 +1,4 @@ using System.Linq; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Clothing; using Content.Shared.Fluids.Components; using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index 782bf953c351af..2c67917033eff1 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -103,7 +103,14 @@ params: volume: 6 tileReactions: - - !type:SpillTileReaction + - !type:EnsureTileReaction + components: + - type: Propulsion + walkSpeedModifier: 2.0 + sprintSpeedModifier: 2.0 + whitelist: + components: + - SnailSpeed - type: reagent id: Sap