diff --git a/Content.Client/Anomaly/Effects/ClientInnerBodySystem.cs b/Content.Client/Anomaly/Effects/ClientInnerBodySystem.cs new file mode 100644 index 00000000000..efb1a8d46e8 --- /dev/null +++ b/Content.Client/Anomaly/Effects/ClientInnerBodySystem.cs @@ -0,0 +1,50 @@ +using Content.Shared.Anomaly.Components; +using Content.Shared.Anomaly.Effects; +using Content.Shared.Body.Components; +using Robust.Client.GameObjects; + +namespace Content.Client.Anomaly.Effects; + +public sealed class ClientInnerBodyAnomalySystem : SharedInnerBodyAnomalySystem +{ + public override void Initialize() + { + SubscribeLocalEvent(OnAfterHandleState); + SubscribeLocalEvent(OnCompShutdown); + } + + private void OnAfterHandleState(Entity ent, ref AfterAutoHandleStateEvent args) + { + if (!TryComp(ent, out var sprite)) + return; + + if (ent.Comp.FallbackSprite is null) + return; + + if (!sprite.LayerMapTryGet(ent.Comp.LayerMap, out var index)) + index = sprite.LayerMapReserveBlank(ent.Comp.LayerMap); + + if (TryComp(ent, out var body) && + body.Prototype is not null && + ent.Comp.SpeciesSprites.TryGetValue(body.Prototype.Value, out var speciesSprite)) + { + sprite.LayerSetSprite(index, speciesSprite); + } + else + { + sprite.LayerSetSprite(index, ent.Comp.FallbackSprite); + } + + sprite.LayerSetVisible(index, true); + sprite.LayerSetShader(index, "unshaded"); + } + + private void OnCompShutdown(Entity ent, ref ComponentShutdown args) + { + if (!TryComp(ent, out var sprite)) + return; + + var index = sprite.LayerMapGet(ent.Comp.LayerMap); + sprite.LayerSetVisible(index, false); + } +} diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index a941f0acff9..1c1f1984de4 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -1,7 +1,12 @@ +using System.Linq; +using System.Numerics; +using System.Threading; using Content.Client.Verbs; using Content.Shared.Examine; using Content.Shared.IdentityManagement; using Content.Shared.Input; +using Content.Shared.Interaction.Events; +using Content.Shared.Item; using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Client.GameObjects; @@ -12,13 +17,8 @@ using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Utility; -using System.Linq; -using System.Numerics; -using System.Threading; using static Content.Shared.Interaction.SharedInteractionSystem; using static Robust.Client.UserInterface.Controls.BoxContainer; -using Content.Shared.Interaction.Events; -using Content.Shared.Item; using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Examine @@ -35,7 +35,6 @@ public sealed class ExamineSystem : ExamineSystemShared private EntityUid _examinedEntity; private EntityUid _lastExaminedEntity; - private EntityUid _playerEntity; private Popup? _examineTooltipOpen; private ScreenCoordinates _popupPos; private CancellationTokenSource? _requestCancelTokenSource; @@ -74,9 +73,9 @@ private void OnExaminedItemDropped(EntityUid item, ItemComponent comp, DroppedEv public override void Update(float frameTime) { if (_examineTooltipOpen is not {Visible: true}) return; - if (!_examinedEntity.Valid || !_playerEntity.Valid) return; + if (!_examinedEntity.Valid || _playerManager.LocalEntity is not { } player) return; - if (!CanExamine(_playerEntity, _examinedEntity)) + if (!CanExamine(player, _examinedEntity)) CloseTooltip(); } @@ -114,9 +113,8 @@ private bool HandleExamine(in PointerInputCmdHandler.PointerInputCmdArgs args) return false; } - _playerEntity = _playerManager.LocalEntity ?? default; - - if (_playerEntity == default || !CanExamine(_playerEntity, entity)) + if (_playerManager.LocalEntity is not { } player || + !CanExamine(player, entity)) { return false; } diff --git a/Content.Client/PDA/PdaBoundUserInterface.cs b/Content.Client/PDA/PdaBoundUserInterface.cs index 37ce9c4280f..2d4033390c3 100644 --- a/Content.Client/PDA/PdaBoundUserInterface.cs +++ b/Content.Client/PDA/PdaBoundUserInterface.cs @@ -4,18 +4,20 @@ using Content.Shared.PDA; using JetBrains.Annotations; using Robust.Client.UserInterface; -using Robust.Shared.Configuration; namespace Content.Client.PDA { [UsedImplicitly] public sealed class PdaBoundUserInterface : CartridgeLoaderBoundUserInterface { + private readonly PdaSystem _pdaSystem; + [ViewVariables] private PdaMenu? _menu; public PdaBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { + _pdaSystem = EntMan.System(); } protected override void Open() @@ -92,7 +94,13 @@ protected override void UpdateState(BoundUserInterfaceState state) if (state is not PdaUpdateState updateState) return; - _menu?.UpdateState(updateState); + if (_menu == null) + { + _pdaSystem.Log.Error("PDA state received before menu was created."); + return; + } + + _menu.UpdateState(updateState); } protected override void AttachCartridgeUI(Control cartridgeUIFragment, string? title) diff --git a/Content.Client/PDA/PdaMenu.xaml b/Content.Client/PDA/PdaMenu.xaml index 8b26860332d..8c9b4ae2ee6 100644 --- a/Content.Client/PDA/PdaMenu.xaml +++ b/Content.Client/PDA/PdaMenu.xaml @@ -67,14 +67,17 @@ Description="{Loc 'comp-pda-ui-ringtone-button-description'}"/> diff --git a/Content.Client/Physics/Controllers/MoverController.cs b/Content.Client/Physics/Controllers/MoverController.cs index 03df383eebc..c97110b208e 100644 --- a/Content.Client/Physics/Controllers/MoverController.cs +++ b/Content.Client/Physics/Controllers/MoverController.cs @@ -8,132 +8,131 @@ using Robust.Shared.Player; using Robust.Shared.Timing; -namespace Content.Client.Physics.Controllers +namespace Content.Client.Physics.Controllers; + +public sealed class MoverController : SharedMoverController { - public sealed class MoverController : SharedMoverController - { - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnRelayPlayerAttached); - SubscribeLocalEvent(OnRelayPlayerDetached); - SubscribeLocalEvent(OnPlayerAttached); - SubscribeLocalEvent(OnPlayerDetached); - - SubscribeLocalEvent(OnUpdatePredicted); - SubscribeLocalEvent(OnUpdateRelayTargetPredicted); - SubscribeLocalEvent(OnUpdatePullablePredicted); - } + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRelayPlayerAttached); + SubscribeLocalEvent(OnRelayPlayerDetached); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + + SubscribeLocalEvent(OnUpdatePredicted); + SubscribeLocalEvent(OnUpdateRelayTargetPredicted); + SubscribeLocalEvent(OnUpdatePullablePredicted); + } - private void OnUpdatePredicted(Entity entity, ref UpdateIsPredictedEvent args) - { - // Enable prediction if an entity is controlled by the player - if (entity.Owner == _playerManager.LocalEntity) - args.IsPredicted = true; - } + private void OnUpdatePredicted(Entity entity, ref UpdateIsPredictedEvent args) + { + // Enable prediction if an entity is controlled by the player + if (entity.Owner == _playerManager.LocalEntity) + args.IsPredicted = true; + } - private void OnUpdateRelayTargetPredicted(Entity entity, ref UpdateIsPredictedEvent args) - { - if (entity.Comp.Source == _playerManager.LocalEntity) - args.IsPredicted = true; - } + private void OnUpdateRelayTargetPredicted(Entity entity, ref UpdateIsPredictedEvent args) + { + if (entity.Comp.Source == _playerManager.LocalEntity) + args.IsPredicted = true; + } - private void OnUpdatePullablePredicted(Entity entity, ref UpdateIsPredictedEvent args) - { - // Enable prediction if an entity is being pulled by the player. - // Disable prediction if an entity is being pulled by some non-player entity. + private void OnUpdatePullablePredicted(Entity entity, ref UpdateIsPredictedEvent args) + { + // Enable prediction if an entity is being pulled by the player. + // Disable prediction if an entity is being pulled by some non-player entity. - if (entity.Comp.Puller == _playerManager.LocalEntity) - args.IsPredicted = true; - else if (entity.Comp.Puller != null) - args.BlockPrediction = true; + if (entity.Comp.Puller == _playerManager.LocalEntity) + args.IsPredicted = true; + else if (entity.Comp.Puller != null) + args.BlockPrediction = true; - // TODO recursive pulling checks? - // What if the entity is being pulled by a vehicle controlled by the player? - } + // TODO recursive pulling checks? + // What if the entity is being pulled by a vehicle controlled by the player? + } - private void OnRelayPlayerAttached(Entity entity, ref LocalPlayerAttachedEvent args) - { - Physics.UpdateIsPredicted(entity.Owner); - Physics.UpdateIsPredicted(entity.Comp.RelayEntity); - if (MoverQuery.TryGetComponent(entity.Comp.RelayEntity, out var inputMover)) - SetMoveInput((entity.Comp.RelayEntity, inputMover), MoveButtons.None); - } + private void OnRelayPlayerAttached(Entity entity, ref LocalPlayerAttachedEvent args) + { + Physics.UpdateIsPredicted(entity.Owner); + Physics.UpdateIsPredicted(entity.Comp.RelayEntity); + if (MoverQuery.TryGetComponent(entity.Comp.RelayEntity, out var inputMover)) + SetMoveInput((entity.Comp.RelayEntity, inputMover), MoveButtons.None); + } - private void OnRelayPlayerDetached(Entity entity, ref LocalPlayerDetachedEvent args) - { - Physics.UpdateIsPredicted(entity.Owner); - Physics.UpdateIsPredicted(entity.Comp.RelayEntity); - if (MoverQuery.TryGetComponent(entity.Comp.RelayEntity, out var inputMover)) - SetMoveInput((entity.Comp.RelayEntity, inputMover), MoveButtons.None); - } + private void OnRelayPlayerDetached(Entity entity, ref LocalPlayerDetachedEvent args) + { + Physics.UpdateIsPredicted(entity.Owner); + Physics.UpdateIsPredicted(entity.Comp.RelayEntity); + if (MoverQuery.TryGetComponent(entity.Comp.RelayEntity, out var inputMover)) + SetMoveInput((entity.Comp.RelayEntity, inputMover), MoveButtons.None); + } - private void OnPlayerAttached(Entity entity, ref LocalPlayerAttachedEvent args) - { - SetMoveInput(entity, MoveButtons.None); - } + private void OnPlayerAttached(Entity entity, ref LocalPlayerAttachedEvent args) + { + SetMoveInput(entity, MoveButtons.None); + } - private void OnPlayerDetached(Entity entity, ref LocalPlayerDetachedEvent args) - { - SetMoveInput(entity, MoveButtons.None); - } + private void OnPlayerDetached(Entity entity, ref LocalPlayerDetachedEvent args) + { + SetMoveInput(entity, MoveButtons.None); + } - public override void UpdateBeforeSolve(bool prediction, float frameTime) - { - base.UpdateBeforeSolve(prediction, frameTime); + public override void UpdateBeforeSolve(bool prediction, float frameTime) + { + base.UpdateBeforeSolve(prediction, frameTime); - if (_playerManager.LocalEntity is not {Valid: true} player) - return; + if (_playerManager.LocalEntity is not {Valid: true} player) + return; - if (RelayQuery.TryGetComponent(player, out var relayMover)) - HandleClientsideMovement(relayMover.RelayEntity, frameTime); + if (RelayQuery.TryGetComponent(player, out var relayMover)) + HandleClientsideMovement(relayMover.RelayEntity, frameTime); - HandleClientsideMovement(player, frameTime); - } + HandleClientsideMovement(player, frameTime); + } - private void HandleClientsideMovement(EntityUid player, float frameTime) + private void HandleClientsideMovement(EntityUid player, float frameTime) + { + if (!MoverQuery.TryGetComponent(player, out var mover) || + !XformQuery.TryGetComponent(player, out var xform)) { - if (!MoverQuery.TryGetComponent(player, out var mover) || - !XformQuery.TryGetComponent(player, out var xform)) - { - return; - } - - var physicsUid = player; - PhysicsComponent? body; - var xformMover = xform; + return; + } - if (mover.ToParent && RelayQuery.HasComponent(xform.ParentUid)) - { - if (!PhysicsQuery.TryGetComponent(xform.ParentUid, out body) || - !XformQuery.TryGetComponent(xform.ParentUid, out xformMover)) - { - return; - } + var physicsUid = player; + PhysicsComponent? body; + var xformMover = xform; - physicsUid = xform.ParentUid; - } - else if (!PhysicsQuery.TryGetComponent(player, out body)) + if (mover.ToParent && RelayQuery.HasComponent(xform.ParentUid)) + { + if (!PhysicsQuery.TryGetComponent(xform.ParentUid, out body) || + !XformQuery.TryGetComponent(xform.ParentUid, out xformMover)) { return; } - // Server-side should just be handled on its own so we'll just do this shizznit - HandleMobMovement( - player, - mover, - physicsUid, - body, - xformMover, - frameTime); + physicsUid = xform.ParentUid; } - - protected override bool CanSound() + else if (!PhysicsQuery.TryGetComponent(player, out body)) { - return _timing is { IsFirstTimePredicted: true, InSimulation: true }; + return; } + + // Server-side should just be handled on its own so we'll just do this shizznit + HandleMobMovement( + player, + mover, + physicsUid, + body, + xformMover, + frameTime); + } + + protected override bool CanSound() + { + return _timing is { IsFirstTimePredicted: true, InSimulation: true }; } } diff --git a/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs b/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs index 5a082485a5a..a6a20958f53 100644 --- a/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs +++ b/Content.Client/Power/ActivatableUIRequiresPowerSystem.cs @@ -18,9 +18,6 @@ protected override void OnActivate(Entity e return; } - if (TryComp(ent.Owner, out var panel) && panel.Open) - return; - _popup.PopupClient(Loc.GetString("base-computer-ui-component-not-powered", ("machine", ent.Owner)), args.User, args.User); args.Cancel(); } diff --git a/Content.Client/Replay/ContentReplayPlaybackManager.cs b/Content.Client/Replay/ContentReplayPlaybackManager.cs index f90731bfa75..b96eae44e9d 100644 --- a/Content.Client/Replay/ContentReplayPlaybackManager.cs +++ b/Content.Client/Replay/ContentReplayPlaybackManager.cs @@ -1,10 +1,8 @@ -using System.IO.Compression; using Content.Client.Administration.Managers; using Content.Client.Launcher; using Content.Client.MainMenu; using Content.Client.Replay.Spectator; using Content.Client.Replay.UI.Loading; -using Content.Client.Stylesheets; using Content.Client.UserInterface.Systems.Chat; using Content.Shared.Chat; using Content.Shared.Effects; @@ -26,8 +24,6 @@ using Robust.Client.State; using Robust.Client.Timing; using Robust.Client.UserInterface; -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.CustomControls; using Robust.Shared; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; @@ -60,7 +56,7 @@ public sealed class ContentReplayPlaybackManager public bool IsScreenshotMode = false; private bool _initialized; - + /// /// Most recently loaded file, for re-attempting the load with error tolerance. /// Required because the zip reader auto-disposes and I'm too lazy to change it so that @@ -96,32 +92,17 @@ private void OnFinishedLoading(Exception? exception) return; } - ReturnToDefaultState(); - - // Show a popup window with the error message - var text = Loc.GetString("replay-loading-failed", ("reason", exception)); - var box = new BoxContainer - { - Orientation = BoxContainer.LayoutOrientation.Vertical, - Children = {new Label {Text = text}} - }; + if (_client.RunLevel == ClientRunLevel.SinglePlayerGame) + _client.StopSinglePlayer(); - var popup = new DefaultWindow { Title = "Error!" }; - popup.Contents.AddChild(box); + Action? retryAction = null; + Action? cancelAction = null; - // Add button for attempting to re-load the replay while ignoring some errors. - if (!_cfg.GetCVar(CVars.ReplayIgnoreErrors) && LastLoad is {} last) + if (!_cfg.GetCVar(CVars.ReplayIgnoreErrors) && LastLoad is { } last) { - var button = new Button - { - Text = Loc.GetString("replay-loading-retry"), - StyleClasses = { StyleBase.ButtonCaution } - }; - - button.OnPressed += _ => + retryAction = () => { _cfg.SetCVar(CVars.ReplayIgnoreErrors, true); - popup.Dispose(); IReplayFileReader reader = last.Zip == null ? new ReplayFileReaderResources(_resMan, last.Folder) @@ -129,11 +110,20 @@ private void OnFinishedLoading(Exception? exception) _loadMan.LoadAndStartReplay(reader); }; - - box.AddChild(button); } - popup.OpenCentered(); + // If we have an explicit menu to get back to (e.g. replay browser UI), show a cancel button. + if (DefaultState != null) + { + cancelAction = () => + { + _stateMan.RequestStateChange(DefaultState); + }; + } + + // Switch to a new game state to present the error and cancel/retry options. + var state = _stateMan.RequestStateChange(); + state.SetData(exception, cancelAction, retryAction); } public void ReturnToDefaultState() diff --git a/Content.Client/Replay/UI/Loading/ReplayLoadingFailed.cs b/Content.Client/Replay/UI/Loading/ReplayLoadingFailed.cs new file mode 100644 index 00000000000..223895eb29c --- /dev/null +++ b/Content.Client/Replay/UI/Loading/ReplayLoadingFailed.cs @@ -0,0 +1,36 @@ +using Content.Client.Stylesheets; +using Robust.Client.State; +using Robust.Client.UserInterface; +using Robust.Shared.Utility; + +namespace Content.Client.Replay.UI.Loading; + +/// +/// State used to display an error message if a replay failed to load. +/// +/// +/// +public sealed class ReplayLoadingFailed : State +{ + [Dependency] private readonly IStylesheetManager _stylesheetManager = default!; + [Dependency] private readonly IUserInterfaceManager _userInterface = default!; + + private ReplayLoadingFailedControl? _control; + + public void SetData(Exception exception, Action? cancelPressed, Action? retryPressed) + { + DebugTools.Assert(_control != null); + _control.SetData(exception, cancelPressed, retryPressed); + } + + protected override void Startup() + { + _control = new ReplayLoadingFailedControl(_stylesheetManager); + _userInterface.StateRoot.AddChild(_control); + } + + protected override void Shutdown() + { + _control?.Orphan(); + } +} diff --git a/Content.Client/Replay/UI/Loading/ReplayLoadingFailedControl.xaml b/Content.Client/Replay/UI/Loading/ReplayLoadingFailedControl.xaml new file mode 100644 index 00000000000..5f77a66e535 --- /dev/null +++ b/Content.Client/Replay/UI/Loading/ReplayLoadingFailedControl.xaml @@ -0,0 +1,14 @@ + + + + + + + + + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] -[Access(typeof(SharedAnomalySystem))] +[Access(typeof(SharedAnomalySystem), typeof(SharedInnerBodyAnomalySystem))] public sealed partial class AnomalyComponent : Component { /// @@ -184,21 +184,21 @@ public sealed partial class AnomalyComponent : Component /// /// The minimum amount of research points generated per second /// - [DataField("minPointsPerSecond")] + [DataField] public int MinPointsPerSecond = 10; /// /// The maximum amount of research points generated per second /// This doesn't include the point bonus for being unstable. /// - [DataField("maxPointsPerSecond")] + [DataField] public int MaxPointsPerSecond = 70; /// /// The multiplier applied to the point value for the /// anomaly being above the /// - [DataField("growingPointMultiplier")] + [DataField] public float GrowingPointMultiplier = 1.5f; #endregion @@ -252,10 +252,13 @@ public sealed partial class AnomalyComponent : Component /// [ViewVariables(VVAccess.ReadWrite)] [DataField("offset")] - public Vector2 FloatingOffset = new(0, 0.15f); + public Vector2 FloatingOffset = new(0, 0); public readonly string AnimationKey = "anomalyfloat"; #endregion + + [DataField] + public bool DeleteEntity = true; } /// diff --git a/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs b/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs new file mode 100644 index 00000000000..e88cedb18ef --- /dev/null +++ b/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs @@ -0,0 +1,72 @@ +using Content.Shared.Anomaly.Effects; +using Content.Shared.Body.Prototypes; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.Anomaly.Components; + +/// +/// An anomaly within the body of a living being. Controls the ability to return to the standard state. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(SharedInnerBodyAnomalySystem))] +public sealed partial class InnerBodyAnomalyComponent : Component +{ + [DataField] + public bool Injected; + + /// + /// A prototype of an entity whose components will be added to the anomaly host **AND** then removed at the right time + /// + [DataField(required: true)] + public EntProtoId? InjectionProto; + + /// + /// Duration of stun from the effect of the anomaly + /// + [DataField] + public float StunDuration = 4f; + + /// + /// A message sent in chat to a player who has become infected by an anomaly + /// + [DataField] + public LocId? StartMessage = null; + + /// + /// A message sent in chat to a player who has cleared an anomaly + /// + [DataField] + public LocId? EndMessage = "inner-anomaly-end-message"; + + /// + /// Sound, playing on becoming anomaly + /// + [DataField] + public SoundSpecifier? StartSound = new SoundPathSpecifier("/Audio/Effects/inneranomaly.ogg"); + + /// + /// Used to display messages to the player about their level of disease progression + /// + [DataField] + public float LastSeverityInformed = 0f; + + /// + /// The fallback sprite to be added on the original entity. Allows you to visually identify the feature and type of anomaly to other players + /// + [DataField, AutoNetworkedField] + public SpriteSpecifier? FallbackSprite = null; + + /// + /// Ability to use unique sprites for different body types + /// + [DataField, AutoNetworkedField] + public Dictionary, SpriteSpecifier> SpeciesSprites = new(); + + /// + /// The key of the entity layer into which the sprite will be inserted + /// + [DataField] + public string LayerMap = "inner_anomaly_layer"; +} diff --git a/Content.Shared/Anomaly/Components/InnerBodyAnomalyInjectorComponent.cs b/Content.Shared/Anomaly/Components/InnerBodyAnomalyInjectorComponent.cs new file mode 100644 index 00000000000..e4c398c9cc5 --- /dev/null +++ b/Content.Shared/Anomaly/Components/InnerBodyAnomalyInjectorComponent.cs @@ -0,0 +1,21 @@ +using Content.Shared.Anomaly.Effects; +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Anomaly.Components; + +/// +/// On contact with an entity, if it meets the conditions, it will transfer the specified components to it +/// +[RegisterComponent, Access(typeof(SharedInnerBodyAnomalySystem))] +public sealed partial class InnerBodyAnomalyInjectorComponent : Component +{ + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// components that will be automatically removed after “curing” + /// + [DataField(required: true)] + public ComponentRegistry InjectionComponents = default!; +} diff --git a/Content.Shared/Anomaly/Effects/SharedInnerBodyAnomalySystem.cs b/Content.Shared/Anomaly/Effects/SharedInnerBodyAnomalySystem.cs new file mode 100644 index 00000000000..a1ec7cd3973 --- /dev/null +++ b/Content.Shared/Anomaly/Effects/SharedInnerBodyAnomalySystem.cs @@ -0,0 +1,5 @@ +namespace Content.Shared.Anomaly.Effects; + +public abstract class SharedInnerBodyAnomalySystem : EntitySystem +{ +} diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs index c3d6591b725..9a0cde29988 100644 --- a/Content.Shared/Anomaly/SharedAnomalySystem.cs +++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs @@ -1,13 +1,10 @@ using Content.Shared.Administration.Logs; using Content.Shared.Anomaly.Components; using Content.Shared.Anomaly.Prototypes; -using Content.Shared.Damage; using Content.Shared.Database; -using Content.Shared.Interaction; using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.Weapons.Melee.Components; -using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -21,6 +18,7 @@ using Robust.Shared.Utility; using System.Linq; using System.Numerics; +using Content.Shared.Actions; namespace Content.Shared.Anomaly; @@ -36,6 +34,7 @@ public abstract class SharedAnomalySystem : EntitySystem [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; public override void Initialize() { @@ -145,7 +144,7 @@ public void DoAnomalySupercriticalEvent(EntityUid uid, AnomalyComponent? compone if (!Timing.IsFirstTimePredicted) return; - Audio.PlayPvs(component.SupercriticalSound, uid); + Audio.PlayPvs(component.SupercriticalSound, Transform(uid).Coordinates); if (_net.IsServer) Log.Info($"Raising supercritical event. Entity: {ToPrettyString(uid)}"); @@ -169,7 +168,8 @@ public void DoAnomalySupercriticalEvent(EntityUid uid, AnomalyComponent? compone /// The anomaly being shut down /// /// Whether or not the anomaly ended via supercritical event - public void EndAnomaly(EntityUid uid, AnomalyComponent? component = null, bool supercritical = false) + /// Create anomaly cores based on the result of completing an anomaly? + public void EndAnomaly(EntityUid uid, AnomalyComponent? component = null, bool supercritical = false, bool spawnCore = true) { // Logging before resolve, in case the anomaly has deleted itself. if (_net.IsServer) @@ -186,9 +186,14 @@ public void EndAnomaly(EntityUid uid, AnomalyComponent? component = null, bool s if (Terminating(uid) || _net.IsClient) return; - Spawn(supercritical ? component.CorePrototype : component.CoreInertPrototype, Transform(uid).Coordinates); + if (spawnCore) + { + var core = Spawn(supercritical ? component.CorePrototype : component.CoreInertPrototype, Transform(uid).Coordinates); + _transform.PlaceNextTo(core, uid); + } - QueueDel(uid); + if (component.DeleteEntity) + QueueDel(uid); } /// @@ -458,3 +463,5 @@ public partial record struct AnomalySpawnSettings() /// public bool SpawnOnSeverityChanged { get; set; } = false; } + +public sealed partial class ActionAnomalyPulseEvent : InstantActionEvent { } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index aa19ef27277..c1247bec905 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -242,8 +242,9 @@ private bool CanBuckle(EntityUid buckleUid, if (_whitelistSystem.IsWhitelistFail(strapComp.Whitelist, buckleUid) || _whitelistSystem.IsBlacklistPass(strapComp.Blacklist, buckleUid)) { - if (_netManager.IsServer && popup && user != null) - _popup.PopupEntity(Loc.GetString("buckle-component-cannot-fit-message"), user.Value, user.Value, PopupType.Medium); + if (popup) + _popup.PopupClient(Loc.GetString("buckle-component-cannot-fit-message"), user, PopupType.Medium); + return false; } @@ -261,23 +262,24 @@ private bool CanBuckle(EntityUid buckleUid, if (user != null && !HasComp(user)) { - // PopupPredicted when - if (_netManager.IsServer && popup) - _popup.PopupEntity(Loc.GetString("buckle-component-no-hands-message"), user.Value, user.Value); + if (popup) + _popup.PopupClient(Loc.GetString("buckle-component-no-hands-message"), user); + return false; } if (buckleComp.Buckled) { - if (_netManager.IsClient || popup || user == null) - return false; - - var message = Loc.GetString(buckleUid == user + if (popup) + { + var message = Loc.GetString(buckleUid == user ? "buckle-component-already-buckled-message" : "buckle-component-other-already-buckled-message", ("owner", Identity.Entity(buckleUid, EntityManager))); - _popup.PopupEntity(message, user.Value, user.Value); + _popup.PopupClient(message, user); + } + return false; } @@ -291,29 +293,30 @@ private bool CanBuckle(EntityUid buckleUid, continue; } - if (_netManager.IsClient || popup || user == null) - return false; - - var message = Loc.GetString(buckleUid == user + if (popup) + { + var message = Loc.GetString(buckleUid == user ? "buckle-component-cannot-buckle-message" : "buckle-component-other-cannot-buckle-message", ("owner", Identity.Entity(buckleUid, EntityManager))); - _popup.PopupEntity(message, user.Value, user.Value); + _popup.PopupClient(message, user); + } + return false; } if (!StrapHasSpace(strapUid, buckleComp, strapComp)) { - if (_netManager.IsClient || popup || user == null) - return false; - - var message = Loc.GetString(buckleUid == user - ? "buckle-component-cannot-fit-message" - : "buckle-component-other-cannot-fit-message", + if (popup) + { + var message = Loc.GetString(buckleUid == user + ? "buckle-component-cannot-buckle-message" + : "buckle-component-other-cannot-buckle-message", ("owner", Identity.Entity(buckleUid, EntityManager))); - _popup.PopupEntity(message, user.Value, user.Value); + _popup.PopupClient(message, user); + } return false; } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.cs b/Content.Shared/Buckle/SharedBuckleSystem.cs index d190f685ed0..da1d111f977 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Standing; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; -using Robust.Shared.Network; using Robust.Shared.Physics.Systems; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -18,7 +17,6 @@ namespace Content.Shared.Buckle; public abstract partial class SharedBuckleSystem : EntitySystem { - [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly ISharedPlayerManager _playerManager = default!; diff --git a/Content.Shared/Doors/Components/AirlockComponent.cs b/Content.Shared/Doors/Components/AirlockComponent.cs index b2fa7574f76..6577b1942ac 100644 --- a/Content.Shared/Doors/Components/AirlockComponent.cs +++ b/Content.Shared/Doors/Components/AirlockComponent.cs @@ -48,7 +48,7 @@ public sealed partial class AirlockComponent : Component /// /// Whether the airlock should auto close. This value is reset every time the airlock closes. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] public bool AutoClose = true; /// diff --git a/Content.Shared/Doors/Systems/SharedAirlockSystem.cs b/Content.Shared/Doors/Systems/SharedAirlockSystem.cs index 5a6d45d9ec0..c0c274207b6 100644 --- a/Content.Shared/Doors/Systems/SharedAirlockSystem.cs +++ b/Content.Shared/Doors/Systems/SharedAirlockSystem.cs @@ -56,7 +56,10 @@ private void OnStateChanged(EntityUid uid, AirlockComponent component, DoorState // Make sure the airlock auto closes again next time it is opened if (args.State == DoorState.Closed) + { component.AutoClose = true; + Dirty(uid, component); + } } private void OnBeforeDoorOpened(EntityUid uid, AirlockComponent component, BeforeDoorOpenedEvent args) diff --git a/Content.Shared/Mind/SharedMindSystem.cs b/Content.Shared/Mind/SharedMindSystem.cs index ac98d333393..f420e84eea9 100644 --- a/Content.Shared/Mind/SharedMindSystem.cs +++ b/Content.Shared/Mind/SharedMindSystem.cs @@ -39,6 +39,7 @@ public override void Initialize() SubscribeLocalEvent(OnVisitingTerminating); SubscribeLocalEvent(OnReset); SubscribeLocalEvent(OnMindStartup); + SubscribeLocalEvent(OnRenamed); } public override void Shutdown() @@ -184,6 +185,12 @@ private void OnSuicide(EntityUid uid, MindContainerComponent component, SuicideE args.Handled = true; } + private void OnRenamed(Entity ent, ref EntityRenamedEvent args) + { + ent.Comp.CharacterName = args.NewName; + Dirty(ent); + } + public EntityUid? GetMind(EntityUid uid, MindContainerComponent? mind = null) { if (!Resolve(uid, ref mind)) diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index 5f35adb3337..6392956d632 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -438,7 +438,7 @@ public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, if (!CanPull(pullerUid, pullableUid)) return false; - if (!HasComp(pullerUid) || !TryComp(pullableUid, out PhysicsComponent? pullablePhysics)) + if (!TryComp(pullerUid, out PhysicsComponent? pullerPhysics) || !TryComp(pullableUid, out PhysicsComponent? pullablePhysics)) return false; // Ensure that the puller is not currently pulling anything. @@ -485,17 +485,19 @@ public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, // joint state handling will manage its own state if (!_timing.ApplyingState) { - // Joint startup - var union = _physics.GetHardAABB(pullerUid).Union(_physics.GetHardAABB(pullableUid, body: pullablePhysics)); - var length = Math.Max(union.Size.X, union.Size.Y) * 0.75f; - - var joint = _joints.CreateDistanceJoint(pullableUid, pullerUid, id: pullableComp.PullJointId); + var joint = _joints.CreateDistanceJoint(pullableUid, pullerUid, + pullablePhysics.LocalCenter, pullerPhysics.LocalCenter, + id: pullableComp.PullJointId); joint.CollideConnected = false; // This maximum has to be there because if the object is constrained too closely, the clamping goes backwards and asserts. - joint.MaxLength = Math.Max(1.0f, length); - joint.Length = length * 0.75f; + // Internally, the joint length has been set to the distance between the pivots. + // Add an additional 15cm (pretty arbitrary) to the maximum length for the hard limit. + joint.MaxLength = joint.Length + 0.15f; joint.MinLength = 0f; - joint.Stiffness = 1f; + // Set the spring stiffness to zero. The joint won't have any effect provided + // the current length is beteen MinLength and MaxLength. At those limits, the + // joint will have infinite stiffness. + joint.Stiffness = 0f; _physics.SetFixedRotation(pullableUid, pullableComp.FixedRotationOnPull, body: pullablePhysics); } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index c41db21b01e..472d56b1d69 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -24,492 +24,491 @@ using Robust.Shared.Utility; using PullableComponent = Content.Shared.Movement.Pulling.Components.PullableComponent; -namespace Content.Shared.Movement.Systems +namespace Content.Shared.Movement.Systems; + +/// +/// Handles player and NPC mob movement. +/// NPCs are handled server-side only. +/// +public abstract partial class SharedMoverController : VirtualController { + [Dependency] private readonly IConfigurationManager _configManager = default!; + [Dependency] protected readonly IGameTiming Timing = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly SharedGravitySystem _gravity = default!; + [Dependency] protected readonly SharedPhysicsSystem Physics = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly TagSystem _tags = default!; + + protected EntityQuery MoverQuery; + protected EntityQuery MobMoverQuery; + protected EntityQuery RelayTargetQuery; + protected EntityQuery ModifierQuery; + protected EntityQuery PhysicsQuery; + protected EntityQuery RelayQuery; + protected EntityQuery PullableQuery; + protected EntityQuery XformQuery; + protected EntityQuery CanMoveInAirQuery; + protected EntityQuery NoRotateQuery; + protected EntityQuery FootstepModifierQuery; + protected EntityQuery MapGridQuery; + + /// + /// + /// + private float _stopSpeed; + + private bool _relativeMovement; + /// - /// Handles player and NPC mob movement. - /// NPCs are handled server-side only. + /// Cache the mob movement calculation to re-use elsewhere. /// - public abstract partial class SharedMoverController : VirtualController + public Dictionary UsedMobMovement = new(); + + public override void Initialize() { - [Dependency] private readonly IConfigurationManager _configManager = default!; - [Dependency] protected readonly IGameTiming Timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; - [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedContainerSystem _container = default!; - [Dependency] private readonly SharedMapSystem _mapSystem = default!; - [Dependency] private readonly SharedGravitySystem _gravity = default!; - [Dependency] protected readonly SharedPhysicsSystem Physics = default!; - [Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly TagSystem _tags = default!; - - protected EntityQuery MoverQuery; - protected EntityQuery MobMoverQuery; - protected EntityQuery RelayTargetQuery; - protected EntityQuery ModifierQuery; - protected EntityQuery PhysicsQuery; - protected EntityQuery RelayQuery; - protected EntityQuery PullableQuery; - protected EntityQuery XformQuery; - protected EntityQuery CanMoveInAirQuery; - protected EntityQuery NoRotateQuery; - protected EntityQuery FootstepModifierQuery; - protected EntityQuery MapGridQuery; - - /// - /// - /// - private float _stopSpeed; - - private bool _relativeMovement; - - /// - /// Cache the mob movement calculation to re-use elsewhere. - /// - public Dictionary UsedMobMovement = new(); - - public override void Initialize() - { - base.Initialize(); - - MoverQuery = GetEntityQuery(); - MobMoverQuery = GetEntityQuery(); - ModifierQuery = GetEntityQuery(); - RelayTargetQuery = GetEntityQuery(); - PhysicsQuery = GetEntityQuery(); - RelayQuery = GetEntityQuery(); - PullableQuery = GetEntityQuery(); - XformQuery = GetEntityQuery(); - NoRotateQuery = GetEntityQuery(); - CanMoveInAirQuery = GetEntityQuery(); - FootstepModifierQuery = GetEntityQuery(); - MapGridQuery = GetEntityQuery(); - - InitializeInput(); - InitializeRelay(); - Subs.CVar(_configManager, CCVars.RelativeMovement, value => _relativeMovement = value, true); - Subs.CVar(_configManager, CCVars.StopSpeed, value => _stopSpeed = value, true); - UpdatesBefore.Add(typeof(TileFrictionController)); - } + base.Initialize(); + + MoverQuery = GetEntityQuery(); + MobMoverQuery = GetEntityQuery(); + ModifierQuery = GetEntityQuery(); + RelayTargetQuery = GetEntityQuery(); + PhysicsQuery = GetEntityQuery(); + RelayQuery = GetEntityQuery(); + PullableQuery = GetEntityQuery(); + XformQuery = GetEntityQuery(); + NoRotateQuery = GetEntityQuery(); + CanMoveInAirQuery = GetEntityQuery(); + FootstepModifierQuery = GetEntityQuery(); + MapGridQuery = GetEntityQuery(); + + InitializeInput(); + InitializeRelay(); + Subs.CVar(_configManager, CCVars.RelativeMovement, value => _relativeMovement = value, true); + Subs.CVar(_configManager, CCVars.StopSpeed, value => _stopSpeed = value, true); + UpdatesBefore.Add(typeof(TileFrictionController)); + } - public override void Shutdown() - { - base.Shutdown(); - ShutdownInput(); - } + public override void Shutdown() + { + base.Shutdown(); + ShutdownInput(); + } - public override void UpdateAfterSolve(bool prediction, float frameTime) - { - base.UpdateAfterSolve(prediction, frameTime); - UsedMobMovement.Clear(); - } + public override void UpdateAfterSolve(bool prediction, float frameTime) + { + base.UpdateAfterSolve(prediction, frameTime); + UsedMobMovement.Clear(); + } - /// - /// Movement while considering actionblockers, weightlessness, etc. - /// - protected void HandleMobMovement( - EntityUid uid, - InputMoverComponent mover, - EntityUid physicsUid, - PhysicsComponent physicsComponent, - TransformComponent xform, - float frameTime) + /// + /// Movement while considering actionblockers, weightlessness, etc. + /// + protected void HandleMobMovement( + EntityUid uid, + InputMoverComponent mover, + EntityUid physicsUid, + PhysicsComponent physicsComponent, + TransformComponent xform, + float frameTime) + { + var canMove = mover.CanMove; + if (RelayTargetQuery.TryGetComponent(uid, out var relayTarget)) { - var canMove = mover.CanMove; - if (RelayTargetQuery.TryGetComponent(uid, out var relayTarget)) + if (_mobState.IsIncapacitated(relayTarget.Source) || + TryComp(relayTarget.Source, out _) || + !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover)) { - if (_mobState.IsIncapacitated(relayTarget.Source) || - TryComp(relayTarget.Source, out _) || - !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover)) - { - canMove = false; - } - else - { - mover.RelativeEntity = relayedMover.RelativeEntity; - mover.RelativeRotation = relayedMover.RelativeRotation; - mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation; - } + canMove = false; } - - // Update relative movement - if (mover.LerpTarget < Timing.CurTime) + else { - if (TryUpdateRelative(mover, xform)) - { - Dirty(uid, mover); - } + mover.RelativeEntity = relayedMover.RelativeEntity; + mover.RelativeRotation = relayedMover.RelativeRotation; + mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation; } + } - LerpRotation(uid, mover, frameTime); - - if (!canMove - || physicsComponent.BodyStatus != BodyStatus.OnGround && !CanMoveInAirQuery.HasComponent(uid) - || PullableQuery.TryGetComponent(uid, out var pullable) && pullable.BeingPulled) + // Update relative movement + if (mover.LerpTarget < Timing.CurTime) + { + if (TryUpdateRelative(mover, xform)) { - UsedMobMovement[uid] = false; - return; + Dirty(uid, mover); } + } + LerpRotation(uid, mover, frameTime); - UsedMobMovement[uid] = true; - // Specifically don't use mover.Owner because that may be different to the actual physics body being moved. - var weightless = _gravity.IsWeightless(physicsUid, physicsComponent, xform); - var (walkDir, sprintDir) = GetVelocityInput(mover); - var touching = false; - - // Handle wall-pushes. - if (weightless) - { - if (xform.GridUid != null) - touching = true; + if (!canMove + || physicsComponent.BodyStatus != BodyStatus.OnGround && !CanMoveInAirQuery.HasComponent(uid) + || PullableQuery.TryGetComponent(uid, out var pullable) && pullable.BeingPulled) + { + UsedMobMovement[uid] = false; + return; + } - if (!touching) - { - var ev = new CanWeightlessMoveEvent(uid); - RaiseLocalEvent(uid, ref ev, true); - // No gravity: is our entity touching anything? - touching = ev.CanMove; - if (!touching && TryComp(uid, out var mobMover)) - touching |= IsAroundCollider(PhysicsSystem, xform, mobMover, physicsUid, physicsComponent); - } - } + UsedMobMovement[uid] = true; + // Specifically don't use mover.Owner because that may be different to the actual physics body being moved. + var weightless = _gravity.IsWeightless(physicsUid, physicsComponent, xform); + var (walkDir, sprintDir) = GetVelocityInput(mover); + var touching = false; - // Get current tile def for things like speed/friction mods - ContentTileDefinition? tileDef = null; + // Handle wall-pushes. + if (weightless) + { + if (xform.GridUid != null) + touching = true; - // Don't bother getting the tiledef here if we're weightless or in-air - // since no tile-based modifiers should be applying in that situation - if (MapGridQuery.TryComp(xform.GridUid, out var gridComp) - && _mapSystem.TryGetTileRef(xform.GridUid.Value, gridComp, xform.Coordinates, out var tile) - && !(weightless || physicsComponent.BodyStatus == BodyStatus.InAir)) + if (!touching) { - tileDef = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId]; + var ev = new CanWeightlessMoveEvent(uid); + RaiseLocalEvent(uid, ref ev, true); + // No gravity: is our entity touching anything? + touching = ev.CanMove; + + if (!touching && TryComp(uid, out var mobMover)) + touching |= IsAroundCollider(PhysicsSystem, xform, mobMover, physicsUid, physicsComponent); } + } - // Regular movement. - // Target velocity. - // This is relative to the map / grid we're on. - var moveSpeedComponent = ModifierQuery.CompOrNull(uid); + // Get current tile def for things like speed/friction mods + ContentTileDefinition? tileDef = null; - var walkSpeed = moveSpeedComponent?.CurrentWalkSpeed ?? MovementSpeedModifierComponent.DefaultBaseWalkSpeed; - var sprintSpeed = moveSpeedComponent?.CurrentSprintSpeed ?? MovementSpeedModifierComponent.DefaultBaseSprintSpeed; + // Don't bother getting the tiledef here if we're weightless or in-air + // since no tile-based modifiers should be applying in that situation + if (MapGridQuery.TryComp(xform.GridUid, out var gridComp) + && _mapSystem.TryGetTileRef(xform.GridUid.Value, gridComp, xform.Coordinates, out var tile) + && !(weightless || physicsComponent.BodyStatus == BodyStatus.InAir)) + { + tileDef = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId]; + } - var total = walkDir * walkSpeed + sprintDir * sprintSpeed; + // Regular movement. + // Target velocity. + // This is relative to the map / grid we're on. + var moveSpeedComponent = ModifierQuery.CompOrNull(uid); - var parentRotation = GetParentGridAngle(mover); - var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total; + var walkSpeed = moveSpeedComponent?.CurrentWalkSpeed ?? MovementSpeedModifierComponent.DefaultBaseWalkSpeed; + var sprintSpeed = moveSpeedComponent?.CurrentSprintSpeed ?? MovementSpeedModifierComponent.DefaultBaseSprintSpeed; - DebugTools.Assert(MathHelper.CloseToPercent(total.Length(), worldTotal.Length())); + var total = walkDir * walkSpeed + sprintDir * sprintSpeed; - var velocity = physicsComponent.LinearVelocity; - float friction; - float weightlessModifier; - float accel; + var parentRotation = GetParentGridAngle(mover); + var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total; - if (weightless) - { - if (gridComp == null && !MapGridQuery.HasComp(xform.GridUid)) - friction = moveSpeedComponent?.OffGridFriction ?? MovementSpeedModifierComponent.DefaultOffGridFriction; - else if (worldTotal != Vector2.Zero && touching) - friction = moveSpeedComponent?.WeightlessFriction ?? MovementSpeedModifierComponent.DefaultWeightlessFriction; - else - friction = moveSpeedComponent?.WeightlessFrictionNoInput ?? MovementSpeedModifierComponent.DefaultWeightlessFrictionNoInput; + DebugTools.Assert(MathHelper.CloseToPercent(total.Length(), worldTotal.Length())); + + var velocity = physicsComponent.LinearVelocity; + float friction; + float weightlessModifier; + float accel; + + if (weightless) + { + if (gridComp == null && !MapGridQuery.HasComp(xform.GridUid)) + friction = moveSpeedComponent?.OffGridFriction ?? MovementSpeedModifierComponent.DefaultOffGridFriction; + else if (worldTotal != Vector2.Zero && touching) + friction = moveSpeedComponent?.WeightlessFriction ?? MovementSpeedModifierComponent.DefaultWeightlessFriction; + else + friction = moveSpeedComponent?.WeightlessFrictionNoInput ?? MovementSpeedModifierComponent.DefaultWeightlessFrictionNoInput; - weightlessModifier = moveSpeedComponent?.WeightlessModifier ?? MovementSpeedModifierComponent.DefaultWeightlessModifier; - accel = moveSpeedComponent?.WeightlessAcceleration ?? MovementSpeedModifierComponent.DefaultWeightlessAcceleration; + weightlessModifier = moveSpeedComponent?.WeightlessModifier ?? MovementSpeedModifierComponent.DefaultWeightlessModifier; + accel = moveSpeedComponent?.WeightlessAcceleration ?? MovementSpeedModifierComponent.DefaultWeightlessAcceleration; + } + else + { + if (worldTotal != Vector2.Zero || moveSpeedComponent?.FrictionNoInput == null) + { + friction = tileDef?.MobFriction ?? moveSpeedComponent?.Friction ?? MovementSpeedModifierComponent.DefaultFriction; } else { - if (worldTotal != Vector2.Zero || moveSpeedComponent?.FrictionNoInput == null) - { - friction = tileDef?.MobFriction ?? moveSpeedComponent?.Friction ?? MovementSpeedModifierComponent.DefaultFriction; - } - else - { - friction = tileDef?.MobFrictionNoInput ?? moveSpeedComponent.FrictionNoInput ?? MovementSpeedModifierComponent.DefaultFrictionNoInput; - } - - weightlessModifier = 1f; - accel = tileDef?.MobAcceleration ?? moveSpeedComponent?.Acceleration ?? MovementSpeedModifierComponent.DefaultAcceleration; + friction = tileDef?.MobFrictionNoInput ?? moveSpeedComponent.FrictionNoInput ?? MovementSpeedModifierComponent.DefaultFrictionNoInput; } - var minimumFrictionSpeed = moveSpeedComponent?.MinimumFrictionSpeed ?? MovementSpeedModifierComponent.DefaultMinimumFrictionSpeed; - Friction(minimumFrictionSpeed, frameTime, friction, ref velocity); + weightlessModifier = 1f; + accel = tileDef?.MobAcceleration ?? moveSpeedComponent?.Acceleration ?? MovementSpeedModifierComponent.DefaultAcceleration; + } - if (worldTotal != Vector2.Zero) + var minimumFrictionSpeed = moveSpeedComponent?.MinimumFrictionSpeed ?? MovementSpeedModifierComponent.DefaultMinimumFrictionSpeed; + Friction(minimumFrictionSpeed, frameTime, friction, ref velocity); + + if (worldTotal != Vector2.Zero) + { + if (!NoRotateQuery.HasComponent(uid)) + { + // TODO apparently this results in a duplicate move event because "This should have its event run during + // island solver"??. So maybe SetRotation needs an argument to avoid raising an event? + var worldRot = _transform.GetWorldRotation(xform); + _transform.SetLocalRotation(xform, xform.LocalRotation + worldTotal.ToWorldAngle() - worldRot); + } + + if (!weightless && MobMoverQuery.TryGetComponent(uid, out var mobMover) && + TryGetSound(weightless, uid, mover, mobMover, xform, out var sound, tileDef: tileDef)) { - if (!NoRotateQuery.HasComponent(uid)) + var soundModifier = mover.Sprinting ? 3.5f : 1.5f; + + var audioParams = sound.Params + .WithVolume(sound.Params.Volume + soundModifier) + .WithVariation(sound.Params.Variation ?? mobMover.FootstepVariation); + + // If we're a relay target then predict the sound for all relays. + if (relayTarget != null) { - // TODO apparently this results in a duplicate move event because "This should have its event run during - // island solver"??. So maybe SetRotation needs an argument to avoid raising an event? - var worldRot = _transform.GetWorldRotation(xform); - _transform.SetLocalRotation(xform, xform.LocalRotation + worldTotal.ToWorldAngle() - worldRot); + _audio.PlayPredicted(sound, uid, relayTarget.Source, audioParams); } - - if (!weightless && MobMoverQuery.TryGetComponent(uid, out var mobMover) && - TryGetSound(weightless, uid, mover, mobMover, xform, out var sound, tileDef: tileDef)) + else { - var soundModifier = mover.Sprinting ? 3.5f : 1.5f; - - var audioParams = sound.Params - .WithVolume(sound.Params.Volume + soundModifier) - .WithVariation(sound.Params.Variation ?? mobMover.FootstepVariation); - - // If we're a relay target then predict the sound for all relays. - if (relayTarget != null) - { - _audio.PlayPredicted(sound, uid, relayTarget.Source, audioParams); - } - else - { - _audio.PlayPredicted(sound, uid, uid, audioParams); - } + _audio.PlayPredicted(sound, uid, uid, audioParams); } } + } - worldTotal *= weightlessModifier; + worldTotal *= weightlessModifier; - if (!weightless || touching) - Accelerate(ref velocity, in worldTotal, accel, frameTime); + if (!weightless || touching) + Accelerate(ref velocity, in worldTotal, accel, frameTime); - PhysicsSystem.SetLinearVelocity(physicsUid, velocity, body: physicsComponent); + PhysicsSystem.SetLinearVelocity(physicsUid, velocity, body: physicsComponent); - // Ensures that players do not spiiiiiiin - PhysicsSystem.SetAngularVelocity(physicsUid, 0, body: physicsComponent); - } + // Ensures that players do not spiiiiiiin + PhysicsSystem.SetAngularVelocity(physicsUid, 0, body: physicsComponent); + } - public void LerpRotation(EntityUid uid, InputMoverComponent mover, float frameTime) + public void LerpRotation(EntityUid uid, InputMoverComponent mover, float frameTime) + { + var angleDiff = Angle.ShortestDistance(mover.RelativeRotation, mover.TargetRelativeRotation); + + // if we've just traversed then lerp to our target rotation. + if (!angleDiff.EqualsApprox(Angle.Zero, 0.001)) { - var angleDiff = Angle.ShortestDistance(mover.RelativeRotation, mover.TargetRelativeRotation); + var adjustment = angleDiff * 5f * frameTime; + var minAdjustment = 0.01 * frameTime; - // if we've just traversed then lerp to our target rotation. - if (!angleDiff.EqualsApprox(Angle.Zero, 0.001)) + if (angleDiff < 0) { - var adjustment = angleDiff * 5f * frameTime; - var minAdjustment = 0.01 * frameTime; - - if (angleDiff < 0) - { - adjustment = Math.Min(adjustment, -minAdjustment); - adjustment = Math.Clamp(adjustment, angleDiff, -angleDiff); - } - else - { - adjustment = Math.Max(adjustment, minAdjustment); - adjustment = Math.Clamp(adjustment, -angleDiff, angleDiff); - } - - mover.RelativeRotation += adjustment; - mover.RelativeRotation.FlipPositive(); - Dirty(uid, mover); + adjustment = Math.Min(adjustment, -minAdjustment); + adjustment = Math.Clamp(adjustment, angleDiff, -angleDiff); } - else if (!angleDiff.Equals(Angle.Zero)) + else { - mover.TargetRelativeRotation.FlipPositive(); - mover.RelativeRotation = mover.TargetRelativeRotation; - Dirty(uid, mover); + adjustment = Math.Max(adjustment, minAdjustment); + adjustment = Math.Clamp(adjustment, -angleDiff, angleDiff); } - } - private void Friction(float minimumFrictionSpeed, float frameTime, float friction, ref Vector2 velocity) + mover.RelativeRotation += adjustment; + mover.RelativeRotation.FlipPositive(); + Dirty(uid, mover); + } + else if (!angleDiff.Equals(Angle.Zero)) { - var speed = velocity.Length(); + mover.TargetRelativeRotation.FlipPositive(); + mover.RelativeRotation = mover.TargetRelativeRotation; + Dirty(uid, mover); + } + } - if (speed < minimumFrictionSpeed) - return; + private void Friction(float minimumFrictionSpeed, float frameTime, float friction, ref Vector2 velocity) + { + var speed = velocity.Length(); - var drop = 0f; + if (speed < minimumFrictionSpeed) + return; - var control = MathF.Max(_stopSpeed, speed); - drop += control * friction * frameTime; + var drop = 0f; - var newSpeed = MathF.Max(0f, speed - drop); + var control = MathF.Max(_stopSpeed, speed); + drop += control * friction * frameTime; - if (newSpeed.Equals(speed)) - return; + var newSpeed = MathF.Max(0f, speed - drop); - newSpeed /= speed; - velocity *= newSpeed; - } + if (newSpeed.Equals(speed)) + return; - private void Accelerate(ref Vector2 currentVelocity, in Vector2 velocity, float accel, float frameTime) - { - var wishDir = velocity != Vector2.Zero ? velocity.Normalized() : Vector2.Zero; - var wishSpeed = velocity.Length(); + newSpeed /= speed; + velocity *= newSpeed; + } - var currentSpeed = Vector2.Dot(currentVelocity, wishDir); - var addSpeed = wishSpeed - currentSpeed; + private void Accelerate(ref Vector2 currentVelocity, in Vector2 velocity, float accel, float frameTime) + { + var wishDir = velocity != Vector2.Zero ? velocity.Normalized() : Vector2.Zero; + var wishSpeed = velocity.Length(); - if (addSpeed <= 0f) - return; + var currentSpeed = Vector2.Dot(currentVelocity, wishDir); + var addSpeed = wishSpeed - currentSpeed; - var accelSpeed = accel * frameTime * wishSpeed; - accelSpeed = MathF.Min(accelSpeed, addSpeed); + if (addSpeed <= 0f) + return; - currentVelocity += wishDir * accelSpeed; - } + var accelSpeed = accel * frameTime * wishSpeed; + accelSpeed = MathF.Min(accelSpeed, addSpeed); - public bool UseMobMovement(EntityUid uid) - { - return UsedMobMovement.TryGetValue(uid, out var used) && used; - } + currentVelocity += wishDir * accelSpeed; + } - /// - /// Used for weightlessness to determine if we are near a wall. - /// - private bool IsAroundCollider(SharedPhysicsSystem broadPhaseSystem, TransformComponent transform, MobMoverComponent mover, EntityUid physicsUid, PhysicsComponent collider) - { - var enlargedAABB = _lookup.GetWorldAABB(physicsUid, transform).Enlarged(mover.GrabRangeVV); + public bool UseMobMovement(EntityUid uid) + { + return UsedMobMovement.TryGetValue(uid, out var used) && used; + } - foreach (var otherCollider in broadPhaseSystem.GetCollidingEntities(transform.MapID, enlargedAABB)) - { - if (otherCollider == collider) - continue; // Don't try to push off of yourself! - - // Only allow pushing off of anchored things that have collision. - if (otherCollider.BodyType != BodyType.Static || - !otherCollider.CanCollide || - ((collider.CollisionMask & otherCollider.CollisionLayer) == 0 && - (otherCollider.CollisionMask & collider.CollisionLayer) == 0) || - (TryComp(otherCollider.Owner, out PullableComponent? pullable) && pullable.BeingPulled)) - { - continue; - } + /// + /// Used for weightlessness to determine if we are near a wall. + /// + private bool IsAroundCollider(SharedPhysicsSystem broadPhaseSystem, TransformComponent transform, MobMoverComponent mover, EntityUid physicsUid, PhysicsComponent collider) + { + var enlargedAABB = _lookup.GetWorldAABB(physicsUid, transform).Enlarged(mover.GrabRangeVV); - return true; + foreach (var otherCollider in broadPhaseSystem.GetCollidingEntities(transform.MapID, enlargedAABB)) + { + if (otherCollider == collider) + continue; // Don't try to push off of yourself! + + // Only allow pushing off of anchored things that have collision. + if (otherCollider.BodyType != BodyType.Static || + !otherCollider.CanCollide || + ((collider.CollisionMask & otherCollider.CollisionLayer) == 0 && + (otherCollider.CollisionMask & collider.CollisionLayer) == 0) || + (TryComp(otherCollider.Owner, out PullableComponent? pullable) && pullable.BeingPulled)) + { + continue; } - return false; + return true; } - protected abstract bool CanSound(); + return false; + } + + protected abstract bool CanSound(); - private bool TryGetSound( - bool weightless, - EntityUid uid, - InputMoverComponent mover, - MobMoverComponent mobMover, - TransformComponent xform, - [NotNullWhen(true)] out SoundSpecifier? sound, - ContentTileDefinition? tileDef = null) - { - sound = null; + private bool TryGetSound( + bool weightless, + EntityUid uid, + InputMoverComponent mover, + MobMoverComponent mobMover, + TransformComponent xform, + [NotNullWhen(true)] out SoundSpecifier? sound, + ContentTileDefinition? tileDef = null) + { + sound = null; - if (!CanSound() || !_tags.HasTag(uid, "FootstepSound")) - return false; + if (!CanSound() || !_tags.HasTag(uid, "FootstepSound")) + return false; - var coordinates = xform.Coordinates; - var distanceNeeded = mover.Sprinting - ? mobMover.StepSoundMoveDistanceRunning - : mobMover.StepSoundMoveDistanceWalking; + var coordinates = xform.Coordinates; + var distanceNeeded = mover.Sprinting + ? mobMover.StepSoundMoveDistanceRunning + : mobMover.StepSoundMoveDistanceWalking; - // Handle footsteps. - if (!weightless) + // Handle footsteps. + if (!weightless) + { + // Can happen when teleporting between grids. + if (!coordinates.TryDistance(EntityManager, mobMover.LastPosition, out var distance) || + distance > distanceNeeded) { - // Can happen when teleporting between grids. - if (!coordinates.TryDistance(EntityManager, mobMover.LastPosition, out var distance) || - distance > distanceNeeded) - { - mobMover.StepSoundDistance = distanceNeeded; - } - else - { - mobMover.StepSoundDistance += distance; - } + mobMover.StepSoundDistance = distanceNeeded; } else { - // In space no one can hear you squeak - return false; + mobMover.StepSoundDistance += distance; } + } + else + { + // In space no one can hear you squeak + return false; + } - mobMover.LastPosition = coordinates; + mobMover.LastPosition = coordinates; - if (mobMover.StepSoundDistance < distanceNeeded) - return false; + if (mobMover.StepSoundDistance < distanceNeeded) + return false; - mobMover.StepSoundDistance -= distanceNeeded; + mobMover.StepSoundDistance -= distanceNeeded; - if (FootstepModifierQuery.TryComp(uid, out var moverModifier)) - { - sound = moverModifier.FootstepSoundCollection; - return true; - } + if (FootstepModifierQuery.TryComp(uid, out var moverModifier)) + { + sound = moverModifier.FootstepSoundCollection; + return true; + } - if (_inventory.TryGetSlotEntity(uid, "shoes", out var shoes) && - FootstepModifierQuery.TryComp(shoes, out var modifier)) + if (_inventory.TryGetSlotEntity(uid, "shoes", out var shoes) && + FootstepModifierQuery.TryComp(shoes, out var modifier)) + { + sound = modifier.FootstepSoundCollection; + return true; + } + + return TryGetFootstepSound(uid, xform, shoes != null, out sound, tileDef: tileDef); + } + + private bool TryGetFootstepSound( + EntityUid uid, + TransformComponent xform, + bool haveShoes, + [NotNullWhen(true)] out SoundSpecifier? sound, + ContentTileDefinition? tileDef = null) + { + sound = null; + + // Fallback to the map? + if (!MapGridQuery.TryComp(xform.GridUid, out var grid)) + { + if (FootstepModifierQuery.TryComp(xform.MapUid, out var modifier)) { sound = modifier.FootstepSoundCollection; return true; } - return TryGetFootstepSound(uid, xform, shoes != null, out sound, tileDef: tileDef); + return false; } - private bool TryGetFootstepSound( - EntityUid uid, - TransformComponent xform, - bool haveShoes, - [NotNullWhen(true)] out SoundSpecifier? sound, - ContentTileDefinition? tileDef = null) - { - sound = null; + var position = grid.LocalToTile(xform.Coordinates); + var soundEv = new GetFootstepSoundEvent(uid); - // Fallback to the map? - if (!MapGridQuery.TryComp(xform.GridUid, out var grid)) - { - if (FootstepModifierQuery.TryComp(xform.MapUid, out var modifier)) - { - sound = modifier.FootstepSoundCollection; - return true; - } - - return false; - } - - var position = grid.LocalToTile(xform.Coordinates); - var soundEv = new GetFootstepSoundEvent(uid); + // If the coordinates have a FootstepModifier component + // i.e. component that emit sound on footsteps emit that sound + var anchored = grid.GetAnchoredEntitiesEnumerator(position); - // If the coordinates have a FootstepModifier component - // i.e. component that emit sound on footsteps emit that sound - var anchored = grid.GetAnchoredEntitiesEnumerator(position); + while (anchored.MoveNext(out var maybeFootstep)) + { + RaiseLocalEvent(maybeFootstep.Value, ref soundEv); - while (anchored.MoveNext(out var maybeFootstep)) + if (soundEv.Sound != null) { - RaiseLocalEvent(maybeFootstep.Value, ref soundEv); - - if (soundEv.Sound != null) - { - sound = soundEv.Sound; - return true; - } - - if (FootstepModifierQuery.TryComp(maybeFootstep, out var footstep)) - { - sound = footstep.FootstepSoundCollection; - return true; - } + sound = soundEv.Sound; + return true; } - // Walking on a tile. - // Tile def might have been passed in already from previous methods, so use that - // if we have it - if (tileDef == null && grid.TryGetTileRef(position, out var tileRef)) + if (FootstepModifierQuery.TryComp(maybeFootstep, out var footstep)) { - tileDef = (ContentTileDefinition) _tileDefinitionManager[tileRef.Tile.TypeId]; + sound = footstep.FootstepSoundCollection; + return true; } + } - if (tileDef == null) - return false; - - sound = haveShoes ? tileDef.FootstepSounds : tileDef.BarestepSounds; - return sound != null; + // Walking on a tile. + // Tile def might have been passed in already from previous methods, so use that + // if we have it + if (tileDef == null && grid.TryGetTileRef(position, out var tileRef)) + { + tileDef = (ContentTileDefinition) _tileDefinitionManager[tileRef.Tile.TypeId]; } + + if (tileDef == null) + return false; + + sound = haveShoes ? tileDef.FootstepSounds : tileDef.BarestepSounds; + return sound != null; } } diff --git a/Content.Shared/NameModifier/EntitySystems/NameModifierSystem.cs b/Content.Shared/NameModifier/EntitySystems/NameModifierSystem.cs index 4dffb51805c..2e7c8054b3b 100644 --- a/Content.Shared/NameModifier/EntitySystems/NameModifierSystem.cs +++ b/Content.Shared/NameModifier/EntitySystems/NameModifierSystem.cs @@ -5,7 +5,7 @@ namespace Content.Shared.NameModifier.EntitySystems; /// -public sealed partial class NameModifierSystem : EntitySystem +public sealed class NameModifierSystem : EntitySystem { [Dependency] private readonly MetaDataSystem _metaData = default!; @@ -16,10 +16,10 @@ public override void Initialize() SubscribeLocalEvent(OnEntityRenamed); } - private void OnEntityRenamed(Entity entity, ref EntityRenamedEvent args) + private void OnEntityRenamed(Entity ent, ref EntityRenamedEvent args) { - SetBaseName((entity, entity.Comp), args.NewName); - RefreshNameModifiers((entity, entity.Comp)); + SetBaseName(ent, args.NewName); + RefreshNameModifiers((ent.Owner, ent.Comp)); } private void SetBaseName(Entity entity, string name) diff --git a/Content.Shared/Nutrition/Prototypes/FoodSequenceElementPrototype.cs b/Content.Shared/Nutrition/Prototypes/FoodSequenceElementPrototype.cs index a3448715e4a..931d8a35327 100644 --- a/Content.Shared/Nutrition/Prototypes/FoodSequenceElementPrototype.cs +++ b/Content.Shared/Nutrition/Prototypes/FoodSequenceElementPrototype.cs @@ -1,6 +1,7 @@ using Content.Shared.Tag; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using System.Numerics; namespace Content.Shared.Nutrition.Prototypes; @@ -18,6 +19,12 @@ public sealed partial class FoodSequenceElementPrototype : IPrototype [DataField] public List Sprites { get; private set; } = new(); + /// + /// Relative size of the sprite displayed in the food sequence. + /// + [DataField] + public Vector2 Scale { get; private set; } = Vector2.One; + /// /// A localized name piece to build into the item name generator. /// @@ -34,5 +41,5 @@ public sealed partial class FoodSequenceElementPrototype : IPrototype /// Tag list of this layer. Used for recipes for food metamorphosis. /// [DataField] - public List> Tags { get; set; } = new(); + public List> Tags { get; set; } = new(); } diff --git a/Content.Shared/Objectives/Prototypes/StealTargetGroupPrototype.cs b/Content.Shared/Objectives/Prototypes/StealTargetGroupPrototype.cs index 2730acb9aca..bc2af0eb092 100644 --- a/Content.Shared/Objectives/Prototypes/StealTargetGroupPrototype.cs +++ b/Content.Shared/Objectives/Prototypes/StealTargetGroupPrototype.cs @@ -10,6 +10,6 @@ namespace Content.Shared.Objectives; public sealed partial class StealTargetGroupPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = default!; - [DataField] public string Name { get; private set; } = string.Empty; + [DataField] public LocId Name { get; private set; } = string.Empty; [DataField] public SpriteSpecifier Sprite { get; private set; } = SpriteSpecifier.Invalid; } diff --git a/Content.Shared/PDA/PdaComponent.cs b/Content.Shared/PDA/PdaComponent.cs index d4cfc4fc0d8..6aeb245e27d 100644 --- a/Content.Shared/PDA/PdaComponent.cs +++ b/Content.Shared/PDA/PdaComponent.cs @@ -37,6 +37,10 @@ public sealed partial class PdaComponent : Component [ViewVariables] public bool FlashlightOn; [ViewVariables(VVAccess.ReadWrite)] public string? OwnerName; + // The Entity that "owns" the PDA, usually a player's character. + // This is useful when we are doing stuff like renaming a player and want to find their PDA to change the name + // as well. + [ViewVariables(VVAccess.ReadWrite)] public EntityUid? PdaOwner; [ViewVariables] public string? StationName; [ViewVariables] public string? StationAlertLevel; [ViewVariables] public Color StationAlertColor = Color.White; diff --git a/Content.Shared/Random/RandomPlantMutation.cs b/Content.Shared/Random/RandomPlantMutation.cs new file mode 100644 index 00000000000..d95cf7bf422 --- /dev/null +++ b/Content.Shared/Random/RandomPlantMutation.cs @@ -0,0 +1,48 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.Serialization; + +namespace Content.Shared.Random; + +/// +/// Data that specifies the odds and effects of possible random plant mutations. +/// +[Serializable, NetSerializable] +[DataDefinition] +public sealed partial class RandomPlantMutation +{ + /// + /// Odds of this mutation occurring with 1 point of mutation severity on a plant. + /// + [DataField] + public float BaseOdds = 0; + + /// + /// The name of this mutation. + /// + [DataField] + public string Name = ""; + + /// + /// The actual EntityEffect to apply to the target + /// + [DataField] + public EntityEffect Effect = default!; + + /// + /// This mutation will target the harvested produce + /// + [DataField] + public bool AppliesToProduce = true; + + /// + /// This mutation will target the growing plant as soon as this mutation is applied. + /// + [DataField] + public bool AppliesToPlant = true; + + /// + /// This mutation stays on the plant and its produce. If false while AppliesToPlant is true, the effect will run when triggered. + /// + [DataField] + public bool Persists = true; +} diff --git a/Content.Shared/Random/RandomPlantMutationListPrototype.cs b/Content.Shared/Random/RandomPlantMutationListPrototype.cs new file mode 100644 index 00000000000..84e3b9256c3 --- /dev/null +++ b/Content.Shared/Random/RandomPlantMutationListPrototype.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Random; + +/// +/// Random weighting dataset for solutions, able to specify reagents quantity. +/// +[Prototype("RandomPlantMutationList")] +public sealed partial class RandomPlantMutationListPrototype : IPrototype +{ + [IdDataField] public string ID { get; } = default!; + + /// + /// List of RandomFills that can be picked from. + /// + [DataField("mutations", required: true, serverOnly: true)] + public List mutations = new(); +} diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index 0f001991532..d84c144909b 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -235,4 +235,9 @@ - files: [changeling_shriek.ogg] copyright: whateverusername0 license: CC-BY-SA-3.0 - source: https://github.com/whateverusername0/space-station-14-wizden/blob/ling/Resources/Audio/Effects/changeling_shriek.ogg \ No newline at end of file + source: https://github.com/whateverusername0/space-station-14-wizden/blob/ling/Resources/Audio/Effects/changeling_shriek.ogg + +- files: [inneranomaly.ogg] + copyright: 'created by waveplaySFX on Freesound' + license: "CC0-1.0" + source: https://freesound.org/people/waveplaySFX/sounds/553744/ diff --git a/Resources/Audio/Effects/inneranomaly.ogg b/Resources/Audio/Effects/inneranomaly.ogg new file mode 100644 index 00000000000..43fc40357f2 Binary files /dev/null and b/Resources/Audio/Effects/inneranomaly.ogg differ diff --git a/Resources/Audio/Items/Toys/attributions.yml b/Resources/Audio/Items/Toys/attributions.yml index 290539b9849..162ee8c1c33 100644 --- a/Resources/Audio/Items/Toys/attributions.yml +++ b/Resources/Audio/Items/Toys/attributions.yml @@ -72,3 +72,18 @@ license: "CC-BY-SA-3.0" copyright: "Taken from ss200, made by Daeberdir" source: "https://github.com/ss220-space/Paradise/pull/3756" + +- files: ["rubber_chicken_1.ogg"] + license: "CC0-1.0" + copyright: "Created by xprospero for ss14" + source: "https://github.com/space-wizards/space-station-14/blob/master/Resources/Audio/Items/Toys/rubber_chicken_1.ogg" + +- files: ["rubber_chicken_2.ogg"] + license: "CC0-1.0" + copyright: "Created by xprospero for ss14" + source: "https://github.com/space-wizards/space-station-14/blob/master/Resources/Audio/Items/Toys/rubber_chicken_2.ogg" + +- files: ["rubber_chicken_3.ogg"] + license: "CC0-1.0" + copyright: "Created by xprospero for ss14" + source: "https://github.com/space-wizards/space-station-14/blob/master/Resources/Audio/Items/Toys/rubber_chicken_3.ogg" diff --git a/Resources/Audio/Items/Toys/rubber_chicken_1.ogg b/Resources/Audio/Items/Toys/rubber_chicken_1.ogg new file mode 100644 index 00000000000..e4ba8155a6c Binary files /dev/null and b/Resources/Audio/Items/Toys/rubber_chicken_1.ogg differ diff --git a/Resources/Audio/Items/Toys/rubber_chicken_2.ogg b/Resources/Audio/Items/Toys/rubber_chicken_2.ogg new file mode 100644 index 00000000000..ae79d97ff22 Binary files /dev/null and b/Resources/Audio/Items/Toys/rubber_chicken_2.ogg differ diff --git a/Resources/Audio/Items/Toys/rubber_chicken_3.ogg b/Resources/Audio/Items/Toys/rubber_chicken_3.ogg new file mode 100644 index 00000000000..97d93ed57e7 Binary files /dev/null and b/Resources/Audio/Items/Toys/rubber_chicken_3.ogg differ diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index d4d6e9e6abe..c5b567f69e3 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -527,5 +527,22 @@ Entries: id: 65 time: '2024-09-08T07:28:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30456 +- author: Fildrance + changes: + - message: The setmapatmos command now correctly uses its temperature argument + type: Fix + id: 66 + time: '2024-09-13T22:49:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32125 +- author: nikthechampiongr + changes: + - message: Rename verb now acts the same as the rename command. + type: Fix + - message: Renamed entities will now have their new name appear immediately on entity + examination and on crew monitor console. + type: Fix + id: 67 + time: '2024-09-15T01:55:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31654 Name: Admin Order: 1 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 05f1b46858a..cc6d0ca3e05 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,212 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: You now see pickup animations when stripping objects off of people. - type: Fix - - message: Thieving gloves no longer have a pickup animation when stripping people. - type: Fix - id: 6861 - time: '2024-07-03T00:01:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29665 -- author: nikthechampiongr - changes: - - message: The Elite Syndicate hardsuit is now slightly slower. - type: Tweak - - message: The Elite Syndicate hardsuit now costs 12 Telecrystals. - type: Tweak - id: 6862 - time: '2024-07-03T00:31:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29429 -- author: eoineoineoin - changes: - - message: Artifact Analyzer now collides with walls - type: Fix - id: 6863 - time: '2024-07-03T05:27:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28117 -- author: TheShuEd - changes: - - message: anomalies have the ability to gain invisibility behavior - type: Add - id: 6864 - time: '2024-07-03T15:14:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29120 -- author: ArkiveDev - changes: - - message: Railings can now be constructed in all 4 orientations. - type: Fix - id: 6865 - time: '2024-07-03T16:59:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29687 -- author: Rinary - changes: - - message: Fixed radial menus overlapping where there's many icons. - type: Fix - id: 6866 - time: '2024-07-04T01:25:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29678 -- author: Plykiya - changes: - - message: An object's physics properly returns to normal after being pulled. - type: Fix - id: 6867 - time: '2024-07-04T01:29:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29694 -- author: Plykiya - changes: - - message: You can now destroy portable flashers. - type: Fix - id: 6868 - time: '2024-07-04T01:51:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29564 -- author: EmoGarbage404 - changes: - - message: All nuclear operatives are now humans. - type: Tweak - id: 6869 - time: '2024-07-04T02:29:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29693 -- author: metalgearsloth - changes: - - message: Made vox roundstart. - type: Tweak - id: 6870 - time: '2024-07-04T07:11:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29704 -- author: JIPDawg - changes: - - message: Changed the basic treatment module to include a Health Analyzer and removed - the dropper. - type: Tweak - id: 6871 - time: '2024-07-04T07:17:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29696 -- author: PJB3005 - changes: - - message: Fixed flashlights and similar permanently getting stuck blinking. - type: Fix - id: 6872 - time: '2024-07-04T08:02:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29457 -- author: Jezithyr - changes: - - message: All species except for Vox can now be played as Nukies. (Vox will be - enabled when load out code supports them) - type: Tweak - id: 6873 - time: '2024-07-05T07:59:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29707 -- author: metalgearsloth - changes: - - message: Shuttle map buttons will show up faster. - type: Tweak - id: 6874 - time: '2024-07-06T03:51:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29757 -- author: JIPDawg - changes: - - message: Added Late join CryoSleepers to Origin. - type: Tweak - id: 6875 - time: '2024-07-06T17:33:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29761 -- author: Beck Thompson - changes: - - message: Splashing reagents on players will now apply the correct amounts. - type: Fix - id: 6876 - time: '2024-07-07T03:52:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29763 -- author: Tayrtahn - changes: - - message: Dead bodies will no longer remain standing after being unbuckled from - chairs. - type: Fix - id: 6877 - time: '2024-07-07T06:20:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29741 -- author: Simyon - changes: - - message: Ratkings now require at least 30 players in order to spawn. - type: Tweak - id: 6878 - time: '2024-07-07T13:06:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29737 -- author: EmoGarbage404 - changes: - - message: Intercoms now use encryption keys to determine what channels they can - broadcast on. - type: Tweak - - message: Intercoms and handheld radios no longer rely on telecom servers. - type: Fix - id: 6879 - time: '2024-07-07T14:19:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29580 -- author: Vermidia - changes: - - message: Some drink reactions now require shaking with the shaker or stirring - with a spoon - type: Add - id: 6880 - time: '2024-07-07T14:21:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29243 -- author: Dezzzix - changes: - - message: Now you can slice food with swords - type: Add - id: 6881 - time: '2024-07-07T14:22:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29005 -- author: EmoGarbage404 - changes: - - message: Changed AME power output. Lower injection amounts now produce more power - but further injections have diminishing returns. - type: Tweak - - message: Increased damage per injection overclocked AMEs. - type: Tweak - - message: Halved fuel per AME jar. - type: Tweak - id: 6882 - time: '2024-07-07T14:27:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29587 -- author: Plykiya - changes: - - message: Hyperzine's effective healing range has been changed from 70 to 120, - to anything above 70 total damage. - type: Tweak - id: 6883 - time: '2024-07-07T14:28:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29712 -- author: Tayrtahn - changes: - - message: Fixed admin ghosts briefly becoming visible when a news article is published. - type: Fix - id: 6884 - time: '2024-07-08T03:33:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29801 -- author: slarticodefast - changes: - - message: Improved throwing calculations. Thrown items now stop moving exactly - below your cursor. Throwing weapons will land at your cursor and then slide - until stopped by friction. - type: Tweak - id: 6885 - time: '2024-07-08T09:03:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29726 -- author: Errant - changes: - - message: Vox now have their entry in the guidebook. - type: Fix - id: 6886 - time: '2024-07-09T00:28:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29713 -- author: Whisper - changes: - - message: Light toggle actions now have a 1 second cooldown between uses. - type: Tweak - id: 6887 - time: '2024-07-09T04:14:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29833 - author: Cojoke-dot changes: - message: Shotgun loading doafter now does something @@ -3916,3 +3708,213 @@ id: 7360 time: '2024-09-12T12:51:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31932 +- author: ScarKy0 + changes: + - message: Station AI now has a comms console ability. + type: Add + - message: Station AI abilities now have a default order. + type: Tweak + id: 7361 + time: '2024-09-12T15:28:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31852 +- author: themias + changes: + - message: Fixed medical PDAs sometimes toggling their lights while scanning + type: Fix + id: 7362 + time: '2024-09-13T13:59:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32091 +- author: Gorox221 + changes: + - message: Mech pilots receive a warning before they are ejected from the mech. + type: Tweak + - message: Now, when removing the pilot of the mech, you need to not move. + type: Fix + id: 7363 + time: '2024-09-13T14:01:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31649 +- author: slarticodefast + changes: + - message: Extradimensional orange, holymelon, meatwheat and world peas plant mutations + have been added. Obtain them by mutating oranges, watermelons, wheat and laughin' + peas respectively. + type: Add + id: 7364 + time: '2024-09-13T14:02:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/27624 +- author: ShadowCommander + changes: + - message: Fixed PDA sometimes showing uplink and music buttons when the PDA was + not able to use them. + type: Fix + id: 7365 + time: '2024-09-13T14:19:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28373 +- author: Dezzzix + changes: + - message: Now you can wear a hood in void cloak + type: Add + id: 7366 + time: '2024-09-13T15:02:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31061 +- author: PJB3005 + changes: + - message: Fixed some powered machines working when unpowered if the panel is open. + type: Fix + id: 7367 + time: '2024-09-13T23:58:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32135 +- author: qwerltaz + changes: + - message: The RCD can now place grilles and windows under shutters and cables under + doors. + type: Fix + id: 7368 + time: '2024-09-14T01:53:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32102 +- author: SlamBamActionman + changes: + - message: Briefcases can now be used as melee weapons. + type: Add + id: 7369 + time: '2024-09-14T13:09:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32063 +- author: Just_Art + changes: + - message: Added a head gauze to customization. + type: Add + id: 7370 + time: '2024-09-14T14:55:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30852 +- author: deltanedas + changes: + - message: Fixed security's helmets not having any protection. + type: Fix + id: 7371 + time: '2024-09-14T15:56:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32152 +- author: eoineoineoin + changes: + - message: Ghosts can now read books. + type: Add + id: 7372 + time: '2024-09-14T16:28:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32151 +- author: Errant + changes: + - message: Lone Ops nukies now spawn with the appropriate species-specific survival + gear. + type: Fix + id: 7373 + time: '2024-09-14T16:34:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31641 +- author: Plykiya + changes: + - message: The vent spawn event now has a chance to spawn snakes. + type: Add + id: 7374 + time: '2024-09-14T17:19:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32070 +- author: lzk228 + changes: + - message: Command intercom now reinforced the same way as the security one. + type: Tweak + id: 7375 + time: '2024-09-14T20:40:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32169 +- author: de0rix + changes: + - message: Animals in critical state now all have proper sprites. + type: Fix + id: 7376 + time: '2024-09-15T01:53:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32175 +- author: notafet + changes: + - message: Pressure and volume pumps now require power to operate. + type: Tweak + id: 7377 + time: '2024-09-15T01:58:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28995 +- author: deltanedas + changes: + - message: Holoparasites can no longer be summoned from inside containers. + type: Tweak + id: 7378 + time: '2024-09-15T19:04:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32068 +- author: BackeTako + changes: + - message: Added French and Spanish speech traits. + type: Add + id: 7379 + time: '2024-09-15T20:03:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30966 +- author: Plykiya + changes: + - message: Meteors break through less walls now. + type: Tweak + id: 7380 + time: '2024-09-15T20:04:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32109 +- author: drakewill-CRL + changes: + - message: Produce harvested from sentient plants are no longer sentient themselves. + type: Fix + id: 7381 + time: '2024-09-16T00:04:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32192 +- author: DrSmugleaf + changes: + - message: Fixed examine sometimes flickering and closing until you examine something + around you. + type: Fix + id: 7382 + time: '2024-09-16T08:51:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32205 +- author: ArtisticRoomba + changes: + - message: The Bruise-O-Mat alcohol vendor has been added to the nukie outpost, + for all your pre-op drinking needs. Seems to have developed a witty personality, + too... + type: Add + id: 7383 + time: '2024-09-16T08:59:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32107 +- author: ArtisticRoomba + changes: + - message: The binary translator key in the syndie uplink is now correctly marked + as syndicate contraband. + type: Tweak + id: 7384 + time: '2024-09-16T10:01:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32193 +- author: MissKay1994 + changes: + - message: Lizards are now poisoned by hot chocolate + type: Fix + id: 7385 + time: '2024-09-16T12:45:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32147 +- author: Alice Liddel + changes: + - message: Crayon charges increased from 15 to 25 + type: Add + id: 7386 + time: '2024-09-17T00:35:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32061 +- author: TheShuEd + changes: + - message: Anomalous infections added! People can now be infected by anomalies! + This allows you to use abnormal abilities, but can easily kill the host. To + cure them, bombard them with containment particles, because if the anomaly inside + them explodes, their bodies will be gibbed.... + type: Add + - message: Flesh anomaly resprite + type: Tweak + - message: anomalies now disconnect from the anomaly synchronizer if they are too + far away from it. + type: Fix + id: 7387 + time: '2024-09-17T09:49:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31876 diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index c6ec284dc84..1190feea712 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aeshus, Aexxie, Afrokada, Agoichi, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlmondFlour, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, bhenrich, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, BombasterDS, brainfood1183, Brandon-Huu, Bright0, brndd, c4llv07e, CaasGit, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, chavonadelal, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, Delete69, deltanedas, DerbyX, dffdff2423, DieselMohawk, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, Futuristic-OK, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, godisdeadLOL, Golinth, GoodWheatley, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, Ian321, icekot8, IgorAnt028, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JIPDawg, JoeHammad1844, joelsgp, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, K-Dynamic, KaiShibaa, kalane15, kalanosh, Keer-Sar, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, laok233, lapatison, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, Magicalus, MagnusCrowe, ManelNavola, Mangohydra, marboww, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, MerrytheManokit, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, MureixloI, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, nyeogmi, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, PopGamer45, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, saintmuntzer, SaphireLattice, Sarahon, ScalyChimp, ScarKy0, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, Spessmann, SphiraI, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, thetolbean, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, TyAshley, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Unkn0wnGh0st333, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem +0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, achookh, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, Afrokada, Agoichi, Ahion, aiden, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, Appiah, ar4ill, ArchPigeon, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, asperger-sind, aspiringLich, astriloqua, AutoOtter, avghdev, Awlod, AzzyIsNotHere, backetako, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, bellwetherlogic, benev0, benjamin-burges, BGare, bhenrich, bhespiritu, bibbly, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, chairbender, Charlese2, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DakotaGay, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, echo, eclips_e, eden077, EdenTheLiznerd, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluidRock, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, Goldminermac, Golinth, GoodWheatley, Gorox221, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, jerryimmouse, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, JoeHammad1844, joelsgp, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, koteq, KrasnoshchekovPavel, Krunklehorn, Kukutis96513, Kupie, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, milon, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OctoRocket, OldDanceJacket, OliverOtter, onoira, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QueerNB, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, RiceMar1244, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, SaphireLattice, SapphicOverload, Sarahon, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SignalWalker, siigiil, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, SpaceManiac, SpaceyLady, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGODiamond, TGRCdev, tgrkzus, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, Theomund, theOperand, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, TyAshley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, wtcwr68, xkreksx, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem, zzylex diff --git a/Resources/Locale/en-US/accent/skeleton.ftl b/Resources/Locale/en-US/accent/skeleton.ftl new file mode 100644 index 00000000000..9a839676c66 --- /dev/null +++ b/Resources/Locale/en-US/accent/skeleton.ftl @@ -0,0 +1,32 @@ +accent-skeleton-words-1 = fuck you +accent-skeleton-words-replace-1 = I've got a BONE to pick with you + +accent-skeleton-words-2 = fucked +accent-skeleton-words-replace-2 = boned + +accent-skeleton-words-3 = fuck +accent-skeleton-words-3-2 = fck +accent-skeleton-words-3-3 = shit +accent-skeleton-words-replace-3 = RATTLE RATTLE + +accent-skeleton-words-4 = definitely +accent-skeleton-words-4-2 = absolutely +accent-skeleton-words-replace-4 = make no bones about it + +accent-skeleton-words-5 = afraid +accent-skeleton-words-5-2 = scared +accent-skeleton-words-5-3 = spooked +accent-skeleton-words-5-4 = shocked +accent-skeleton-words-replace-5 = rattled + +accent-skeleton-words-6 = killed +accent-skeleton-words-replace-6 = skeletonized + +accent-skeleton-words-7 = humorous +accent-skeleton-words-replace-7 = humerus + +accent-skeleton-words-8 = to be a +accent-skeleton-words-replace-8 = tibia + +accent-skeleton-words-9 = under +accent-skeleton-words-replace-9 = ulna diff --git a/Resources/Locale/en-US/advertisements/vending/bruiseomat.ftl b/Resources/Locale/en-US/advertisements/vending/bruiseomat.ftl new file mode 100644 index 00000000000..a8cb903efe2 --- /dev/null +++ b/Resources/Locale/en-US/advertisements/vending/bruiseomat.ftl @@ -0,0 +1,43 @@ +advertisement-bruiseomat-1 = I VOTE WAROPS!!! +advertisement-bruiseomat-2 = Who has TC? +advertisement-bruiseomat-3 = Did anyone buy an EMAG? +advertisement-bruiseomat-4 = I wanna go back to my home station... +advertisement-bruiseomat-5 = Beware of the Mime and Clown. BEWARE! +advertisement-bruiseomat-6 = A nuke a day keeps the deathsquad at bay! +advertisement-bruiseomat-7 = You'll never be able to match MY mixing, Agent! +advertisement-bruiseomat-8 = Thirsting for blood? I got you covered! +advertisement-bruiseomat-9 = If they didn't want us to blow up the station, then why would they leave the disk so unsecured? +advertisement-bruiseomat-10 = They say an eye for an eye makes the whole world blind. So try a nuke instead! +advertisement-bruiseomat-11 = I hunger for blood! +advertisement-bruiseomat-12 = Drink up before the mission! +advertisement-bruiseomat-13 = Man, I didn't know I got moved back to Cadet City! +advertisement-bruiseomat-14 = Sicker than your average Booze-O-Mat! +advertisement-bruiseomat-15 = Nuke ops will continue until robustness improves. +thankyou-bruiseomat-1 = Good luck, schmuck! You're gonna need it! +thankyou-bruiseomat-2 = Show 'em the Gorlex Style! +thankyou-bruiseomat-3 = Don't forget to stay hydrated! +thankyou-bruiseomat-4 = You noted down the codes, right? +thankyou-bruiseomat-5 = Don't forget the nuke! +thankyou-bruiseomat-6 = I hope those are noslips. +thankyou-bruiseomat-7 = Please let this be a normal team... +thankyou-bruiseomat-8 = Seems like the station isn't the only thing getting hammered today. +thankyou-bruiseomat-9 = What the hell did you buy? +thankyou-bruiseomat-10 = Give it up for the flukeops professionals! +thankyou-bruiseomat-11 = Death to NanoTrasen!!! +thankyou-bruiseomat-12 = Really? That's your plan? +thankyou-bruiseomat-13 = In my endless life, never have I ever seen that loadout. +thankyou-bruiseomat-14 = Get that captain! +thankyou-bruiseomat-15 = Don't run off by yourself, now! +thankyou-bruiseomat-16 = Y'all are taking too long! +thankyou-bruiseomat-17 = They won't see that coming! +thankyou-bruiseomat-18 = Remember your pinpointer! +thankyou-bruiseomat-19 = See you soon! Or maybe never again, that one's more likely! +thankyou-bruiseomat-20 = Rescue another one of me! I need a friend! +thankyou-bruiseomat-21 = You're going to sober up before the mission, right? +thankyou-bruiseomat-22 = 5 telecrystal says you won't make it to the shuttle before you fall over. +thankyou-bruiseomat-23 = The soda fountain's over there, lightweight. +thankyou-bruiseomat-24 = Did you spend your TC on cat ears? +thankyou-bruiseomat-25 = Really? That's what you wanted to drink? +thankyou-bruiseomat-26 = Take a shot, give a shot! +thankyou-bruiseomat-27 = How many drinks have you had now? I've lost count. +thankyou-bruiseomat-28 = When the bosses say "die trying" they mean dying in BATTLE, not at the bar. diff --git a/Resources/Locale/en-US/anomaly/inner_anomaly.ftl b/Resources/Locale/en-US/anomaly/inner_anomaly.ftl new file mode 100644 index 00000000000..e55c4391e30 --- /dev/null +++ b/Resources/Locale/en-US/anomaly/inner_anomaly.ftl @@ -0,0 +1,17 @@ +inner-anomaly-start-message-pyro = You can feel the insane flame inside of you. You became the host of a pyroclastic anomaly. +inner-anomaly-start-message-shock = Lightning bolts quivering at your fingertips! You became the host of a electric anomaly. +inner-anomaly-start-message-shadow = There's an impenetrable darkness oozing out of you... You became the host of a shadow anomaly. +inner-anomaly-start-message-frost = The icy frost is binding your bones. You became the host of a ice anomaly. +inner-anomaly-start-message-flora = Leaves and flowers sprout through your skin! You became the host of a floral anomaly. +inner-anomaly-start-message-bluespace = Your thoughts are racing like mad! You became the host of a bluespace anomaly. +inner-anomaly-start-message-flesh = Your body is growing frantically. You became the host of a flesh anomaly. +inner-anomaly-start-message-grav = Everything becames unnaturally heavy and light at the same time... You became the host of a gravity anomaly. +inner-anomaly-start-message-tech = Your head is buzzing with the amount of chaotic information! You became the host of a tech anomaly. +inner-anomaly-start-message-rock = The crystals are growing through your bones! You became the host of a rock anomaly. + +inner-anomaly-end-message = The abnormal activity within you disappears without a trace.... + +inner-anomaly-severity-info-50 = You feel that the anomaly is taking over half your body. +inner-anomaly-severity-info-75 = You feel that the anomaly is taking over a large part of your body. +inner-anomaly-severity-info-90 = You feel that the anomaly has almost completely taken over your body. +inner-anomaly-severity-info-100 = The anomaly inside you is growing uncontrollably, causing immense pain, and tearing you apart! \ No newline at end of file diff --git a/Resources/Locale/en-US/communications/communications-console-component.ftl b/Resources/Locale/en-US/communications/communications-console-component.ftl index 0d022ed5a6e..a757f9e0d10 100644 --- a/Resources/Locale/en-US/communications/communications-console-component.ftl +++ b/Resources/Locale/en-US/communications/communications-console-component.ftl @@ -24,3 +24,4 @@ comms-console-announcement-unknown-sender = Unknown comms-console-announcement-title-station = Communications Console comms-console-announcement-title-centcom = Central Command comms-console-announcement-title-nukie = Syndicate Nuclear Operative +comms-console-announcement-title-station-ai = Station AI diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl index f56a6c36b8b..3e7cde8449a 100644 --- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl @@ -174,6 +174,9 @@ flavor-complex-violets = like violets flavor-complex-pyrotton = like a burning mouth flavor-complex-mothballs = like mothballs flavor-complex-paint-thinner = like paint thinner +flavor-complex-numbing-tranquility = like numbing tranquility +flavor-complex-true-nature = like the true nature of reality +flavor-complex-false-meat = not entirely unlike meat flavor-complex-paper = like mushy pulp flavor-complex-compressed-meat = like compressed meat diff --git a/Resources/Locale/en-US/guardian/guardian.ftl b/Resources/Locale/en-US/guardian/guardian.ftl index 9e0966630dd..141646087d3 100644 --- a/Resources/Locale/en-US/guardian/guardian.ftl +++ b/Resources/Locale/en-US/guardian/guardian.ftl @@ -10,6 +10,7 @@ guardian-activator-empty-examine = [color=#ba1919]The injector is spent.[/color] guardian-activator-invalid-target = Only humans can be injected! guardian-no-soul = Your guardian has no soul. guardian-available = Your guardian now has a soul. +guardian-inside-container = There's no room to release your guardian! ## Guardian entity specific diff --git a/Resources/Locale/en-US/markings/gauze.ftl b/Resources/Locale/en-US/markings/gauze.ftl index f8bedc31957..7ed35a90ba1 100644 --- a/Resources/Locale/en-US/markings/gauze.ftl +++ b/Resources/Locale/en-US/markings/gauze.ftl @@ -46,6 +46,9 @@ marking-GauzeUpperLegRight = Gauze Thigh Wrap (Right) marking-GauzeBlindfold-gauze_blindfold = Gauze Blindfold marking-GauzeBlindfold = Gauze Blindfold +marking-GauzeHead-gauze_head = Gauze Head Wrap +marking-GauzeHead = Gauze Head Wrap + marking-GauzeLizardBlindfold-gauze_lizard_blindfold = Gauze Blindfold marking-GauzeLizardBlindfold = Gauze Blindfold diff --git a/Resources/Locale/en-US/mech/mech.ftl b/Resources/Locale/en-US/mech/mech.ftl index 9d4f7ef0e07..7fac0387edb 100644 --- a/Resources/Locale/en-US/mech/mech.ftl +++ b/Resources/Locale/en-US/mech/mech.ftl @@ -17,3 +17,5 @@ mech-energy-missing = Energy: MISSING mech-slot-display = Open Slots: {$amount} mech-no-enter = You cannot pilot this. + +mech-eject-pilot-alert = {$user} is pulling the pilot out of the {$item}! \ No newline at end of file diff --git a/Resources/Locale/en-US/mind/commands/rename-command.ftl b/Resources/Locale/en-US/mind/commands/rename-command.ftl new file mode 100644 index 00000000000..4749cd6379e --- /dev/null +++ b/Resources/Locale/en-US/mind/commands/rename-command.ftl @@ -0,0 +1,5 @@ +cmd-rename-desc = Renames an entity and its cloner entries, ID cards, and PDAs. +cmd-rename-help = rename +cmd-rename-too-long = Name is too long. +cmd-rename-not-found = Can't find username/uid: {$target} +cmd-rename-no-entity = {$target} does not have an entity. diff --git a/Resources/Locale/en-US/navmap-beacons/station-beacons.ftl b/Resources/Locale/en-US/navmap-beacons/station-beacons.ftl index 6434311f21f..9d0919d102c 100644 --- a/Resources/Locale/en-US/navmap-beacons/station-beacons.ftl +++ b/Resources/Locale/en-US/navmap-beacons/station-beacons.ftl @@ -3,6 +3,7 @@ station-beacon-general = General station-beacon-command = Command station-beacon-bridge = Bridge station-beacon-vault = Vault +station-beacon-gateway = Gateway station-beacon-captain = Captain station-beacon-hop = HOP diff --git a/Resources/Locale/en-US/nutrition/components/food-sequence.ftl b/Resources/Locale/en-US/nutrition/components/food-sequence.ftl index 766145093e2..97dd7ffcc6a 100644 --- a/Resources/Locale/en-US/nutrition/components/food-sequence.ftl +++ b/Resources/Locale/en-US/nutrition/components/food-sequence.ftl @@ -14,6 +14,7 @@ food-sequence-content-salami = salami food-sequence-content-slime = slime food-sequence-content-clown = clown food-sequence-content-pea = pea +food-sequence-content-world-pea = world pea food-sequence-content-bungo = bungo food-sequence-content-banana = banana food-sequence-content-mimana = mimana @@ -64,6 +65,7 @@ food-sequence-content-glasstle = glasstle food-sequence-content-gatfruit = gatfruit food-sequence-content-koibean = koibean food-sequence-content-watermelon = watermelon +food-sequence-content-holymelon = holymelon food-sequence-content-cannabis = cannabis food-sequence-content-rainbow-cannabis = rainbow cannabis food-sequence-content-tobacco = tobacco @@ -71,7 +73,7 @@ food-sequence-content-hamster = hamster food-sequence-content-suppermatter = suppermatter food-sequence-content-capfruit = capfruit food-sequence-content-berries = berries -food-sequence-content-spacemans-trumpet = spacemans trupmet +food-sequence-content-spacemans-trumpet = spaceman's trupmet food-sequence-content-cherry = cherry food-sequence-content-snail = snail @@ -106,6 +108,7 @@ food-sequence-burger-content-rice = rice food-sequence-burger-content-soy = soy food-sequence-burger-content-koibean = koi food-sequence-burger-content-watermelon = water +food-sequence-burger-content-holymelon = holy food-sequence-burger-content-cannabis = funny food-sequence-burger-content-rainbow-cannabis = FUNNY food-sequence-burger-content-tobacco = tobaco @@ -113,6 +116,8 @@ food-sequence-burger-content-suppermatter = supper food-sequence-burger-content-hamster = hams food-sequence-burger-content-berries = berri food-sequence-burger-content-spacemans-trumpet = spacetrump +food-sequence-burger-content-extradimensional-orange = 3d +food-sequence-burger-content-world-pea = peace # TACO diff --git a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl new file mode 100644 index 00000000000..91b3c92b1c3 --- /dev/null +++ b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl @@ -0,0 +1,66 @@ +# Traitor single items +steal-target-groups-hypospray = hypospray +steal-target-groups-handheld-crew-monitor = handheld crew monitor +steal-target-groups-clothing-outer-hardsuit-rd = experimental research hardsuit +steal-target-groups-hand-teleporter = hand teleporter +steal-target-groups-clothing-shoes-boots-mag-adv = advanced magboots +steal-target-groups-box-folder-qm-clipboard = requisition digi-board +steal-target-groups-food-meat-corgi = prime-cut corgi meat +steal-target-groups-captain-id-card = captain ID card +steal-target-groups-jetpack-captain-filled = captain's jetpack +steal-target-groups-weapon-antique-laser = antique laser pistol +steal-target-groups-nuke-disk = nuclear authentication disk +steal-target-groups-weapon-energy-shot-gun = energy shotgun + +# Thief Collection +steal-target-groups-figurines = figurine +steal-target-groups-heads-cloaks = head's cloak +steal-target-groups-heads-bedsheets = head's bedsheet +steal-target-groups-stamps = stamp +steal-target-groups-door-remotes = door remote +steal-target-groups-encryption-keys = encryption key +steal-target-groups-technology-disks = technology disk +steal-target-groups-id-cards = ID Card +steal-target-groups-lamps = LAMP + +# Thief single item +steal-target-groups-forensic-scanner = forensic scanner +steal-target-groups-flippo-engraved-lighter = detective's Flippo engraved lighter +steal-target-groups-ammo-tech-fab-circuitboard = ammo techfab circuit board +steal-target-groups-clothing-head-hat-warden = warden's cap +steal-target-groups-clothing-outer-hardsuit-void-paramed = paramedic void suit +steal-target-groups-medical-tech-fab-circuitboard = medical techfab machine board +steal-target-groups-clothing-headset-alt-medical = chief medical officer's over-ear headset +steal-target-groups-research-and-development-server-machine-circuitboard = R&D server machine board +steal-target-groups-fire-axe = fireaxe +steal-target-groups-ame-part-flatpack = AME flatpack +steal-target-groups-salvage-expeditions-computer-circuitboard = salvage expeditions computer board +steal-target-groups-cargo-shuttle-console-circuitboard = cargo shuttle console board +steal-target-groups-clothing-eyes-hud-beer = beer goggles +steal-target-groups-bible = bible +steal-target-groups-clothing-neck-goldmedal = gold medal of crewmanship +steal-target-groups-clothing-neck-clownmedal = clown medal + +# Thief structures +steal-target-groups-teg = teg generator part +steal-target-groups-freezer-heater = freezer or heater +steal-target-groups-altar-nanotrasen = nanotrasen altar (any) + +steal-target-groups-nuclear-bomb = nuclear fission explosive +steal-target-groups-fax-machine-captain = captain long range fax machine +steal-target-groups-chem-dispenser = chemical dispenser +steal-target-groups-xeno-artifact = alien artifact +steal-target-groups-booze-dispenser = booze dispenser +steal-target-groups-plant-rd = "RD's potted plant" +steal-target-groups-toilet-golden-dirty-water = golden toilet + +# Thief Animal +steal-target-groups-animal-named-cat = CMO's Cat + +steal-target-groups-animal-ian = Ian +steal-target-groups-animal-mc-griff = McGriff +steal-target-groups-animal-walter = Walter +steal-target-groups-animal-morty = Morty +steal-target-groups-animal-renault = Renault +steal-target-groups-animal-shiva = Shiva +steal-target-groups-animal-tropico = Tropico diff --git a/Resources/Locale/en-US/objectives/conditions/steal.ftl b/Resources/Locale/en-US/objectives/conditions/steal.ftl index 00c8e0fdaf9..1f11bf7196b 100644 --- a/Resources/Locale/en-US/objectives/conditions/steal.ftl +++ b/Resources/Locale/en-US/objectives/conditions/steal.ftl @@ -8,4 +8,4 @@ objective-condition-steal-Ian = head of personnel's corgi objective-condition-thief-description = The {$itemName} would be a great addition to my collection! objective-condition-thief-animal-description = The {$itemName} would be a great addition to my collection! Most importantly, alive. -objective-condition-thief-multiply-description = I need to get {$count} {MAKEPLURAL($itemName)} and take them with me. +objective-condition-thief-multiply-description = I need to get {$count} {MAKEPLURAL($itemName)} (any) and take them with me. diff --git a/Resources/Locale/en-US/preferences/loadout-groups.ftl b/Resources/Locale/en-US/preferences/loadout-groups.ftl index 92c3bb9d61e..79b49140923 100644 --- a/Resources/Locale/en-US/preferences/loadout-groups.ftl +++ b/Resources/Locale/en-US/preferences/loadout-groups.ftl @@ -15,6 +15,7 @@ loadout-group-survival-syndicate = Github is forcing me to write text that is li loadout-group-breath-tool = Species-dependent breath tools loadout-group-tank-harness = Species-specific survival equipment loadout-group-EVA-tank = Species-specific gas tank +loadout-group-pocket-tank-double = Species-specific double emergency tank in pocket loadout-group-survival-mime = Mime Survival Box # Command diff --git a/Resources/Locale/en-US/replays/replays.ftl b/Resources/Locale/en-US/replays/replays.ftl index 4722f4c56b9..72bedb75a36 100644 --- a/Resources/Locale/en-US/replays/replays.ftl +++ b/Resources/Locale/en-US/replays/replays.ftl @@ -9,6 +9,7 @@ replay-loading-starting= Starting Entities replay-loading-failed = Failed to load replay. Error: {$reason} replay-loading-retry = Try load with more exception tolerance - MAY CAUSE BUGS! +replay-loading-cancel = Cancel # Main Menu replay-menu-subtext = Replay Client diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl index 138d3c9914d..c8d524ba1d7 100644 --- a/Resources/Locale/en-US/seeds/seeds.ftl +++ b/Resources/Locale/en-US/seeds/seeds.ftl @@ -6,6 +6,8 @@ seeds-noun-spores = spores # Seeds seeds-wheat-name = wheat seeds-wheat-display-name = wheat stalks +seeds-meatwheat-name = meatwheat +seeds-meatwheat-display-name = meatwheat stalks seeds-oat-name = oat seeds-oat-display-name = oat stalks seeds-banana-name = banana @@ -26,6 +28,8 @@ seeds-lime-name = lime seeds-lime-display-name = lime trees seeds-orange-name = orange seeds-orange-display-name = orange trees +seeds-extradimensionalorange-name = extradimensional orange +seeds-extradimensionalorange-display-name = extradimensional orange trees seeds-pineapple-name = pineapple seeds-pineapple-display-name = pineapple plant seeds-potato-name = potato @@ -109,7 +113,9 @@ seeds-spacemans-trumpet-display-name = spaceman's trumpet plant seeds-koibean-name = koibeans seeds-koibean-display-name = koibean plant seeds-watermelon-name = watermelon -seeds-watermelon-display-name = watermelon plant +seeds-watermelon-display-name = watermelon vines +seeds-holymelon-name = holymelon +seeds-holymelon-display-name = holymelon vines seeds-grape-name = grape seeds-grape-display-name = grape plant seeds-cocoa-name = cocoa @@ -118,8 +124,10 @@ seeds-berries-name = berries seeds-berries-display-name = berry bush seeds-bungo-name = bungo seeds-bungo-display-name = bungo plant -seeds-pea-name = pea +seeds-pea-name = peas seeds-pea-display-name = pea vines +seeds-worldpea-name = world peas +seeds-worldpea-display-name = world pea vines seeds-pumpkin-name = pumpkin seeds-pumpkin-display-name = pumpkins seeds-blue-pumpkin-name = blue pumpkin diff --git a/Resources/Locale/en-US/station-events/events/ion-storm.ftl b/Resources/Locale/en-US/station-events/events/ion-storm.ftl index 28192d96637..02be271cdf2 100644 --- a/Resources/Locale/en-US/station-events/events/ion-storm.ftl +++ b/Resources/Locale/en-US/station-events/events/ion-storm.ftl @@ -9,6 +9,7 @@ ion-storm-the-job = THE {$job} ion-storm-clowns = CLOWNS ion-storm-heads = HEADS OF STAFF ion-storm-crew = CREW +ion-storm-people = PEOPLE ion-storm-adjective-things = {$adjective} THINGS ion-storm-x-and-y = {$x} AND {$y} diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 8e3b1892161..7f4dcfe2eca 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -53,3 +53,9 @@ trait-german-desc = You seem to come from space Germany. trait-italian-name = Italian accent trait-italian-desc = Mamma mia! You seem to have lived in space Italy! + +trait-french-name = French accent +trait-french-desc = Your accent seems to have a certain «je ne sais quoi». + +trait-spanish-name = Spanish accent +trait-spanish-desc = Hola señor, donde esta la biblioteca. diff --git a/Resources/Maps/Nonstations/nukieplanet.yml b/Resources/Maps/Nonstations/nukieplanet.yml index 2063451a0ee..665657f7dda 100644 --- a/Resources/Maps/Nonstations/nukieplanet.yml +++ b/Resources/Maps/Nonstations/nukieplanet.yml @@ -13721,7 +13721,7 @@ entities: - type: Transform pos: 3.5882664,-8.344303 parent: 104 -- proto: VendingMachineBooze +- proto: VendingMachineBoozeSyndicate entities: - uid: 1380 components: diff --git a/Resources/Maps/Test/dev_map.yml b/Resources/Maps/Test/dev_map.yml index ce735e7318f..75511b17604 100644 --- a/Resources/Maps/Test/dev_map.yml +++ b/Resources/Maps/Test/dev_map.yml @@ -5070,7 +5070,7 @@ entities: - type: Transform pos: 3.5,7.5 parent: 179 -- proto: SpawnMobMouse +- proto: SpawnMobCorgiMouse entities: - uid: 1050 components: diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index 1f185c084b3..ef7b0f2895f 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -836,3 +836,22 @@ accent-russian-words-4: accent-russian-words-replace-4 accent-russian-words-5: accent-russian-words-replace-5 accent-russian-words-6: accent-russian-words-replace-6 + +- type: accent + id: skeleton + wordReplacements: + accent-skeleton-words-1: accent-skeleton-words-replace-1 + accent-skeleton-words-2: accent-skeleton-words-replace-2 + accent-skeleton-words-3: accent-skeleton-words-replace-3 + accent-skeleton-words-3-2: accent-skeleton-words-replace-3 + accent-skeleton-words-3-3: accent-skeleton-words-replace-3 + accent-skeleton-words-4: accent-skeleton-words-replace-4 + accent-skeleton-words-4-2: accent-skeleton-words-replace-4 + accent-skeleton-words-5: accent-skeleton-words-replace-5 + accent-skeleton-words-5-2: accent-skeleton-words-replace-5 + accent-skeleton-words-5-3: accent-skeleton-words-replace-5 + accent-skeleton-words-5-4: accent-skeleton-words-replace-5 + accent-skeleton-words-6: accent-skeleton-words-replace-6 + accent-skeleton-words-7: accent-skeleton-words-replace-7 + accent-skeleton-words-8: accent-skeleton-words-replace-8 + accent-skeleton-words-9: accent-skeleton-words-replace-9 diff --git a/Resources/Prototypes/Actions/anomaly.yml b/Resources/Prototypes/Actions/anomaly.yml new file mode 100644 index 00000000000..65c6ae164ea --- /dev/null +++ b/Resources/Prototypes/Actions/anomaly.yml @@ -0,0 +1,9 @@ +- type: entity + id: ActionAnomalyPulse + name: Anomaly pulse + description: Release a pulse of energy of your abnormal nature + components: + - type: InstantAction + icon: Structures/Specific/anomaly.rsi/anom1.png + event: !type:ActionAnomalyPulseEvent + useDelay: 30 \ No newline at end of file diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml index e2ce25de9d8..58513d7db16 100644 --- a/Resources/Prototypes/Actions/station_ai.yml +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -5,6 +5,7 @@ description: Sends your eye back to the core. components: - type: InstantAction + priority: -10 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -17,6 +18,7 @@ description: Shows job icons for crew members. components: - type: InstantAction + priority: -5 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -31,6 +33,7 @@ description: Enable surveillance camera lights near wherever you're viewing. components: - type: InstantAction + priority: -6 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -56,6 +59,7 @@ description: View the laws that you must follow. components: - type: InstantAction + priority: -3 itemIconStyle: NoItem icon: sprite: Interface/Actions/actions_ai.rsi diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index 59a607faa25..cb7b1049ef6 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -307,6 +307,7 @@ - id: BeachBall - id: RubberPig - id: ClothingShoesSkates + - id: RubberChicken - type: entity id: CrateFunBikeHornImplants diff --git a/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml b/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml index 5f6806afbb1..9314de97914 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml @@ -22,6 +22,12 @@ prefix: advertisement-boozeomat- count: 19 +- type: localizedDataset + id: BruiseOMatAds + values: + prefix: advertisement-bruiseomat- + count: 15 + - type: localizedDataset id: CargoDrobeAds values: diff --git a/Resources/Prototypes/Catalog/VendingMachines/goodbyes.yml b/Resources/Prototypes/Catalog/VendingMachines/goodbyes.yml index 5a3d91db116..fd4e53acaa7 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/goodbyes.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/goodbyes.yml @@ -4,6 +4,12 @@ prefix: thankyou-boozeomat- count: 3 +- type: localizedDataset + id: BruiseOMatGoodbyes + values: + prefix: thankyou-bruiseomat- + count: 28 + - type: localizedDataset id: ChangGoodbyes values: diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 81783be96ee..1246416147d 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -775,8 +775,8 @@ id: UplinkBinaryTranslatorKey name: uplink-binary-translator-key-name description: uplink-binary-translator-key-desc - icon: { sprite: /Textures/Objects/Devices/encryption_keys.rsi, state: rd_label } - productEntity: EncryptionKeyBinary + icon: { sprite: /Textures/Objects/Devices/encryption_keys.rsi, state: borg_label } + productEntity: EncryptionKeyBinarySyndicate cost: Telecrystal: 1 categories: @@ -2048,4 +2048,4 @@ - !type:BuyerJobCondition whitelist: - Chef - - Mime \ No newline at end of file + - Mime diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index fafa66c8141..625ef7a0561 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -23,7 +23,7 @@ #Basic Helmet (Security Helmet) - type: entity - parent: [ClothingHeadBase, BaseRestrictedContraband] + parent: [ClothingHeadHelmetBase, BaseRestrictedContraband] id: ClothingHeadHelmetBasic name: helmet description: Standard security gear. Protects the head from impacts. diff --git a/Resources/Prototypes/Entities/Clothing/Head/hoods.yml b/Resources/Prototypes/Entities/Clothing/Head/hoods.yml index 82cff81c22b..1330d38f404 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hoods.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hoods.yml @@ -746,3 +746,20 @@ - state: coatybits-equipped-HELMET color: "#EBE216" - state: winterbits-equipped-HELMET + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatHoodVoidCloak + name: void cloak hood + description: The hood of a void cloak. For those who have gone to the dark side of the force. + components: + - type: Sprite + sprite: Clothing/Head/Hoods/voidcloak.rsi + - type: Clothing + sprite: Clothing/Head/Hoods/voidcloak.rsi + - type: Tag + tags: + - WhitelistChameleon + - type: HideLayerClothing + slots: + - Hair diff --git a/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml b/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml index 555887b01db..02a8ec62b13 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml @@ -197,6 +197,14 @@ components: - type: Sprite sprite: Clothing/Neck/Cloaks/void.rsi + - type: ToggleableClothing + clothingPrototype: ClothingHeadHatHoodVoidCloak + requiredSlot: + - neck + slot: head + - type: ContainerContainer + containers: + toggleable-clothing: !type:ContainerSlot {} - type: TypingIndicatorClothing proto: alien diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/anomaly.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/anomaly.yml index 5a9360e652d..4697606af9f 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/anomaly.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/anomaly.yml @@ -9,6 +9,7 @@ - sprite: Structures/Specific/anomaly.rsi state: anom1 - type: RandomSpawner + chance: 1 prototypes: - AnomalyPyroclastic - AnomalyGravity @@ -21,7 +22,9 @@ - AnomalyFlora - AnomalyShadow - AnomalyTech - chance: 1 + rareChance: 0.3 + rarePrototypes: + - RandomAnomalyInjectorSpawner offset: 0.15 # not to put it higher. The anomaly sychnronizer looks for anomalies within this radius, and if the radius is higher, the anomaly can be attracted from a neighboring tile. - type: entity @@ -40,4 +43,28 @@ - AnomalyRockQuartz - AnomalyRockUranium chance: 1 - offset: 0.15 \ No newline at end of file + offset: 0.15 + +- type: entity + id: RandomAnomalyInjectorSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: Structures/Specific/Anomalies/tech_anom.rsi + state: pulse + - type: RandomSpawner + prototypes: + - AnomalyTrapPyroclastic + - AnomalyTrapElectricity + - AnomalyTrapShadow + - AnomalyTrapIce + - AnomalyTrapFlora + - AnomalyTrapBluespace + - AnomalyTrapFlesh + - AnomalyTrapGravity + - AnomalyTrapTech + - AnomalyTrapRock + chance: 1 + \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 02e983174a2..bf48a3fe725 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -116,6 +116,7 @@ - id: BalloonNT - id: BalloonCorgi - id: MysteryFigureBox + - id: RubberChicken # Cult - !type:AllSelector children: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml index cb06b39998f..52c2c326896 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml @@ -48,6 +48,20 @@ - MobCorgiLisa - MobCorgiIanPup +- type: entity + name: Dev Mouse Spawner + id: SpawnMobCorgiMouse + suffix: Admeme + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - state: ai + - type: ConditionalSpawner + prototypes: + - MobCorgiMouse + - type: entity name: Possum Morty Spawner id: SpawnMobPossumMorty diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml index 2e3c9ddf46d..870a7cf7d75 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml @@ -222,6 +222,20 @@ - sprite: Mobs/Customization/gauze.rsi state: gauze_boxerwrap_l +- type: marking + id: GauzeHead + bodyPart: Head + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid, Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_head + # Lizard Specific Markings - type: marking id: GauzeLizardLefteyePatch diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 1a008f45337..c6a0d61ccc1 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -32,6 +32,8 @@ states: Alive: Base: bat + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -101,6 +103,8 @@ states: Alive: Base: 0 + Critical: + Base: dead Dead: Base: dead - type: Item @@ -341,6 +345,8 @@ states: Alive: Base: cockroach + Critical: + Base: cockroach_dead Dead: Base: cockroach_dead - type: Bloodstream @@ -627,6 +633,8 @@ states: Alive: Base: duck-0 + Critical: + Base: dead-0 Dead: Base: dead-0 - type: Butcherable @@ -667,6 +675,8 @@ states: Alive: Base: duck-1 + Critical: + Base: dead-1 Dead: Base: dead-1 @@ -684,6 +694,8 @@ states: Alive: Base: duck-2 + Critical: + Base: dead-2 Dead: Base: dead-2 @@ -743,6 +755,8 @@ states: Alive: Base: butterfly + Critical: + Base: dead Dead: Base: dead - type: Bloodstream @@ -789,6 +803,8 @@ states: Alive: Base: cow + Critical: + Base: dead Dead: Base: dead - type: SolutionContainerManager @@ -871,6 +887,8 @@ states: Alive: Base: crab + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -1019,6 +1037,8 @@ states: Alive: Base: goose + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -1310,6 +1330,7 @@ tags: - VimPilot - DoorBumpOpener + - AnomalyHost - type: Reactive groups: Flammable: [ Touch ] @@ -1905,6 +1926,8 @@ states: Alive: Base: lizard + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -1959,6 +1982,8 @@ states: Alive: Base: slug + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -2011,6 +2036,8 @@ states: Alive: Base: frog + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -2061,6 +2088,8 @@ states: Alive: Base: parrot + Critical: + Base: dead Dead: Base: dead - type: Butcherable @@ -2112,6 +2141,8 @@ states: Alive: Base: penguin + Critical: + Base: penguin_dead Dead: Base: penguin_dead - type: Butcherable @@ -2181,6 +2212,8 @@ states: Alive: Base: penguin + Critical: + Base: dead Dead: Base: dead - type: MeleeWeapon @@ -2303,6 +2336,8 @@ states: Alive: Base: tarantula + Critical: + Base: tarantula_dead Dead: Base: tarantula_dead - type: Butcherable @@ -2428,6 +2463,8 @@ states: Alive: Base: clown + Critical: + Base: dead Dead: Base: dead - type: MobThresholds @@ -2497,6 +2534,8 @@ states: Alive: Base: possum + Critical: + Base: possum_dead Dead: Base: possum_dead - type: Butcherable @@ -2532,6 +2571,8 @@ states: Alive: Base: possum_old + Critical: + Base: possum_dead_old Dead: Base: possum_dead_old @@ -2566,6 +2607,8 @@ states: Alive: Base: raccoon + Critical: + Base: raccoon_dead Dead: Base: raccoon_dead - type: Butcherable @@ -2624,6 +2667,8 @@ states: Alive: Base: fox + Critical: + Base: fox_dead Dead: Base: fox_dead - type: Butcherable @@ -2695,6 +2740,8 @@ states: Alive: Base: corgi + Critical: + Base: corgi_dead Dead: Base: corgi_dead - type: Butcherable @@ -2736,6 +2783,8 @@ states: Alive: Base: narsian + Critical: + Base: narsian_dead Dead: Base: narsian_dead - type: MeleeWeapon @@ -2837,6 +2886,8 @@ states: Alive: Base: cat + Critical: + Base: cat_dead Dead: Base: cat_dead - type: Speech @@ -2887,6 +2938,8 @@ states: Alive: Base: cat2 + Critical: + Base: cat2_dead Dead: Base: cat2_dead @@ -2904,6 +2957,8 @@ states: Alive: Base: syndicat + Critical: + Base: syndicat_dead Dead: Base: syndicat_dead - type: GhostRole @@ -2949,6 +3004,8 @@ states: Alive: Base: spacecat + Critical: + Base: spacecat_dead Dead: Base: spacecat_dead - type: Temperature @@ -2986,6 +3043,8 @@ states: Alive: Base: caracal_flop + Critical: + Base: caracal_dead Dead: Base: caracal_dead @@ -3056,6 +3115,8 @@ states: Alive: Base: sloth + Critical: + Base: sloth_dead Dead: Base: sloth_dead - type: Butcherable @@ -3107,6 +3168,8 @@ states: Alive: Base: ferret + Critical: + Base: ferret_dead Dead: Base: ferret_dead - type: Butcherable @@ -3313,6 +3376,8 @@ states: Alive: Base: pig + Critical: + Base: dead Dead: Base: dead - type: Butcherable diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml b/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml index 520a475fded..9c0b837987e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml @@ -13,6 +13,11 @@ true NavSmash: !type:Bool true + - type: NPCImprintingOnSpawnBehaviour + spawnFriendsSearchRadius: 10 + whitelist: + components: + - Anomaly # Friendly to inner anomaly host - type: NpcFactionMember factions: - Flesh @@ -354,4 +359,4 @@ 30: Dead - type: MovementSpeedModifier baseWalkSpeed: 2 - baseSprintSpeed: 2.5 + baseSprintSpeed: 2.5 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/living_light.yml b/Resources/Prototypes/Entities/Mobs/NPCs/living_light.yml index 9b90d202f3a..9500345e4fc 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/living_light.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/living_light.yml @@ -16,6 +16,11 @@ - type: NpcFactionMember factions: - SimpleHostile + - type: NPCImprintingOnSpawnBehaviour + spawnFriendsSearchRadius: 10 + whitelist: + components: + - Anomaly # Friendly to inner anomaly host - type: MovementIgnoreGravity - type: MovementSpeedModifier baseWalkSpeed: 3.5 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index b123e6744a4..fd87886cc88 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -85,6 +85,29 @@ proper: true gender: female +- type: entity + name: real mouse + parent: MobCorgiIan + id: MobCorgiMouse + description: It's 100% a real hungry mouse. + components: + - type: Sprite + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: real_mouse + - type: DamageStateVisuals + states: + Alive: + Base: real_mouse + Critical: + Base: real_mouse_dead + Dead: + Base: real_mouse_dead + - type: Grammar + attributes: + proper: true + gender: female + - type: entity name: Puppy Ian parent: MobCorgiPuppy @@ -788,6 +811,7 @@ - CannotSuicide - DoorBumpOpener - VimPilot + - AnomalyHost - type: Loadout prototypes: [ MobMonkeyGear ] - type: Grammar diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 5aa829fcf7e..a9957b388fe 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -121,7 +121,7 @@ icon: Corvax/Interface/AdminActions/communications.png # Corvax-Resprite iconOn: Corvax/Interface/AdminActions/communications.png # Corvax-Resprite keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -4 event: !type:ToggleIntrinsicUIEvent { key: enum.CommunicationsConsoleUiKey.Key } - type: entity @@ -133,7 +133,7 @@ icon: Corvax/Interface/AdminActions/radar.png # Corvax-Resprite iconOn: Corvax/Interface/AdminActions/radar.png # Corvax-Resprite keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -7 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } - type: entity @@ -157,7 +157,7 @@ icon: Corvax/Interface/AdminActions/monitoring.png # Corvax-Resprite iconOn: Corvax/Interface/AdminActions/monitoring.png # Corvax-Resprite keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -9 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } - type: entity @@ -169,5 +169,5 @@ icon: Corvax/Interface/AdminActions/records.png # Corvax-Resprite iconOn: Corvax/Interface/AdminActions/records.png # Corvax-Resprite keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -8 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 9e5713dcfcb..d9826655412 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -46,6 +46,8 @@ type: GeneralStationRecordConsoleBoundUserInterface enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface + enum.CommunicationsConsoleUiKey.Key: + type: CommunicationsConsoleBoundUserInterface - type: IntrinsicUI uis: enum.RadarConsoleUiKey.Key: @@ -54,13 +56,20 @@ toggleAction: ActionAGhostShowCrewMonitoring enum.GeneralStationRecordConsoleKey.Key: toggleAction: ActionAGhostShowStationRecords + enum.CommunicationsConsoleUiKey.Key: + toggleAction: ActionAGhostShowCommunications - type: CrewMonitoringConsole - type: GeneralStationRecordConsole - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: CrewMonitor + transmitFrequencyId: ShuttleTimer - type: RadarConsole followEntity: false + - type: CommunicationsConsole + canShuttle: false + title: comms-console-announcement-title-station-ai + color: "#2ed2fd" # Ai diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index 70c516e7885..0d7f7717586 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -23,6 +23,7 @@ - FootstepSound - DoorBumpOpener - SpiderCraft + - AnomalyHost - type: Butcherable butcheringType: Spike spawned: diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index ef0805f3489..37eeb362dab 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -217,12 +217,13 @@ price: 1500 # Kidnapping a living person and selling them for cred is a good move. deathPenalty: 0.01 # However they really ought to be living and intact, otherwise they're worth 100x less. - type: PotentialPsionic + - type: LayingDown # backmen: LayingDown - type: Tag tags: - CanPilot - FootstepSound - DoorBumpOpener - - type: LayingDown # backmen: LayingDown + - AnomalyHost - type: entity save: false diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 0ad425c7102..000f21db3f4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -504,6 +504,9 @@ id: FoodMeatWheat description: This doesn't look like meat, but your standards aren't that high to begin with. components: + - type: FlavorProfile + flavors: + - falsemeat - type: Sprite state: clump - type: SolutionContainerManager @@ -796,8 +799,8 @@ node: bacon - type: FoodSequenceElement entries: - Burger: MeatBecon - Taco: MeatBecon + Burger: MeatBacon + Taco: MeatBacon - type: entity name: cooked bear diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 5ba65af6a2c..54c83129f29 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -56,6 +56,28 @@ tags: - Wheat +- type: entity + name: meatwheat bushel + description: Some blood-drenched wheat stalks. You can crush them into what passes for meat if you squint hard enough. + id: MeatwheatBushel + parent: ProduceBase + components: + - type: Sprite + sprite: Objects/Specific/Hydroponics/meatwheat.rsi + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: UncookedAnimalProteins + Quantity: 10 + - type: SpawnItemsOnUse + items: + - id: FoodMeatWheat + sound: + path: /Audio/Voice/Slime/slime_squish.ogg + - type: Produce + seedId: meatwheat + - type: entity name: oat bushel description: Eat oats, do squats. @@ -652,6 +674,47 @@ Burger: Orange Taco: Orange +- type: entity + name: extradimensional orange + parent: FoodProduceBase + id: FoodExtradimensionalOrange + description: You can hardly wrap your head around this thing. + components: + - type: FlavorProfile + flavors: + - truenature + - type: SolutionContainerManager + solutions: + food: + maxVol: 14 + reagents: + - ReagentId: Haloperidol + Quantity: 5 + - ReagentId: Nutriment + Quantity: 5 + - ReagentId: Vitamin + Quantity: 4 + - type: Sprite + sprite: Objects/Specific/Hydroponics/extradimensional_orange.rsi + scale: 0.5,0.5 + - type: Produce + seedId: extradimensionalOrange + - type: PotencyVisuals + minimumScale: 0.5 # reduce this in size because the sprite is way too big + maximumScale: 1 + - type: Extractable + juiceSolution: + reagents: + - ReagentId: JuiceOrange + Quantity: 10 + - type: Tag + tags: + - Fruit + - type: FoodSequenceElement + entries: + Burger: ExtradimensionalOrangeBurger + Taco: ExtradimensionalOrange + - type: entity name: pineapple parent: FoodProduceBase @@ -1983,6 +2046,105 @@ Taco: WatermelonSlice Skewer: WatermelonSliceSkewer +- type: entity + name: holymelon + parent: [FoodProduceBase, ItemHeftyBase] + id: FoodHolymelon + description: The water within this melon has been blessed by some deity that's particularly fond of watermelon. + components: + - type: Item + size: Small + - type: FlavorProfile + flavors: + - holy + - watermelon + - type: SolutionContainerManager + solutions: + food: + maxVol: 25 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Vitamin + Quantity: 5 + - ReagentId: Holywater + Quantity: 10 + - type: Sprite + sprite: Objects/Specific/Hydroponics/holymelon.rsi + - type: Produce + seedId: watermelon + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Wine + Quantity: 20 + - type: Damageable + damageContainer: Biological + - type: DamageOnHighSpeedImpact + minimumSpeed: 0.1 + damage: + types: + Blunt: 1 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: desecration + - !type:SpillBehavior + solution: food + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: SliceableFood + count: 5 + slice: FoodHolymelonSlice + - type: Tag + tags: + - Fruit + +- type: entity + name: holymelon slice + parent: ProduceSliceBase + id: FoodHolymelonSlice + description: Juicy golden and red slice. + components: + - type: Item + size: Tiny + - type: FlavorProfile + flavors: + - holy + - watermelon + - type: Sprite + sprite: Objects/Specific/Hydroponics/holymelon.rsi + - type: SolutionContainerManager + solutions: + food: + maxVol: 5 + reagents: + - ReagentId: Nutriment + Quantity: 2 + - ReagentId: Vitamin + Quantity: 1 + - ReagentId: Holywater + Quantity: 2 + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Wine + Quantity: 4 + - type: Tag + tags: + - Fruit + - Slice + - type: FoodSequenceElement + entries: + Burger: HolymelonSliceBurger + Taco: HolymelonSlice + Skewer: HolymelonSliceSkewer + - type: entity name: grapes parent: FoodProduceBase @@ -2145,6 +2307,38 @@ Taco: Pea Burger: Pea +- type: entity + parent: FoodProduceBase + id: FoodWorldPeas + name: cluster of world peas + description: It's rumored to bring peace to any who consume it. + components: + - type: FlavorProfile + flavors: + - numbingtranquility + - type: SolutionContainerManager + solutions: + food: + maxVol: 8 + reagents: + - ReagentId: Happiness + Quantity: 3 + - ReagentId: Nutriment + Quantity: 3 + - ReagentId: Pax + Quantity: 2 + - type: Sprite + sprite: Objects/Specific/Hydroponics/world_pea.rsi + - type: Produce + seedId: worldPea + - type: Tag + tags: + - Vegetable + - type: FoodSequenceElement + entries: + Taco: WorldPea + Burger: WorldPeaBurger + - type: entity name: pumpkin parent: FoodProduceBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index ff0504d39ea..e9e57f79ce4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -129,6 +129,10 @@ - type: Sprite state: chocolatebar-open - type: Item + - type: Tag + tags: + - FoodSnack + - ReptilianFood - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml index 7186f9f34ab..25d81a6f83c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml @@ -227,7 +227,22 @@ - type: Sprite layers: - state: crypt_silver - - state: rd_label + - state: borg_label + +- type: entity + parent: [ EncryptionKey, BaseSyndicateContraband ] + id: EncryptionKeyBinarySyndicate + name: binary translator key + description: A syndicate encryption key that translates binary signals used by silicons. + components: + - type: EncryptionKey + channels: + - Binary + defaultChannel: Binary + - type: Sprite + layers: + - state: crypt_red + - state: borg_label - type: entity parent: EncryptionKey diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 066940fd68b..ed3812d1a16 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -124,7 +124,6 @@ components: - type: ItemToggle onUse: false - - type: ItemTogglePointLight - type: HealthAnalyzer scanDelay: 1 scanningEndSound: diff --git a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml index b4e336b37dd..19eab391ac0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml @@ -137,6 +137,14 @@ - type: NavMapBeacon defaultText: station-beacon-vault +- type: entity + parent: DefaultStationBeaconCommand + id: DefaultStationBeaconGateway + suffix: Gateway + components: + - type: NavMapBeacon + defaultText: station-beacon-gateway + - type: entity parent: DefaultStationBeaconCommand id: DefaultStationBeaconCaptainsQuarters diff --git a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml index ffecfdf9940..3c4a4800a87 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml @@ -21,7 +21,7 @@ enum.CrayonUiKey.Key: type: CrayonBoundUserInterface - type: Crayon - capacity: 15 + capacity: 25 - type: Food - type: FlavorProfile flavors: diff --git a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml index 69f0ed415eb..0bee05aa6ad 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: ImmovableRod name: immovable rod description: You can sense that it's hungry. That's usually a bad sign. @@ -177,3 +177,14 @@ state: icon rotation: 225 noRot: false + +- type: entity + parent: ImmovableRodKeepTilesStill + id: ImmovableRodWeh + name: immovable weh + description: WEH! + components: + - type: Sprite + sprite: Objects/Fun/toys.rsi + state: plushie_lizard + noRot: false diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 596bf95eea7..b802f2240d6 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1319,10 +1319,9 @@ sprite: Objects/Weapons/Melee/cutlass.rsi state: foam_icon - type: MeleeWeapon + wideAnimationRotation: -135 attackRate: 1.5 range: 2.0 - angle: 0 - animation: WeaponArcThrust damage: types: Blunt: 0 @@ -1546,3 +1545,52 @@ params: volume: -9 maxDistance: 3 + +- type: entity + parent: BasePlushie + id: RubberChicken + name: rubber chicken + description: A stress inducing parody of nature's most delectable avian. + components: + - type: Sprite + state: rubber_chicken + - type: EmitSoundOnUse + sound: + collection: RubberChicken + params: + variation: 0.125 + - type: EmitSoundOnLand + sound: + collection: RubberChicken + params: + variation: 0.125 + - type: EmitSoundOnActivate + sound: + collection: RubberChicken + params: + variation: 0.125 + - type: EmitSoundOnCollide + sound: + collection: RubberChicken + params: + variation: 0.125 + - type: EmitSoundOnTrigger + sound: + collection: RubberChicken + params: + variation: 0.125 + - type: Food + requiresSpecialDigestion: true + useSound: + collection: RubberChicken + params: + variation: 0.125 + - type: MeleeWeapon + wideAnimationRotation: 110 + soundHit: + collection: RubberChicken + params: + variation: 0.125 + - type: PhysicalComposition + materialComposition: + Plastic: 25 diff --git a/Resources/Prototypes/Entities/Objects/Misc/books.yml b/Resources/Prototypes/Entities/Objects/Misc/books.yml index 29424074940..15ecd5d2a80 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/books.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/books.yml @@ -22,6 +22,7 @@ contentSize: 12000 - type: ActivatableUI key: enum.PaperUiKey.Key + requiresComplex: false - type: UserInterface interfaces: enum.PaperUiKey.Key: diff --git a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml index 762204701cb..77ddcf0d983 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml @@ -12,6 +12,10 @@ - type: Tag tags: - Briefcase + - type: MeleeWeapon + damage: + types: + Blunt: 8 - type: entity parent: BriefcaseBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 222e46127c0..6392925447c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -22,6 +22,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/wheat.rsi +- type: entity + parent: SeedBase + name: packet of meatwheat seeds + description: "If you ever wanted to drive a vegetarian to insanity, here's how." + id: MeatwheatSeeds + components: + - type: Seed + seedId: meatwheat + - type: Sprite + sprite: Objects/Specific/Hydroponics/meatwheat.rsi + - type: entity parent: SeedBase name: packet of oat seeds @@ -133,6 +144,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/orange.rsi +- type: entity + parent: SeedBase + name: packet of extradimensional orange seeds + description: "Polygonal seeds." + id: ExtradimensionalOrangeSeeds + components: + - type: Seed + seedId: extradimensionalOrange + - type: Sprite + sprite: Objects/Specific/Hydroponics/extradimensional_orange.rsi + - type: entity parent: SeedBase name: packet of pineapple seeds @@ -575,6 +597,16 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/watermelon.rsi +- type: entity + parent: SeedBase + name: packet of holymelon seeds + id: HolymelonSeeds + components: + - type: Seed + seedId: holymelon + - type: Sprite + sprite: Objects/Specific/Hydroponics/holymelon.rsi + - type: entity parent: SeedBase name: packet of grape seeds @@ -627,6 +659,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/pea.rsi +- type: entity + parent: SeedBase + id: WorldPeaSeeds + name: packet of world pea seeds + description: "These rather large seeds give off a soothing blue glow." + components: + - type: Seed + seedId: worldPea + - type: Sprite + sprite: Objects/Specific/Hydroponics/world_pea.rsi + - type: entity parent: SeedBase name: packet of pumpkin seeds diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml index b4e8e77c519..66e380c8d47 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml @@ -107,7 +107,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 1250 + damage: 300 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -147,7 +147,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 1750 + damage: 500 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -175,7 +175,7 @@ thresholds: - trigger: !type:DamageTrigger - damage: 2500 + damage: 1200 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] @@ -223,4 +223,4 @@ volume: 10 - !type:SpillBehavior solution: blood - - !type:ExplodeBehavior \ No newline at end of file + - !type:ExplodeBehavior diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml index 51484b9599e..c7951993f14 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml @@ -245,7 +245,6 @@ containers: board: [ DoorElectronicsMorgue ] - - type: entity parent: AirlockScience id: AirlockScienceLocked @@ -603,6 +602,15 @@ containers: board: [ DoorElectronicsChemistry ] +- type: entity + parent: AirlockMedicalGlass + id: AirlockMedicalMorgueGlassLocked + suffix: Morgue, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMorgue ] + - type: entity parent: AirlockMedicalGlass id: AirlockMedicalGlassLocked diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index 1532e19915c..8205fd9f224 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -201,6 +201,41 @@ - Bartender - Drinks +- type: entity + parent: VendingMachineBooze + id: VendingMachineBoozeSyndicate # syndie booze-o-mat for nukie outpost + name: Bruise-O-Mat + description: A refurbished Booze-O-Mat for boosting operative morale. An imprint of a blood-red hardsuit is visible on one side, and the paint seems ashed off on the other side. + components: + - type: VendingMachine + pack: BoozeOMatInventory + offState: off + brokenState: broken + normalState: normal-unshaded + denyState: deny-unshaded + loopDeny: false + - type: Advertise + pack: BruiseOMatAds + - type: SpeakOnUIClosed + pack: BruiseOMatGoodbyes + - type: Speech + - type: Sprite + sprite: Structures/Machines/VendingMachines/bruiseomat.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Base"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: AccessReader + access: [["SyndicateAgent"]] + - type: GuideHelp + guides: + - Bartender + - Drinks + - type: entity parent: VendingMachine id: VendingMachineCart diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index 24a8cb58da0..ba86ca65a06 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -24,13 +24,18 @@ pipeDirection: South - type: entity - parent: GasBinaryBase + parent: [BaseMachinePowered, GasBinaryBase] id: GasPressurePump name: gas pump description: A pump that moves gas by pressure. placement: mode: SnapgridCenter components: + - type: ApcPowerReceiver + powerLoad: 200 + - type: Rotatable + - type: Transform + noRot: false - type: Sprite sprite: Structures/Piping/Atmospherics/pump.rsi layers: @@ -64,13 +69,18 @@ path: /Audio/Ambience/Objects/gas_pump.ogg - type: entity - parent: GasBinaryBase + parent: [BaseMachinePowered, GasBinaryBase] id: GasVolumePump name: volumetric gas pump description: A pump that moves gas by volume. placement: mode: SnapgridCenter components: + - type: ApcPowerReceiver + powerLoad: 200 + - type: Rotatable + - type: Transform + noRot: false - type: Sprite sprite: Structures/Piping/Atmospherics/pump.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index d7a63ba070f..34d8268f647 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -6,6 +6,7 @@ components: - type: GlimmerSource - type: Anomaly + offset: 0, 0.15 pulseSound: collection: RadiationPulse params: @@ -935,4 +936,4 @@ lifetime: 2.3 - type: Tag tags: - - HideContextMenu \ No newline at end of file + - HideContextMenu diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml new file mode 100644 index 00000000000..f1e535f15b4 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml @@ -0,0 +1,353 @@ +- type: entity + id: AnomalyInjectionBase + abstract: true + components: + - type: PointLight + radius: 1.3 + energy: 2.5 + castShadows: false + - type: ActionGrant + actions: + - ActionAnomalyPulse + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionPyroclastic + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#E25822" + - type: PyroclasticAnomaly + maximumIgnitionRadius: 3 + - type: TempAffectingAnomaly + tempChangePerSecond: 10 + hotspotExposeTemperature: 500 + - type: GasProducerAnomaly + releasedGas: 3 + releaseOnMaxSeverity: true + spawnRadius: 4 + tileCount: 5 + tempChange: 420 + - type: ProjectileAnomaly + projectilePrototype: ProjectileAnomalyFireball + projectileSpeed: 0.5 + minProjectiles: 1 + maxProjectiles: 3 + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionElectric + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#ffffaa" + - type: ElectricityAnomaly + minBoltCount: 1 + maxBoltCount: 3 + maxElectrocuteRange: 4 + maxElectrocuteDamage: 10 + maxElectrocuteDuration: 4 + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionShadow + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#793a80" + - type: EntitySpawnAnomaly + entries: + - settings: + spawnOnPulse: true + spawnOnSuperCritical: true + minAmount: 5 + maxAmount: 10 + maxRange: 2 + spawns: + - ShadowKudzuWeak + - settings: + spawnOnSuperCritical: true + minAmount: 15 + maxAmount: 20 + maxRange: 25 + spawns: + - ShadowKudzu + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionIce + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#befaff" + - type: ExplosionAnomaly + supercriticalExplosion: Cryo + explosionTotalIntensity: 150 + explosionDropoff: 2 + explosionMaxTileIntensity: 20 + - type: ProjectileAnomaly + projectilePrototype: ProjectileIcicle + minProjectiles: 1 + maxProjectiles: 4 + - type: EntitySpawnAnomaly + entries: + - settings: + spawnOnStabilityChanged: true + minAmount: 3 + maxAmount: 8 + maxRange: 2 + spawns: + - IceCrust + - type: TempAffectingAnomaly + tempChangePerSecond: -10 + hotspotExposeTemperature: -500 + - type: GasProducerAnomaly + releasedGas: 8 # Frezon. Please replace if there is a better way to specify this + releaseOnMaxSeverity: true + spawnRadius: 0 + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionFlora + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#6270bb" + - type: TileSpawnAnomaly + entries: + - settings: + spawnOnPulse: true + minAmount: 2 + maxAmount: 5 + maxRange: 2 + floor: FloorAstroGrass + - settings: + spawnOnSuperCritical: true + minAmount: 5 + maxAmount: 15 + maxRange: 7 + floor: FloorAstroGrass + - type: EntitySpawnAnomaly + entries: + - settings: + spawnOnPulse: true + minAmount: 1 + maxAmount: 3 + maxRange: 1 + spawns: + - KudzuFlowerFriendly + - settings: + spawnOnSuperCritical: true + minAmount: 2 + maxAmount: 6 + maxRange: 3 + spawns: + - KudzuFlowerAngry + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionBluespace + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#00ccff" + - type: BluespaceAnomaly + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionFlesh + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#cb5b7e" + - type: TileSpawnAnomaly + entries: + - settings: + spawnOnPulse: true + spawnOnStabilityChanged: true + minAmount: 1 + maxAmount: 3 + maxRange: 2 + floor: FloorFlesh + - settings: + spawnOnSuperCritical: true + minAmount: 5 + maxAmount: 15 + maxRange: 5 + floor: FloorFlesh + - type: EntitySpawnAnomaly + entries: + - settings: + spawnOnPulse: true + minAmount: 1 + maxAmount: 2 + minRange: 1.5 + maxRange: 2.5 + spawns: + - FleshBlocker + - settings: + spawnOnPulse: true + maxAmount: 1 + minRange: 2.5 + maxRange: 4.5 + spawns: + - MobFleshJared + - MobFleshGolem + - MobFleshClamp + - MobFleshLover + - settings: + spawnOnSuperCritical: true + minAmount: 5 + maxAmount: 8 + minRange: 5 + maxRange: 15 + spawns: + - FleshBlocker + - settings: + spawnOnSuperCritical: true + minAmount: 2 + maxAmount: 5 + maxRange: 8 + spawns: + - MobFleshJared + - MobFleshGolem + - MobFleshClamp + - MobFleshLover + - settings: + spawnOnSuperCritical: true + minAmount: 2 + maxAmount: 4 + maxRange: 10 + spawns: + - FleshKudzu + - settings: + spawnOnShutdown: true + maxAmount: 2 + maxRange: 1 + spawns: + - MobFleshJared + - MobFleshGolem + - MobFleshClamp + - MobFleshLover + - FleshKudzu + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionGravity + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#1e070e" + - type: GravityAnomaly + maxGravityWellRange: 4 + maxThrowRange: 3 + maxThrowStrength: 5 + spaceRange: 1 + - type: GravityWell + maxRange: 0.7 + - type: SingularityDistortion + intensity: 100 + falloffPower: 2.7 + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionTech + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#56c1e8" + - type: TechAnomaly + linkRadius: + min: 2 + max: 5 + linkCountPerPulse: + min: 1 + max: 4 + linkCountSupercritical: 15 + - type: DeviceLinkSource + ports: + - Pulse + - Timer + - type: WirelessNetworkConnection + range: 10 + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: BasicDevice + +- type: entity + parent: AnomalyInjectionBase + id: AnomalyInjectionRock + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#5ca8cb" + - type: TileSpawnAnomaly + entries: + - settings: + spawnOnPulse: true + minAmount: 7 + maxAmount: 10 + maxRange: 4 + floor: FloorAsteroidTile + - settings: + spawnOnSuperCritical: true + minAmount: 15 + maxAmount: 25 + maxRange: 6 + floor: FloorAsteroidTile + - type: EntitySpawnAnomaly + entries: + - settings: + spawnOnPulse: true + minAmount: 4 + maxAmount: 8 + minRange: 1 + maxRange: 3 + spawns: + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroidSilver + - WallSpawnAsteroidSilverCrab + - WallSpawnAsteroidIron + - WallSpawnAsteroidIronCrab + - WallSpawnAsteroidQuartz + - WallSpawnAsteroidQuartzCrab + - settings: + spawnOnPulse: true + maxAmount: 3 + minRange: 2.5 + maxRange: 4.5 + spawns: + - CrystalPink + - CrystalCyan + - settings: + spawnOnSuperCritical: true + minAmount: 15 + maxAmount: 20 + minRange: 2 + maxRange: 7 + spawns: + - CrystalPink + - CrystalCyan + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroid + - WallSpawnAsteroidSilver + - WallSpawnAsteroidSilverCrab + - WallSpawnAsteroidIron + - WallSpawnAsteroidIronCrab + - WallSpawnAsteroidQuartz + - WallSpawnAsteroidQuartzCrab + - settings: + spawnOnSuperCritical: true + minAmount: 3 + maxAmount: 5 + maxRange: 3 + spawns: + - MobSpawnCrabSilver + - MobSpawnCrabIron + - MobSpawnCrabQuartz \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injectors.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injectors.yml new file mode 100644 index 00000000000..24a76dfb62e --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injectors.yml @@ -0,0 +1,320 @@ +- type: entity + name: anomaly injector + parent: MarkerBase + id: BaseAnomalyInjector + abstract: true + components: + - type: Physics + bodyType: Static + fixedRotation: true + - type: AmbientSound + range: 5 + volume: -5 + sound: + path: /Audio/Ambience/anomaly_drone.ogg + - type: Fixtures + fixtures: + anom: + shape: + !type:PhysShapeCircle + radius: 2.27 # i love 27 + hard: false + mask: + - MobMask + layer: + - MobLayer + - type: InnerBodyAnomalyInjector + whitelist: + tags: + - AnomalyHost + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapPyroclastic + suffix: Pyroclastic + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/Anomalies/pyro_anom.rsi + state: pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCorePyroclastic + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionPyroclastic + startMessage: inner-anomaly-start-message-pyro + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: fire + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: fire_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapElectricity + suffix: Electricity + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/anomaly.rsi + state: anom3-pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreElectricity + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionElectric + startMessage: inner-anomaly-start-message-shock + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: shock + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: shock_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapShadow + suffix: Shadow + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/Anomalies/shadow_anom.rsi + state: pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreShadow + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionShadow + startMessage: inner-anomaly-start-message-shadow + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: shadow + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: shadow_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapIce + suffix: Ice + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/Anomalies/ice_anom.rsi + state: pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreIce + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionIce + startMessage: inner-anomaly-start-message-frost + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: frost + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: frost_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapFlora + suffix: Flora + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/Anomalies/flora_anom.rsi + state: pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreFlora + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionFlora + startMessage: inner-anomaly-start-message-flora + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: flora + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: flora_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapBluespace + suffix: Bluespace + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/anomaly.rsi + state: anom4-pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreBluespace + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionBluespace + startMessage: inner-anomaly-start-message-bluespace + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: bluespace + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: bluespace_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapFlesh + suffix: Flesh + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/anomaly.rsi + state: anom5-pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreFlesh + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionFlesh + startMessage: inner-anomaly-start-message-flesh + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: flesh + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: flesh_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapGravity + suffix: Gravity + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/anomaly.rsi + state: anom2-pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreGravity + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionGravity + startMessage: inner-anomaly-start-message-grav + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: grav + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: grav_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapTech + suffix: Tech + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/Anomalies/tech_anom.rsi + state: pulse + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreTech + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionTech + startMessage: inner-anomaly-start-message-tech + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: tech + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: tech_VOX + +- type: entity + parent: BaseAnomalyInjector + id: AnomalyTrapRock + suffix: Rock + components: + - type: Sprite + layers: + - state: pink + - sprite: Structures/Specific/anomaly.rsi + state: anom6-pulse + color: "#5ca8cb" + - sprite: Mobs/Species/Human/parts.rsi + state: full + - type: InnerBodyAnomalyInjector + injectionComponents: + - type: Anomaly + deleteEntity: false + maxPointsPerSecond: 100 + corePrototype: AnomalyCoreRock + - type: InnerBodyAnomaly + injectionProto: AnomalyInjectionRock + startMessage: inner-anomaly-start-message-rock + fallbackSprite: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: rock + speciesSprites: + Vox: + sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi + state: rock_VOX \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml index 07b29b72259..ef3546981f9 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml @@ -205,6 +205,19 @@ - type: WiresPanel open: false +- type: entity + id: BaseIntercomSecure + parent: Intercom + abstract: true + components: + - type: WiresPanel + openDelay: 5 + - type: WiresPanelSecurity + examine: wires-panel-component-on-examine-security-level2 + wiresAccessible: false + - type: Construction + node: intercomReinforced + - type: entity id: IntercomCommon parent: Intercom @@ -219,8 +232,9 @@ - type: entity id: IntercomCommand - parent: Intercom + parent: BaseIntercomSecure suffix: Command + description: An intercom. It's been reinforced with metal. components: - type: ContainerFill containers: @@ -271,17 +285,10 @@ - type: entity id: IntercomSecurity - parent: Intercom + parent: BaseIntercomSecure suffix: Security description: An intercom. It's been reinforced with metal from security helmets, making it a bitch-and-a-half to open. components: - - type: WiresPanel - openDelay: 5 - - type: WiresPanelSecurity - examine: wires-panel-component-on-examine-security-level2 - wiresAccessible: false - - type: Construction - node: intercomReinforced - type: ContainerFill containers: board: diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml index c500229507b..3f536c871ae 100644 --- a/Resources/Prototypes/Flavors/flavors.yml +++ b/Resources/Prototypes/Flavors/flavors.yml @@ -1093,7 +1093,7 @@ id: bluepumpkin flavorType: Complex description: flavor-complex-blue-pumpkin - + - type: flavor id: violets flavorType: Complex @@ -1114,6 +1114,21 @@ flavorType: Complex description: flavor-complex-paint-thinner +- type: flavor + id: numbingtranquility + flavorType: Complex + description: flavor-complex-numbing-tranquility + +- type: flavor + id: truenature + flavorType: Complex + description: flavor-complex-true-nature + +- type: flavor + id: falsemeat + flavorType: Complex + description: flavor-complex-false-meat + - type: flavor id: cherry flavorType: Complex @@ -1128,4 +1143,3 @@ id: compressed-meat flavorType: Complex description: flavor-complex-compressed-meat - \ No newline at end of file diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 39f846311b5..364e8848b19 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -19,6 +19,7 @@ - id: RandomSentience - id: SlimesSpawn - id: SolarFlare + - id: SnakeSpawn - id: SpiderClownSpawn - id: SpiderSpawn - id: VentClog @@ -35,36 +36,35 @@ - id: SleeperAgents - id: ZombieOutbreak - - type: entity id: BaseStationEvent parent: BaseGameRule abstract: true components: - - type: GameRule - delay: - min: 10 - max: 20 + - type: GameRule + delay: + min: 10 + max: 20 - type: entity id: BaseStationEventShortDelay parent: BaseGameRule abstract: true components: - - type: GameRule - delay: - min: 10 - max: 20 + - type: GameRule + delay: + min: 10 + max: 20 - type: entity id: BaseStationEventLongDelay parent: BaseGameRule abstract: true components: - - type: GameRule - delay: - min: 40 - max: 60 + - type: GameRule + delay: + min: 40 + max: 60 - type: entity id: AnomalySpawn @@ -296,7 +296,7 @@ startAudio: path: /Audio/Announcements/power_off.ogg params: - volume: -4 + volume: -4 duration: 60 maxDuration: 120 - type: PowerGridCheckRule @@ -368,6 +368,27 @@ - id: MobAdultSlimesYellowAngry prob: 0.02 +- type: entity + id: SnakeSpawn + parent: BaseStationEventShortDelay + components: + - type: StationEvent + startAnnouncement: station-event-vent-creatures-start-announcement + startAudio: + path: /Audio/Announcements/attention.ogg + earliestStart: 20 + minimumPlayers: 15 + weight: 5 + duration: 60 + - type: VentCrittersRule + entries: + - id: MobPurpleSnake + prob: 0.02 + - id: MobSmallPurpleSnake + prob: 0.02 + - id: MobCobraSpace + prob: 0.02 + - type: entity id: SpiderSpawn parent: BaseStationEventShortDelay @@ -462,6 +483,9 @@ max: 1 pickPlayer: false startingGear: SyndicateLoneOperativeGearFull + roleLoadout: + - RoleSurvivalNukie + components: - type: NukeOperative - type: RandomMetadata @@ -534,9 +558,9 @@ id: MimicVendorRule parent: BaseGameRule components: - - type: StationEvent - earliestStart: 0 - minimumPlayers: 20 - maxOccurrences: 1 # this event has diminishing returns on interesting-ness, so we cap it - weight: 5 - - type: MobReplacementRule + - type: StationEvent + earliestStart: 0 + minimumPlayers: 20 + maxOccurrences: 1 # this event has diminishing returns on interesting-ness, so we cap it + weight: 5 + - type: MobReplacementRule diff --git a/Resources/Prototypes/GameRules/meteorswarms.yml b/Resources/Prototypes/GameRules/meteorswarms.yml index cdac90a83c4..9fd96fcec6e 100644 --- a/Resources/Prototypes/GameRules/meteorswarms.yml +++ b/Resources/Prototypes/GameRules/meteorswarms.yml @@ -212,26 +212,29 @@ - type: ImmovableRodRule rodPrototypes: - id: ImmovableRodKeepTilesStill - prob: 0.95 + prob: 0.94 orGroup: rodProto - id: ImmovableRodMop - prob: 0.0072 + prob: 0.0075 orGroup: rodProto - id: ImmovableRodShark - prob: 0.0072 + prob: 0.0075 orGroup: rodProto - id: ImmovableRodClown - prob: 0.0072 + prob: 0.0075 orGroup: rodProto - id: ImmovableRodBanana - prob: 0.0072 + prob: 0.0075 orGroup: rodProto - id: ImmovableRodHammer - prob: 0.0072 + prob: 0.0075 orGroup: rodProto - id: ImmovableRodThrongler - prob: 0.0072 + prob: 0.0075 orGroup: rodProto - id: ImmovableRodGibstick - prob: 0.0072 + prob: 0.0075 + orGroup: rodProto + - id: ImmovableRodWeh + prob: 0.0075 orGroup: rodProto diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 1c5c13f60c5..1089cfabe0d 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -104,7 +104,7 @@ spawnerPrototype: SpawnPointNukeopsCommander startingGear: SyndicateCommanderGearFull roleLoadout: - - RoleSurvivalSyndicate + - RoleSurvivalNukie components: - type: NukeOperative - type: RandomMetadata @@ -122,7 +122,7 @@ spawnerPrototype: SpawnPointNukeopsMedic startingGear: SyndicateOperativeMedicFull roleLoadout: - - RoleSurvivalSyndicate + - RoleSurvivalNukie components: - type: NukeOperative - type: RandomMetadata @@ -142,7 +142,7 @@ playerRatio: 10 startingGear: SyndicateOperativeGearFull roleLoadout: - - RoleSurvivalSyndicate + - RoleSurvivalNukie components: - type: NukeOperative - type: RandomMetadata @@ -325,8 +325,8 @@ tableId: SpaceTrafficControlTable - type: entity - id: SpaceTrafficControlFriendlyEventScheduler - parent: BaseGameRule + id: SpaceTrafficControlFriendlyEventScheduler + parent: BaseGameRule components: - type: BasicStationEventScheduler minimumTimeUntilFirstEvent: 1200 # 20 mins diff --git a/Resources/Prototypes/Hydroponics/mutations.yml b/Resources/Prototypes/Hydroponics/randomChemicals.yml similarity index 100% rename from Resources/Prototypes/Hydroponics/mutations.yml rename to Resources/Prototypes/Hydroponics/randomChemicals.yml diff --git a/Resources/Prototypes/Hydroponics/randomMutations.yml b/Resources/Prototypes/Hydroponics/randomMutations.yml new file mode 100644 index 00000000000..8f409a5eaf9 --- /dev/null +++ b/Resources/Prototypes/Hydroponics/randomMutations.yml @@ -0,0 +1,179 @@ +- type: RandomPlantMutationList + id: RandomPlantMutations + mutations: + - name: Bioluminescent + baseOdds: 0.036 + effect: !type:Glow + - name: Sentient + baseOdds: 0.0072 + appliesToProduce: false + persists: false + effect: !type:MakeSentient # existing effect. + - name: Slippery + baseOdds: 0.036 + effect: !type:Slipify + - name: ChangeSpecies + baseOdds: 0.036 + appliesToProduce: false + effect: !type:PlantSpeciesChange + - name: Unviable + baseOdds: 0.109 + persists: false + effect: !type:PlantChangeStat + targetValue: Viable + - name: ChangeWaterConsumption + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: WaterConsumption + minValue: 0.3 + maxValue: 0.9 + steps: 5 + - name: ChangeNutrientConsumption + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: NutrientConsumption + minValue: 0.05 + maxValue: 1.2 + steps: 5 + - name: ChangeIdealHeat + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: IdealHeat + minValue: 263 + maxValue: 323 + steps: 5 + - name: ChangeHeatTolerance + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: HeatTolerance + minValue: 2 + maxValue: 25 + steps: 5 + - name: ChangeToxinsTolerance + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: ToxinsTolerance + minValue: 1 + maxValue: 10 + steps: 5 + - name: ChangeLowPressureTolerance + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: LowPressureTolerance + minValue: 60 + maxValue: 100 + steps: 5 + - name: ChangeHighPressureTolerance + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: HighPressureTolerance + minValue: 100 + maxValue: 140 + steps: 5 + - name: ChangePestTolerance + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: PestTolerance + minValue: 0 + maxValue: 15 + steps: 5 + - name: ChangeWeedTolerance + baseOdds: 0.018 + persists: false + effect: !type:PlantChangeStat + targetValue: WeedTolerance + minValue: 0 + maxValue: 15 + steps: 5 + - name: ChangeEndurance + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Endurance + minValue: 50 + maxValue: 150 + steps: 5 + - name: ChangeYield + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Yield + minValue: 3 + maxValue: 10 + steps: 5 + - name: ChangeLifespan + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Lifespan + minValue: 10 + maxValue: 80 + steps: 5 + - name: ChangeMaturation + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Maturation + minValue: 3 + maxValue: 8 + steps: 5 + - name: ChangeProduction + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Production + minValue: 1 + maxValue: 10 + steps: 5 + - name: ChangePotency + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Potency + minValue: 30 + maxValue: 100 + steps: 5 + - name: ChangeSeedless + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Seedless + - name: ChangeLigneous + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: Ligneous + - name: ChangeTurnIntoKudzu + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: TurnIntoKudzu + - name: ChangeScreaming + baseOdds: 0.036 + persists: false + effect: !type:PlantChangeStat + targetValue: CanScream + - name: ChangeChemicals + baseOdds: 0.072 + persists: false + effect: !type:PlantMutateChemicals + - name: ChangeExudeGasses + baseOdds: 0.0145 + persists: false + effect: !type:PlantMutateExudeGasses + - name: ChangeConsumeGasses + baseOdds: 0.0036 + persists: false + effect: !type:PlantMutateConsumeGasses + - name: ChangeHarvest + baseOdds: 0.036 + persists: false + effect: !type:PlantMutateHarvest \ No newline at end of file diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml index 3fd64a9c964..9320b49dde0 100644 --- a/Resources/Prototypes/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Hydroponics/seeds.yml @@ -7,6 +7,8 @@ packetPrototype: WheatSeeds productPrototypes: - WheatBushel + mutationPrototypes: + - meatwheat lifespan: 25 maturation: 6 production: 3 @@ -24,6 +26,32 @@ Max: 20 PotencyDivisor: 20 +- type: seed + id: meatwheat + name: seeds-meatwheat-name + noun: seeds-noun-seeds + displayName: seeds-meatwheat-display-name + plantRsi: Objects/Specific/Hydroponics/meatwheat.rsi + packetPrototype: MeatwheatSeeds + productPrototypes: + - MeatwheatBushel + lifespan: 25 + maturation: 6 + production: 3 + yield: 3 + potency: 5 + idealLight: 8 + nutrientConsumption: 0.40 + chemicals: + Nutriment: + Min: 1 + Max: 20 + PotencyDivisor: 20 + UncookedAnimalProteins: + Min: 5 + Max: 20 + PotencyDivisor: 20 + - type: seed id: oat name: seeds-oat-name @@ -145,6 +173,8 @@ packetPrototype: LaughinPeaSeeds productPrototypes: - FoodLaughinPeaPod + mutationPrototypes: + - worldPea lifespan: 25 growthStages: 3 maturation: 7 @@ -258,6 +288,34 @@ packetPrototype: OrangeSeeds productPrototypes: - FoodOrange + mutationPrototypes: + - extradimensionalOrange + harvestRepeat: Repeat + lifespan: 55 + maturation: 6 + production: 6 + yield: 3 + potency: 10 + idealLight: 8 + chemicals: + Nutriment: + Min: 1 + Max: 5 + PotencyDivisor: 20 + Vitamin: + Min: 1 + Max: 4 + PotencyDivisor: 25 + +- type: seed + id: extradimensionalOrange + name: seeds-extradimensionalorange-name + noun: seeds-noun-seeds + displayName: seeds-extradimensionalorange-display-name + plantRsi: Objects/Specific/Hydroponics/extradimensional_orange.rsi + packetPrototype: ExtradimensionalOrangeSeeds + productPrototypes: + - FoodExtradimensionalOrange harvestRepeat: Repeat lifespan: 55 maturation: 6 @@ -266,6 +324,10 @@ potency: 10 idealLight: 8 chemicals: + Haloperidol: + Min: 1 + Max: 5 + PotencyDivisor: 20 Nutriment: Min: 1 Max: 5 @@ -719,7 +781,7 @@ DoctorsDelight: Min: 3 Max: 13 - PotencyDivisor: 10 + PotencyDivisor: 10 - type: seed id: corn @@ -1556,6 +1618,8 @@ packetPrototype: WatermelonSeeds productPrototypes: - FoodWatermelon + mutationPrototypes: + - holymelon lifespan: 55 maturation: 12 production: 3 @@ -1576,6 +1640,35 @@ Max: 5 PotencyDivisor: 20 +- type: seed + id: holymelon + name: seeds-holymelon-name + noun: seeds-noun-seeds + displayName: seeds-holymelon-display-name + plantRsi: Objects/Specific/Hydroponics/holymelon.rsi + packetPrototype: HolymelonSeeds + productPrototypes: + - FoodHolymelon + lifespan: 55 + maturation: 12 + production: 3 + yield: 1 + potency: 1 + idealLight: 8 + chemicals: + Nutriment: + Min: 1 + Max: 10 + PotencyDivisor: 10 + Holywater: + Min: 1 + Max: 10 + PotencyDivisor: 10 + Vitamin: + Min: 1 + Max: 5 + PotencyDivisor: 20 + - type: seed id: cocoa name: seeds-cocoa-name @@ -1690,6 +1783,39 @@ Max: 2 PotencyDivisor: 50 +- type: seed + id: worldPea + name: seeds-worldpea-name + noun: seeds-noun-seeds + displayName: seeds-worldpea-display-name + plantRsi: Objects/Specific/Hydroponics/world_pea.rsi + packetPrototype: PeaSeeds + productPrototypes: + - FoodWorldPeas + lifespan: 25 + growthStages: 3 + maturation: 20 + production: 6 + yield: 3 + potency: 25 + idealLight: 8 + harvestRepeat: Repeat + nutrientConsumption: 0.5 + waterConsumption: 0.5 + chemicals: + Happiness: + Min: 1 + Max: 3 + PotencyDivisor: 25 + Nutriment: + Min: 1 + Max: 3 + PotencyDivisor: 20 + Pax: + Min: 1 + Max: 2 + PotencyDivisor: 50 + - type: seed id: pumpkin name: seeds-pumpkin-name diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml b/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml index 7cc8d4839ce..84be839e17f 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml @@ -189,6 +189,23 @@ equipment: suitstorage: OxygenTankFilled +# Species-appropriate Double Emergency Tank in Pocket 1 +- type: loadout + id: LoadoutSpeciesPocketDoubleNitrogen + effects: + - !type:GroupLoadoutEffect + proto: NitrogenBreather + equipment: + pocket1: DoubleEmergencyNitrogenTankFilled + +- type: loadout + id: LoadoutSpeciesPocketDoubleOxygen + effects: + - !type:GroupLoadoutEffect + proto: OxygenBreather + equipment: + pocket1: DoubleEmergencyOxygenTankFilled + # Tank Harness - type: loadout id: LoadoutTankHarness diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 704de850df2..9ec8d04a8eb 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -81,6 +81,14 @@ - LoadoutSpeciesEVANitrogen - LoadoutSpeciesEVAOxygen +- type: loadoutGroup + id: GroupPocketTankDouble + name: loadout-group-pocket-tank-double + hidden: true + loadouts: + - LoadoutSpeciesPocketDoubleNitrogen + - LoadoutSpeciesPocketDoubleOxygen + # Command - type: loadoutGroup id: CaptainHead @@ -516,7 +524,7 @@ loadouts: - MimeSuspendersRed - MimeSuspendersBlack - + - type: loadoutGroup id: SurvivalMime name: loadout-group-survival-mime diff --git a/Resources/Prototypes/Loadouts/role_loadouts.yml b/Resources/Prototypes/Loadouts/role_loadouts.yml index ddafdb3b4ed..325c994828a 100644 --- a/Resources/Prototypes/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Loadouts/role_loadouts.yml @@ -775,6 +775,13 @@ - GroupSpeciesBreathTool - GroupTankHarness +- type: roleLoadout + id: RoleSurvivalNukie + groups: + - SurvivalSyndicate + - GroupSpeciesBreathTool + - GroupPocketTankDouble + - type: roleLoadout id: RoleSurvivalEVA groups: diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index f1e2b883b3f..6625c24bf6a 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -6,20 +6,20 @@ TraitorObjectiveGroupKillSyndicateFactions: 1 TraitorObjectiveGroupStateSyndicateFactions: 1 TraitorObjectiveGroupSocialSyndicateFactions: 1 - TraitorObjectiveGroupNukieDisk: 1 #Corvax + #TraitorObjectiveGroupNukieDisk: 1 #Corvax + - type: weightedRandom id: TraitorObjectiveGroupSteal weights: CaptainIDStealObjective: 1 CMOHyposprayStealObjective: 1 CMOCrewMonitorStealObjective: 1 - #NukeDiskStealObjective: 1 #Corvax + NukeDiskStealObjective: 1 #Corvax RDHardsuitStealObjective: 1 MagbootsStealObjective: 1 CorgiMeatStealObjective: 1 ClipboardStealObjective: 1 CaptainGunStealObjective: 0.5 - HosGunStealObjective: 0.5 CaptainJetpackStealObjective: 0.5 HandTeleporterStealObjective: 0.5 EnergyShotgunStealObjective: 0.5 diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml index 04b771e6186..48f56e2bfcd 100644 --- a/Resources/Prototypes/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml @@ -2,91 +2,84 @@ - type: stealTargetGroup id: Hypospray - name: hypospray + name: steal-target-groups-hypospray sprite: sprite: Objects/Specific/Medical/hypospray.rsi state: hypo - type: stealTargetGroup id: HandheldCrewMonitor - name: handheld crew monitor + name: steal-target-groups-handheld-crew-monitor sprite: sprite: Objects/Specific/Medical/handheldcrewmonitor.rsi state: scanner - type: stealTargetGroup id: ClothingOuterHardsuitRd - name: experimental research hardsuit + name: steal-target-groups-clothing-outer-hardsuit-rd sprite: sprite: Clothing/OuterClothing/Hardsuits/rd.rsi state: icon - type: stealTargetGroup id: HandTeleporter - name: hand teleporter + name: steal-target-groups-hand-teleporter sprite: sprite: Objects/Devices/hand_teleporter.rsi state: icon - type: stealTargetGroup id: ClothingShoesBootsMagAdv - name: advanced magboots + name: steal-target-groups-clothing-shoes-boots-mag-adv sprite: sprite: Clothing/Shoes/Boots/magboots-advanced.rsi state: icon - type: stealTargetGroup id: BoxFolderQmClipboard - name: requisition digi-board + name: steal-target-groups-box-folder-qm-clipboard sprite: sprite: Objects/Misc/qm_clipboard.rsi state: qm_clipboard - type: stealTargetGroup id: FoodMeatCorgi - name: prime-cut corgi meat + name: steal-target-groups-food-meat-corgi sprite: sprite: Objects/Consumable/Food/meat.rsi state: corgi # - type: stealTargetGroup id: CaptainIDCard - name: captain ID card + name: steal-target-groups-captain-id-card sprite: sprite: Objects/Misc/id_cards.rsi state: ert_commander #no one will know the difference. - type: stealTargetGroup id: JetpackCaptainFilled - name: captain's jetpack + name: steal-target-groups-jetpack-captain-filled sprite: sprite: Objects/Tanks/Jetpacks/captain.rsi state: icon - type: stealTargetGroup id: WeaponAntiqueLaser - name: antique laser pistol + name: steal-target-groups-weapon-antique-laser sprite: sprite: Objects/Weapons/Guns/Battery/antiquelasergun.rsi state: base -- type: stealTargetGroup - id: WeaponMultiphaseEnergyGun - name: X-01 multiphase energy gun - sprite: - sprite: Backmen/Objects/Weapons/Guns/Energy/x01.rsi - state: base - - type: stealTargetGroup id: NukeDisk - name: nuclear authentication disk + name: steal-target-groups-nuke-disk sprite: sprite: Objects/Misc/nukedisk.rsi state: icon - type: stealTargetGroup id: WeaponEnergyShotgun - name: energy shotgun + name: steal-target-groups-weapon-energy-shot-gun sprite: sprite: Objects/Weapons/Guns/Battery/energy_shotgun.rsi state: base @@ -95,63 +88,63 @@ - type: stealTargetGroup id: Figurines - name: figurines (any) + name: steal-target-groups-figurines sprite: sprite: Objects/Fun/figurines.rsi state: figurine_spawner - type: stealTargetGroup id: HeadCloak - name: head's cloaks (any) + name: steal-target-groups-heads-cloaks sprite: sprite: Clothing/Neck/Cloaks/cap.rsi state: icon - type: stealTargetGroup id: HeadBedsheet - name: head's bedsheets (any) + name: steal-target-groups-heads-bedsheets sprite: sprite: Objects/Misc/bedsheets.rsi state: sheetNT - type: stealTargetGroup id: Stamp - name: stamps (any) + name: steal-target-groups-stamps sprite: sprite: Objects/Misc/stamps.rsi state: stamp-cap - type: stealTargetGroup id: DoorRemote - name: door remotes (any) + name: steal-target-groups-door-remotes sprite: sprite: Objects/Devices/door_remote.rsi state: door_remotebase - type: stealTargetGroup id: EncryptionKey - name: encryption keys (any) + name: steal-target-groups-encryption-keys sprite: sprite: Objects/Devices/encryption_keys.rsi state: crypt_gray - type: stealTargetGroup id: TechnologyDisk - name: technology disks + name: steal-target-groups-technology-disks sprite: sprite: Objects/Misc/module.rsi state: datadisk_base - type: stealTargetGroup id: IDCard - name: ID Cards (any) + name: steal-target-groups-id-cards sprite: sprite: Objects/Misc/id_cards.rsi state: default - type: stealTargetGroup id: LAMP - name: LAMPS + name: steal-target-groups-lamps sprite: sprite: Objects/Tools/lantern.rsi state: lantern @@ -160,112 +153,112 @@ - type: stealTargetGroup id: ForensicScanner - name: forensic scanner + name: steal-target-groups-forensic-scanner sprite: sprite: Objects/Devices/forensic_scanner.rsi state: forensicnew - type: stealTargetGroup id: FlippoEngravedLighter - name: detective's Flippo engraved lighter + name: steal-target-groups-flippo-engraved-lighter sprite: sprite: Objects/Tools/lighters.rsi state: zippo_engraved_icon_base - type: stealTargetGroup id: AmmoTechFabCircuitboard - name: ammo techfab circuit board + name: steal-target-groups-ammo-tech-fab-circuitboard sprite: sprite: Objects/Misc/module.rsi state: security - type: stealTargetGroup id: ClothingHeadHatWarden - name: warden's cap + name: steal-target-groups-clothing-head-hat-warden sprite: sprite: Clothing/Head/Hats/warden.rsi state: icon - type: stealTargetGroup id: ClothingOuterHardsuitVoidParamed - name: paramedic void suit + name: steal-target-groups-clothing-outer-hardsuit-void-paramed sprite: sprite: Clothing/OuterClothing/Hardsuits/paramed.rsi state: icon - type: stealTargetGroup id: MedicalTechFabCircuitboard - name: medical techfab machine board + name: steal-target-groups-medical-tech-fab-circuitboard sprite: sprite: Objects/Misc/module.rsi state: medical - type: stealTargetGroup id: ClothingHeadsetAltMedical - name: chief medical officer's over-ear headset + name: steal-target-groups-clothing-headset-alt-medical sprite: sprite: Clothing/Ears/Headsets/medical.rsi state: icon_alt - type: stealTargetGroup id: ResearchAndDevelopmentServerMachineCircuitboard - name: R&D server machine board + name: steal-target-groups-research-and-development-server-machine-circuitboard sprite: sprite: Objects/Misc/module.rsi state: science - type: stealTargetGroup id: FireAxe - name: fireaxe + name: steal-target-groups-fire-axe sprite: sprite: Objects/Weapons/Melee/fireaxe.rsi state: icon - type: stealTargetGroup id: AmePartFlatpack - name: AME part + name: steal-target-groups-ame-part-flatpack sprite: sprite: Objects/Devices/flatpack.rsi state: ame-part - type: stealTargetGroup id: SalvageExpeditionsComputerCircuitboard - name: salvage expeditions computer board + name: steal-target-groups-salvage-expeditions-computer-circuitboard sprite: sprite: Objects/Misc/module.rsi state: cpu_supply - type: stealTargetGroup id: CargoShuttleConsoleCircuitboard - name: cargo shuttle console board + name: steal-target-groups-cargo-shuttle-console-circuitboard sprite: sprite: Objects/Misc/module.rsi state: cpuboard - type: stealTargetGroup id: ClothingEyesHudBeer - name: beer goggles + name: steal-target-groups-clothing-eyes-hud-beer sprite: sprite: Clothing/Eyes/Hud/beergoggles.rsi state: icon - type: stealTargetGroup id: Bible - name: bible + name: steal-target-groups-bible sprite: sprite: Objects/Specific/Chapel/bible.rsi state: icon - type: stealTargetGroup id: ClothingNeckGoldmedal - name: gold medal of crewmanship + name: steal-target-groups-clothing-neck-goldmedal sprite: sprite: Clothing/Neck/Medals/gold.rsi state: icon - type: stealTargetGroup id: ClothingNeckClownmedal - name: clown medal + name: steal-target-groups-clothing-neck-clownmedal sprite: sprite: Clothing/Neck/Medals/clownmedal.rsi state: icon @@ -274,70 +267,70 @@ - type: stealTargetGroup id: NuclearBomb - name: nuclear fission explosive + name: steal-target-groups-nuclear-bomb sprite: sprite: Objects/Devices/nuke.rsi state: nuclearbomb_base - type: stealTargetGroup id: FaxMachineCaptain - name: captain long range fax machine + name: steal-target-groups-fax-machine-captain sprite: sprite: Structures/Machines/fax_machine.rsi state: icon - type: stealTargetGroup id: ChemDispenser - name: chemical dispenser + name: steal-target-groups-chem-dispenser sprite: sprite: Structures/dispensers.rsi state: industrial-working - type: stealTargetGroup id: XenoArtifact - name: big alien artifact + name: steal-target-groups-xeno-artifact sprite: sprite: Objects/Specific/Xenoarchaeology/xeno_artifacts.rsi state: ano28 - type: stealTargetGroup id: FreezerHeater - name: freezer or heater + name: steal-target-groups-freezer-heater sprite: sprite: Structures/Piping/Atmospherics/thermomachine.rsi state: heaterOff - type: stealTargetGroup id: Teg - name: teg generator part + name: steal-target-groups-teg sprite: sprite: Structures/Power/Generation/teg.rsi state: teg - type: stealTargetGroup id: BoozeDispenser - name: booze dispenser + name: steal-target-groups-booze-dispenser sprite: sprite: Structures/smalldispensers.rsi state: booze - type: stealTargetGroup id: AltarNanotrasen - name: nanotrasen altar (any) + name: steal-target-groups-altar-nanotrasen sprite: sprite: Structures/Furniture/Altars/Gods/nanotrasen.rsi state: nanotrasen - type: stealTargetGroup id: PlantRD - name: RD's potted plant + name: steal-target-groups-plant-rd sprite: sprite: Structures/Furniture/potted_plants.rsi state: plant-25 - type: stealTargetGroup id: ToiletGoldenDirtyWater - name: golden toilet + name: steal-target-groups-toilet-golden-dirty-water sprite: sprite: Structures/Furniture/golden_toilet.rsi state: condisposal @@ -346,58 +339,56 @@ - type: stealTargetGroup id: AnimalIan - name: Ian + name: steal-target-groups-animal-ian sprite: sprite: Mobs/Pets/corgi.rsi state: ian - type: stealTargetGroup id: AnimalNamedCat - name: CMO's Cat + name: steal-target-groups-animal-named-cat sprite: sprite: Mobs/Pets/bingus.rsi state: bingus - type: stealTargetGroup id: AnimalMcGriff - name: McGriff + name: steal-target-groups-animal-mc-griff sprite: sprite: Mobs/Pets/mcgriff.rsi state: mcgriff - type: stealTargetGroup id: AnimalWalter - name: Walter + name: steal-target-groups-animal-walter sprite: sprite: Mobs/Pets/walter.rsi state: walter - type: stealTargetGroup id: AnimalMorty - name: Morty + name: steal-target-groups-animal-morty sprite: sprite: Mobs/Animals/possum.rsi state: possum - type: stealTargetGroup id: AnimalRenault - name: Renault + name: steal-target-groups-animal-renault sprite: sprite: Mobs/Animals/fox.rsi state: fox - type: stealTargetGroup id: AnimalShiva - name: Shiva + name: steal-target-groups-animal-shiva sprite: sprite: Mobs/Pets/shiva.rsi state: shiva - type: stealTargetGroup id: AnimalTropico - name: Tropico + name: steal-target-groups-animal-tropico sprite: sprite: Mobs/Animals/crab.rsi state: crab - - diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index 2b42d438f4b..bdcd5d41877 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -296,11 +296,3 @@ # stealGroup: NukeDisk # owner: objective-condition-steal-station # Corvax-MRP-End - -- type: entity - parent: BaseCaptainObjective - id: HoSGunStealObjective - components: - - type: StealCondition - stealGroup: WeaponMultiphaseEnergyGun - owner: job-name-hos diff --git a/Resources/Prototypes/RCD/rcd.yml b/Resources/Prototypes/RCD/rcd.yml index 500b5f59bf9..88a99451cfa 100644 --- a/Resources/Prototypes/RCD/rcd.yml +++ b/Resources/Prototypes/RCD/rcd.yml @@ -95,7 +95,7 @@ prototype: Grille cost: 4 delay: 2 - collisionMask: FullTileMask + collisionMask: Impassable rotation: Fixed fx: EffectRCDConstruct2 @@ -108,7 +108,7 @@ prototype: Window cost: 3 delay: 2 - collisionMask: FullTileMask + collisionMask: Impassable rules: - IsWindow rotation: Fixed @@ -122,7 +122,7 @@ prototype: WindowDirectional cost: 2 delay: 1 - collisionMask: FullTileMask + collisionMask: Impassable collisionBounds: "-0.23,-0.49,0.23,-0.36" rules: - IsWindow @@ -137,7 +137,7 @@ prototype: ReinforcedWindow cost: 4 delay: 3 - collisionMask: FullTileMask + collisionMask: Impassable rules: - IsWindow rotation: User @@ -151,7 +151,7 @@ prototype: WindowReinforcedDirectional cost: 3 delay: 2 - collisionMask: FullTileMask + collisionMask: Impassable collisionBounds: "-0.23,-0.49,0.23,-0.36" rules: - IsWindow @@ -231,7 +231,6 @@ prototype: CableApcExtension cost: 1 delay: 0 - collisionMask: InteractImpassable rules: - MustBuildOnSubfloor rotation: Fixed @@ -245,7 +244,6 @@ prototype: CableMV cost: 1 delay: 0 - collisionMask: InteractImpassable rules: - MustBuildOnSubfloor rotation: Fixed @@ -259,7 +257,6 @@ prototype: CableHV cost: 1 delay: 0 - collisionMask: InteractImpassable rules: - MustBuildOnSubfloor rotation: Fixed @@ -273,8 +270,6 @@ prototype: CableTerminal cost: 1 delay: 0 - collisionMask: InteractImpassable - rules: - - MustBuildOnSubfloor + collisionMask: Impassable rotation: User - fx: EffectRCDConstruct0 \ No newline at end of file + fx: EffectRCDConstruct0 diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml index 6979af54cd1..1244b858654 100644 --- a/Resources/Prototypes/Reagents/botany.yml +++ b/Resources/Prototypes/Reagents/botany.yml @@ -246,8 +246,8 @@ type: Rat shouldHave: false - !type:OrganType - type: Vox - shouldHave: false + type: Vox + shouldHave: false - !type:ReagentThreshold reagent: Ammonia min: 0.8 diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 24cb1090275..e709fee6eab 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -454,8 +454,6 @@ effects: - !type:HealthChange conditions: - - !type:ReagentThreshold - min: 1 - !type:OrganType type: Animal # Applying damage to the mobs with lower metabolism capabilities - !type:OrganType # Ataraxia @@ -466,8 +464,6 @@ - !type:ChemVomit probability: 0.04 #Scaled for time, not metabolismrate. conditions: - - !type:ReagentThreshold - min: 3 - !type:OrganType type: Animal - !type:OrganType # Ataraxia diff --git a/Resources/Prototypes/Recipes/Cooking/food_sequence_element.yml b/Resources/Prototypes/Recipes/Cooking/food_sequence_element.yml index d843e7b985b..43d6fe8852b 100644 --- a/Resources/Prototypes/Recipes/Cooking/food_sequence_element.yml +++ b/Resources/Prototypes/Recipes/Cooking/food_sequence_element.yml @@ -67,10 +67,10 @@ - Cooked - Meat -# Becon +# Bacon - type: foodSequenceElement - id: MeatBecon + id: MeatBacon sprites: - sprite: Objects/Consumable/Food/meat.rsi state: bacon-cooked @@ -276,7 +276,7 @@ tags: - Cooked - Meat - + # Snail meat - type: foodSequenceElement @@ -575,6 +575,28 @@ tags: - Fruit +# Extradimensional Orange + +- type: foodSequenceElement + id: ExtradimensionalOrange + name: food-sequence-content-orange + sprites: + - sprite: Objects/Specific/Hydroponics/extradimensional_orange.rsi + state: produce + scale: 0.5,0.5 + tags: + - Fruit + +- type: foodSequenceElement + id: ExtradimensionalOrangeBurger + name: food-sequence-burger-content-extradimensional-orange + sprites: + - sprite: Objects/Specific/Hydroponics/extradimensional_orange.rsi + state: produce + scale: 0.5,0.5 + tags: + - Fruit + # Potato - type: foodSequenceElement @@ -752,6 +774,38 @@ - Fruit - Slice +# Holymelon + +- type: foodSequenceElement + id: HolymelonSliceBurger + name: food-sequence-burger-content-holymelon + sprites: + - sprite: Objects/Specific/Hydroponics/holymelon.rsi + state: slice + tags: + - Fruit + - Slice + +- type: foodSequenceElement + id: HolymelonSlice + name: food-sequence-content-holymelon + sprites: + - sprite: Objects/Specific/Hydroponics/holymelon.rsi + state: slice + tags: + - Fruit + - Slice + +- type: foodSequenceElement + id: HolymelonSliceSkewer + name: food-sequence-content-holymelon + sprites: + - sprite: Objects/Consumable/Food/skewer.rsi + state: skewer-holymelon + tags: + - Fruit + - Slice + # Chili pepper - type: foodSequenceElement @@ -1056,6 +1110,26 @@ tags: - Vegetable +# World Pea + +- type: foodSequenceElement + id: WorldPea + name: food-sequence-content-world-pea + sprites: + - sprite: Objects/Specific/Hydroponics/world_pea.rsi + state: produce + tags: + - Vegetable + +- type: foodSequenceElement + id: WorldPeaBurger + name: food-sequence-burger-content-world-pea + sprites: + - sprite: Objects/Specific/Hydroponics/world_pea.rsi + state: produce + tags: + - Vegetable + # Cherry - type: foodSequenceElement diff --git a/Resources/Prototypes/Recipes/Lathes/clothing.yml b/Resources/Prototypes/Recipes/Lathes/clothing.yml index 05389fb3c0f..c3ba89c0ac5 100644 --- a/Resources/Prototypes/Recipes/Lathes/clothing.yml +++ b/Resources/Prototypes/Recipes/Lathes/clothing.yml @@ -1,763 +1,630 @@ +# Base prototypes -# Jumpsuits/skirts - type: latheRecipe - id: ClothingUniformJumpsuitColorGrey # Tide - result: ClothingUniformJumpsuitColorGrey + abstract: true + id: BaseJumpsuitRecipe completetime: 4 materials: Cloth: 300 - type: latheRecipe - id: ClothingUniformJumpskirtColorGrey - result: ClothingUniformJumpskirtColorGrey - completetime: 4 + abstract: true + parent: BaseJumpsuitRecipe + id: BaseCommandJumpsuitRecipe materials: Cloth: 300 + Durathread: 100 + +- type: latheRecipe + abstract: true + id: BaseCoatRecipe + completetime: 3.2 # don't ask why its faster than a jumpsuit?? + materials: + Cloth: 500 + Durathread: 200 + +- type: latheRecipe + abstract: true + parent: BaseCoatRecipe + id: BaseCommandCoatRecipe + materials: + Cloth: 500 + Durathread: 300 + +- type: latheRecipe + abstract: true + id: BaseHatRecipe + completetime: 2 + materials: + Cloth: 100 - type: latheRecipe + abstract: true + id: BaseCarpetRecipe + completetime: 1 + materials: + Cloth: 100 + +- type: latheRecipe + abstract: true + parent: BaseHatRecipe + id: BaseCommandHatRecipe + materials: + Cloth: 100 + Durathread: 50 + +- type: latheRecipe + abstract: true + id: BaseNeckClothingRecipe + completetime: 2 + materials: + Cloth: 200 + +# Recipes + +# Jumpsuits/skirts +- type: latheRecipe + parent: BaseJumpsuitRecipe + id: ClothingUniformJumpsuitColorGrey # Tide + result: ClothingUniformJumpsuitColorGrey # Tide + +- type: latheRecipe + parent: BaseJumpsuitRecipe + id: ClothingUniformJumpskirtColorGrey + result: ClothingUniformJumpskirtColorGrey + +- type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitBartender result: ClothingUniformJumpsuitBartender - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtBartender result: ClothingUniformJumpskirtBartender - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCaptain result: ClothingUniformJumpsuitCaptain - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCapFormal result: ClothingUniformJumpsuitCapFormal - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtCapFormalDress result: ClothingUniformJumpskirtCapFormalDress - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtCaptain result: ClothingUniformJumpskirtCaptain - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitCargo result: ClothingUniformJumpsuitCargo - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtCargo result: ClothingUniformJumpskirtCargo - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSalvageSpecialist result: ClothingUniformJumpsuitSalvageSpecialist - completetime: 4 - materials: - Cloth: 500 #It's armored but I don't want to include durathread for a non-head - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCentcomAgent result: ClothingUniformJumpsuitCentcomAgent - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCentcomFormal result: ClothingUniformJumpsuitCentcomFormal - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtCentcomFormalDress result: ClothingUniformJumpskirtCentcomFormalDress - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCentcomOfficer result: ClothingUniformJumpsuitCentcomOfficer - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCentcomOfficial result: ClothingUniformJumpsuitCentcomOfficial - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 + +## CE - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitChiefEngineer result: ClothingUniformJumpsuitChiefEngineer - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtChiefEngineer result: ClothingUniformJumpskirtChiefEngineer - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitChiefEngineerTurtle result: ClothingUniformJumpsuitChiefEngineerTurtle - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtChiefEngineerTurtle result: ClothingUniformJumpskirtChiefEngineerTurtle - completetime: 4 - materials: - Cloth: 300 + +## Chaplain - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitChaplain result: ClothingUniformJumpsuitChaplain - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtChaplain result: ClothingUniformJumpskirtChaplain - completetime: 4 - materials: - Cloth: 300 + +## Chef - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitChef result: ClothingUniformJumpsuitChef - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtChef result: ClothingUniformJumpskirtChef - completetime: 4 - materials: - Cloth: 300 + +## Chemist - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitChemistry result: ClothingUniformJumpsuitChemistry - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtChemistry result: ClothingUniformJumpskirtChemistry - completetime: 4 - materials: - Cloth: 300 + +## Clown - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitClown result: ClothingUniformJumpsuitClown - completetime: 4 - materials: - Cloth: 300 + +## CMO - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCMO result: ClothingUniformJumpsuitCMO - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtCMO result: ClothingUniformJumpskirtCMO - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitCMOTurtle result: ClothingUniformJumpsuitCMOTurtle - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtCMOTurtle result: ClothingUniformJumpskirtCMOTurtle - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 + +## Detective - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitDetective result: ClothingUniformJumpsuitDetective - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtDetective result: ClothingUniformJumpskirtDetective - completetime: 4 - materials: - Cloth: 300 + +## Engineer - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitEngineering result: ClothingUniformJumpsuitEngineering - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtEngineering result: ClothingUniformJumpskirtEngineering - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSeniorEngineer result: ClothingUniformJumpsuitSeniorEngineer - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtSeniorEngineer result: ClothingUniformJumpskirtSeniorEngineer - completetime: 4 - materials: - Cloth: 300 + +## HoP - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHoP result: ClothingUniformJumpsuitHoP - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtHoP result: ClothingUniformJumpskirtHoP - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 + +## HoS - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHoS result: ClothingUniformJumpsuitHoS - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtHoS result: ClothingUniformJumpskirtHoS - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHosFormal result: ClothingUniformJumpsuitHosFormal - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtHosFormal result: ClothingUniformJumpskirtHosFormal - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHoSParadeMale result: ClothingUniformJumpsuitHoSParadeMale - completetime: 5 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtHoSParadeMale result: ClothingUniformJumpskirtHoSParadeMale - completetime: 5 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHoSAlt result: ClothingUniformJumpsuitHoSAlt - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHoSBlue result: ClothingUniformJumpsuitHoSBlue - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitHoSGrey result: ClothingUniformJumpsuitHoSGrey - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtHoSAlt result: ClothingUniformJumpskirtHoSAlt - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 + +## Hydroponics - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitHydroponics result: ClothingUniformJumpsuitHydroponics - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtHydroponics result: ClothingUniformJumpskirtHydroponics - completetime: 4 - materials: - Cloth: 300 + +## Janitor - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitJanitor result: ClothingUniformJumpsuitJanitor - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtJanitor result: ClothingUniformJumpskirtJanitor - completetime: 4 - materials: - Cloth: 300 + +## Lawyer - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitLawyerBlack result: ClothingUniformJumpsuitLawyerBlack - completetime: 4 - materials: - Cloth: 300 + +## Librarian - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitLibrarian result: ClothingUniformJumpsuitLibrarian - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtColorLightBrown #Librarian - result: ClothingUniformJumpskirtColorLightBrown - completetime: 4 - materials: - Cloth: 300 + result: ClothingUniformJumpskirtColorLightBrown #Librarian + +## Medical Doctor - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitMedicalDoctor result: ClothingUniformJumpsuitMedicalDoctor - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtMedicalDoctor result: ClothingUniformJumpskirtMedicalDoctor - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSeniorPhysician result: ClothingUniformJumpsuitSeniorPhysician - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtSeniorPhysician result: ClothingUniformJumpskirtSeniorPhysician - completetime: 4 - materials: - Cloth: 300 + +## Mime - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitMime result: ClothingUniformJumpsuitMime - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtMime result: ClothingUniformJumpskirtMime - completetime: 4 - materials: - Cloth: 300 + +## Musician - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitMusician result: ClothingUniformJumpsuitMusician - completetime: 4 - materials: - Cloth: 300 + +## Operative - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitOperative result: ClothingUniformJumpsuitOperative - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtOperative result: ClothingUniformJumpskirtOperative - completetime: 4 - materials: - Cloth: 300 + +## Paramedic - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitParamedic result: ClothingUniformJumpsuitParamedic - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtParamedic result: ClothingUniformJumpskirtParamedic - completetime: 4 - materials: - Cloth: 300 + +## Senior Officer - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSeniorOfficer result: ClothingUniformJumpsuitSeniorOfficer - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtSeniorOfficer result: ClothingUniformJumpskirtSeniorOfficer - completetime: 4 - materials: - Cloth: 300 + +## Prisoner - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitPrisoner result: ClothingUniformJumpsuitPrisoner - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtPrisoner result: ClothingUniformJumpskirtPrisoner - completetime: 4 - materials: - Cloth: 300 + +## QM - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitQM result: ClothingUniformJumpsuitQM - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitQMFormal result: ClothingUniformJumpsuitQMFormal - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtQM result: ClothingUniformJumpskirtQM - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitQMTurtleneck result: ClothingUniformJumpsuitQMTurtleneck - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtQMTurtleneck result: ClothingUniformJumpskirtQMTurtleneck - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 + +## RD - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpsuitResearchDirector result: ClothingUniformJumpsuitResearchDirector - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 - type: latheRecipe + parent: BaseCommandJumpsuitRecipe id: ClothingUniformJumpskirtResearchDirector result: ClothingUniformJumpskirtResearchDirector - completetime: 4 - materials: - Cloth: 300 - Durathread: 100 + +## Scientist - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitScientist result: ClothingUniformJumpsuitScientist - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtScientist result: ClothingUniformJumpskirtScientist - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSeniorResearcher result: ClothingUniformJumpsuitSeniorResearcher - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtSeniorResearcher result: ClothingUniformJumpskirtSeniorResearcher - completetime: 4 - materials: - Cloth: 300 + +## Security Officer - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSec result: ClothingUniformJumpsuitSec - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtSec result: ClothingUniformJumpskirtSec - completetime: 4 - materials: - Cloth: 300 + +## Brigmedic - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitBrigmedic result: ClothingUniformJumpsuitBrigmedic - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtBrigmedic result: ClothingUniformJumpskirtBrigmedic - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitSyndieFormal result: ClothingUniformJumpsuitSyndieFormal - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtSyndieFormalDress result: ClothingUniformJumpskirtSyndieFormalDress - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitPyjamaSyndicateBlack result: ClothingUniformJumpsuitPyjamaSyndicateBlack - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitPyjamaSyndicatePink result: ClothingUniformJumpsuitPyjamaSyndicatePink - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitPyjamaSyndicateRed result: ClothingUniformJumpsuitPyjamaSyndicateRed - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpsuitWarden result: ClothingUniformJumpsuitWarden - completetime: 4 - materials: - Cloth: 300 - type: latheRecipe + parent: BaseJumpsuitRecipe id: ClothingUniformJumpskirtWarden result: ClothingUniformJumpskirtWarden - completetime: 4 - materials: - Cloth: 300 # Command winter coats - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterCap result: ClothingOuterWinterCap - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterCE result: ClothingOuterWinterCE - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterCentcom result: ClothingOuterWinterCentcom - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterCMO result: ClothingOuterWinterCMO - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterHoP result: ClothingOuterWinterHoP - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterHoSUnarmored result: ClothingOuterWinterHoSUnarmored - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterWardenUnarmored result: ClothingOuterWinterWardenUnarmored - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterQM result: ClothingOuterWinterQM - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe + parent: BaseCommandCoatRecipe id: ClothingOuterWinterRD result: ClothingOuterWinterRD - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 300 - type: latheRecipe id: ClothingNeckMantleCE @@ -819,503 +686,337 @@ Durathread: 150 # Winter coats - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterMusician result: ClothingOuterWinterMusician - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterClown result: ClothingOuterWinterClown - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterMime result: ClothingOuterWinterMime - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterCoat result: ClothingOuterWinterCoat - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterJani result: ClothingOuterWinterJani - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterBar result: ClothingOuterWinterBar - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterChef result: ClothingOuterWinterChef - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterHydro result: ClothingOuterWinterHydro - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterAtmos result: ClothingOuterWinterAtmos - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterEngi result: ClothingOuterWinterEngi - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterCargo result: ClothingOuterWinterCargo - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterMiner result: ClothingOuterWinterMiner - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterMed result: ClothingOuterWinterMed - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterPara result: ClothingOuterWinterPara - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterChem result: ClothingOuterWinterChem - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterGen result: ClothingOuterWinterGen - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterViro result: ClothingOuterWinterViro - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterSci result: ClothingOuterWinterSci - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterRobo result: ClothingOuterWinterRobo - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterSec result: ClothingOuterWinterSec - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterSyndie result: ClothingOuterWinterSyndie - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 - type: latheRecipe + parent: BaseCoatRecipe id: ClothingOuterWinterSyndieCap result: ClothingOuterWinterSyndieCap - completetime: 3.2 - materials: - Cloth: 500 - Durathread: 200 # Hats - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatCaptain result: ClothingHeadHatCaptain - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatCapcap result: ClothingHeadHatCapcap - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe + id: ClothingHeadHatCentcom + result: ClothingHeadHatCentcom + +- type: latheRecipe + parent: BaseCommandHatRecipe + id: ClothingHeadHatCentcomcap + result: ClothingHeadHatCentcomcap + +- type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatBeretHoS result: ClothingHeadHatBeretHoS - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatHoshat result: ClothingHeadHatHoshat - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatWarden result: ClothingHeadHatWarden - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatBeretWarden result: ClothingHeadHatBeretWarden - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatHopcap result: ClothingHeadHatHopcap - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatQMsoft result: ClothingHeadHatQMsoft - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatBeretRND result: ClothingHeadHatBeretRND - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatBeretEngineering result: ClothingHeadHatBeretEngineering - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatBeretQM result: ClothingHeadHatBeretQM - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseCommandHatRecipe id: ClothingHeadHatBeretCmo result: ClothingHeadHatBeretCmo - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 + +# Non-command hats - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatBeretMedic result: ClothingHeadHatBeretMedic - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatBeretBrigmedic result: ClothingHeadHatBeretBrigmedic - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatBeretSecurity result: ClothingHeadHatBeretSecurity - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatBeretSeniorPhysician result: ClothingHeadHatBeretSeniorPhysician - completetime: 2 - materials: - Cloth: 100 - -- type: latheRecipe - id: ClothingHeadHatCentcom - result: ClothingHeadHatCentcom - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - -- type: latheRecipe - id: ClothingHeadHatCentcomcap - result: ClothingHeadHatCentcomcap - completetime: 2 - materials: - Cloth: 100 - Durathread: 50 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatSyndie result: ClothingHeadHatSyndie - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatSyndieMAA result: ClothingHeadHatSyndieMAA - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadPyjamaSyndicateBlack result: ClothingHeadPyjamaSyndicateBlack - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadPyjamaSyndicatePink result: ClothingHeadPyjamaSyndicatePink - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadPyjamaSyndicateRed result: ClothingHeadPyjamaSyndicateRed - completetime: 2 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseHatRecipe id: ClothingHeadHatParamedicsoft result: ClothingHeadHatParamedicsoft - completetime: 1 - materials: - Cloth: 100 # Ties - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckTieRed result: ClothingNeckTieRed - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckTieDet result: ClothingNeckTieDet - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckTieSci result: ClothingNeckTieSci - completetime: 2 - materials: - Cloth: 200 # Scarfs - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedGreen result: ClothingNeckScarfStripedGreen - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedBlue result: ClothingNeckScarfStripedBlue - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedRed result: ClothingNeckScarfStripedRed - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedBrown result: ClothingNeckScarfStripedBrown - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedLightBlue result: ClothingNeckScarfStripedLightBlue - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedOrange result: ClothingNeckScarfStripedOrange - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedBlack result: ClothingNeckScarfStripedBlack - completetime: 2 - materials: - Cloth: 200 - type: latheRecipe + parent: BaseNeckClothingRecipe id: ClothingNeckScarfStripedPurple result: ClothingNeckScarfStripedPurple - completetime: 2 - materials: - Cloth: 200 # Carpets - type: latheRecipe + parent: BaseCarpetRecipe id: Carpet result: FloorCarpetItemRed - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetBlack result: FloorCarpetItemBlack - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetPink result: FloorCarpetItemPink - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetBlue result: FloorCarpetItemBlue - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetGreen result: FloorCarpetItemGreen - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetOrange result: FloorCarpetItemOrange - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetPurple result: FloorCarpetItemPurple - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetCyan result: FloorCarpetItemCyan - completetime: 1 - materials: - Cloth: 100 - type: latheRecipe + parent: BaseCarpetRecipe id: CarpetWhite result: FloorCarpetItemWhite - completetime: 1 - materials: - Cloth: 100 diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 67651dd3732..818ba0fe374 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -166,6 +166,7 @@ - type: latheRecipe parent: BaseGoldCircuitboardRecipe id: ChemMasterMachineCircuitboard + result: ChemMasterMachineCircuitboard - type: latheRecipe parent: BaseGoldCircuitboardRecipe @@ -431,6 +432,7 @@ - type: latheRecipe parent: BaseCircuitboardRecipe id: MicrowaveMachineCircuitboard + result: MicrowaveMachineCircuitboard - type: latheRecipe parent: BaseCircuitboardRecipe @@ -540,6 +542,7 @@ - type: latheRecipe parent: BaseGoldCircuitboardRecipe id: MiniGravityGeneratorCircuitboard + result: MiniGravityGeneratorCircuitboard - type: latheRecipe parent: BaseCircuitboardRecipe diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index 679bb4f680b..030a679e68a 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -56,7 +56,6 @@ outerClothing: ClothingOuterHardsuitSyndie shoes: ClothingShoesBootsCombatFilled id: SyndiPDA - pocket1: DoubleEmergencyOxygenTankFilled pocket2: PlushieCarp belt: ClothingBeltMilitaryWebbing storage: @@ -80,7 +79,7 @@ neck: SyndicateWhistle outerClothing: ClothingOuterHardsuitSyndieCommander inhand: - - NukeOpsDeclarationOfWar + - NukeOpsDeclarationOfWar #Nuclear Operative Medic Gear - type: startingGear diff --git a/Resources/Prototypes/SoundCollections/rubber_chicken.yml b/Resources/Prototypes/SoundCollections/rubber_chicken.yml new file mode 100644 index 00000000000..c468516f71e --- /dev/null +++ b/Resources/Prototypes/SoundCollections/rubber_chicken.yml @@ -0,0 +1,6 @@ +- type: soundCollection + id: RubberChicken + files: + - /Audio/Items/Toys/rubber_chicken_1.ogg + - /Audio/Items/Toys/rubber_chicken_2.ogg + - /Audio/Items/Toys/rubber_chicken_3.ogg diff --git a/Resources/Prototypes/Traits/speech.yml b/Resources/Prototypes/Traits/speech.yml index e5869a4afc4..98d0368ed6e 100644 --- a/Resources/Prototypes/Traits/speech.yml +++ b/Resources/Prototypes/Traits/speech.yml @@ -63,6 +63,24 @@ - type: ReplacementAccent accent: italian +- type: trait + id: FrenchAccent + name: trait-french-name + description: trait-french-desc + category: SpeechTraits + cost: 1 + components: + - type: FrenchAccent + +- type: trait + id: SpanishAccent + name: trait-spanish-name + description: trait-spanish-desc + category: SpeechTraits + cost: 1 + components: + - type: SpanishAccent + - type: trait id: Liar name: trait-liar-name diff --git a/Resources/Prototypes/_Backmen/Objectives/objectiveGroups.yml b/Resources/Prototypes/_Backmen/Objectives/objectiveGroups.yml index 1430a57d819..ac89f1383e9 100644 --- a/Resources/Prototypes/_Backmen/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/_Backmen/Objectives/objectiveGroups.yml @@ -19,6 +19,8 @@ CMOHyposprayStealObjectiveInterdyne: 1 MedicalTechFabCircuitboardStealObjectiveInterdyne: 1 CorgiMeatStealObjectiveInterdyne: 1 + #Gorlex + NukeDiskStealObjectiveGorlex: 0.05 - type: weightedRandom id: TraitorObjectiveGroupKillSyndicateFactions @@ -48,7 +50,7 @@ #Interdyne EscapeShuttleObjectiveInterdyne: 1 #Gorlex - HijackShuttleObjectiveGorlex: 0.02 + HijackShuttleObjectiveGorlex: 0.05 - type: weightedRandom id: TraitorObjectiveGroupSocialSyndicateFactions diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml b/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml index 478070890a3..25f37f7aed0 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml @@ -33,12 +33,32 @@ name: Завладейте эвакуационным шаттлом description: Улетите на шаттле эвакуации свободным и без лояльного экипажа Nanotrasen на борту. Используйте ЛЮБЫЕ доступные вам методы. Агенты Синдиката, враги Nanotrasen и заложники в наручниках могут оставаться на шаттле живыми. Игнорируйте помощь от кого-либо, кроме агента поддержки. components: - - type: Objective - difficulty: 5 #Hijacker don't help anyone else - icon: - sprite: Objects/Tools/emag.rsi - state: icon - - type: HijackShuttleCondition + - type: Objective + difficulty: 5 #Hijacker don't help anyone else + icon: + sprite: Objects/Tools/emag.rsi + state: icon + - type: HijackShuttleCondition + +# steal + +- type: entity + noSpawn: true + parent: [BaseTraitorObjectiveGorlex, BaseStealObjective] + id: NukeDiskStealObjectiveGorlex + components: + - type: Objective + # high difficulty since the hardest item both to steal, and to not get caught down the road, + # since anyone with a pinpointer can track you down and kill you + # it's close to being a stealth loneop + difficulty: 4 + icon: + sprite: Objects/Misc/nukedisk.rsi + state: icon + - type: NotCommandRequirement + - type: StealCondition + stealGroup: NukeDisk + owner: objective-condition-steal-station # kill diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 27fdd664f1f..fef180a0bbf 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -60,7 +60,7 @@ - badidea - punishment name: aller-at-once-title - description: all-at-once-description + description: aller-at-once-description showInVote: false #Please god dont do this rules: - WageScheduler #backmen: currency diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index fabbe3adfa1..ace54d25a8e 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -15,6 +15,9 @@ - type: Tag id: Ambrosia +- type: Tag + id: AnomalyHost + - type: Tag id: AppraisalTool diff --git a/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..ba4a4d8b7fc Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/icon.png b/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/icon.png new file mode 100644 index 00000000000..e955145ae71 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/meta.json b/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/meta.json new file mode 100644 index 00000000000..2a8e91145be --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hoods/voidcloak.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Made by Dezzzix; Discord: dezzzix", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_head.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_head.png new file mode 100644 index 00000000000..713ae3d4bc5 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_head.png differ diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json b/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json index 8d82ccab517..bd7d1ed4eb4 100644 --- a/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Gauze sprites by Github KittenColony / Discord kittencolony (297865728374210561)", + "copyright": "Gauze sprites by Github KittenColony / Discord kittencolony (297865728374210561), gauze_head by github:DreamlyJack(624946166152298517)", "size": { "x": 32, "y": 32 @@ -142,6 +142,10 @@ { "name": "gauze_moth_lowerleg_l", "directions": 4 + }, + { + "name": "gauze_head", + "directions": 4 } ] } \ No newline at end of file diff --git a/Resources/Textures/Mobs/Pets/corgi.rsi/meta.json b/Resources/Textures/Mobs/Pets/corgi.rsi/meta.json index 3a540931649..0e36d32316f 100644 --- a/Resources/Textures/Mobs/Pets/corgi.rsi/meta.json +++ b/Resources/Textures/Mobs/Pets/corgi.rsi/meta.json @@ -5,207 +5,60 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/tgstation/tgstation/commit/53d1f1477d22a11a99c6c6924977cd431075761b , cerberus by Alekshhh", + "copyright": "https://github.com/tgstation/tgstation/commit/53d1f1477d22a11a99c6c6924977cd431075761b , cerberus by Alekshhh, real mouse by TheShuEd", "states": [ { "name": "corgi", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { "name": "corgi_rest", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "corgi_dead", - "delays": [ - [ - 1 - ] - ] + "name": "corgi_dead" }, { "name": "ian", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "ian_dead", - "delays": [ - [ - 1 - ] - ] + "name": "ian_dead" }, { - "name": "corgi_deadcollar", - "delays": [ - [ - 1 - ] - ] + "name": "corgi_deadcollar" }, { - "name": "corgi_deadtag", - "delays": [ - [ - 1 - ] - ] + "name": "corgi_deadtag" }, { "name": "ian_shaved", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "ian_shaved_dead", - "delays": [ - [ - 1 - ] - ] + "name": "ian_shaved_dead" }, { "name": "corgicollar", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { "name": "corgitag", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { "name": "lisa", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "lisa_dead", - "delays": [ - [ - 1 - ] - ] + "name": "lisa_dead" }, { "name": "lisa_shaved", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "lisa_shaved_dead", - "delays": [ - [ - 1 - ] - ] + "name": "lisa_shaved_dead" }, { "name": "narsian", @@ -238,12 +91,7 @@ ] }, { - "name": "old_ian_dead", - "delays": [ - [ - 1 - ] - ] + "name": "old_ian_dead" }, { "name": "old_ian_shaved", @@ -268,116 +116,42 @@ ] }, { - "name": "old_ian_shaved_dead", - "delays": [ - [ - 1 - ] - ] + "name": "old_ian_shaved_dead" }, { "name": "puppy", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "puppy_dead", - "delays": [ - [ - 1 - ] - ] + "name": "puppy_dead" }, { - "name": "puppy_deadcollar", - "delays": [ - [ - 1 - ] - ] + "name": "puppy_deadcollar" }, { - "name": "puppy_deadtag", - "delays": [ - [ - 1 - ] - ] + "name": "puppy_deadtag" }, { "name": "puppy_shaved", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { - "name": "puppy_shaved_dead", - "delays": [ - [ - 1 - ] - ] + "name": "puppy_shaved_dead" }, { "name": "puppycollar", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 }, { "name": "puppytag", - "directions": 4, - "delays": [ - [ - 1 - ], - [ - 1 - ], - [ - 1 - ], - [ - 1 - ] - ] + "directions": 4 + }, + { + "name": "real_mouse", + "directions": 4 + }, + { + "name": "real_mouse_dead" } ] } diff --git a/Resources/Textures/Mobs/Pets/corgi.rsi/real_mouse.png b/Resources/Textures/Mobs/Pets/corgi.rsi/real_mouse.png new file mode 100644 index 00000000000..2983063c4fd Binary files /dev/null and b/Resources/Textures/Mobs/Pets/corgi.rsi/real_mouse.png differ diff --git a/Resources/Textures/Mobs/Pets/corgi.rsi/real_mouse_dead.png b/Resources/Textures/Mobs/Pets/corgi.rsi/real_mouse_dead.png new file mode 100644 index 00000000000..4b51443c73b Binary files /dev/null and b/Resources/Textures/Mobs/Pets/corgi.rsi/real_mouse_dead.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/skewer.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/skewer.rsi/meta.json index f99e5d77d45..d4e98e98bd8 100644 --- a/Resources/Textures/Objects/Consumable/Food/skewer.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/skewer.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa", + "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, skewer-holymelon edited from skewer-watermelon by slarticodefast", "size": { "x": 32, "y": 32 @@ -45,6 +45,9 @@ }, { "name": "skewer-watermelon" + }, + { + "name": "skewer-holymelon" } ] } diff --git a/Resources/Textures/Objects/Consumable/Food/skewer.rsi/skewer-holymelon.png b/Resources/Textures/Objects/Consumable/Food/skewer.rsi/skewer-holymelon.png new file mode 100644 index 00000000000..8bc88a45b8c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/skewer.rsi/skewer-holymelon.png differ diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/borg_label.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/borg_label.png new file mode 100644 index 00000000000..2b56e167730 Binary files /dev/null and b/Resources/Textures/Objects/Devices/encryption_keys.rsi/borg_label.png differ diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json b/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json index 8b28ec22815..6ae7bca9dda 100644 --- a/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Created by DSC@300074782328750080 for Space Station 14.", + "copyright": "Created by DSC@300074782328750080 for Space Station 14, borg_label taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi and modified by ArtisticRoomba", "size": { "x": 32, "y": 32 @@ -34,6 +34,7 @@ {"name": "sci_label"}, {"name": "sec_label"}, {"name": "service_label"}, - {"name": "synd_label"} + {"name": "synd_label"}, + {"name": "borg_label"} ] } diff --git a/Resources/Textures/Objects/Fun/toys.rsi/meta.json b/Resources/Textures/Objects/Fun/toys.rsi/meta.json index 4975ba04611..45f429f3e69 100644 --- a/Resources/Textures/Objects/Fun/toys.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/toys.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432, orb, orb-inhand-left and orb-inhand-right created by Pancake, plushie_diona and plushie_diona1 created by discord user Deos#5630, toy-mouse-equipped-HELMET is a resprited 1-equipped-HELMET in mouse.rsi by PuroSlavKing (Github), plushie_xeno by LinkUyx#6557, plushie_hampter by RenLou#4333, beachball taken from https://github.com/ss220-space/Paradise/commit/662c08272acd7be79531550919f56f846726eabb, beachb-inhand by ;3#1161, bee hat and in-hand sprites drawn by Ubaser, plushie_penguin by netwy, plushie_arachnid by PixelTheKermit (github), plushie human by TheShuEd, NanoTrasen Balloon by MACMAN2003, holoplush and magicplush modified by deltanedas (github). Lizard hat sprite made by Cinder", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432, orb, orb-inhand-left and orb-inhand-right created by Pancake, plushie_diona and plushie_diona1 created by discord user Deos#5630, toy-mouse-equipped-HELMET is a resprited 1-equipped-HELMET in mouse.rsi by PuroSlavKing (Github), plushie_xeno by LinkUyx#6557, plushie_hampter by RenLou#4333, beachball taken from https://github.com/ss220-space/Paradise/commit/662c08272acd7be79531550919f56f846726eabb, beachb-inhand by ;3#1161, bee hat and in-hand sprites drawn by Ubaser, plushie_penguin by netwy, plushie_arachnid by PixelTheKermit (github), plushie human by TheShuEd, NanoTrasen Balloon by MACMAN2003, holoplush and magicplush modified by deltanedas (github). Lizard hat sprite made by Cinder, rubber_chicken by xprospero", "size": { "x": 32, "y": 32 @@ -362,6 +362,9 @@ { "name": "beachb-inhand-right", "directions": 4 + }, + { + "name": "rubber_chicken" } ] } diff --git a/Resources/Textures/Objects/Fun/toys.rsi/rubber_chicken.png b/Resources/Textures/Objects/Fun/toys.rsi/rubber_chicken.png new file mode 100644 index 00000000000..543a3fbafea Binary files /dev/null and b/Resources/Textures/Objects/Fun/toys.rsi/rubber_chicken.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/dead.png new file mode 100644 index 00000000000..b79722cbe5c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/harvest.png new file mode 100644 index 00000000000..8bbddd83d85 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/meta.json new file mode 100644 index 00000000000..c2fd092c025 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/meta.json @@ -0,0 +1,68 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "stage-4" + }, + { + "name": "stage-5" + }, + { + "name": "stage-6" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/produce.png new file mode 100644 index 00000000000..be5b16262e5 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/seed.png new file mode 100644 index 00000000000..dad99e5b3a5 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-1.png new file mode 100644 index 00000000000..484b4726603 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-2.png new file mode 100644 index 00000000000..cfae4038297 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-3.png new file mode 100644 index 00000000000..e4e2ac9a399 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-4.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-4.png new file mode 100644 index 00000000000..31054ca2c5c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-4.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-5.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-5.png new file mode 100644 index 00000000000..91014722a87 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-5.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-6.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-6.png new file mode 100644 index 00000000000..96853e97903 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-6.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/dead.png new file mode 100644 index 00000000000..a3896d57c12 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/harvest.png new file mode 100644 index 00000000000..1a2a7d37478 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/meta.json new file mode 100644 index 00000000000..65cf434c0a6 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/meta.json @@ -0,0 +1,52 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "stage-4" + }, + { + "name": "stage-5" + }, + { + "name": "stage-6" + }, + { + "name": "slice" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/produce.png new file mode 100644 index 00000000000..73e458d8323 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/seed.png new file mode 100644 index 00000000000..66d13dc00c6 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/slice.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/slice.png new file mode 100644 index 00000000000..9ef34d39ae2 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/slice.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-1.png new file mode 100644 index 00000000000..f926a279dc3 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-2.png new file mode 100644 index 00000000000..4213fc32253 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-3.png new file mode 100644 index 00000000000..69b583f4e41 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-4.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-4.png new file mode 100644 index 00000000000..c496143bf67 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-4.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-5.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-5.png new file mode 100644 index 00000000000..5f9dc48217d Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-5.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-6.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-6.png new file mode 100644 index 00000000000..a7a3cb45531 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-6.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/dead.png new file mode 100644 index 00000000000..3a1e5735cd8 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/harvest.png new file mode 100644 index 00000000000..b0417c69c0e Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/meta.json new file mode 100644 index 00000000000..cb53758e1cc --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce" + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "stage-4" + }, + { + "name": "stage-5" + }, + { + "name": "stage-6" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/produce.png new file mode 100644 index 00000000000..e6ab15f164c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/seed.png new file mode 100644 index 00000000000..de775fe7ac9 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-1.png new file mode 100644 index 00000000000..efdf35bb125 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-2.png new file mode 100644 index 00000000000..1c9d20af4cb Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-3.png new file mode 100644 index 00000000000..bcec67f1e4d Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-4.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-4.png new file mode 100644 index 00000000000..8d471502ab5 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-4.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-5.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-5.png new file mode 100644 index 00000000000..bee9bd6b93d Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-5.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-6.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-6.png new file mode 100644 index 00000000000..502f27714c1 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-6.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json index 37bc00be888..16f3df4df6f 100644 --- a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png index 61e3fb4eaf8..655628bc881 100644 Binary files a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png and b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/dead.png new file mode 100644 index 00000000000..00d4f1dfc2c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/harvest.png new file mode 100644 index 00000000000..cbedf856116 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/meta.json new file mode 100644 index 00000000000..01be1e7dc4c --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce" + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/produce.png new file mode 100644 index 00000000000..aee68431aab Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/seed.png new file mode 100644 index 00000000000..fe7c8728209 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-1.png new file mode 100644 index 00000000000..abdff1afc7b Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-2.png new file mode 100644 index 00000000000..ab44f97970d Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-3.png new file mode 100644 index 00000000000..6ab196981f4 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-3.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/broken.png b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/broken.png new file mode 100644 index 00000000000..1df63230654 Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/broken.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/deny-unshaded.png b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/deny-unshaded.png new file mode 100644 index 00000000000..52f43a543f7 Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/meta.json b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/meta.json new file mode 100644 index 00000000000..dcf3878b514 --- /dev/null +++ b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/meta.json @@ -0,0 +1,89 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/1516a728931b4985c1e86f0c5995a5aa1554a1ad and modified by Swept, further modification by ArtisticRoomba", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "broken" + }, + { + "name": "deny-unshaded", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "normal-unshaded", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "off" + }, + { + "name": "panel" + } + ] +} diff --git a/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/normal-unshaded.png b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/normal-unshaded.png new file mode 100644 index 00000000000..ff9ad344c26 Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/off.png b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/off.png new file mode 100644 index 00000000000..c3427b7188c Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/off.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/panel.png b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/panel.png new file mode 100644 index 00000000000..60dbf76b85e Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/bruiseomat.rsi/panel.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/bluespace.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/bluespace.png new file mode 100644 index 00000000000..5e9311e0641 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/bluespace.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/bluespace_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/bluespace_VOX.png new file mode 100644 index 00000000000..b594cac2a90 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/bluespace_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/fire.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/fire.png new file mode 100644 index 00000000000..a6fcde7a184 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/fire.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/fire_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/fire_VOX.png new file mode 100644 index 00000000000..91eb3957040 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/fire_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flesh.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flesh.png new file mode 100644 index 00000000000..6e178307c33 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flesh.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flesh_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flesh_VOX.png new file mode 100644 index 00000000000..b1a1c43da0f Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flesh_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flora.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flora.png new file mode 100644 index 00000000000..70e369cb02b Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flora.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flora_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flora_VOX.png new file mode 100644 index 00000000000..97969116a97 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/flora_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/frost.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/frost.png new file mode 100644 index 00000000000..4823cb5a6f2 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/frost.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/frost_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/frost_VOX.png new file mode 100644 index 00000000000..346cad09b10 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/frost_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/grav.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/grav.png new file mode 100644 index 00000000000..c0775c0fb93 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/grav.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/grav_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/grav_VOX.png new file mode 100644 index 00000000000..04bfb8a0bfd Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/grav_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/meta.json b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/meta.json new file mode 100644 index 00000000000..4e069d0cd90 --- /dev/null +++ b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/meta.json @@ -0,0 +1,643 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Created by TheShuEd (github) for Space Station 14", + "states": [ + { + "name": "bluespace", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "bluespace_VOX", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "fire", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "fire_VOX", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "flesh", + "directions": 4, + "delays": [ + [ + 0.8, + 0.2, + 0.2 + ], + [ + 0.8, + 0.2, + 0.2 + ], + [ + 0.8, + 0.2, + 0.2 + ], + [ + 0.8, + 0.2, + 0.2 + ] + ] + }, + { + "name": "flesh_VOX", + "directions": 4, + "delays": [ + [ + 0.8, + 0.2, + 0.2 + ], + [ + 0.8, + 0.2, + 0.2 + ], + [ + 0.8, + 0.2, + 0.2 + ], + [ + 0.8, + 0.2, + 0.2 + ] + ] + }, + { + "name": "flora", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "flora_VOX", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "frost", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "frost_VOX", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "grav", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "grav_VOX", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "rock", + "directions": 4, + "delays": [ + [ + 0.9, + 0.2, + 0.2, + 0.2 + ], + [ + 0.9, + 0.2, + 0.2, + 0.2 + ], + [ + 0.9, + 0.2, + 0.2, + 0.2 + ], + [ + 0.9, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "rock_VOX", + "directions": 4, + "delays": [ + [ + 0.9, + 0.2, + 0.2, + 0.2 + ], + [ + 0.9, + 0.2, + 0.2, + 0.2 + ], + [ + 0.9, + 0.2, + 0.2, + 0.2 + ], + [ + 0.9, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "shadow", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "shadow_VOX", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "shock", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "shock_VOX", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "tech", + "directions": 4, + "delays": [ + [ + 0.2, + 0.4, + 0.2, + 0.4 + ], + [ + 0.2, + 0.4, + 0.2, + 0.4 + ], + [ + 0.2, + 0.4, + 0.2, + 0.4 + ], + [ + 0.2, + 0.4, + 0.2, + 0.4 + ] + ] + }, + { + "name": "tech_VOX", + "directions": 4, + "delays": [ + [ + 0.2, + 0.4, + 0.2, + 0.4 + ], + [ + 0.2, + 0.4, + 0.2, + 0.4 + ], + [ + 0.2, + 0.4, + 0.2, + 0.4 + ], + [ + 0.2, + 0.4, + 0.2, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/rock.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/rock.png new file mode 100644 index 00000000000..770e4b8d2f8 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/rock.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/rock_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/rock_VOX.png new file mode 100644 index 00000000000..b11a9182fb7 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/rock_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shadow.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shadow.png new file mode 100644 index 00000000000..345248bc536 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shadow.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shadow_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shadow_VOX.png new file mode 100644 index 00000000000..6efb246ac18 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shadow_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shock.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shock.png new file mode 100644 index 00000000000..acdc87a291c Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shock.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shock_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shock_VOX.png new file mode 100644 index 00000000000..d1f011c44d3 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/shock_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/tech.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/tech.png new file mode 100644 index 00000000000..0611fa8a2a0 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/tech.png differ diff --git a/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/tech_VOX.png b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/tech_VOX.png new file mode 100644 index 00000000000..1787cdd4e06 Binary files /dev/null and b/Resources/Textures/Structures/Specific/Anomalies/inner_anom_layer.rsi/tech_VOX.png differ diff --git a/Resources/Textures/Structures/Specific/anomaly.rsi/anom5-pulse.png b/Resources/Textures/Structures/Specific/anomaly.rsi/anom5-pulse.png index c0e547f8dd9..d8b6f14c119 100644 Binary files a/Resources/Textures/Structures/Specific/anomaly.rsi/anom5-pulse.png and b/Resources/Textures/Structures/Specific/anomaly.rsi/anom5-pulse.png differ diff --git a/Resources/Textures/Structures/Specific/anomaly.rsi/anom5.png b/Resources/Textures/Structures/Specific/anomaly.rsi/anom5.png index 6117776649f..a36dd2b64ad 100644 Binary files a/Resources/Textures/Structures/Specific/anomaly.rsi/anom5.png and b/Resources/Textures/Structures/Specific/anomaly.rsi/anom5.png differ