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 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 0000000000..c0b5591ed5 Binary files /dev/null and b/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh.ogg differ diff --git a/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh2.ogg b/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh2.ogg new file mode 100644 index 0000000000..bb0925b68b Binary files /dev/null and b/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh2.ogg differ 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 0000000000..970a2040bc Binary files /dev/null and b/Resources/Audio/White/Voice/SpeechSounds/kazooie/ehh3.ogg differ diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index fa8a76c1e8..98033acb6b 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -6245,3 +6245,68 @@ 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 +- 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 +- 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 diff --git a/Resources/Locale/ru-RU/_white/accent/gondola.ftl b/Resources/Locale/ru-RU/_white/accent/gondola.ftl new file mode 100644 index 0000000000..c99156eb8b --- /dev/null +++ b/Resources/Locale/ru-RU/_white/accent/gondola.ftl @@ -0,0 +1 @@ +accent-words-gondola-1 = ... diff --git a/Resources/Locale/ru-RU/_white/chat/managers/chat-manager.ftl b/Resources/Locale/ru-RU/_white/chat/managers/chat-manager.ftl new file mode 100644 index 0000000000..2474e9ff61 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/chat/managers/chat-manager.ftl @@ -0,0 +1,3 @@ +chat-speech-verb-name-gondola = Гондола +chat-speech-verb-gondola-1 = уставляется взглядом +chat-speech-verb-gondola-2 = тяжело дышит diff --git a/Resources/Locale/ru-RU/_white/reagents/fun.ftl b/Resources/Locale/ru-RU/_white/reagents/fun.ftl new file mode 100644 index 0000000000..a6ac973807 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/reagents/fun.ftl @@ -0,0 +1 @@ +reagent-popup-tranquility = Вы чувствуете себя странно спокойными... diff --git a/Resources/Locale/ru-RU/_white/reagents/meta/physical-desc.ftl b/Resources/Locale/ru-RU/_white/reagents/meta/physical-desc.ftl new file mode 100644 index 0000000000..4234c871e0 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/reagents/meta/physical-desc.ftl @@ -0,0 +1 @@ +reagent-physical-desc-calming = успокаивающий diff --git a/Resources/Locale/ru-RU/_white/store/uplink-catalog.ftl b/Resources/Locale/ru-RU/_white/store/uplink-catalog.ftl new file mode 100644 index 0000000000..6d7945e70e --- /dev/null +++ b/Resources/Locale/ru-RU/_white/store/uplink-catalog.ftl @@ -0,0 +1,2 @@ +uplink-gondola-name = Ящик с Гондолой +uplink-gondola-desc = Ящик, содержащий одну стандартную Гондолу. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/white/entities/objects/consumable/food/meat.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/white/entities/objects/consumable/food/meat.ftl new file mode 100644 index 0000000000..55a6d6c194 --- /dev/null +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/white/entities/objects/consumable/food/meat.ftl @@ -0,0 +1,5 @@ +ent-FoodMeatGondola = сырое мясо Гондолы + .desc = Ты монстр. + +ent-FoodMeatGondolaCooked = стейк из Гондолы + .desc = Приготовленное мясо Гондолы... 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 diff --git a/Resources/Prototypes/_White/Accents/full_replacements.yml b/Resources/Prototypes/_White/Accents/full_replacements.yml new file mode 100644 index 0000000000..d952d62195 --- /dev/null +++ b/Resources/Prototypes/_White/Accents/full_replacements.yml @@ -0,0 +1,4 @@ +- type: accent + id: gondola + fullReplacements: + - accent-words-gondola-1 diff --git a/Resources/Prototypes/_White/Catalog/Fills/Crates/npc.yml b/Resources/Prototypes/_White/Catalog/Fills/Crates/npc.yml new file mode 100644 index 0000000000..732bbcff20 --- /dev/null +++ b/Resources/Prototypes/_White/Catalog/Fills/Crates/npc.yml @@ -0,0 +1,9 @@ +- type: entity + parent: CrateLivestock + id: CrateNPCGondola + name: ящик с Гондолой + description: Ящик содержащий в себе Гондолу. + components: + - type: StorageFill + contents: + - id: MobGondola diff --git a/Resources/Prototypes/_White/Catalog/uplink.yml b/Resources/Prototypes/_White/Catalog/uplink.yml index 9e8d094515..4eb6ad56db 100644 --- a/Resources/Prototypes/_White/Catalog/uplink.yml +++ b/Resources/Prototypes/_White/Catalog/uplink.yml @@ -292,3 +292,14 @@ categories: - UplinkDisruption saleLimit: 2 + +- type: listing + id: UplinkCrateNPCGondola + name: uplink-gondola-name + description: uplink-gondola-desc + icon: { sprite: /Textures/White/Mobs/Animals/gondola.rsi, state: icon } + productEntity: CrateNPCGondola + cost: + Telecrystal: 2 + categories: + - UplinkDisruption diff --git a/Resources/Prototypes/_White/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/_White/Entities/Markers/Spawners/mobs.yml new file mode 100644 index 0000000000..cb2386e49c --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Markers/Spawners/mobs.yml @@ -0,0 +1,13 @@ +- type: entity + parent: MarkerBase + id: SpawnMobGondola + name: спавнер Гондола + components: + - type: Sprite + layers: + - state: green + - sprite: White/Mobs/Animals/gondola.rsi + state: icon + - type: ConditionalSpawner + prototypes: + - MobGondola diff --git a/Resources/Prototypes/_White/Entities/Mobs/NPCs/gondola.yml b/Resources/Prototypes/_White/Entities/Mobs/NPCs/gondola.yml new file mode 100644 index 0000000000..c5727ccdb1 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Mobs/NPCs/gondola.yml @@ -0,0 +1,96 @@ +- type: entity + parent: + - MobRespirator + - MobAtmosStandard + - BaseSimpleMob + - MobBloodstream + - MobFlammable + id: MobGondola + name: Гондола + description: Не имея рук, он воплощает даосский принцип у-вэй (бездействия), а выражение его улыбающегося лица показывает его полное принятие мира таким, какой он есть. + components: + - type: FloatingVisuals + - type: RotationVisuals + defaultRotation: 90 + horizontalRotation: 90 + - type: Sprite + sprite: White/Mobs/Animals/gondola.rsi + layers: + - state: gondola_body_medium + map: [ "enum.DamageStateVisualLayers.Base" ] + color: "#6e4e40" + shader: unshaded + - state: gondola_moustache_large_short + map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + shader: unshaded + - type: RandomSprite + available: + - enum.DamageStateVisualLayers.Base: + gondola_body_long: GondolaBrowns + gondola_body_medium: GondolaBrowns + enum.DamageStateVisualLayers.BaseUnshaded: + gondola_moustache_large: "" + gondola_moustache_small: "" + - enum.DamageStateVisualLayers.Base: + gondola_body_medium: GondolaBrowns + gondola_body_short: GondolaBrowns + enum.DamageStateVisualLayers.BaseUnshaded: + gondola_moustache_large_short: "" + gondola_moustache_small_short: "" + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 50 + mask: + - MobMask + layer: + - MobLayer + - type: Butcherable + spawned: + - id: FoodMeatGondola + amount: 3 + - type: Bloodstream + bloodMaxVolume: 150 + - type: Damageable + damageContainer: Biological + damageModifierSet: Scale + - type: Tag + tags: + - VimPilot + - type: MovementSpeedModifier + baseWalkSpeed: 1 + baseSprintSpeed: 2 + - type: Speech + speechVerb: Gondola + speechSounds: GoofyAhh + - type: ReplacementAccent + accent: gondola + - type: HTN + rootTask: + task: IdleCompound + - type: Body + prototype: Animal + - type: NameIdentifier + group: GenericNumber + - type: SlowOnDamage + speedModifierThresholds: + 60: 0.7 + 80: 0.5 + - type: MobPrice + price: 1000 + - type: Perishable + - type: GhostRole + makeSentient: true + allowSpeech: true + allowMovement: true + name: Гондола + description: Ты Гондола. + raffle: + settings: default + - type: GhostTakeoverAvailable + - type: NpcFactionMember + factions: + - Passive diff --git a/Resources/Prototypes/_White/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/_White/Entities/Objects/Consumable/Food/meat.yml new file mode 100644 index 0000000000..9304233c02 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Objects/Consumable/Food/meat.yml @@ -0,0 +1,54 @@ +# RAW + +- type: entity + parent: FoodMeatRawBase + id: FoodMeatGondola + name: raw Gondola meat + description: You're a monster. + components: + - type: Sprite + state: plain + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: UncookedAnimalProteins + Quantity: 9 + - ReagentId: Fat + Quantity: 9 + - ReagentId: Tranquility + Quantity: 10 + - type: Construction + graph: GondolaSteak + node: start + defaultTarget: gondola steak + +# COOKED + +- type: entity + parent: FoodMeatBase + id: FoodMeatGondolaCooked + name: Gondola steak + description: Cooked Gondola meat... + components: + - type: Tag + tags: + - Cooked + - Meat + - Steak + - type: Sprite + layers: + - state: plain-cooked + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nutriment + Quantity: 5 + - ReagentId: Protein + Quantity: 5 + - ReagentId: Tranquility + Quantity: 15 + - type: Construction + graph: GondolaSteak + node: gondola steak diff --git a/Resources/Prototypes/_White/Palettes/sixteen.yml b/Resources/Prototypes/_White/Palettes/sixteen.yml new file mode 100644 index 0000000000..724823c34c --- /dev/null +++ b/Resources/Prototypes/_White/Palettes/sixteen.yml @@ -0,0 +1,8 @@ +- type: palette + id: GondolaBrowns + name: коричневая Гондола + colors: + brown: "#6e4e40" + brown1: "#593d31" + brown2: "#6e4330" + brown3: "#73422d" diff --git a/Resources/Prototypes/_White/Polymorphs/polymorph.yml b/Resources/Prototypes/_White/Polymorphs/polymorph.yml new file mode 100644 index 0000000000..1fab49fc98 --- /dev/null +++ b/Resources/Prototypes/_White/Polymorphs/polymorph.yml @@ -0,0 +1,10 @@ +- type: polymorph + id: Gondola + configuration: + entity: MobGondola + forced: true + transferName: false + transferHumanoidAppearance: false + inventory: Drop + revertOnDeath: true + revertOnCrit: false diff --git a/Resources/Prototypes/_White/Reagents/fun.yml b/Resources/Prototypes/_White/Reagents/fun.yml new file mode 100644 index 0000000000..0079d99d5e --- /dev/null +++ b/Resources/Prototypes/_White/Reagents/fun.yml @@ -0,0 +1,40 @@ +- type: reagent + id: Tranquility + group: Toxins + name: reagent-name-tranquility + desc: reagent-desc-tranquility + physicalDesc: reagent-physical-desc-calming + flavor: mindful + color: "#915E48" + metabolisms: + Poison: + metabolismRate: 0.25 + effects: + - !type:PopupMessage + type: Local + messages: [ "reagent-popup-tranquility" ] + probability: 0.2 + - !type:GenericStatusEffect + key: Muted + component: Muted + refresh: false + type: Add + conditions: + - !type:ReagentThreshold + min: 5 + - !type:GenericStatusEffect + key: Pacified + component: Pacified + refresh: false + type: Add + conditions: + - !type:ReagentThreshold + min: 10 + - !type:Polymorph + prototype: Gondola + conditions: + - !type:OrganType + type: Animal + shouldHave: false + - !type:ReagentThreshold + min: 30 diff --git a/Resources/Prototypes/_White/Recipes/Construction/Graphs/food/steak.yml b/Resources/Prototypes/_White/Recipes/Construction/Graphs/food/steak.yml new file mode 100644 index 0000000000..25e6d20594 --- /dev/null +++ b/Resources/Prototypes/_White/Recipes/Construction/Graphs/food/steak.yml @@ -0,0 +1,15 @@ +- type: constructionGraph + id: GondolaSteak + start: start + graph: + - node: start + edges: + - to: gondola steak + completed: + - !type:PlaySound + sound: /Audio/Effects/sizzle.ogg + steps: + - minTemperature: 345 + + - node: gondola steak + entity: FoodMeatGondolaCooked diff --git a/Resources/Prototypes/_White/Voice/speech_sounds/speech_sounds.yml b/Resources/Prototypes/_White/Voice/speech_sounds/speech_sounds.yml new file mode 100644 index 0000000000..21fdf213b0 --- /dev/null +++ b/Resources/Prototypes/_White/Voice/speech_sounds/speech_sounds.yml @@ -0,0 +1,8 @@ +- type: speechSounds + id: GoofyAhh + saySound: + path: /Audio/White/Voice/SpeechSounds/kazooie/ehh.ogg + askSound: + path: /Audio/White/Voice/SpeechSounds/kazooie/ehh3.ogg + exclaimSound: + path: /Audio/White/Voice/SpeechSounds/kazooie/ehh2.ogg diff --git a/Resources/Prototypes/_White/Voice/speech_verbs.yml b/Resources/Prototypes/_White/Voice/speech_verbs.yml new file mode 100644 index 0000000000..cdf8d4d807 --- /dev/null +++ b/Resources/Prototypes/_White/Voice/speech_verbs.yml @@ -0,0 +1,6 @@ +- type: speechVerb + id: Gondola + name: chat-speech-verb-name-gondola + speechVerbStrings: + - chat-speech-verb-gondola-1 + - chat-speech-verb-gondola-2 diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_long.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_long.png new file mode 100644 index 0000000000..d76d8bcac8 Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_long.png differ 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 0000000000..5a31cce922 Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_medium.png differ 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 0000000000..0dbda000c8 Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_body_short.png differ diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large.png new file mode 100644 index 0000000000..0956b1687a Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large.png differ 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 0000000000..f1455139f9 Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_large_short.png differ diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small.png new file mode 100644 index 0000000000..6150f04e4c Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small.png differ diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small_short.png b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small_short.png new file mode 100644 index 0000000000..383ea4e747 Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/gondola_moustache_small_short.png differ 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 0000000000..9f6b8b20af Binary files /dev/null and b/Resources/Textures/White/Mobs/Animals/gondola.rsi/icon.png differ diff --git a/Resources/Textures/White/Mobs/Animals/gondola.rsi/meta.json b/Resources/Textures/White/Mobs/Animals/gondola.rsi/meta.json new file mode 100644 index 0000000000..a944406ab8 --- /dev/null +++ b/Resources/Textures/White/Mobs/Animals/gondola.rsi/meta.json @@ -0,0 +1,42 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /TG/ station | Edited by PuroSlavKing (Github) ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "gondola_body_long", + "directions": 4 + }, + { + "name": "gondola_body_medium", + "directions": 4 + }, + { + "name": "gondola_body_short", + "directions": 4 + }, + { + "name": "gondola_moustache_large", + "directions": 4 + }, + { + "name": "gondola_moustache_small", + "directions": 4 + }, + { + "name": "gondola_moustache_large_short", + "directions": 4 + }, + { + "name": "gondola_moustache_small_short", + "directions": 4 + } + ] +}