Crawling Fixes Part 4: Can't crawl when weightless. (#39099)

* Init Commit

* Typos

* Commit 2

* Save Interaction Test Mob from failing

* ssss

* Confident I've gotten all the correct prototypes

* Whoops forgot to edit those

* aaaaa

* Better solution

* Test fail fixes

* Yaml fix

* THE FINAL TEST FIX

* Final fix(?)

* whoops

* Added a WeightlessnessChangedEvent

* Check out this diff

* Wait I'm dumb

* Final optimization and don't duplicate code

* Death to IsWeightless

* Moth directed targeted attack

* A

* Bugfixes and such

* Grrr

* Death

* Cleanup

* Cleanup 2

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
Princess Cheeseballs
2025-08-19 12:18:05 -07:00
committed by GitHub
parent 9de76e70c7
commit da23bc9dcc
2 changed files with 31 additions and 1 deletions

View File

@@ -22,7 +22,7 @@ internal sealed class StunOnCollideSystem : EntitySystem
private void TryDoCollideStun(Entity<StunOnCollideComponent> ent, EntityUid target) private void TryDoCollideStun(Entity<StunOnCollideComponent> ent, EntityUid target)
{ {
_stunSystem.TryKnockdown(target, ent.Comp.KnockdownAmount, ent.Comp.Refresh, ent.Comp.AutoStand, ent.Comp.Drop); _stunSystem.TryKnockdown(target, ent.Comp.KnockdownAmount, ent.Comp.Refresh, ent.Comp.AutoStand, ent.Comp.Drop, true);
if (ent.Comp.Refresh) if (ent.Comp.Refresh)
{ {

View File

@@ -4,6 +4,7 @@ using Content.Shared.Damage;
using Content.Shared.Damage.Components; using Content.Shared.Damage.Components;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Gravity;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Input; using Content.Shared.Input;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
@@ -60,6 +61,9 @@ public abstract partial class SharedStunSystem
// Crawling // Crawling
SubscribeLocalEvent<CrawlerComponent, KnockedDownRefreshEvent>(OnKnockdownRefresh); SubscribeLocalEvent<CrawlerComponent, KnockedDownRefreshEvent>(OnKnockdownRefresh);
SubscribeLocalEvent<CrawlerComponent, DamageChangedEvent>(OnDamaged); SubscribeLocalEvent<CrawlerComponent, DamageChangedEvent>(OnDamaged);
SubscribeLocalEvent<KnockedDownComponent, WeightlessnessChangedEvent>(OnWeightlessnessChanged);
SubscribeLocalEvent<GravityAffectedComponent, KnockDownAttemptEvent>(OnKnockdownAttempt);
SubscribeLocalEvent<GravityAffectedComponent, GetStandUpTimeEvent>(OnGetStandUpTime);
// Handling Alternative Inputs // Handling Alternative Inputs
SubscribeAllEvent<ForceStandUpEvent>(OnForceStandup); SubscribeAllEvent<ForceStandUpEvent>(OnForceStandup);
@@ -488,6 +492,32 @@ public abstract partial class SharedStunSystem
args.SpeedModifier *= entity.Comp.SpeedModifier; args.SpeedModifier *= entity.Comp.SpeedModifier;
} }
private void OnWeightlessnessChanged(Entity<KnockedDownComponent> entity, ref WeightlessnessChangedEvent args)
{
// I probably don't need this check since weightless -> non-weightless you shouldn't be knocked down
// But you never know.
if (!args.Weightless)
return;
// Targeted moth attack
CancelKnockdownDoAfter((entity, entity.Comp));
RemComp<KnockedDownComponent>(entity);
}
private void OnKnockdownAttempt(Entity<GravityAffectedComponent> entity, ref KnockDownAttemptEvent args)
{
// Directed, targeted moth attack.
if (entity.Comp.Weightless)
args.Cancelled = true;
}
private void OnGetStandUpTime(Entity<GravityAffectedComponent> entity, ref GetStandUpTimeEvent args)
{
// Get up instantly if weightless
if (entity.Comp.Weightless)
args.DoAfterTime = TimeSpan.Zero;
}
#endregion #endregion
#region Action Blockers #region Action Blockers