From d0acfd7790ad33bad81c4595f3e568e17957d364 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Sun, 21 Jul 2024 11:30:47 +0000 Subject: [PATCH 1/6] - add: Enhanced vision refactor. (#471) --- .../_White/Overlays/NightVisionSystem.cs | 9 +-- .../_White/Overlays/ThermalVisionOverlay.cs | 47 ++++++++++++-- .../_White/Overlays/ThermalVisionSystem.cs | 15 +++-- .../_Miracle/Systems/NightVisionSystem.cs | 4 +- .../_Miracle/Systems/ThermalVisionSystem.cs | 4 +- .../Systems/SharedEnhancedVisionSystem.cs | 64 +++++++++++++++++++ .../Systems/SharedNightVisionSystem.cs | 64 ------------------- .../Systems/SharedThermalVisionSystem.cs | 64 ------------------- .../Overlays/BaseEnhancedVisionComponent.cs | 24 +++++++ .../_White/Overlays/NightVisionComponent.cs | 16 +---- .../_White/Overlays/ThermalVisionComponent.cs | 16 +---- 11 files changed, 156 insertions(+), 171 deletions(-) create mode 100644 Content.Shared/_Miracle/Systems/SharedEnhancedVisionSystem.cs delete mode 100644 Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs delete mode 100644 Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs create mode 100644 Content.Shared/_White/Overlays/BaseEnhancedVisionComponent.cs diff --git a/Content.Client/_White/Overlays/NightVisionSystem.cs b/Content.Client/_White/Overlays/NightVisionSystem.cs index 92d7d88ac3..6d5812fa20 100644 --- a/Content.Client/_White/Overlays/NightVisionSystem.cs +++ b/Content.Client/_White/Overlays/NightVisionSystem.cs @@ -7,7 +7,8 @@ using Robust.Shared.Player; namespace Content.Client._White.Overlays; -public sealed class NightVisionSystem : SharedNightVisionSystem +public sealed class NightVisionSystem : SharedEnhancedVisionSystem { [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; @@ -46,12 +47,12 @@ public sealed class NightVisionSystem : SharedNightVisionSystem if (TryComp(ent, out NightVisionComponent? nightVision) && nightVision.IsActive) return; - UpdateNightVision(ent, false); + UpdateEnhancedVision(ent, false); } private void OnTempInit(Entity ent, ref ComponentInit args) { - UpdateNightVision(ent, true); + UpdateEnhancedVision(ent, true); } private void OnPlayerAttached(EntityUid uid, NightVisionComponent component, PlayerAttachedEvent args) @@ -76,7 +77,7 @@ public sealed class NightVisionSystem : SharedNightVisionSystem UpdateNightVision(active); } - protected override void UpdateNightVision(EntityUid uid, bool active) + protected override void UpdateEnhancedVision(EntityUid uid, bool active) { if (_player.LocalSession?.AttachedEntity != uid) return; diff --git a/Content.Client/_White/Overlays/ThermalVisionOverlay.cs b/Content.Client/_White/Overlays/ThermalVisionOverlay.cs index ace9bfaf5a..04ed047b23 100644 --- a/Content.Client/_White/Overlays/ThermalVisionOverlay.cs +++ b/Content.Client/_White/Overlays/ThermalVisionOverlay.cs @@ -22,6 +22,7 @@ public sealed class ThermalVisionOverlay : Overlay public override OverlaySpace Space => OverlaySpace.WorldSpace; private readonly List _entries = new(); + private EntityUid _pointLightEntity; public ThermalVisionOverlay() { @@ -46,23 +47,50 @@ public sealed class ThermalVisionOverlay : Overlay return; } + var transform = _entity.GetComponent(ent); + if (_pointLightEntity == default) + { + _pointLightEntity = _entity.SpawnAttachedTo(null, transform.Coordinates); + _entity.EnsureComponent(_pointLightEntity); + _transform.SetParent(_pointLightEntity, ent); + } + else + { + var pointLightXForm = _entity.GetComponent(_pointLightEntity); + if (pointLightXForm.ParentUid != ent) + _transform.SetParent(_pointLightEntity, pointLightXForm, ent, transform); + } + if (HasOccluders(ent)) return; var handle = args.WorldHandle; var eye = args.Viewport.Eye; + var mapId = eye?.Position.MapId; var eyeRot = eye?.Rotation ?? default; _entries.Clear(); var entities = _entity.EntityQueryEnumerator(); while (entities.MoveNext(out var uid, out _, out var sprite, out var xform)) { - if (HasOccluders(uid)) + var entity = uid; + + if (_container.TryGetOuterContainer(uid, xform, out var container)) + { + var owner = container.Owner; + if (_entity.TryGetComponent(owner, out var ownerSprite) && + _entity.TryGetComponent(owner, out var ownerXform)) + { + entity = owner; + sprite = ownerSprite; + xform = ownerXform; + } + } + + if (_entries.Any(e => e.Ent.Item1 == entity)) continue; - _entries.Add(new NightVisionRenderEntry((uid, sprite, xform), - eye?.Position.MapId, - eyeRot)); + _entries.Add(new NightVisionRenderEntry((entity, sprite, xform), mapId, eyeRot)); } foreach (var entry in _entries) @@ -79,7 +107,7 @@ public sealed class ThermalVisionOverlay : Overlay Angle eyeRot) { var (uid, sprite, xform) = ent; - if (xform.MapID != map || _container.IsEntityOrParentInContainer(uid)) + if (xform.MapID != map || HasOccluders(uid)) return; var position = _transform.GetWorldPosition(xform); @@ -95,6 +123,15 @@ public sealed class ThermalVisionOverlay : Overlay Box2.CenteredAround(mapCoordinates.Position, new Vector2(0.4f, 0.4f))); return occluders.Any(o => o.Component.Enabled); } + + public void Reset() + { + if (_pointLightEntity == default) + return; + + _entity.DeleteEntity(_pointLightEntity); + _pointLightEntity = default; + } } public record struct NightVisionRenderEntry( diff --git a/Content.Client/_White/Overlays/ThermalVisionSystem.cs b/Content.Client/_White/Overlays/ThermalVisionSystem.cs index 42457c0bb5..09b4c41235 100644 --- a/Content.Client/_White/Overlays/ThermalVisionSystem.cs +++ b/Content.Client/_White/Overlays/ThermalVisionSystem.cs @@ -1,13 +1,15 @@ using Content.Shared._Miracle.Systems; using Content.Shared.GameTicking; using Content.Shared._White.Overlays; +using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Player; namespace Content.Client._White.Overlays; -public sealed class ThermalVisionSystem : SharedThermalVisionSystem +public sealed class ThermalVisionSystem : SharedEnhancedVisionSystem { [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; @@ -46,12 +48,12 @@ public sealed class ThermalVisionSystem : SharedThermalVisionSystem if (TryComp(ent, out ThermalVisionComponent? thermalVision) && thermalVision.IsActive) return; - UpdateThermalVision(ent, false); + UpdateEnhancedVision(ent, false); } private void OnTempInit(Entity ent, ref ComponentInit args) { - UpdateThermalVision(ent, true); + UpdateEnhancedVision(ent, true); } private void OnPlayerAttached(EntityUid uid, ThermalVisionComponent component, PlayerAttachedEvent args) @@ -76,7 +78,7 @@ public sealed class ThermalVisionSystem : SharedThermalVisionSystem UpdateThermalVision(active); } - protected override void UpdateThermalVision(EntityUid uid, bool active) + protected override void UpdateEnhancedVision(EntityUid uid, bool active) { if (_player.LocalSession?.AttachedEntity != uid) return; @@ -89,6 +91,7 @@ public sealed class ThermalVisionSystem : SharedThermalVisionSystem { if (_player.LocalEntity == null) { + _overlay.Reset(); _overlayMan.RemoveOverlay(_overlay); return; } @@ -99,11 +102,15 @@ public sealed class ThermalVisionSystem : SharedThermalVisionSystem if (active) _overlayMan.AddOverlay(_overlay); else + { + _overlay.Reset(); _overlayMan.RemoveOverlay(_overlay); + } } private void OnRestart(RoundRestartCleanupEvent ev) { + _overlay.Reset(); _overlayMan.RemoveOverlay(_overlay); } } diff --git a/Content.Server/_Miracle/Systems/NightVisionSystem.cs b/Content.Server/_Miracle/Systems/NightVisionSystem.cs index 7575cd518e..2380c607e2 100644 --- a/Content.Server/_Miracle/Systems/NightVisionSystem.cs +++ b/Content.Server/_Miracle/Systems/NightVisionSystem.cs @@ -1,7 +1,9 @@ using Content.Shared._Miracle.Systems; +using Content.Shared._White.Overlays; namespace Content.Server._Miracle.Systems; -public sealed class NightVisionSystem : SharedNightVisionSystem +public sealed class NightVisionSystem : SharedEnhancedVisionSystem { } diff --git a/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs b/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs index 5d13e52fa7..b7404ef95c 100644 --- a/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs +++ b/Content.Server/_Miracle/Systems/ThermalVisionSystem.cs @@ -1,7 +1,9 @@ using Content.Shared._Miracle.Systems; +using Content.Shared._White.Overlays; namespace Content.Server._Miracle.Systems; -public sealed class ThermalVisionSystem : SharedThermalVisionSystem +public sealed class ThermalVisionSystem : SharedEnhancedVisionSystem { } diff --git a/Content.Shared/_Miracle/Systems/SharedEnhancedVisionSystem.cs b/Content.Shared/_Miracle/Systems/SharedEnhancedVisionSystem.cs new file mode 100644 index 0000000000..b9920a3fd8 --- /dev/null +++ b/Content.Shared/_Miracle/Systems/SharedEnhancedVisionSystem.cs @@ -0,0 +1,64 @@ +using Content.Shared._White.Overlays; +using Content.Shared.Actions; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Timing; + +namespace Content.Shared._Miracle.Systems; + +public abstract class SharedEnhancedVisionSystem : EntitySystem + where TComp : BaseEnhancedVisionComponent + where TEvent : InstantActionEvent + where TTempComp : Component +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnToggle); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRemove); + } + + private void OnRemove(EntityUid uid, TComp component, ComponentRemove args) + { + _actions.RemoveAction(uid, component.ToggleActionEntity); + + if (HasComp(uid)) + return; + + UpdateEnhancedVision(uid, false); + } + + private void OnInit(EntityUid uid, TComp component, ComponentInit args) + { + _actions.AddAction(uid, ref component.ToggleActionEntity, component.ToggleAction); + + if (!component.IsActive && HasComp(uid)) + return; + + UpdateEnhancedVision(uid, component.IsActive); + } + + protected virtual void UpdateEnhancedVision(EntityUid uid, bool active) { } + + private void OnToggle(EntityUid uid, TComp component, TEvent args) + { + if (!_timing.IsFirstTimePredicted) + return; + + component.IsActive = !component.IsActive; + + _audio.PlayPredicted(component.IsActive ? component.ActivateSound : component.DeactivateSound, uid, uid); + + args.Handled = true; + + if (!component.IsActive && HasComp(uid)) + return; + + UpdateEnhancedVision(uid, component.IsActive); + } +} diff --git a/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs b/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs deleted file mode 100644 index b81792167e..0000000000 --- a/Content.Shared/_Miracle/Systems/SharedNightVisionSystem.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Content.Shared._White.Overlays; -using Content.Shared.Actions; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Timing; - -namespace Content.Shared._Miracle.Systems; - -public abstract class SharedNightVisionSystem : EntitySystem -{ - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedActionsSystem _actions = default!; - [Dependency] private readonly IGameTiming _timing = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnToggle); - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnRemove); - } - - private void OnRemove(EntityUid uid, NightVisionComponent component, ComponentRemove args) - { - _actions.RemoveAction(uid, component.ToggleActionEntity); - - if (HasComp(uid)) - return; - - UpdateNightVision(uid, false); - } - - private void OnInit(EntityUid uid, NightVisionComponent component, ComponentInit args) - { - _actions.AddAction(uid, ref component.ToggleActionEntity, component.ToggleAction); - - if (!component.IsActive && HasComp(uid)) - return; - - UpdateNightVision(uid, component.IsActive); - } - - protected virtual void UpdateNightVision(EntityUid uid, bool active) { } - - private void OnToggle(EntityUid uid, NightVisionComponent component, ToggleNightVisionEvent args) - { - if (!_timing.IsFirstTimePredicted) - return; - - component.IsActive = !component.IsActive; - - if (component.IsActive && component.ActivateSound != null) - _audio.PlayPredicted(component.ActivateSound, uid, uid); - else if (component.DeactivateSound != null) - _audio.PlayPredicted(component.DeactivateSound, uid, uid); - - args.Handled = true; - - if (!component.IsActive && HasComp(uid)) - return; - - UpdateNightVision(uid, component.IsActive); - } -} diff --git a/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs b/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs deleted file mode 100644 index 7c36bd2cbd..0000000000 --- a/Content.Shared/_Miracle/Systems/SharedThermalVisionSystem.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Content.Shared._White.Overlays; -using Content.Shared.Actions; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Timing; - -namespace Content.Shared._Miracle.Systems; - -public abstract class SharedThermalVisionSystem : EntitySystem -{ - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedActionsSystem _actions = default!; - [Dependency] private readonly IGameTiming _timing = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnToggle); - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnRemove); - } - - private void OnRemove(EntityUid uid, ThermalVisionComponent component, ComponentRemove args) - { - _actions.RemoveAction(uid, component.ToggleActionEntity); - - if (HasComp(uid)) - return; - - UpdateThermalVision(uid, false); - } - - private void OnInit(EntityUid uid, ThermalVisionComponent component, ComponentInit args) - { - _actions.AddAction(uid, ref component.ToggleActionEntity, component.ToggleAction); - - if (!component.IsActive && HasComp(uid)) - return; - - UpdateThermalVision(uid, component.IsActive); - } - - protected virtual void UpdateThermalVision(EntityUid uid, bool active) { } - - private void OnToggle(EntityUid uid, ThermalVisionComponent component, ToggleThermalVisionEvent args) - { - if (!_timing.IsFirstTimePredicted) - return; - - component.IsActive = !component.IsActive; - - if (component.IsActive && component.ActivateSound != null) - _audio.PlayPredicted(component.ActivateSound, uid, uid); - else if (component.DeactivateSound != null) - _audio.PlayPredicted(component.DeactivateSound, uid, uid); - - args.Handled = true; - - if (!component.IsActive && HasComp(uid)) - return; - - UpdateThermalVision(uid, component.IsActive); - } -} diff --git a/Content.Shared/_White/Overlays/BaseEnhancedVisionComponent.cs b/Content.Shared/_White/Overlays/BaseEnhancedVisionComponent.cs new file mode 100644 index 0000000000..bf002b3bb6 --- /dev/null +++ b/Content.Shared/_White/Overlays/BaseEnhancedVisionComponent.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._White.Overlays; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public abstract partial class BaseEnhancedVisionComponent : BaseNvOverlayComponent +{ + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public bool IsActive = true; + + [DataField] + public virtual SoundSpecifier? ActivateSound { get; set; }= new SoundPathSpecifier("/Audio/White/Items/Goggles/activate.ogg"); + + [DataField] + public virtual SoundSpecifier? DeactivateSound { get; set; } = new SoundPathSpecifier("/Audio/White/Items/Goggles/deactivate.ogg"); + + [DataField] + public virtual EntProtoId? ToggleAction { get; set; } + + [ViewVariables] + public EntityUid? ToggleActionEntity; +} diff --git a/Content.Shared/_White/Overlays/NightVisionComponent.cs b/Content.Shared/_White/Overlays/NightVisionComponent.cs index ed706b5241..97c8fe2901 100644 --- a/Content.Shared/_White/Overlays/NightVisionComponent.cs +++ b/Content.Shared/_White/Overlays/NightVisionComponent.cs @@ -6,25 +6,13 @@ using Robust.Shared.Prototypes; namespace Content.Shared._White.Overlays; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class NightVisionComponent : BaseNvOverlayComponent +public sealed partial class NightVisionComponent : BaseEnhancedVisionComponent { [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public override Color Color { get; set; } = Color.FromHex("#98FB98"); - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public bool IsActive = true; - [DataField] - public SoundSpecifier? ActivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/activate.ogg"); - - [DataField] - public SoundSpecifier? DeactivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/deactivate.ogg"); - - [DataField] - public EntProtoId? ToggleAction = "ToggleNightVision"; - - [ViewVariables] - public EntityUid? ToggleActionEntity; + public override EntProtoId? ToggleAction { get; set; } = "ToggleNightVision"; } public sealed partial class ToggleNightVisionEvent : InstantActionEvent diff --git a/Content.Shared/_White/Overlays/ThermalVisionComponent.cs b/Content.Shared/_White/Overlays/ThermalVisionComponent.cs index 7e081a138b..5f3c1d1110 100644 --- a/Content.Shared/_White/Overlays/ThermalVisionComponent.cs +++ b/Content.Shared/_White/Overlays/ThermalVisionComponent.cs @@ -6,25 +6,13 @@ using Robust.Shared.Prototypes; namespace Content.Shared._White.Overlays; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class ThermalVisionComponent : BaseNvOverlayComponent +public sealed partial class ThermalVisionComponent : BaseEnhancedVisionComponent { [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public override Color Color { get; set; } = Color.FromHex("#F84742"); - [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public bool IsActive = true; - [DataField] - public SoundSpecifier? ActivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/activate.ogg"); - - [DataField] - public SoundSpecifier? DeactivateSound = new SoundPathSpecifier("/Audio/White/Items/Goggles/deactivate.ogg"); - - [DataField] - public EntProtoId? ToggleAction = "ToggleThermalVision"; - - [ViewVariables] - public EntityUid? ToggleActionEntity; + public override EntProtoId? ToggleAction { get; set; } = "ToggleThermalVision"; } public sealed partial class ToggleThermalVisionEvent : InstantActionEvent From 795f7dcb41aefea7f9c737f0935f0140acf72338 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sun, 21 Jul 2024 11:31:51 +0000 Subject: [PATCH 2/6] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index fa8a76c1e8..0d12b40336 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6245,3 +6245,19 @@ id: 400 time: '2024-07-20T15:28:44.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/470 +- author: Aviu + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0442\u0435\u0440\u043C\u0430\u043B\ + \u043A\u0438 \u043F\u043E\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044E\ + \u0442 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440, \u0435\u0441\u043B\ + \u0438 \u0432 \u043D\u0435\u043C \u043A\u0442\u043E-\u0442\u043E \u043D\u0430\ + \u0445\u043E\u0434\u0438\u0442\u0441\u044F." + type: Add + - message: "\u0422\u0435\u0440\u043C\u0430\u043B\u043A\u0438 \u0442\u0435\u043F\u0435\ + \u0440\u044C \u0434\u0430\u044E\u0442 \u043D\u0435\u043C\u043D\u043E\u0433\u043E\ + \ \u043D\u043E\u0447\u043D\u043E\u0433\u043E \u0437\u0440\u0435\u043D\u0438\u044F\ + ." + type: Add + id: 401 + time: '2024-07-21T11:30:47.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/471 From 2ae375a708d1d3418ab7b26e20f8da2e16bcbc75 Mon Sep 17 00:00:00 2001 From: ThereDrD0 <88589686+ThereDrD0@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:48:53 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=BD=D1=8B=D1=85=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=83=D1=82=D0=BE=D0=B2=20+=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85?= =?UTF-8?q?=20(#473)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix some loadout prototypes and add new items * fix --- .../Loadouts/Jobs/Science/common.yml | 38 ++++++++++++ .../Loadouts/Jobs/Security/common.yml | 61 ++++++++++++++----- .../Loadouts/Miscellaneous/trinkets.yml | 11 ++++ .../Prototypes/Loadouts/loadout_groups.yml | 51 ++++++++++------ .../Prototypes/Loadouts/role_loadouts.yml | 24 +++++--- 5 files changed, 142 insertions(+), 43 deletions(-) diff --git a/Resources/Prototypes/Loadouts/Jobs/Science/common.yml b/Resources/Prototypes/Loadouts/Jobs/Science/common.yml index 1d9c2c8b82..3ec83a7dc7 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Science/common.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Science/common.yml @@ -7,3 +7,41 @@ id: ScienceHeadset equipment: ears: ClothingHeadsetScience + +# Jumpsuit + +- type: itemLoadout # WD + id: RoboticistJumpskirt + equipment: RoboticistJumpskirt +- type: startingGear + id: RoboticistJumpskirt + equipment: + jumpsuit: ClothingUniformJumpskirtRoboticist + +- type: itemLoadout # WD + id: RoboticistJumpsuit + equipment: RoboticistJumpsuit +- type: startingGear + id: RoboticistJumpsuit + equipment: + jumpsuit: ClothingUniformJumpsuitRoboticist + +# Outercloting + +- type: itemLoadout # WD + id: RoboticistLabCoat + equipment: RoboticistLabCoat +- type: startingGear + id: RoboticistLabCoat + equipment: + outerClothing: ClothingOuterCoatRoboOpened + +# Gloves + +- type: itemLoadout # WD + id: RoboticistGloves + equipment: RoboticistGloves +- type: startingGear + id: RoboticistGloves + equipment: + gloves: ClothingHandsGlovesRobohands diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/common.yml b/Resources/Prototypes/Loadouts/Jobs/Security/common.yml index ac569befe4..a25c32a95b 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/common.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/common.yml @@ -1,15 +1,6 @@ -# jumpsuit -- type: itemLoadout - id: SecurityJumpsuitBlue - equipment: SecurityJumpsuitBlue -- type: startingGear - id: SecurityJumpsuitBlue - equipment: - jumpsuit: ClothingUniformJumpsuitSecBlue +# Ears -# ears - -- type: itemLoadout +- type: itemLoadout # WD id: SecurityHeadset equipment: SecurityHeadset - type: startingGear @@ -17,7 +8,7 @@ equipment: ears: ClothingHeadsetSecurity -- type: itemLoadout +- type: itemLoadout # WD id: SecurityCommandHeadset equipment: SecurityCommandHeadset - type: startingGear @@ -25,7 +16,7 @@ equipment: ears: ClothingHeadsetAltSecurityCommand -- type: itemLoadout +- type: itemLoadout # WD id: SecurityHeadsetFull equipment: SecurityHeadsetFull - type: startingGear @@ -35,7 +26,7 @@ # Mask -- type: itemLoadout +- type: itemLoadout # WD id: SecurityMaskStandard equipment: SecurityMaskStandard - type: startingGear @@ -43,10 +34,50 @@ equipment: mask: ClothingMaskGasSecurity -- type: itemLoadout +- type: itemLoadout # WD id: SecurityMaskSwat equipment: SecurityMaskSwat - type: startingGear id: SecurityMaskSwat equipment: mask: ClothingMaskGasSwat + +# Jumpsuit + +- type: itemLoadout # WD + id: SecurityJumpsuitBlue + equipment: SecurityJumpsuitBlue +- type: startingGear + id: SecurityJumpsuitBlue + equipment: + jumpsuit: ClothingUniformJumpsuitSecBlue + +# Belt + +- type: itemLoadout # WD + id: SecurityWebbing + equipment: SecurityWebbing +- type: startingGear + id: SecurityWebbing + equipment: + belt: ClothingBeltSecurityWebbing + +# Job trinkets + +- type: itemLoadout # WD + id: SecurityWhistle + equipment: SecurityWhistle +- type: startingGear + id: SecurityWhistle + storage: + back: + - SecurityWhistle + +- type: itemLoadout # WD + id: SecurityFlashlight + equipment: SecurityFlashlight +- type: startingGear + id: SecurityFlashlight + storage: + back: + - FlashlightSeclite diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index 2c8c38b9e6..c077e95f67 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -8,6 +8,17 @@ back: - PlushieLizard +# Useful items + +- type: itemLoadout # WD + id: HandheldStationMap + equipment: HandheldStationMap +- type: startingGear + id: HandheldStationMap + storage: + back: + - HandheldStationMap + # Table games - type: itemLoadout # WD id: ChessBoard diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 975bff6227..77df53e05e 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -5,6 +5,7 @@ minLimit: 0 maxLimit: 3 loadouts: + - HandheldStationMap # WD - ChessBoard # WD - CheckerBoard # WD - BackgammonBoard # WD @@ -74,7 +75,6 @@ name: loadout-group-outerclothing minLimit: 0 loadouts: - - CaptainOuterClothing - CaptainWintercoat - type: loadoutGroup @@ -225,7 +225,7 @@ loadouts: - AssistantPDA -- type: loadoutGroup # WD edot +- type: loadoutGroup # WD edit id: BartenderHead name: loadout-group-head minLimit: 0 @@ -233,7 +233,7 @@ - BowlerHat - Tophat - HatMagician - - BeretStandardЙ + - BeretStandard - FrenchBeret - FedoraGrey @@ -617,7 +617,7 @@ - BowlerHat - Tophat - HatMagician - - BeretStandardЙ + - BeretStandard - FrenchBeret - type: loadoutGroup @@ -1211,7 +1211,7 @@ loadouts: - BrownShoes - ShoesLeather - - ClothingShoesBootsLaceup + - BootsLaceup # WD - ScienceWinterBoots - type: loadoutGroup # WD @@ -1238,8 +1238,8 @@ loadouts: - SeniorResearcherJumpsuit - SeniorResearcherJumpskirt - - RoboticistJumpsuit - - RoboticistJumpskirt + - RoboticistJumpsuit # WD + - RoboticistJumpskirt # WD - type: loadoutGroup id: SeniorResearcherOuterclothing @@ -1251,7 +1251,6 @@ - ScienceLabCoat - ScienceWintercoat - RoboticistLabCoat - - RoboticistWintercoat - type: loadoutGroup id: ScientistHead @@ -1287,14 +1286,13 @@ - ScienceLabCoat - ScienceWintercoat - RoboticistLabCoat - - RoboticistWintercoat - type: loadoutGroup id: ScientistShoes name: loadout-group-shoes loadouts: - WhiteShoes - - BlackShoes + - ShoesColorBlack # WD - ScienceWinterBoots - type: loadoutGroup @@ -1333,7 +1331,7 @@ - GlovesColorBlack - GlovesColorPurple - GlovesLatex - - ClothingHandsGlovesRobohands + - RoboticistGloves - type: loadoutGroup # WD id: CommonScienceHeadset @@ -1556,7 +1554,7 @@ loadouts: - SecurityCadetPDA -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityHead name: loadout-group-head minLimit: 0 @@ -1568,14 +1566,14 @@ - CowboyBlack - CowboyBountyHunter -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityMask name: loadout-group-mask minLimit: 0 loadouts: - SecurityMaskStandard -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityCommandMask name: loadout-group-mask minLimit: 0 @@ -1583,7 +1581,7 @@ - SecurityMaskStandard - SecurityMaskSwat -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityNeck name: loadout-group-neck minLimit: 0 @@ -1591,13 +1589,13 @@ - BlackTie - RedTie -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityHeadset name: loadout-group-ears loadouts: - SecurityHeadset -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityCommandHeadset name: loadout-group-ears loadouts: @@ -1609,14 +1607,21 @@ loadouts: - SecurityHeadsetFull -- type: loadoutGroup +- type: loadoutGroup # WD id: CommonSecurityBackpack name: loadout-group-backpack loadouts: - SecurityBackpack - SecuritySatchel - SecurityDuffel - - CommonSatchelLeather # WD + - CommonSatchelLeather + +- type: loadoutGroup # WD + id: CommonSecurityBelt + name: loadout-group-belt + minLimit: 0 + loadouts: + - SecurityWebbing - type: loadoutGroup id: CommonSecurityShoes @@ -1626,6 +1631,14 @@ - BootsJack - SecurityWinterBoots +- type: loadoutGroup # WD + id: CommonSecurityJobTrinkets + name: loadout-group-job-trinkets + minLimit: 0 + loadouts: + - SecurityWhistle + - SecurityFlashlight + # Medical - type: loadoutGroup diff --git a/Resources/Prototypes/Loadouts/role_loadouts.yml b/Resources/Prototypes/Loadouts/role_loadouts.yml index e2d7aba241..df99d7f436 100644 --- a/Resources/Prototypes/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Loadouts/role_loadouts.yml @@ -374,11 +374,12 @@ - CommonSecurityCommandMask # WD - HeadofSecurityNeck - HeadofSecurityJumpsuit - - CommonSecurityBackpack - - HeadofSecurityOuterClothing - CommonGloves # WD + - CommonSecurityBelt # WD + - CommonSecurityBackpack - CommonSecurityShoes - HeadofSecurityPDA + - CommonSecurityJobTrinkets # WD - Trinkets - type: roleLoadout @@ -391,8 +392,10 @@ - WardenJumpsuit - CommonSecurityBackpack - CommonGloves # WD + - CommonSecurityBelt # WD - CommonSecurityShoes - WardenPDA + - CommonSecurityJobTrinkets # WD - Trinkets - type: roleLoadout @@ -405,9 +408,11 @@ - SeniorOfficerJumpsuit - CommonSecurityBackpack - SecurityOuterClothing + - CommonSecurityBelt # WD - CommonGloves # WD - CommonSecurityShoes - SeniorOfficerPDA + - CommonSecurityJobTrinkets # WD - Trinkets - type: roleLoadout @@ -420,10 +425,11 @@ - SecurityJumpsuit - CommonSecurityBackpack - SecurityOuterClothing + - CommonSecurityBelt # WD - CommonGloves # WD - CommonSecurityShoes - SecurityPDA - - SecurityBelt + - CommonSecurityJobTrinkets # WD - Trinkets - type: roleLoadout @@ -439,6 +445,7 @@ - DetectiveGloves - DetectiveShoes - DetectivePDA # WD + - CommonSecurityJobTrinkets # WD - Trinkets - type: roleLoadout @@ -452,6 +459,7 @@ - CommonGloves # WD - CommonSecurityShoes - SecurityCadetPDA + - CommonSecurityJobTrinkets # WD - Trinkets # Medical @@ -491,12 +499,11 @@ - CommonMedicalHeadset # WD - CommonMedicalMask # WD - MedicalDoctorJumpsuit - - MedicalGloves - MedicalBackpack - MedicalDoctorOuterClothing - - CommonMedicalShoes - - CommonMedicalGloves - - MedicalDoctorPDA + - CommonMedicalShoes # WD + - CommonMedicalGloves # WD + - MedicalDoctorPDA # WD - Trinkets - type: roleLoadout @@ -521,10 +528,9 @@ - ChemistEyes - CommonMedicalMask # WD - ChemistJumpsuit - - MedicalGloves - ChemistBackpack - ChemistOuterClothing - - CommonMedicalGloves + - CommonMedicalGloves # WD - ChemistShoes - ChemistPDA - Trinkets From c20ad22dd463eaeebb1e5789be6a39efd47e465a Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sun, 21 Jul 2024 12:49:56 +0000 Subject: [PATCH 4/6] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 0d12b40336..86eea6c842 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6261,3 +6261,40 @@ id: 401 time: '2024-07-21T11:30:47.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/471 +- author: ThereDrD + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043A\u0430\u0440\ + \u0442\u0430 \u0441\u0442\u0430\u043D\u0446\u0438\u0438 \u0432 \u043F\u043E\u0431\ + \u0440\u044F\u043A\u0443\u0448\u043A\u0438 \u043B\u043E\u0430\u0434\u0430\u0443\ + \u0442\u043E\u0432" + type: Add + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0441\u0432\u0438\u0441\ + \u0442\u043E\u043A \u0438 \u0444\u043E\u043D\u0430\u0440\u0438\u043A \u0434\u043B\ + \u044F \u0432\u0441\u0435\u0433\u043E \u0421\u0411 \u0432 \u043B\u043E\u0430\ + \u0434\u0430\u0443\u0442\u044B" + type: Add + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0440\u0430\u0437\ + \u0433\u0440\u0443\u0437\u043A\u0430 \u0432 \u043B\u043E\u0430\u0434\u0430\u0443\ + \u0442\u044B \u0434\u043B\u044F \u0432\u0441\u0435\u0433\u043E \u0421\u0411." + type: Add + - message: "\u041F\u043E\u0444\u0438\u043A\u0448\u0435\u043D\u044B \u043D\u0435\u043A\ + \u043E\u0442\u043E\u0440\u044B\u0435 \u0441\u043B\u043E\u043C\u0430\u043D\u043D\ + \u044B\u0435 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u044B \u043B\u043E\ + \u0430\u0434\u0430\u0443\u0442\u043E\u0432, \u0443 \u043D\u0435\u043A\u043E\u0442\ + \u043E\u0440\u044B\u0445 \u0440\u043E\u043B\u0435\u0439 \u043F\u043E\u044F\u0432\ + \u0438\u043B\u0438\u0441\u044C \u0432\u0435\u0449\u0438, \u043A\u043E\u0442\u043E\ + \u0440\u044B\u0445 \u0440\u0430\u043D\u044C\u0448\u0435 \u043D\u0435 \u0431\u044B\ + \u043B\u043E. \u042D\u0442\u043E \u0432\u0441\u0435 \u0435\u0449\u0435 \u043D\ + \u0435 \u0444\u0438\u043A\u0441\u0438\u0442 \u043F\u0440\u043E\u0431\u043B\u0435\ + \u043C\u0443 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u043D\u0438\u044F\ + \ \u043B\u043E\u0430\u0434\u0430\u0443\u0442\u043E\u0432 \u043F\u0440\u0438\ + \ \u0432\u044B\u0431\u043E\u0440\u0435 \u0432\u0435\u0449\u0435\u0439 \u0441\ + \ \u0442\u0430\u0439\u043C\u0435\u0440\u0430\u043C\u0438. \u041F\u043E\u0434\ + \u0440\u043E\u0431\u043D\u0435\u0435 \u0432 \u0437\u0430\u043A\u0440\u0435\u043F\ + \u043B\u0435\u043D\u043D\u043E\u043C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\ + \u0438\u0438 \u043A\u0430\u043D\u0430\u043B\u0430 \u0438\u0437\u043C\u0435\u043D\ + \u0435\u043D\u0438\u0439." + type: Fix + id: 402 + time: '2024-07-21T12:48:53.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/473 From f2733e6e0cdf509f477b2ab19f8027db175b9547 Mon Sep 17 00:00:00 2001 From: PuroSlavKing <103608145+PuroSlavKing@users.noreply.github.com> Date: Sun, 21 Jul 2024 19:53:20 +0300 Subject: [PATCH 5/6] [Feature] Gondola (#475) --- .../White/Voice/SpeechSounds/kazooie/ehh.ogg | Bin 0 -> 4008 bytes .../White/Voice/SpeechSounds/kazooie/ehh2.ogg | Bin 0 -> 3904 bytes .../White/Voice/SpeechSounds/kazooie/ehh3.ogg | Bin 0 -> 3696 bytes .../Locale/ru-RU/_white/accent/gondola.ftl | 1 + .../_white/chat/managers/chat-manager.ftl | 3 + .../Locale/ru-RU/_white/reagents/fun.ftl | 1 + .../_white/reagents/meta/physical-desc.ftl | 1 + .../ru-RU/_white/store/uplink-catalog.ftl | 2 + .../entities/objects/consumable/food/meat.ftl | 5 + .../_White/Accents/full_replacements.yml | 4 + .../_White/Catalog/Fills/Crates/npc.yml | 9 ++ .../Prototypes/_White/Catalog/uplink.yml | 11 ++ .../_White/Entities/Markers/Spawners/mobs.yml | 13 +++ .../_White/Entities/Mobs/NPCs/gondola.yml | 96 ++++++++++++++++++ .../Entities/Objects/Consumable/Food/meat.yml | 54 ++++++++++ .../Prototypes/_White/Palettes/sixteen.yml | 8 ++ .../_White/Polymorphs/polymorph.yml | 10 ++ Resources/Prototypes/_White/Reagents/fun.yml | 40 ++++++++ .../Construction/Graphs/food/steak.yml | 15 +++ .../Voice/speech_sounds/speech_sounds.yml | 8 ++ .../Prototypes/_White/Voice/speech_verbs.yml | 6 ++ .../Animals/gondola.rsi/gondola_body_long.png | Bin 0 -> 499 bytes .../gondola.rsi/gondola_body_medium.png | Bin 0 -> 497 bytes .../gondola.rsi/gondola_body_short.png | Bin 0 -> 495 bytes .../gondola.rsi/gondola_moustache_large.png | Bin 0 -> 274 bytes .../gondola_moustache_large_short.png | Bin 0 -> 273 bytes .../gondola.rsi/gondola_moustache_small.png | Bin 0 -> 273 bytes .../gondola_moustache_small_short.png | Bin 0 -> 274 bytes .../White/Mobs/Animals/gondola.rsi/icon.png | Bin 0 -> 439 bytes .../White/Mobs/Animals/gondola.rsi/meta.json | 42 ++++++++ 30 files changed, 329 insertions(+) create mode 100644 Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh.ogg create mode 100644 Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh2.ogg create mode 100644 Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh3.ogg create mode 100644 Resources/Locale/ru-RU/_white/accent/gondola.ftl create mode 100644 Resources/Locale/ru-RU/_white/chat/managers/chat-manager.ftl create mode 100644 Resources/Locale/ru-RU/_white/reagents/fun.ftl create mode 100644 Resources/Locale/ru-RU/_white/reagents/meta/physical-desc.ftl create mode 100644 Resources/Locale/ru-RU/_white/store/uplink-catalog.ftl create mode 100644 Resources/Locale/ru-RU/ss14-ru/prototypes/white/entities/objects/consumable/food/meat.ftl create mode 100644 Resources/Prototypes/_White/Accents/full_replacements.yml create mode 100644 Resources/Prototypes/_White/Catalog/Fills/Crates/npc.yml create mode 100644 Resources/Prototypes/_White/Entities/Markers/Spawners/mobs.yml create mode 100644 Resources/Prototypes/_White/Entities/Mobs/NPCs/gondola.yml create mode 100644 Resources/Prototypes/_White/Entities/Objects/Consumable/Food/meat.yml create mode 100644 Resources/Prototypes/_White/Palettes/sixteen.yml create mode 100644 Resources/Prototypes/_White/Polymorphs/polymorph.yml create mode 100644 Resources/Prototypes/_White/Reagents/fun.yml create mode 100644 Resources/Prototypes/_White/Recipes/Construction/Graphs/food/steak.yml create mode 100644 Resources/Prototypes/_White/Voice/speech_sounds/speech_sounds.yml create mode 100644 Resources/Prototypes/_White/Voice/speech_verbs.yml create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_long.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_medium.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_short.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large_short.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small_short.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/icon.png create mode 100644 Resources/Textures/White/Mobs/Animals/gondola.rsi/meta.json diff --git a/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh.ogg b/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c0b5591ed5b15d128883a42cc258b797c7c155c1 GIT binary patch literal 4008 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh3.ogg b/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..970a2040bcd4e7fdc8a47e7cd7835c8378833988 GIT binary patch literal 3696 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_medium.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..5a31cce922af8c1eb3f2f6fe37530c392ff4a9f0 GIT binary patch literal 497 zcmVH5t3mGQ5~PE<8_hS#~im zJM&9V;KK=e0`ns0f&t`QFhEji9LMeW+b|42R7slrECT|#@B6dMTS-Tr;! zbZWCO!HUl^;0}J$5mgf``FIK5707WvNOKfe^DzR*xmX6w^GsdWu^ZjXYs!+(9s!}z zR7bRLyaqq}5wN_;C-`^=kaNKRX~lJ2KgUheP;F`PMFzz1a9+~{O}=;pEX(paZrhe> zON%cuV28)w+57i;%@Lr<$4ii$3kHyL!2oiuqycBkQK{KjJXQTYE?O1~e8~)uyDWBT zK<>?l>#+$XYl9^>ANs=KCr5w;t~p;XZHrSsX}~m1Y*AeVE*QWmgnR%YA5a9*6!HPef&t`Q$On|d!#VN+ zm4$o&@&P)60pwgTfSd~ka0_zw{;l!>v5vDr$u@qhto4Aqy?={*z_AaxW$u*q2yhy& noewDGu?*nsy+4%?DCNEZB4CD(Uq2O@00000NkvXXu0mjf2(i=& literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_short.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_short.png new file mode 100644 index 0000000000000000000000000000000000000000..0dbda000c82d3ed6a17775fe97fb286ac11d40af GIT binary patch literal 495 zcmVxfeMH1R&>t0OTAHfSdyYNIH$oWi(e$bP9E3Ud%a#W12p-u2$FLo1vuM^rYf0C zJNfWD7NO+3K*{7oEFAu121v*?YxUBxIQ^3XOw+_B%V}#drj-9ufSk0o_zGN$AO8a6 z91wt<0|Jn9KmbW6_ygb%_y+s|e*=L(;J*O=0CElpz-a`30Kp$nM4}1!1C#*)$T{E- zC?yZ~@CQ@|`~mO>=l}w68*k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x0_mp*CjGy*=*+67k9E~Ru6O9Sn?Q=KB*-uLKL{{v-oIo&P=vF< zBeIx*f$seVaVQ64wX!vTnpo;P7Pk+r~7u!`pCop)r`njxg HN@xNAh&^IC literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large_short.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large_short.png new file mode 100644 index 0000000000000000000000000000000000000000..f1455139f9dc945ba2f66933d8280d1ddaba011a GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x0_mp*CjGy*=*+67k9E~Ru6O9Sn?Q=KB*-uLKL{{v-oIo&P=vF< zBeIx*f$soBvJZ5sc7?Jp+{5jp`m~`> zr%Zx@;a=*2a`}@n?h0vorGdBguQIBv(%Qm%rDaL&+G($awlgstUk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x0_p$P7Ck*M>CCF8k9E~RuH`!R2q48)666>B9|RaS?_aVXD8gCb z5n0T@z;^_M8K-LVNdpDTJY5_^BHZ6jbL2Xpz{7G?<^TU8?PrUQOt>ZIbd&L5YO2D# zpeL#VON4tqoSB)^5|zEPf0@MO1%k%Gmqn5#8>L?AdTsKzVPxX45^%WC_@KRMVp-7U zyS99vHy(%=I8!F}gS+YGI%ObvG41yeW`%|Y%#18bO5$C-{sHo8`5k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x0_p$P7Ck*M>CCF8k9E~RuH`!R2q48)666>B9|RaS?_aVXD8gCb z5n0T@z;^_M8K-LVNdpDTJzX3_BHZ6jbL2Xpz{7I&$p8ACyj6io9=ZH0-!wefWF+A4 z`BhcGL1B(s#>1J$H#jVxm&~76!_(w+#%HOz{AG@i75DeB{5~S9(BRO(z{J?Z%&NO~ zN!ISFH_wtA_bRM-tFb|xW$RpbAi1>nTc@-GL*s{P$F<^F7ySbiKE_W5I)TB{)z4*} HQ$iB}a)e-` literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/icon.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6b8b20af932f767b03fc875ed4c0850383a4ea GIT binary patch literal 439 zcmV;o0Z9IdP)=2lD`W{|Bv4Cs`B$+DVuRbueHP6P7zw_oZyi~+x4@C|j1c-6KfEPq$ zr2!at_w^T?EyT@6mKkJ+0J7!S_{0LrLg4#PI9rI5oxTou_x&eIy{{)J@SmJ$81O_m z>VQ!P47dXbW$L0tI1_rE-AQ%FqwuDI4L(l Date: Sun, 21 Jul 2024 16:54:24 +0000 Subject: [PATCH 6/6] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 86eea6c842..98033acb6b 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6298,3 +6298,15 @@ id: 402 time: '2024-07-21T12:48:53.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/473 +- author: PuroSlavKing + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0413\u043E\u043D\ + \u0434\u043E\u043B\u044B. \u041C\u043E\u0436\u043D\u043E \u043A\u0443\u043F\u0438\ + \u0442\u044C \u044F\u0449\u0438\u043A \u0441 \u0413\u043E\u043D\u0434\u043E\u043B\ + \u043E\u0439 \u0437\u0430 2\u0422\u041A, \u0432 \u0430\u043F\u043B\u0438\u043D\ + \u043A\u0435, \u0432\u043A\u043B\u0430\u0434\u043A\u0430 \u0441\u0430\u0431\u043E\ + \u0442\u0430\u0436." + type: Add + id: 403 + time: '2024-07-21T16:53:20.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/475