diff --git a/Content.Shared/DeadSpace/Movement/Component/SpeedSlidingComponent.cs b/Content.Shared/DeadSpace/Movement/Component/SpeedSlidingComponent.cs new file mode 100644 index 0000000000000..982803af3d7b1 --- /dev/null +++ b/Content.Shared/DeadSpace/Movement/Component/SpeedSlidingComponent.cs @@ -0,0 +1,25 @@ +// Мёртвый Космос, Licensed under custom terms with restrictions on public hosting and commercial use, full text: https://raw.githubusercontent.com/dead-space-server/space-station-14-fobos/master/LICENSE.TXT + +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.DeadSpace.Abilities.Slide; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SpeedSlidingComponent : Component +{ + [DataField] + public float MinSlideSpeed = 4.9f; + + [DataField] + public float SlideDistance = 6.5f; + + [DataField] + public float SlideSpeed = 3.5f; + + [DataField] + public SoundSpecifier? SlideSound; + + [ViewVariables] + public bool IsSliding = false; +} \ No newline at end of file diff --git a/Content.Shared/DeadSpace/Movement/System/SpeedSlidingSystem.cs b/Content.Shared/DeadSpace/Movement/System/SpeedSlidingSystem.cs new file mode 100644 index 0000000000000..7a5f0732cc277 --- /dev/null +++ b/Content.Shared/DeadSpace/Movement/System/SpeedSlidingSystem.cs @@ -0,0 +1,62 @@ +// Мёртвый Космос, Licensed under custom terms with restrictions on public hosting and commercial use, full text: https://raw.githubusercontent.com/dead-space-server/space-station-14-fobos/master/LICENSE.TXT + +using Content.Shared.Standing; +using Content.Shared.Stunnable; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Systems; +using Robust.Shared.Network; +using System.Numerics; + +namespace Content.Shared.DeadSpace.Abilities.Slide; + +public sealed class SpeedSlidingSystem : EntitySystem +{ + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly INetManager _net = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnDownAttempt); + } + + private void OnDownAttempt(Entity ent, ref DownAttemptEvent args) + { + if (ent.Comp.IsSliding || args.Cancelled) + return; + + if (!TryComp(ent.Owner, out var physics)) + return; + + var velocity = physics.LinearVelocity; + if (velocity.Length() < ent.Comp.MinSlideSpeed) + return; + + ent.Comp.IsSliding = true; + + try + { + if (_net.IsServer) + { + _stun.TryKnockdown(ent.Owner, TimeSpan.FromSeconds(1.2f), false); + } + + var direction = velocity.Normalized(); + var impulseMagnitude = ent.Comp.SlideSpeed * ent.Comp.SlideDistance * physics.Mass; + var impulse = direction * impulseMagnitude; + + _physics.SetLinearVelocity(ent.Owner, Vector2.Zero); + _physics.ApplyLinearImpulse(ent.Owner, impulse); + + _audio.PlayPredicted(ent.Comp.SlideSound, ent.Owner, ent.Owner); + } + finally + { + ent.Comp.IsSliding = false; + } + } +} \ No newline at end of file diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index 6512bbd7f15a0..58ddf1a160976 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -3,6 +3,7 @@ using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; +using Content.Shared.DeadSpace.Abilities.Slide; // DS14 using Content.Shared.Storage.Components; using Content.Shared.Tag; using Robust.Shared.Containers; @@ -226,6 +227,11 @@ public virtual void DoDrop(Entity ent, if (!Resolve(ent, ref ent.Comp, false)) return; + //DS14-start + if (TryComp(ent, out var slide) && slide.IsSliding) + return; + //DS14-end + if (!ContainerSystem.TryGetContainer(ent, handId, out var container)) return; diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index f03901de00cef..09ac9e6136ca2 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -214,6 +214,7 @@ - DoorBumpOpener - AnomalyHost - type: EmoteAnimation # ADT-Emotes + - type: SpeedSliding # DS14 # DS14-Languages-start - type: Language selectedLanguage: GeneralLanguage diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index eea2d7d237839..f779fd352ecea 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -123,6 +123,9 @@ sprite: Mobs/Species/Human/displacement.rsi state: jumpsuit-female # DS14-start + - type: SpeedSliding + slideDistance: 5.5 + slideSpeed: 2.5 - type: Sanity - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml index 04f611ec00611..20c47bcaeb2c6 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml @@ -6,6 +6,8 @@ name: Urist McBark components: # DS14-start + - type: SpeedSliding + slideDistance: 4 - type: Language selectedLanguage: GeneralLanguage knownLanguages: diff --git a/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/kobolt.yml b/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/kobolt.yml index f764b114646c8..52e9aad89aba8 100644 --- a/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/kobolt.yml +++ b/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/kobolt.yml @@ -107,6 +107,8 @@ knownLanguages: - ReptilianLanguage - GeneralLanguage + - type: SpeedSliding + minSlideSpeed: 5.1 - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/shark.yml b/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/shark.yml index 919a070834789..b633a2c37b786 100644 --- a/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/shark.yml +++ b/Resources/Prototypes/_DeadSpace/Entities/Mobs/Species/shark.yml @@ -44,7 +44,7 @@ types: Heat : 0.1 #per second, scales with temperature & other constants - type: Perishable - - type: Sanity # DS14 + - type: Sanity - type: TypingIndicator proto: plafeim - type: Language @@ -55,6 +55,8 @@ # - type: FootPrints # leftBarePrint: "footprint-left-bare-lizard" # rightBarePrint: "footprint-right-bare-lizard" + - type: SpeedSliding + slideDistance: 8 - type: entity parent: BaseSpeciesDummy