diff --git a/Content.Client/Arcade/BlockGameMenu.cs b/Content.Client/Arcade/BlockGameMenu.cs index eeda2a3102..3edbaba952 100644 --- a/Content.Client/Arcade/BlockGameMenu.cs +++ b/Content.Client/Arcade/BlockGameMenu.cs @@ -375,7 +375,7 @@ private Control SetupGameGrid(Texture panelTex) { PanelOverride = back, HorizontalExpand = true, - SizeFlagsStretchRatio = 60 + SizeFlagsStretchRatio = 34.25f }; var backgroundPanel = new PanelContainer { diff --git a/Content.Client/Buckle/BuckleSystem.cs b/Content.Client/Buckle/BuckleSystem.cs index 4429996aca..c26976ffbe 100644 --- a/Content.Client/Buckle/BuckleSystem.cs +++ b/Content.Client/Buckle/BuckleSystem.cs @@ -15,9 +15,41 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnHandleState); SubscribeLocalEvent(OnAppearanceChange); SubscribeLocalEvent(OnStrapMoveEvent); + SubscribeLocalEvent(OnBuckledEvent); + SubscribeLocalEvent(OnUnbuckledEvent); + } + + /// + /// Is the strap entity already rotated north? Lower the draw depth of the buckled entity. + /// + private void OnBuckledEvent(Entity ent, ref BuckledEvent args) + { + if (!TryComp(args.Strap, out var strapSprite) || + !TryComp(ent.Owner, out var buckledSprite)) + return; + + if (Transform(args.Strap.Owner).LocalRotation.GetCardinalDir() == Direction.North) + { + ent.Comp.OriginalDrawDepth ??= buckledSprite.DrawDepth; + buckledSprite.DrawDepth = strapSprite.DrawDepth - 1; + } + } + + /// + /// Was the draw depth of the buckled entity lowered? Reset it upon unbuckling. + /// + private void OnUnbuckledEvent(Entity ent, ref UnbuckledEvent args) + { + if (!TryComp(ent.Owner, out var buckledSprite)) + return; + + if (ent.Comp.OriginalDrawDepth.HasValue) + { + buckledSprite.DrawDepth = ent.Comp.OriginalDrawDepth.Value; + ent.Comp.OriginalDrawDepth = null; + } } private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveEvent args) @@ -57,21 +89,6 @@ private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveE } } - private void OnHandleState(Entity ent, ref ComponentHandleState args) - { - if (args.Current is not BuckleState state) - return; - - ent.Comp.DontCollide = state.DontCollide; - ent.Comp.BuckleTime = state.BuckleTime; - var strapUid = EnsureEntity(state.BuckledTo, ent); - - SetBuckledTo(ent, strapUid == null ? null : new (strapUid.Value, null)); - - var (uid, component) = ent; - - } - private void OnAppearanceChange(EntityUid uid, BuckleComponent component, ref AppearanceChangeEvent args) { if (!TryComp(uid, out var rotVisuals) diff --git a/Content.Client/Jittering/JitteringSystem.cs b/Content.Client/Jittering/JitteringSystem.cs index 185bd490d3..0c11a13963 100644 --- a/Content.Client/Jittering/JitteringSystem.cs +++ b/Content.Client/Jittering/JitteringSystem.cs @@ -48,6 +48,9 @@ private void OnAnimationCompleted(EntityUid uid, JitteringComponent jittering, A if(args.Key != _jitterAnimationKey) return; + if (!args.Finished) + return; + if (TryComp(uid, out AnimationPlayerComponent? animationPlayer) && TryComp(uid, out SpriteComponent? sprite)) _animationPlayer.Play(uid, animationPlayer, GetAnimation(jittering, sprite), _jitterAnimationKey); diff --git a/Content.Client/Light/EntitySystems/LightBehaviorSystem.cs b/Content.Client/Light/EntitySystems/LightBehaviorSystem.cs index 11f69165cf..ca19d8522c 100644 --- a/Content.Client/Light/EntitySystems/LightBehaviorSystem.cs +++ b/Content.Client/Light/EntitySystems/LightBehaviorSystem.cs @@ -19,6 +19,9 @@ public override void Initialize() private void OnBehaviorAnimationCompleted(EntityUid uid, LightBehaviourComponent component, AnimationCompletedEvent args) { + if (!args.Finished) + return; + var container = component.Animations.FirstOrDefault(x => x.FullKey == args.Key); if (container == null) diff --git a/Content.Client/Light/EntitySystems/RotatingLightSystem.cs b/Content.Client/Light/EntitySystems/RotatingLightSystem.cs index 842c13dedf..5c2c4e4c87 100644 --- a/Content.Client/Light/EntitySystems/RotatingLightSystem.cs +++ b/Content.Client/Light/EntitySystems/RotatingLightSystem.cs @@ -69,6 +69,9 @@ private void OnAfterAutoHandleState(EntityUid uid, RotatingLightComponent comp, private void OnAnimationComplete(EntityUid uid, RotatingLightComponent comp, AnimationCompletedEvent args) { + if (!args.Finished) + return; + PlayAnimation(uid, comp); } diff --git a/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs b/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs index d50839d991..ba0b7fef71 100644 --- a/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs +++ b/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs @@ -20,9 +20,9 @@ public SalvageMagnetBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner protected override void Open() { base.Open(); - _window = new OfferingWindow(); + + _window = this.CreateWindow(); // WD EDIT _window.Title = Loc.GetString("salvage-magnet-window-title"); - _window.OnClose += Close; _window.OpenCenteredLeft(); } diff --git a/Content.Client/_White/Animations/WaddleAnimationSystem.cs b/Content.Client/_White/Animations/WaddleAnimationSystem.cs index eefe4668cc..e168d07a35 100644 --- a/Content.Client/_White/Animations/WaddleAnimationSystem.cs +++ b/Content.Client/_White/Animations/WaddleAnimationSystem.cs @@ -19,10 +19,7 @@ public sealed class WaddleAnimationSystem : SharedWaddleAnimationSystem public override void Initialize() { - SubscribeLocalEvent(OnAnimationCompleted); - SubscribeAllEvent(ev => PlayAnimation(GetEntity(ev.User))); - SubscribeAllEvent(ev => StopAnimation(GetEntity(ev.User))); } protected override void PlayAnimation(EntityUid uid) @@ -40,7 +37,6 @@ protected override void PlayAnimation(EntityUid uid) var len = mover.Sprinting ? component.AnimationLength * component.RunAnimationLengthMultiplier : component.AnimationLength; component.LastStep = !component.LastStep; - component.IsCurrentlyWaddling = true; var animation = new Animation() { @@ -54,9 +50,9 @@ protected override void PlayAnimation(EntityUid uid) InterpolationMode = AnimationInterpolationMode.Linear, KeyFrames = { - new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0), - new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(tumbleIntensity), len/3), - new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), len/3), + new(Angle.FromDegrees(0), 0), + new(Angle.FromDegrees(tumbleIntensity), len/3), + new(Angle.FromDegrees(0), len/3), } }, new AnimationTrackComponentProperty() @@ -66,9 +62,9 @@ protected override void PlayAnimation(EntityUid uid) InterpolationMode = AnimationInterpolationMode.Linear, KeyFrames = { - new AnimationTrackProperty.KeyFrame(new Vector2(), 0), - new AnimationTrackProperty.KeyFrame(component.HopIntensity, len/3), - new AnimationTrackProperty.KeyFrame(new Vector2(), len/3), + new(new Vector2(), 0), + new(component.HopIntensity, len/3), + new(new Vector2(), len/3), } } } @@ -76,25 +72,4 @@ protected override void PlayAnimation(EntityUid uid) _animation.Play(uid, animation, component.KeyName); } - - protected override void StopAnimation(EntityUid uid) - { - if (!TryComp(uid, out var component) - || !TryComp(uid, out var sprite)) - return; - - _animation.Stop(uid, component.KeyName); - - sprite.Offset = new Vector2(); - sprite.Rotation = Angle.FromDegrees(0); - component.IsCurrentlyWaddling = false; - } - - private void OnAnimationCompleted(EntityUid uid, WaddleAnimationComponent component, AnimationCompletedEvent args) - { - if (args.Key != component.KeyName) - return; - - PlayAnimation(uid); - } } diff --git a/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs b/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs index cd22f1f6d3..943fb75525 100644 --- a/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs +++ b/Content.Server/Arcade/BlockGame/BlockGame.Ui.cs @@ -157,7 +157,7 @@ private void InputTick(float frameTime) /// The message to broadcase to all players/spectators. private void SendMessage(BoundUserInterfaceMessage message) { - _uiSystem.ServerSendUiMessage(_entityManager.GetEntity(message.Entity), BlockGameUiKey.Key, message); + _uiSystem.ServerSendUiMessage(_owner, BlockGameUiKey.Key, message); } /// @@ -167,7 +167,7 @@ private void SendMessage(BoundUserInterfaceMessage message) /// The target recipient. private void SendMessage(BoundUserInterfaceMessage message, EntityUid actor) { - _uiSystem.ServerSendUiMessage(_entityManager.GetEntity(message.Entity), BlockGameUiKey.Key, message, actor); + _uiSystem.ServerSendUiMessage(_owner, BlockGameUiKey.Key, message, actor); } /// diff --git a/Content.Server/Construction/Components/WelderRefinableComponent.cs b/Content.Server/Construction/Components/WelderRefinableComponent.cs index 31b029e241..4d3685b7c5 100644 --- a/Content.Server/Construction/Components/WelderRefinableComponent.cs +++ b/Content.Server/Construction/Components/WelderRefinableComponent.cs @@ -18,7 +18,7 @@ public sealed partial class WelderRefinableComponent : Component public float RefineTime = 2f; [DataField] - public float RefineFuel; + public float RefineFuel = 1f; // WD EDIT [DataField] public ProtoId QualityNeeded = "Welding"; diff --git a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs index 5a800d5c0e..8e47d2ef26 100644 --- a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs +++ b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs @@ -340,6 +340,7 @@ private void UpdateAnchored(EntityUid uid, DisposalTubeComponent component, bool { if (!Resolve(target, ref targetTube)) return null; + var oppositeDirection = nextDirection.GetOpposite(); var xform = Transform(target); @@ -347,7 +348,7 @@ private void UpdateAnchored(EntityUid uid, DisposalTubeComponent component, bool return null; var position = xform.Coordinates; - var entities = _mapSystem.GetInDir(target, grid, position, nextDirection); + var entities = _mapSystem.GetInDir((EntityUid) xform.GridUid, grid, position, nextDirection); foreach (var entity in entities) { diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs index 38e3923803..e7c83c8ac6 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs @@ -88,11 +88,13 @@ public void ExitDisposals(EntityUid uid, DisposalHolderComponent? holder = null, if (!Resolve(uid, ref holder, ref holderTransform)) return; + if (holder.IsExitingDisposals) { Log.Error("Tried exiting disposals twice. This should never happen."); return; } + holder.IsExitingDisposals = true; // Check for a disposal unit to throw them into and then eject them from it. @@ -164,11 +166,13 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon { if (!Resolve(holderUid, ref holder, ref holderTransform)) return false; + if (holder.IsExitingDisposals) { Log.Error("Tried entering tube after exiting disposals. This should never happen."); return false; } + if (!Resolve(toUid, ref to, ref toTransform)) { ExitDisposals(holderUid, holder, holderTransform); @@ -193,6 +197,7 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon holder.PreviousTube = holder.CurrentTube; holder.PreviousDirection = holder.CurrentDirection; } + holder.CurrentTube = toUid; var ev = new GetDisposalsNextDirectionEvent(holder); RaiseLocalEvent(toUid, ref ev); @@ -212,9 +217,7 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon if (holder.CurrentDirection != holder.PreviousDirection) { foreach (var ent in holder.Container.ContainedEntities) - { _damageable.TryChangeDamage(ent, to.DamageOnTurn); - } _audio.PlayPvs(to.ClangSound, toUid); } @@ -225,9 +228,7 @@ public override void Update(float frameTime) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var holder)) - { UpdateComp(uid, holder, frameTime); - } } private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float frameTime) @@ -236,9 +237,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra { var time = frameTime; if (time > holder.TimeLeft) - { time = holder.TimeLeft; - } holder.TimeLeft -= time; frameTime -= time; @@ -268,7 +267,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra // Find next tube var nextTube = _disposalTubeSystem.NextTubeFor(currentTube, holder.CurrentDirection); - if (!EntityManager.EntityExists(nextTube)) + if (!EntityManager.EntityExists(nextTube)) { ExitDisposals(uid, holder); break; @@ -276,9 +275,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra // Perform remainder of entry process if (!EnterTube(uid, nextTube!.Value, holder)) - { break; - } } } } diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index a2ca4d959b..8c1e3ce965 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -516,7 +516,7 @@ public bool TryFlush(EntityUid uid, SharedDisposalUnitComponent component) return false; var coords = xform.Coordinates; - var entry = _sharedMapSystem.GetLocal(uid, grid, coords) + var entry = _sharedMapSystem.GetLocal((EntityUid) xform.GridUid, grid, coords) .FirstOrDefault(HasComp); if (entry == default || component is not DisposalUnitComponent sDisposals) diff --git a/Content.Server/MagicMirror/MagicMirrorSystem.cs b/Content.Server/MagicMirror/MagicMirrorSystem.cs index 6cbfc55cac..b11e8ca707 100644 --- a/Content.Server/MagicMirror/MagicMirrorSystem.cs +++ b/Content.Server/MagicMirror/MagicMirrorSystem.cs @@ -1,15 +1,12 @@ using System.Linq; using Content.Server.DoAfter; using Content.Server.Humanoid; -using Content.Shared.UserInterface; using Content.Shared.DoAfter; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Interaction; using Content.Shared.MagicMirror; -using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; -using Robust.Shared.Player; namespace Content.Server.MagicMirror; @@ -22,14 +19,13 @@ public sealed class MagicMirrorSystem : SharedMagicMirrorSystem [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly MarkingManager _markings = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnOpenUIAttempt); - Subs.BuiEvents(MagicMirrorUiKey.Key, subs => + Subs.BuiEvents(MagicMirrorUiKey.Key, + subs => { subs.Event(OnUiClosed); subs.Event(OnMagicMirrorSelect); @@ -38,7 +34,6 @@ public override void Initialize() subs.Event(OnTryMagicMirrorRemoveSlot); }); - SubscribeLocalEvent(OnMagicMirrorInteract); SubscribeLocalEvent(OnSelectSlotDoAfter); SubscribeLocalEvent(OnChangeColorDoAfter); @@ -46,23 +41,6 @@ public override void Initialize() SubscribeLocalEvent(OnAddSlotDoAfter); } - private void OnMagicMirrorInteract(Entity mirror, ref AfterInteractEvent args) - { - if (!args.CanReach || args.Target == null) - return; - - if (!_uiSystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User)) - return; - - UpdateInterface(mirror.Owner, args.Target.Value, mirror.Comp); - } - - private void OnOpenUIAttempt(EntityUid uid, MagicMirrorComponent mirror, ActivatableUIOpenAttemptEvent args) - { - if (!HasComp(args.User)) - args.Cancel(); - } - private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, MagicMirrorSelectMessage message) { if (component.Target is not { } target) @@ -87,7 +65,8 @@ private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); @@ -143,7 +122,8 @@ private void OnTryMagicMirrorChangeColor(EntityUid uid, MagicMirrorComponent com BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; } @@ -198,7 +178,8 @@ private void OnTryMagicMirrorRemoveSlot(EntityUid uid, MagicMirrorComponent comp BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); @@ -252,7 +233,8 @@ private void OnTryMagicMirrorAddSlot(EntityUid uid, MagicMirrorComponent compone BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); @@ -287,32 +269,6 @@ private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, Mag } - private void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component) - { - if (!TryComp(targetUid, out var humanoid)) - return; - - var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings) - ? new List(hairMarkings) - : new(); - - var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings) - ? new List(facialHairMarkings) - : new(); - - var state = new MagicMirrorUiState( - humanoid.Species, - hair, - humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count, - facialHair, - humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count); - - // TODO: Component states - component.Target = targetUid; - _uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state); - Dirty(mirrorUid, component); - } - private void OnUiClosed(Entity ent, ref BoundUIClosedEvent args) { ent.Comp.Target = null; diff --git a/Content.Server/PowerCell/PowerCellSystem.cs b/Content.Server/PowerCell/PowerCellSystem.cs index 68f00b2903..6d11066d76 100644 --- a/Content.Server/PowerCell/PowerCellSystem.cs +++ b/Content.Server/PowerCell/PowerCellSystem.cs @@ -234,7 +234,7 @@ private void OnCellSlotExamined(EntityUid uid, PowerCellSlotComponent component, public void OnBatteryExamined(EntityUid uid, BatteryComponent? component, ExaminedEvent args) // WD EDIT { - if (Resolve(uid, ref component, false)) // WD EDIT + if (component is not null) // WD EDIT { var charge = component.CurrentCharge / component.MaxCharge * 100; args.PushMarkup(Loc.GetString("power-cell-component-examine-details", ("currentCharge", $"{charge:F0}"))); diff --git a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs index df7ac7ac0f..ce23bb1185 100644 --- a/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs +++ b/Content.Server/Silicon/WeldingHealable/WeldingHealableSystem.cs @@ -88,7 +88,8 @@ private async void Repair(EntityUid uid, WeldingHealableComponent healableCompon new SiliconRepairFinishedEvent { Delay = delay, - }); + }, + 5); // WD EDIT } private bool HasDamage(DamageableComponent component, WeldingHealingComponent healable) diff --git a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs index 60bf29b8f0..518d6409bf 100644 --- a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs +++ b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs @@ -25,7 +25,7 @@ public sealed class PirateRadioSpawnRule : StationEventSystem().ToList()); + var salvPrototypes = _prototypeManager.EnumeratePrototypes().ToList(); + var salvageProto = _random.Pick(salvPrototypes); + + if (!_mapSystem.MapExists(GameTicker.DefaultMap)) + return; + + // Round didn't start before running this, leading to a null-space test fail. + if (GameTicker.DefaultMap == MapId.Nullspace) + return; + if (!_map.TryLoad(GameTicker.DefaultMap, salvageProto.MapPath.ToString(), out _, debrisOptions)) return; diff --git a/Content.Server/_White/Animations/WaddleAnimationSystem.cs b/Content.Server/_White/Animations/WaddleAnimationSystem.cs index 01e9f5c4b3..aa5eb4591f 100644 --- a/Content.Server/_White/Animations/WaddleAnimationSystem.cs +++ b/Content.Server/_White/Animations/WaddleAnimationSystem.cs @@ -9,9 +9,4 @@ protected override void PlayAnimation(EntityUid user) { RaiseNetworkEvent(new StartedWaddlingEvent(GetNetEntity(user))); } - - protected override void StopAnimation(EntityUid user) - { - RaiseNetworkEvent(new StoppedWaddlingEvent(GetNetEntity(user))); - } } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index 78e24b12c3..6671e6aaff 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -4,6 +4,7 @@ using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Body.Prototypes; +using Content.Shared.Buckle.Components; using Content.Shared.Containers.ItemSlots; using Content.Shared.Damage; using Content.Shared.DragDrop; @@ -34,6 +35,8 @@ public partial class SharedBodySystem * - Each "connection" is a body part (e.g. arm, hand, etc.) and each part can also contain organs. */ + [Dependency] private readonly StandingStateSystem _standing = default!;// WD EDIT + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly ItemSlotsSystem _slots = default!; [Dependency] private readonly GibbingSystem _gibbingSystem = default!; @@ -52,6 +55,7 @@ private void InitializeBody() SubscribeLocalEvent(OnBodyMapInit); SubscribeLocalEvent(OnBodyCanDrag); SubscribeLocalEvent(OnStandAttempt); + SubscribeLocalEvent(OnUnbuckled); // WD EDIT SubscribeLocalEvent(OnProfileLoadFinished); } @@ -144,6 +148,14 @@ private void OnStandAttempt(Entity ent, ref StandAttemptEvent arg args.Cancel(); } + // WD EDIT START + private void OnUnbuckled(Entity ent, ref UnbuckledEvent args) + { + if (ent.Comp.LegEntities.Count == 0) + _standing.Down(ent.Owner, dropHeldItems:true); + } + // WD EDIT END + /// /// Sets up all of the relevant body parts for a particular body entity and root part. /// diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index 2c6d128f63..48fd25dcde 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -13,6 +13,9 @@ using Robust.Shared.Utility; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Shared.Buckle; +using Content.Shared.Standing; + namespace Content.Shared.Body.Systems; @@ -20,6 +23,8 @@ public partial class SharedBodySystem { [Dependency] private readonly RandomHelperSystem _randomHelper = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly SharedBuckleSystem _buckle = default!; //WD EDIT + private void InitializeParts() { // TODO: This doesn't handle comp removal on child ents. @@ -209,7 +214,9 @@ private void RemoveLeg(Entity legEnt, Entity bodyEnt.Comp.LegEntities.Remove(legEnt); UpdateMovementSpeed(bodyEnt); Dirty(bodyEnt, bodyEnt.Comp); - Standing.Down(bodyEnt); + if (!_buckle.IsBuckled(bodyEnt)) // WD EDIT + Standing.Down(bodyEnt); + RaiseLocalEvent(bodyEnt, new DropHandItemsEvent(), false); // WD EDIT } } diff --git a/Content.Shared/Buckle/Components/BuckleComponent.cs b/Content.Shared/Buckle/Components/BuckleComponent.cs index ee86e6d4de..55831515ed 100644 --- a/Content.Shared/Buckle/Components/BuckleComponent.cs +++ b/Content.Shared/Buckle/Components/BuckleComponent.cs @@ -9,7 +9,7 @@ namespace Content.Shared.Buckle.Components; /// /// This component allows an entity to be buckled to an entity with a . /// -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] [Access(typeof(SharedBuckleSystem))] public sealed partial class BuckleComponent : Component { @@ -19,7 +19,7 @@ public sealed partial class BuckleComponent : Component /// across a table two tiles away" problem. /// [DataField] - public float Range = SharedInteractionSystem.InteractionRange / 1.4f; + public float Range = SharedInteractionSystem.InteractionRange; /// /// True if the entity is buckled, false otherwise. @@ -30,7 +30,7 @@ public sealed partial class BuckleComponent : Component /// /// Whether or not collisions should be possible with the entity we are strapped to /// - [DataField] + [DataField, AutoNetworkedField] public bool DontCollide; /// @@ -49,13 +49,13 @@ public sealed partial class BuckleComponent : Component /// /// The time that this entity buckled at. /// - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField, AutoNetworkedField] public TimeSpan? BuckleTime; /// /// The strap that this component is buckled to. /// - [DataField] + [DataField, AutoNetworkedField] public EntityUid? BuckledTo; /// @@ -71,15 +71,6 @@ public sealed partial class BuckleComponent : Component [ViewVariables] public int? OriginalDrawDepth; } -[Serializable, NetSerializable] -public sealed class BuckleState(NetEntity? buckledTo, bool dontCollide, TimeSpan? buckleTime) : ComponentState -{ - public readonly NetEntity? BuckledTo = buckledTo; - public readonly bool DontCollide = dontCollide; - public readonly TimeSpan? BuckleTime = buckleTime; -} - - /// /// Event raised directed at a strap entity before some entity gets buckled to it. /// diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index 0fbdae693d..79dc686c7d 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -15,7 +15,7 @@ public sealed partial class StrapComponent : Component /// /// The entities that are currently buckled to this strap. /// - [ViewVariables] + [ViewVariables, AutoNetworkedField] public HashSet BuckledEntities = new(); /// @@ -61,12 +61,6 @@ public sealed partial class StrapComponent : Component [DataField, AutoNetworkedField] public bool Enabled = true; - /// - /// You can specify the offset the entity will have after unbuckling. - /// - [DataField] - public Vector2 UnbuckleOffset = Vector2.Zero; - /// /// The sound to be played when a mob is buckled /// diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index ed1b3c1990..29f1385a38 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -54,9 +54,7 @@ private void InitializeBuckle() } private void OnBuckleComponentShutdown(Entity ent, ref ComponentShutdown args) - { - Unbuckle(ent!, null); - } + => Unbuckle(ent!, null); #region Pulling @@ -346,30 +344,31 @@ private void Buckle(Entity buckle, Entity strap else if (user != null) _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(user):player} buckled {ToPrettyString(buckle)} to {ToPrettyString(strap)}"); + // WD EDIT START + switch (strap.Comp.Position) + { + case StrapPosition.Stand: + _standing.Stand(buckle, force:true); + break; + case StrapPosition.Down: + _standing.Down(buckle, false, false); + break; + } + // WD EDIT END + _audio.PlayPredicted(strap.Comp.BuckleSound, strap, user); SetBuckledTo(buckle, strap!); Appearance.SetData(strap, StrapVisuals.State, true); Appearance.SetData(buckle, BuckleVisuals.Buckled, true); - _rotationVisuals.SetHorizontalAngle(buckle.Owner, strap.Comp.Rotation); var xform = Transform(buckle); var coords = new EntityCoordinates(strap, strap.Comp.BuckleOffset); - _transform.SetCoordinates(buckle, xform, coords, rotation: Angle.Zero); + _transform.SetCoordinates(buckle, xform, coords, rotation: Angle.Zero); _joints.SetRelay(buckle, strap); - switch (strap.Comp.Position) - { - case StrapPosition.Stand: - _standing.Stand(buckle); - break; - case StrapPosition.Down: - _standing.Down(buckle, false, false); - break; - } - var ev = new StrappedEvent(strap, buckle); RaiseLocalEvent(strap, ref ev); @@ -515,4 +514,4 @@ private bool CanUnbuckle(Entity buckle, EntityUid? user, bool return !unstrapAttempt.Cancelled; } -} \ No newline at end of file +} diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs index 59eff1f8c8..d4fd8eb3af 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs @@ -19,6 +19,7 @@ private void InitializeInteraction() SubscribeLocalEvent(OnStrapDragDropTarget); SubscribeLocalEvent(OnCanDropTarget); + SubscribeLocalEvent(OnBuckleInteractHand); SubscribeLocalEvent>(AddUnbuckleVerb); } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs b/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs index eb23aa973b..bfb0cd9cd6 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs @@ -57,7 +57,7 @@ private void StrapRemoveAll(EntityUid uid, StrapComponent strapComp) { foreach (var entity in strapComp.BuckledEntities.ToArray()) { - TryUnbuckle(entity, entity, true); + Unbuckle(entity, entity); } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index bf9fcde88d..cde0cad3ec 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -24,7 +24,7 @@ public sealed class CCVars : CVars /// Name of the rules txt file in the "Resources/Server Info" dir. Include the extension. /// public static readonly CVarDef RulesFile = - CVarDef.Create("server.rules_file", "DefaultRuleset", CVar.REPLICATED | CVar.SERVER); + CVarDef.Create("server.rules_file", "MedusaRuleset", CVar.REPLICATED | CVar.SERVER); // WD EDIT /// /// A loc string for what should be displayed as the title on the Rules window. diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index b58b7b265e..5dd3aabf3f 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -569,6 +569,11 @@ public IEnumerable GetColliding(EntityUid uid, PhysicsComponent? phys if (otherPhysics.CollisionLayer == (int) CollisionGroup.ConveyorMask) continue; + // WD EDIT START + if (otherPhysics.CollisionLayer == (int) CollisionGroup.MidImpassable) + continue; + // WD EDIT END + if ((physics.CollisionMask & otherPhysics.CollisionLayer) == 0 && (otherPhysics.CollisionMask & physics.CollisionLayer) == 0) continue; diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 1c4a697cc4..2bc256fd6a 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -110,13 +110,17 @@ public override void Initialize() SubscribeLocalEvent(OnDropped); CommandBinds.Builder - .Bind(ContentKeyFunctions.AltActivateItemInWorld, + .Bind( + ContentKeyFunctions.AltActivateItemInWorld, new PointerInputCmdHandler(HandleAltUseInteraction)) - .Bind(EngineKeyFunctions.Use, + .Bind( + EngineKeyFunctions.Use, new PointerInputCmdHandler(HandleUseInteraction)) - .Bind(ContentKeyFunctions.ActivateItemInWorld, + .Bind( + ContentKeyFunctions.ActivateItemInWorld, new PointerInputCmdHandler(HandleActivateItemInWorld)) - .Bind(ContentKeyFunctions.TryPullObject, + .Bind( + ContentKeyFunctions.TryPullObject, new PointerInputCmdHandler(HandleTryPullObject)) .Register(); diff --git a/Content.Shared/MagicMirror/MagicMirrorComponent.cs b/Content.Shared/MagicMirror/MagicMirrorComponent.cs index 6357543905..95b1736979 100644 --- a/Content.Shared/MagicMirror/MagicMirrorComponent.cs +++ b/Content.Shared/MagicMirror/MagicMirrorComponent.cs @@ -47,5 +47,5 @@ public sealed partial class MagicMirrorComponent : Component /// Sound emitted when slots are changed /// [DataField, ViewVariables(VVAccess.ReadWrite)] - public SoundSpecifier ChangeHairSound = new SoundPathSpecifier("/Audio/Items/scissors.ogg"); + public SoundSpecifier? ChangeHairSound = new SoundPathSpecifier("/Audio/Items/scissors.ogg"); } diff --git a/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs b/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs index ea5838a723..ea96d504c6 100644 --- a/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs +++ b/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs @@ -1,6 +1,8 @@ using Content.Shared.DoAfter; +using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Interaction; +using Content.Shared.UserInterface; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -9,13 +11,27 @@ namespace Content.Shared.MagicMirror; public abstract class SharedMagicMirrorSystem : EntitySystem { [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] protected readonly SharedUserInterfaceSystem UISystem = default!; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMagicMirrorInteract); + SubscribeLocalEvent(OnBeforeUIOpen); SubscribeLocalEvent(OnMirrorRangeCheck); } + private void OnMagicMirrorInteract(Entity mirror, ref AfterInteractEvent args) + { + if (!args.CanReach || args.Target == null) + return; + + if (!UISystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User)) + return; + + UpdateInterface(mirror, args.Target.Value, mirror); + } + private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args) { if (args.Result == BoundUserInterfaceRangeResult.Fail) @@ -26,6 +42,41 @@ private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, r if (!_interaction.InRangeUnobstructed(uid, component.Target.Value)) args.Result = BoundUserInterfaceRangeResult.Fail; } + + private void OnBeforeUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + if (args.User != ent.Comp.Target && ent.Comp.Target != null) + return; + + UpdateInterface(ent, args.User, ent); + } + + protected void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component) + { + if (!TryComp(targetUid, out var humanoid)) + return; + component.Target ??= targetUid; + + var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings) + ? new List(hairMarkings) + : new(); + + var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings) + ? new List(facialHairMarkings) + : new(); + + var state = new MagicMirrorUiState( + humanoid.Species, + hair, + humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count, + facialHair, + humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count); + + // TODO: Component states + component.Target = targetUid; + UISystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state); + Dirty(mirrorUid, component); + } } [Serializable, NetSerializable] diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs index 2088bd4161..8b87895c35 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs @@ -98,12 +98,12 @@ private void OnStateEnteredSubscribers(EntityUid target, MobStateComponent compo _appearance.SetData(target, MobStateVisuals.State, MobState.Alive); break; case MobState.Critical: - _standing.Down(target); + _standing.Down(target, dropHeldItems:true); _appearance.SetData(target, MobStateVisuals.State, MobState.Critical); break; case MobState.Dead: EnsureComp(target); - _standing.Down(target); + _standing.Down(target, dropHeldItems:true); if (_standing.IsDown(target) && TryComp(target, out var physics)) { diff --git a/Content.Shared/Movement/Components/WaddleAnimationComponent.cs b/Content.Shared/Movement/Components/WaddleAnimationComponent.cs index ef88f68b26..810745d9ab 100644 --- a/Content.Shared/Movement/Components/WaddleAnimationComponent.cs +++ b/Content.Shared/Movement/Components/WaddleAnimationComponent.cs @@ -13,16 +13,6 @@ public sealed class StartedWaddlingEvent(NetEntity user) : EntityEventArgs { public NetEntity User = user; } - -/// -/// Declares that an entity has stopped waddling like a duck/clown. -/// -/// The former waddle-er. -[Serializable, NetSerializable] -public sealed class StoppedWaddlingEvent(NetEntity user) : EntityEventArgs -{ - public NetEntity User = user; -} // WD EDIT END /// @@ -67,9 +57,4 @@ public sealed partial class WaddleAnimationComponent : Component /// Stores which step we made last, so if someone cancels out of the animation mid-step then restarts it looks more natural. /// public bool LastStep; - - /// - /// Stores if we're currently waddling so we can start/stop as appropriate and can tell other systems our state. - /// - public bool IsCurrentlyWaddling; } diff --git a/Content.Shared/Standing/StandingStateSystem.cs b/Content.Shared/Standing/StandingStateSystem.cs index a1b5418941..cc3b4d550d 100644 --- a/Content.Shared/Standing/StandingStateSystem.cs +++ b/Content.Shared/Standing/StandingStateSystem.cs @@ -24,7 +24,7 @@ public sealed class StandingStateSystem : EntitySystem [Dependency] private readonly ClimbSystem _climb = default!; // If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited. - private const int StandingCollisionLayer = (int)CollisionGroup.MidImpassable; + private const int StandingCollisionLayer = (int) CollisionGroup.MidImpassable; public bool IsDown(EntityUid uid, StandingStateComponent? standingState = null) { @@ -57,7 +57,7 @@ public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true if (dropHeldItems && hands != null) RaiseLocalEvent(uid, new DropHandItemsEvent(), false); - if (TryComp(uid, out BuckleComponent? buckle) && buckle.Buckled) + if (TryComp(uid, out BuckleComponent? buckle) && buckle.Buckled && !_buckle.TryUnbuckle(uid, uid, buckle)) return false; var msg = new DownAttemptEvent(); @@ -184,4 +184,4 @@ public sealed class StoodEvent : EntityEventArgs { } /// /// Raised when an entity is not standing /// -public sealed class DownedEvent : EntityEventArgs { } \ No newline at end of file +public sealed class DownedEvent : EntityEventArgs { } diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 2e800c386b..771eaf023f 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -374,13 +374,9 @@ private void OnActivate(EntityUid uid, StorageComponent storageComp, ActivateInW // Toggle if (_ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key, args.User)) - { _ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, args.User); - } else - { OpenStorageUI(uid, args.User, storageComp); - } args.Handled = true; } diff --git a/Content.Shared/_White/Animations/SharedWaddleAnimationSystem.cs b/Content.Shared/_White/Animations/SharedWaddleAnimationSystem.cs index 72f111d60d..852b2241fd 100644 --- a/Content.Shared/_White/Animations/SharedWaddleAnimationSystem.cs +++ b/Content.Shared/_White/Animations/SharedWaddleAnimationSystem.cs @@ -18,34 +18,18 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnMovementInput); + SubscribeLocalEvent(OnMovementInput); } - private void OnMovementInput(EntityUid uid, WaddleAnimationComponent component, MoveInputEvent args) + private void OnMovementInput(EntityUid uid, WaddleAnimationComponent component, MoveEvent args) { - if (!Timing.IsFirstTimePredicted - || _standingState.IsDown(uid) + if (_standingState.IsDown(uid) || _gravity.IsWeightless(uid) || _buckle.IsBuckled(uid)) return; - if (!args.HasDirectionalMovement && component.IsCurrentlyWaddling) - { - component.IsCurrentlyWaddling = false; - StopAnimation(uid); - - return; - } - - if (component.IsCurrentlyWaddling || !args.HasDirectionalMovement) - return; - - component.IsCurrentlyWaddling = true; - PlayAnimation(uid); } protected abstract void PlayAnimation(EntityUid user); - - protected abstract void StopAnimation(EntityUid user); } diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a8634d84a7..0ccda9e0d9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8029,272 +8029,343 @@ Entries: id: 6531 time: '2024-11-18T22:08:35.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1230 -- author: Remuchi +- author: VMSolidus + changes: + - type: Fix + message: >- + Power Attacks now correctly apply a penalty on swing speed, and are no + longer faster than left clicking. + id: 6532 + time: '2024-11-20T03:47:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1252 +- author: Mnemotechnician + changes: + - type: Tweak + message: >- + Tweaked the descriptions of most Wizden traits to be more vivid and + descriptive. + id: 6533 + time: '2024-11-22T01:01:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1260 +- author: VMSolidus changes: - type: Add - message: Upstream + message: >- + Five new functions for the Trait System, AddArmor, PushDescription, + ModifyMobThresholds, AddSolutionContainer, and ModifyStamina. + - type: Tweak + message: >- + CyberEyes Basic System has been split, now Flash Protection is a + separate module. + - type: Add + message: >- + Dermal Armor no longer replaces your original species damage + resistances. It now stacks multiplicatively with your original + resistances. + - type: Tweak + message: Dermal Armor can now be taken by any species, not just Humans. + - type: Add + message: >- + Dermal Armor, and Bionic Arms can now be revealed by a close + examination. Shift click on someone within touching distance will reveal + if they have these "Obvious" cyberware. + id: 6534 + time: '2024-11-22T01:01:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1253 +- author: Mnemotechnician + changes: + - type: Add + message: >- + You can now touch one anomaly scanner with another to copy the anomaly + scan data from it. + id: 6535 + time: '2024-11-22T01:02:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1250 +- author: sleepyyapril + changes: + - type: Fix + message: >- + Fixed chair visuals drawing depth wrongly if you sat in a north-facing + chair. + - type: Fix + message: Fixed buckling doing several buckles each time you did one. + - type: Fix + message: Fixed the magic mirror. + - type: Fix + message: Fixed beds re-positioning you every few seconds. + - type: Fix + message: Fixed E not opening containers that are in another container. + - type: Fix + message: Fixed disposal systems not flushing or ejecting properly. + id: 6536 + time: '2024-11-22T01:03:22.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1256 +- author: Remuchi + changes: + - type: Add + message: Upstream id: 6460 time: '2024-10-19T12:09:52.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/93 - author: Gersoon changes: - - type: Add - message: translation of tiles/перевод тайлов - - type: Tweak - message: sign textures changed/изменены текстуры знаков + - type: Add + message: translation of tiles/перевод тайлов + - type: Tweak + message: sign textures changed/изменены текстуры знаков id: 6461 time: '2024-10-21T06:56:21.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/90 - author: Spatison changes: - - type: Remove - message: Thieves' pacifism has been removed / Убран воровской пацифизм + - type: Remove + message: Thieves' pacifism has been removed / Убран воровской пацифизм id: 6462 time: '2024-10-22T16:35:54.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/95 - author: Spatison changes: - - type: Remove - message: Delete Prido-O-Mat / Удален прайдомат + - type: Remove + message: Delete Prido-O-Mat / Удален прайдомат id: 6463 time: '2024-10-23T03:35:00.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/84 - author: Spatison changes: - - type: Add - message: Added hardlight spear implanter/ Добавлен имплант светового копья + - type: Add + message: Added hardlight spear implanter/ Добавлен имплант светового копья id: 6464 time: '2024-10-23T10:20:53.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/77 - author: Spatison changes: - - type: Tweak - message: The energy shield can now be discharged / Энерго щит теперь имеет заряд + - type: Tweak + message: The energy shield can now be discharged / Энерго щит теперь имеет заряд id: 6465 time: '2024-10-23T10:23:45.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/94 - author: Remuchi changes: - - type: Add - message: >- - Переводы всех черт персонажа, черт внешности и меню персонажа. Так же - переведен весь контент Нянотрайзен. + - type: Add + message: >- + Переводы всех черт персонажа, черт внешности и меню персонажа. Так же + переведен весь контент Нянотрайзен. id: 6466 time: '2024-10-23T14:11:51.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/97 - author: Gersoon458 changes: - - type: Tweak - message: DryDock update/Обновление ДрайДока + - type: Tweak + message: DryDock update/Обновление ДрайДока id: 6467 time: '2024-10-24T13:50:33.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/98 - author: Spatison changes: - - type: Add - message: Added night vision goggle/ Добавлен прибор ночного видения - - type: Add - message: Added thermal vision goggle/ Добавлен прибор термального видения + - type: Add + message: Added night vision goggle/ Добавлен прибор ночного видения + - type: Add + message: Added thermal vision goggle/ Добавлен прибор термального видения id: 6468 time: '2024-10-26T09:36:10.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/89 - author: Spatison changes: - - type: Add - message: Added crossbow / Добавлен арбалет + - type: Add + message: Added crossbow / Добавлен арбалет id: 6469 time: '2024-10-26T09:41:08.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/76 - author: Spatison changes: - - type: Add - message: Added Gondola / Добавлена Гондола + - type: Add + message: Added Gondola / Добавлена Гондола id: 6470 time: '2024-10-26T11:15:09.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/96 - author: PuroSlavKing changes: - - type: Add - message: Added "Operative" UI style / Добавлен стиль интерфейса "Оперативник" + - type: Add + message: Added "Operative" UI style / Добавлен стиль интерфейса "Оперативник" id: 6471 time: '2024-10-27T02:51:58.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/102 - author: Spatison changes: - - type: Fix - message: >- - correction of a collision at a glass shard/ Исправление колизии у - осколка стекла + - type: Fix + message: >- + correction of a collision at a glass shard/ Исправление колизии у + осколка стекла id: 6472 time: '2024-10-27T13:28:02.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/104 - author: Gersoon changes: - - type: Add - message: New map added - Moose/Новая карта добавлена - Мус - - type: Tweak - message: Prisoners added to DryDock/На ДрайДок добавлены заключенные + - type: Add + message: New map added - Moose/Новая карта добавлена - Мус + - type: Tweak + message: Prisoners added to DryDock/На ДрайДок добавлены заключенные id: 6473 time: '2024-10-27T13:49:26.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/100 - author: Gersoon changes: - - type: Add - message: >- - 5 types of Halloween gifts, namely: basic, sweet, sweet themed, clothes, - themed clothes!/5 видов хеллоуинских подарков, а именно: основной, - сладкий, сладкий тематический, одежда, одежда тематичская! - - type: Add - message: New autumn grass and trees tiles!/Новые осенние тайлы травы и деревья! - - type: Add - message: >- - You can 100% find Halloween gifts in tech's closets!/В шкафах техов 100% - можно встретить хеллоунские подарки! - - type: Add - message: >- - New Halloween theme! (Settings -> HUD Theme: -> - ui-options-hud-theme-halloween (If I didn’t manage to take away the - ability to change themes during the week or didn’t add - translations))/Новая хеллоуинская тема худа! (Настройки -> Тема HUD: -> - ui-options-hud-theme-halloween (Если я не успел забрать возможность - менять темы на протяжении недели или не добавил переводы)) - - type: Add - message: >- - Each roundstart role has a candy bucket! (Kutos)/У каждой роли - раундстартом есть ведерко для конфет! (Kutos) - - type: Add - message: New costumes! (Purka)/Новые костюмы! (Purka) - - type: Add - message: >- - New sweets! (Purka, Kilath, Canceredpussy (Cyber ​​cutlet))/Новые - сладости! (Purka, Kilath, Canceredpussy (Кибер котлетка)) - - type: Tweak - message: The cards are now SPOOOOOOOKY!/Карты теперь ЖУУУУТКИЕ! + - type: Add + message: >- + 5 types of Halloween gifts, namely: basic, sweet, sweet themed, clothes, + themed clothes!/5 видов хеллоуинских подарков, а именно: основной, + сладкий, сладкий тематический, одежда, одежда тематичская! + - type: Add + message: New autumn grass and trees tiles!/Новые осенние тайлы травы и деревья! + - type: Add + message: >- + You can 100% find Halloween gifts in tech's closets!/В шкафах техов 100% + можно встретить хеллоунские подарки! + - type: Add + message: >- + New Halloween theme! (Settings -> HUD Theme: -> + ui-options-hud-theme-halloween (If I didn’t manage to take away the + ability to change themes during the week or didn’t add + translations))/Новая хеллоуинская тема худа! (Настройки -> Тема HUD: -> + ui-options-hud-theme-halloween (Если я не успел забрать возможность + менять темы на протяжении недели или не добавил переводы)) + - type: Add + message: >- + Each roundstart role has a candy bucket! (Kutos)/У каждой роли + раундстартом есть ведерко для конфет! (Kutos) + - type: Add + message: New costumes! (Purka)/Новые костюмы! (Purka) + - type: Add + message: >- + New sweets! (Purka, Kilath, Canceredpussy (Cyber ​​cutlet))/Новые + сладости! (Purka, Kilath, Canceredpussy (Кибер котлетка)) + - type: Tweak + message: The cards are now SPOOOOOOOKY!/Карты теперь ЖУУУУТКИЕ! id: 6474 time: '2024-10-31T02:44:08.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/113 - author: Spatison changes: - - type: Tweak - message: With FTL, a person now falls / При ФТЛ перемещении человек теперь падает - - type: Tweak - message: >- - Magnetic boots now do not let you fall / Магнитные сапоги теперь не дают - упасть + - type: Tweak + message: With FTL, a person now falls / При ФТЛ перемещении человек теперь падает + - type: Tweak + message: >- + Magnetic boots now do not let you fall / Магнитные сапоги теперь не дают + упасть id: 6475 time: '2024-10-31T02:52:22.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/111 - author: Spatison changes: - - type: Add - message: Added footsteps / Добавлены следы + - type: Add + message: Added footsteps / Добавлены следы id: 6476 time: '2024-10-31T03:03:14.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/110 - author: Spatison changes: - - type: Fix - message: >- - ПНВ и ПТВ теперь могут быть исследованы / NVG and TVG can now be - researched + - type: Fix + message: >- + ПНВ и ПТВ теперь могут быть исследованы / NVG and TVG can now be + researched id: 6477 time: '2024-10-31T03:03:31.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/109 - author: Spatison changes: - - type: Fix - message: >- - Fixing the animation of the clown's shoes / Исправление анимации ботинок - клоуна + - type: Fix + message: >- + Fixing the animation of the clown's shoes / Исправление анимации ботинок + клоуна id: 6478 time: '2024-10-31T03:22:32.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/107 - author: Spatison changes: - - type: Fix - message: Сorrection of a Butlutron collision / Исправлена коллизия Бутлетрона + - type: Fix + message: Сorrection of a Butlutron collision / Исправлена коллизия Бутлетрона id: 6479 time: '2024-10-31T03:22:53.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/105 - author: Spatison changes: - - type: Fix - message: Fixed bugs with sprites / Исправлены баги с спрайтами + - type: Fix + message: Fixed bugs with sprites / Исправлены баги с спрайтами id: 6480 time: '2024-10-31T03:23:25.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/103 - author: PuroSlavKing changes: - - type: Tweak - message: Измененён звук пожарной тревоги. + - type: Tweak + message: Измененён звук пожарной тревоги. id: 6481 time: '2024-10-31T03:24:35.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/106 - author: Spatison changes: - - type: Remove - message: Deleted fire alarm sound / Удален звук пожарной тревоги + - type: Remove + message: Deleted fire alarm sound / Удален звук пожарной тревоги id: 6482 time: '2024-11-01T11:47:36.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/115 - author: Gersoon458 changes: - - type: Remove - message: >- - Fun removed :( Specifically the basket and the gift from the hands - :(/Удалено веселье :( А конкретно корзинка и подарок из рук :( + - type: Remove + message: >- + Fun removed :( Specifically the basket and the gift from the hands + :(/Удалено веселье :( А конкретно корзинка и подарок из рук :( id: 6483 time: '2024-11-06T02:52:23.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/119 - author: Spatison changes: - - type: Tweak - message: >- - Changed the chances of modes falling out / Изменены шансы выпадения - режимов + - type: Tweak + message: >- + Changed the chances of modes falling out / Изменены шансы выпадения + режимов id: 6484 time: '2024-11-06T03:10:55.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/118 - author: Gersoon458 changes: - - type: Add - message: Added a new map - WhiteBox/Добавлена новая карта - ВайтБокс - - type: Fix - message: Fixed Moose (Added cadet spawner)/Починен Мус (Добавлен спавнер кадета) - - type: Fix - message: >- - Asterisk has been fixed, now there is no planet on it (Which do not - work. Thanks to Kutos)/Починен Астериск, теперь на нём нет планеты - (Которые не работают. Спасибо Кутосу) + - type: Add + message: Added a new map - WhiteBox/Добавлена новая карта - ВайтБокс + - type: Fix + message: Fixed Moose (Added cadet spawner)/Починен Мус (Добавлен спавнер кадета) + - type: Fix + message: >- + Asterisk has been fixed, now there is no planet on it (Which do not + work. Thanks to Kutos)/Починен Астериск, теперь на нём нет планеты + (Которые не работают. Спасибо Кутосу) id: 6485 time: '2024-11-06T03:45:51.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/117 - author: Spatison changes: - - type: Tweak - message: The pickaxe has been improved / Улучшена кирка + - type: Tweak + message: The pickaxe has been improved / Улучшена кирка id: 6486 time: '2024-11-06T03:46:19.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/108 - author: Spatison changes: - - type: Tweak - message: >- - The holoprojectors have been redesigned / Голопроекторы были - переработаны + - type: Tweak + message: >- + The holoprojectors have been redesigned / Голопроекторы были + переработаны id: 6487 time: '2024-11-06T03:48:03.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/112 - author: Warete changes: - - type: Fix - message: >- - Some benches had to get their rotation back / Скамьи должны были вернуть - свой поворот - - type: Tweak - message: >- - Automatic shift end is now off / Выключено автоматическое завершение - смены + - type: Fix + message: >- + Some benches had to get their rotation back / Скамьи должны были вернуть + свой поворот + - type: Tweak + message: >- + Automatic shift end is now off / Выключено автоматическое завершение + смены id: 6488 time: '2024-11-06T04:32:07.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/99 @@ -8305,33 +8376,33 @@ Entries: url: https://github.com/WWhiteDreamProject/wwdpublic/pull/122 - author: PuroSlavKing changes: - - type: Add - message: Добавлен КапитанШкаф, содержащий в себе все вещи капитана. - - type: Add - message: 'Добавлены новые стили одежды капитана: белый, шериф, командный.' + - type: Add + message: Добавлен КапитанШкаф, содержащий в себе все вещи капитана. + - type: Add + message: 'Добавлены новые стили одежды капитана: белый, шериф, командный.' id: 6490 time: '2024-11-14T04:55:10.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/123 - author: vanx changes: - - type: Add - message: Возвращена возможность казни + - type: Add + message: Возвращена возможность казни id: 6491 time: '2024-11-14T09:41:30.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/126 - author: PuroSlavKing changes: - - type: Add - message: >- - Added 5 new variations of body bags / Добавлено 5 новых вариаций мешков - для - тел. + - type: Add + message: >- + Added 5 new variations of body bags / Добавлено 5 новых вариаций мешков + для - тел. id: 6492 time: '2024-11-14T09:45:21.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/120 - author: Spatison changes: - - type: Add - message: Upstream :D + - type: Add + message: Upstream :D id: 6532 time: '2024-11-21T10:49:05.0000000+00:00' url: https://github.com/WWhiteDreamProject/wwdpublic/pull/129 diff --git a/Resources/Locale/ru-RU/traits/traits.ftl b/Resources/Locale/ru-RU/traits/traits.ftl index 4a5ba3c82a..991eee8be7 100644 --- a/Resources/Locale/ru-RU/traits/traits.ftl +++ b/Resources/Locale/ru-RU/traits/traits.ftl @@ -56,7 +56,7 @@ trait-name-Snoring = Храп trait-description-Snoring = Вы храпите во время сна. trait-name-CPRTraining = Тренировки ПМП. -trait-description-CPRTraining = В какой момент своей жизни вы научились делать СЛР. Все врачи это умеют. +trait-description-CPRTraining = В какой-то момент своей жизни вы научились делать СЛР. Все врачи это умеют. trait-name-Nearsighted = Близорукость trait-description-Nearsighted = Ваше зрение уже далеко от лучшего и вам тяжело видеть вещи в далеке без очков. diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index f50b0dbca5..f0fdfa0a07 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -82,6 +82,7 @@ tags: - HamsterWearable - WhitelistChameleon + - GlassesNearsight - type: entity parent: ClothingEyesBase diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index 1cfe98f0f6..e09997720d 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -54,7 +54,6 @@ position: Down rotation: -90 buckleOffset: "0,0.15" - unbuckleOffset: "0,0.15" buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index e7d3d3c997..1cb436b5fd 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -79,6 +79,7 @@ - type: DisposalUnit - type: ThrowInsertContainer containerId: disposals + probability: 0 # WD EDIT - type: UserInterface interfaces: enum.DisposalUnitUiKey.Key: diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml index d02bce020d..1fe3318ef5 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml @@ -11,7 +11,12 @@ - type: Clickable - type: Transform anchored: true - - type: MagicMirror + - type: MagicMirror #instant and silent + changeHairSound: null + addSlotTime: 0 + removeSlotTime: 0 + selectSlotTime: 0 + changeSlotTime: 0 - type: ActivatableUI key: enum.MagicMirrorUiKey.Key - type: UserInterface diff --git a/Resources/Prototypes/Entities/Structures/plastic_flaps.yml b/Resources/Prototypes/Entities/Structures/plastic_flaps.yml index 5d5ff390ba..31d46b94bd 100644 --- a/Resources/Prototypes/Entities/Structures/plastic_flaps.yml +++ b/Resources/Prototypes/Entities/Structures/plastic_flaps.yml @@ -24,7 +24,6 @@ - Impassable layer: - MidImpassable - - BulletImpassable - type: Damageable damageContainer: StructuralInorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/_White/tags.yml b/Resources/Prototypes/_White/tags.yml index 20f3f26ddd..31ff76244d 100644 --- a/Resources/Prototypes/_White/tags.yml +++ b/Resources/Prototypes/_White/tags.yml @@ -12,3 +12,6 @@ - type: Tag id: MindSlave + +- type: Tag + id: GlassesNearsight \ No newline at end of file