diff --git a/Content.Client/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Client/Radio/EntitySystems/RadioDeviceSystem.cs
new file mode 100644
index 0000000000..29d6c635eb
--- /dev/null
+++ b/Content.Client/Radio/EntitySystems/RadioDeviceSystem.cs
@@ -0,0 +1,23 @@
+using Content.Client.Radio.Ui;
+using Content.Shared.Radio;
+using Content.Shared.Radio.Components;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.Radio.EntitySystems;
+
+public sealed class RadioDeviceSystem : EntitySystem
+{
+ [Dependency] private readonly UserInterfaceSystem _ui = default!;
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnAfterHandleState);
+ }
+
+ private void OnAfterHandleState(Entity ent, ref AfterAutoHandleStateEvent args)
+ {
+ if (_ui.TryGetOpenUi(ent.Owner, IntercomUiKey.Key, out var bui))
+ bui.Update(ent);
+ }
+}
diff --git a/Content.Client/Radio/Ui/IntercomBoundUserInterface.cs b/Content.Client/Radio/Ui/IntercomBoundUserInterface.cs
index abbb1d58ec..7b3e39aa08 100644
--- a/Content.Client/Radio/Ui/IntercomBoundUserInterface.cs
+++ b/Content.Client/Radio/Ui/IntercomBoundUserInterface.cs
@@ -1,6 +1,6 @@
using Content.Shared.Radio;
+using Content.Shared.Radio.Components;
using JetBrains.Annotations;
-using Robust.Client.GameObjects;
namespace Content.Client.Radio.Ui;
@@ -19,7 +19,9 @@ protected override void Open()
{
base.Open();
- _menu = new();
+ var comp = EntMan.GetComponent(Owner);
+
+ _menu = new((Owner, comp));
_menu.OnMicPressed += enabled =>
{
@@ -46,13 +48,8 @@ protected override void Dispose(bool disposing)
_menu?.Close();
}
- protected override void UpdateState(BoundUserInterfaceState state)
+ public void Update(Entity ent)
{
- base.UpdateState(state);
-
- if (state is not IntercomBoundUIState msg)
- return;
-
- _menu?.Update(msg);
+ _menu?.Update(ent);
}
}
diff --git a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs
index 8b4b38753c..2e08913051 100644
--- a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs
+++ b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs
@@ -1,8 +1,9 @@
using Content.Client.UserInterface.Controls;
-using Content.Shared.Radio;
+using Content.Shared.Radio.Components;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
namespace Content.Client.Radio.Ui;
@@ -17,38 +18,54 @@ public sealed partial class IntercomMenu : FancyWindow
private readonly List _channels = new();
- public IntercomMenu()
+ public IntercomMenu(Entity entity)
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
MicButton.OnPressed += args => OnMicPressed?.Invoke(args.Button.Pressed);
SpeakerButton.OnPressed += args => OnSpeakerPressed?.Invoke(args.Button.Pressed);
+
+ Update(entity);
}
- public void Update(IntercomBoundUIState state)
+ public void Update(Entity entity)
{
- MicButton.Pressed = state.MicEnabled;
- SpeakerButton.Pressed = state.SpeakerEnabled;
+ MicButton.Pressed = entity.Comp.MicrophoneEnabled;
+ SpeakerButton.Pressed = entity.Comp.SpeakerEnabled;
+
+ MicButton.Disabled = entity.Comp.SupportedChannels.Count == 0;
+ SpeakerButton.Disabled = entity.Comp.SupportedChannels.Count == 0;
+ ChannelOptions.Disabled = entity.Comp.SupportedChannels.Count == 0;
ChannelOptions.Clear();
_channels.Clear();
- for (var i = 0; i < state.AvailableChannels.Count; i++)
+ for (var i = 0; i < entity.Comp.SupportedChannels.Count; i++)
{
- var channel = state.AvailableChannels[i];
- if (!_prototype.TryIndex(channel, out var prototype))
+ var channel = entity.Comp.SupportedChannels[i];
+ if (!_prototype.TryIndex(channel, out var prototype))
continue;
_channels.Add(channel);
ChannelOptions.AddItem(Loc.GetString(prototype.Name), i);
- if (channel == state.SelectedChannel)
+ if (channel == entity.Comp.CurrentChannel)
ChannelOptions.Select(i);
}
+
+ if (entity.Comp.SupportedChannels.Count == 0)
+ {
+ ChannelOptions.AddItem(Loc.GetString("intercom-options-none"), 0);
+ ChannelOptions.Select(0);
+ }
+
ChannelOptions.OnItemSelected += args =>
{
+ if (!_channels.TryGetValue(args.Id, out var proto))
+ return;
+
ChannelOptions.SelectId(args.Id);
- OnChannelSelected?.Invoke(_channels[args.Id]);
+ OnChannelSelected?.Invoke(proto);
};
}
}
diff --git a/Content.Client/Shuttles/UI/MapScreen.xaml.cs b/Content.Client/Shuttles/UI/MapScreen.xaml.cs
index 10800b8c5f..489dbc8c90 100644
--- a/Content.Client/Shuttles/UI/MapScreen.xaml.cs
+++ b/Content.Client/Shuttles/UI/MapScreen.xaml.cs
@@ -261,7 +261,7 @@ private void RebuildMapObjects()
ourMap = shuttleXform.MapID;
}
- while (mapComps.MoveNext(out var mapComp, out var mapXform, out var mapMetadata))
+ while (mapComps.MoveNext(out var mapUid, out var mapComp, out var mapXform, out var mapMetadata))
{
if (_console != null && !_shuttles.CanFTLTo(_shuttleEntity.Value, mapComp.MapId, _console.Value))
{
@@ -327,8 +327,10 @@ private void RebuildMapObjects()
{
AddMapObject(mapComp.MapId, gridObj);
}
- else if (!_shuttles.IsBeaconMap(_mapManager.GetMapEntityId(mapComp.MapId)) && (iffComp == null ||
- (iffComp.Flags & IFFFlags.Hide) == 0x0))
+ // If we can show it then add it to pending.
+ else if (!_shuttles.IsBeaconMap(mapUid) && (iffComp == null ||
+ (iffComp.Flags & IFFFlags.Hide) == 0x0) &&
+ !gridObj.HideButton)
{
_pendingMapObjects.Add((mapComp.MapId, gridObj));
}
@@ -336,11 +338,17 @@ private void RebuildMapObjects()
foreach (var (beacon, _) in _shuttles.GetExclusions(mapComp.MapId, _exclusions))
{
+ if (beacon.HideButton)
+ continue;
+
_pendingMapObjects.Add((mapComp.MapId, beacon));
}
foreach (var (beacon, _) in _shuttles.GetBeacons(mapComp.MapId, _beacons))
{
+ if (beacon.HideButton)
+ continue;
+
_pendingMapObjects.Add((mapComp.MapId, beacon));
}
@@ -425,9 +433,6 @@ private void AddMapObject(MapId mapId, IMapObject mapObj)
var existing = _mapObjects.GetOrNew(mapId);
existing.Add(mapObj);
- if (mapObj.HideButton)
- return;
-
var gridContents = _mapHeadings[mapId];
var gridButton = new Button()
diff --git a/Content.Server/Ame/AmeNodeGroup.cs b/Content.Server/Ame/AmeNodeGroup.cs
index 40da6222d2..bb482f7726 100644
--- a/Content.Server/Ame/AmeNodeGroup.cs
+++ b/Content.Server/Ame/AmeNodeGroup.cs
@@ -134,22 +134,11 @@ public float InjectFuel(int fuel, out bool overloading)
// The AME is being overloaded.
// Note about these maths: I would assume the general idea here is to make larger engines less safe to overload.
// In other words, yes, those are supposed to be CoreCount, not safeFuelLimit.
- var instability = 0;
var overloadVsSizeResult = fuel - CoreCount;
- // fuel > safeFuelLimit: Slow damage. Can safely run at this level for burst periods if the engine is small and someone is keeping an eye on it.
- if (_random.Prob(0.5f))
- instability = 1;
- // overloadVsSizeResult > 5:
- if (overloadVsSizeResult > 5)
- instability = 3;
- // overloadVsSizeResult > 10: This will explode in at most 20 injections.
- if (overloadVsSizeResult > 10)
- instability = 5;
-
- // Apply calculated instability
- if (instability == 0)
- return powerOutput;
+ var instability = overloadVsSizeResult / CoreCount;
+ var fuzz = _random.Next(-1, 2); // -1 to 1
+ instability += fuzz; // fuzz the values a tiny bit.
overloading = true;
var integrityCheck = 100;
@@ -179,10 +168,12 @@ public float InjectFuel(int fuel, out bool overloading)
///
public float CalculatePower(int fuel, int cores)
{
- // Fuel is squared so more fuel vastly increases power and efficiency
- // We divide by the number of cores so a larger AME is less efficient at the same fuel settings
- // this results in all AMEs having the same efficiency at the same fuel-per-core setting
- return 20000f * fuel * fuel / cores;
+ // Balanced around a single core AME with injection level 2 producing 120KW.
+ // Overclocking yields diminishing returns until it evens out at around 360KW.
+
+ // The adjustment for cores make it so that a 1 core AME at 2 injections is better than a 2 core AME at 2 injections.
+ // However, for the relative amounts for each (1 core at 2 and 2 core at 4), more cores has more output.
+ return 200000f * MathF.Log10(fuel * fuel) * MathF.Pow(0.75f, cores - 1);
}
public int GetTotalStability()
diff --git a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs
index e6abe98b95..eda9158273 100644
--- a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs
+++ b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs
@@ -274,9 +274,9 @@ public void SetInjectionAmount(EntityUid uid, int value, EntityUid? user = null,
At the time of editing, players regularly "overclock" the AME and those cases require no admin attention.
// Admin alert
- var safeLimit = 0;
+ var safeLimit = int.MaxValue;
if (TryGetAMENodeGroup(uid, out var group))
- safeLimit = group.CoreCount * 2;
+ safeLimit = group.CoreCount * 4;
if (oldValue <= safeLimit && value > safeLimit)
{
@@ -291,10 +291,20 @@ public void SetInjectionAmount(EntityUid uid, int value, EntityUid? user = null,
*/
}
- public void AdjustInjectionAmount(EntityUid uid, int delta, int min = 0, int max = int.MaxValue, EntityUid? user = null, AmeControllerComponent? controller = null)
+ public void AdjustInjectionAmount(EntityUid uid, int delta, EntityUid? user = null, AmeControllerComponent? controller = null)
{
- if (Resolve(uid, ref controller))
- SetInjectionAmount(uid, MathHelper.Clamp(controller.InjectionAmount + delta, min, max), user, controller);
+ if (!Resolve(uid, ref controller))
+ return;
+
+ var max = GetMaxInjectionAmount((uid, controller));
+ SetInjectionAmount(uid, MathHelper.Clamp(controller.InjectionAmount + delta, 0, max), user, controller);
+ }
+
+ public int GetMaxInjectionAmount(Entity ent)
+ {
+ if (!TryGetAMENodeGroup(ent, out var group))
+ return 0;
+ return group.CoreCount * 8;
}
private void UpdateDisplay(EntityUid uid, int stability, AmeControllerComponent? controller = null, AppearanceComponent? appearance = null)
diff --git a/Content.Server/Body/Systems/InternalsSystem.cs b/Content.Server/Body/Systems/InternalsSystem.cs
index 922d48f13e..d6ece39d59 100644
--- a/Content.Server/Body/Systems/InternalsSystem.cs
+++ b/Content.Server/Body/Systems/InternalsSystem.cs
@@ -100,7 +100,7 @@ public void ToggleInternals(
// Toggle off if they're on
if (AreInternalsWorking(internals))
{
- if (force || user == uid)
+ if (force)
{
DisconnectTank(internals);
return;
diff --git a/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs b/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs
index d5f7655f88..a81f38a21d 100644
--- a/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs
+++ b/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs
@@ -1,6 +1,9 @@
+using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Reaction;
+using Content.Shared.DoAfter;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction;
+using Content.Shared.Nutrition.EntitySystems;
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Server.Popups;
@@ -10,34 +13,68 @@ public sealed partial class ReactionMixerSystem : EntitySystem
{
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly SolutionContainerSystem _solutionContainers = default!;
+ [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnAfterInteract);
+ SubscribeLocalEvent(OnShake);
+ SubscribeLocalEvent(OnDoAfter);
}
private void OnAfterInteract(Entity entity, ref AfterInteractEvent args)
{
- if (!args.Target.HasValue || !args.CanReach)
+ if (!args.Target.HasValue || !args.CanReach || !entity.Comp.MixOnInteract)
return;
- var mixAttemptEvent = new MixingAttemptEvent(entity);
- RaiseLocalEvent(entity, ref mixAttemptEvent);
- if (mixAttemptEvent.Cancelled)
- {
+ if (!MixAttempt(entity, args.Target.Value, out var solution))
return;
- }
- if (!_solutionContainers.TryGetMixableSolution(args.Target.Value, out var solution, out _))
+ var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.TimeToMix, new ReactionMixDoAfterEvent(), entity, args.Target.Value, entity);
+
+ _doAfterSystem.TryStartDoAfter(doAfterArgs);
+ }
+
+ private void OnDoAfter(Entity entity, ref ReactionMixDoAfterEvent args)
+ {
+ //Do again to get the solution again
+ if (!MixAttempt(entity, args.Target!.Value, out var solution))
return;
- _popup.PopupEntity(Loc.GetString(entity.Comp.MixMessage, ("mixed", Identity.Entity(args.Target.Value, EntityManager)), ("mixer", Identity.Entity(entity.Owner, EntityManager))), args.User, args.User);
+ _popup.PopupEntity(Loc.GetString(entity.Comp.MixMessage, ("mixed", Identity.Entity(args.Target!.Value, EntityManager)), ("mixer", Identity.Entity(entity.Owner, EntityManager))), args.User, args.User);
+
+ _solutionContainers.UpdateChemicals(solution!.Value, true, entity.Comp);
+
+ var afterMixingEvent = new AfterMixingEvent(entity, args.Target!.Value);
+ RaiseLocalEvent(entity, afterMixingEvent);
+ }
+
+ private void OnShake(Entity entity, ref ShakeEvent args)
+ {
+ if (!MixAttempt(entity, entity, out var solution))
+ return;
- _solutionContainers.UpdateChemicals(solution.Value, true, entity.Comp);
+ _solutionContainers.UpdateChemicals(solution!.Value, true, entity.Comp);
- var afterMixingEvent = new AfterMixingEvent(entity, args.Target.Value);
+ var afterMixingEvent = new AfterMixingEvent(entity, entity);
RaiseLocalEvent(entity, afterMixingEvent);
}
+
+ private bool MixAttempt(EntityUid ent, EntityUid target, out Entity? solution)
+ {
+ solution = null;
+ var mixAttemptEvent = new MixingAttemptEvent(ent);
+ RaiseLocalEvent(ent, ref mixAttemptEvent);
+ if (mixAttemptEvent.Cancelled)
+ {
+ return false;
+ }
+
+ if (!_solutionContainers.TryGetMixableSolution(target, out solution, out _))
+ return false;
+
+ return true;
+ }
}
diff --git a/Content.Server/EntityEffects/Effects/AreaReactionEffect.cs b/Content.Server/EntityEffects/Effects/AreaReactionEffect.cs
index 481f1fc27c..858da2b360 100644
--- a/Content.Server/EntityEffects/Effects/AreaReactionEffect.cs
+++ b/Content.Server/EntityEffects/Effects/AreaReactionEffect.cs
@@ -1,4 +1,5 @@
using Content.Server.Fluids.EntitySystems;
+using Content.Server.Spreader;
using Content.Shared.Audio;
using Content.Shared.Coordinates.Helpers;
using Content.Shared.Database;
@@ -64,16 +65,19 @@ public override void Effect(EntityEffectBaseArgs args)
var transform = reagentArgs.EntityManager.GetComponent(reagentArgs.TargetEntity);
var mapManager = IoCManager.Resolve();
var mapSys = reagentArgs.EntityManager.System();
- var sys = reagentArgs.EntityManager.System();
+ var spreaderSys = args.EntityManager.System();
+ var sys = args.EntityManager.System();
var mapCoords = sys.GetMapCoordinates(reagentArgs.TargetEntity, xform: transform);
if (!mapManager.TryFindGridAt(mapCoords, out var gridUid, out var grid) ||
- !mapSys.TryGetTileRef(gridUid, grid, transform.Coordinates, out var tileRef) ||
- tileRef.Tile.IsSpace())
+ !mapSys.TryGetTileRef(gridUid, grid, transform.Coordinates, out var tileRef))
{
return;
}
+ if (spreaderSys.RequiresFloorToSpread(_prototypeId) && tileRef.Tile.IsSpace())
+ return;
+
var coords = mapSys.MapToGrid(gridUid, mapCoords);
var ent = reagentArgs.EntityManager.SpawnEntity(_prototypeId, coords.SnapToGrid());
diff --git a/Content.Server/Explosion/EntitySystems/SmokeOnTriggerSystem.cs b/Content.Server/Explosion/EntitySystems/SmokeOnTriggerSystem.cs
index f958373ac7..3d3c5d8563 100644
--- a/Content.Server/Explosion/EntitySystems/SmokeOnTriggerSystem.cs
+++ b/Content.Server/Explosion/EntitySystems/SmokeOnTriggerSystem.cs
@@ -1,6 +1,7 @@
using Content.Shared.Explosion.Components;
using Content.Shared.Explosion.EntitySystems;
using Content.Server.Fluids.EntitySystems;
+using Content.Server.Spreader;
using Content.Shared.Chemistry.Components;
using Content.Shared.Coordinates.Helpers;
using Content.Shared.Maps;
@@ -17,6 +18,7 @@ public sealed class SmokeOnTriggerSystem : SharedSmokeOnTriggerSystem
[Dependency] private readonly IMapManager _mapMan = default!;
[Dependency] private readonly SmokeSystem _smoke = default!;
[Dependency] private readonly TransformSystem _transform = default!;
+ [Dependency] private readonly SpreaderSystem _spreader = default!;
public override void Initialize()
{
@@ -31,11 +33,14 @@ private void OnTrigger(EntityUid uid, SmokeOnTriggerComponent comp, TriggerEvent
var mapCoords = _transform.GetMapCoordinates(uid, xform);
if (!_mapMan.TryFindGridAt(mapCoords, out _, out var grid) ||
!grid.TryGetTileRef(xform.Coordinates, out var tileRef) ||
- tileRef.Tile.IsSpace())
+ tileRef.Tile.IsEmpty)
{
return;
}
+ if (_spreader.RequiresFloorToSpread(comp.SmokePrototype.ToString()) && tileRef.Tile.IsSpace())
+ return;
+
var coords = grid.MapToGrid(mapCoords);
var ent = Spawn(comp.SmokePrototype, coords.SnapToGrid());
if (!TryComp(ent, out var smoke))
diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs
index 8cdae84a93..e722108e14 100644
--- a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs
+++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs
@@ -70,13 +70,18 @@ private void SplashOnMeleeHit(Entity entity, ref MeleeHitEve
return;
args.Handled = true;
+
+ // First update the hit count so anything that is not reactive wont count towards the total!
+ foreach (var hit in args.HitEntities)
+ {
+ if (!HasComp(hit))
+ hitCount -= 1;
+ }
+
foreach (var hit in args.HitEntities)
{
if (!HasComp(hit))
- {
- hitCount -= 1; // so we don't undershoot solution calculation for actual reactive entities
continue;
- }
var splitSolution = _solutionContainerSystem.SplitSolution(soln.Value, totalSplit / hitCount);
diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs
index 8484fb2336..1258e0b8c7 100644
--- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs
+++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs
@@ -1,3 +1,4 @@
+using System.Linq;
using Content.Server.Chat.Systems;
using Content.Server.Interaction;
using Content.Server.Popups;
@@ -6,13 +7,10 @@
using Content.Server.Radio.Components;
using Content.Server.Speech;
using Content.Server.Speech.Components;
-using Content.Shared.UserInterface;
-using Content.Shared.Chat;
using Content.Shared.Examine;
using Content.Shared.Interaction;
using Content.Shared.Radio;
using Content.Shared.Radio.Components;
-using Robust.Server.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.Server.Radio.EntitySystems;
@@ -28,7 +26,6 @@ public sealed class RadioDeviceSystem : EntitySystem
[Dependency] private readonly RadioSystem _radio = default!;
[Dependency] private readonly InteractionSystem _interaction = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
- [Dependency] private readonly UserInterfaceSystem _ui = default!;
// Used to prevent a shitter from using a bunch of radios to spam chat.
private HashSet<(string, EntityUid)> _recentlySent = new();
@@ -47,7 +44,7 @@ public override void Initialize()
SubscribeLocalEvent(OnActivateSpeaker);
SubscribeLocalEvent(OnReceiveRadio);
- SubscribeLocalEvent(OnBeforeIntercomUiOpen);
+ SubscribeLocalEvent(OnIntercomEncryptionChannelsChanged);
SubscribeLocalEvent(OnToggleIntercomMic);
SubscribeLocalEvent(OnToggleIntercomSpeaker);
SubscribeLocalEvent(OnSelectIntercomChannel);
@@ -150,18 +147,18 @@ public void ToggleRadioSpeaker(EntityUid uid, EntityUid user, bool quiet = false
SetSpeakerEnabled(uid, user, !component.Enabled, quiet, component);
}
- public void SetSpeakerEnabled(EntityUid uid, EntityUid user, bool enabled, bool quiet = false, RadioSpeakerComponent? component = null)
+ public void SetSpeakerEnabled(EntityUid uid, EntityUid? user, bool enabled, bool quiet = false, RadioSpeakerComponent? component = null)
{
if (!Resolve(uid, ref component))
return;
component.Enabled = enabled;
- if (!quiet)
+ if (!quiet && user != null)
{
var state = Loc.GetString(component.Enabled ? "handheld-radio-component-on-state" : "handheld-radio-component-off-state");
var message = Loc.GetString("handheld-radio-component-on-use", ("radioState", state));
- _popup.PopupEntity(message, user, user);
+ _popup.PopupEntity(message, user.Value, user.Value);
}
_appearance.SetData(uid, RadioDeviceVisuals.Speaker, component.Enabled);
@@ -213,61 +210,74 @@ private void OnReceiveRadio(EntityUid uid, RadioSpeakerComponent component, ref
var nameEv = new TransformSpeakerNameEvent(args.MessageSource, Name(args.MessageSource));
RaiseLocalEvent(args.MessageSource, nameEv);
- var name = Loc.GetString("speech-name-relay", ("speaker", Name(uid)),
+ var name = Loc.GetString("speech-name-relay",
+ ("speaker", Name(uid)),
("originalName", nameEv.Name));
// log to chat so people can identity the speaker/source, but avoid clogging ghost chat if there are many radios
_chat.TrySendInGameICMessage(uid, args.Message, InGameICChatType.Whisper, ChatTransmitRange.GhostRangeLimit, nameOverride: name, checkRadioPrefix: false);
}
- private void OnBeforeIntercomUiOpen(EntityUid uid, IntercomComponent component, BeforeActivatableUIOpenEvent args)
+ private void OnIntercomEncryptionChannelsChanged(Entity ent, ref EncryptionChannelsChangedEvent args)
{
- UpdateIntercomUi(uid, component);
+ ent.Comp.SupportedChannels = args.Component.Channels.Select(p => new ProtoId(p)).ToList();
+
+ var channel = args.Component.DefaultChannel;
+ if (ent.Comp.CurrentChannel != null && ent.Comp.SupportedChannels.Contains(ent.Comp.CurrentChannel.Value))
+ channel = ent.Comp.CurrentChannel;
+
+ SetIntercomChannel(ent, channel);
}
- private void OnToggleIntercomMic(EntityUid uid, IntercomComponent component, ToggleIntercomMicMessage args)
+ private void OnToggleIntercomMic(Entity ent, ref ToggleIntercomMicMessage args)
{
- if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
+ if (ent.Comp.RequiresPower && !this.IsPowered(ent, EntityManager))
return;
- SetMicrophoneEnabled(uid, args.Actor, args.Enabled, true);
- UpdateIntercomUi(uid, component);
+ SetMicrophoneEnabled(ent, args.Actor, args.Enabled, true);
+ ent.Comp.MicrophoneEnabled = args.Enabled;
+ Dirty(ent);
}
- private void OnToggleIntercomSpeaker(EntityUid uid, IntercomComponent component, ToggleIntercomSpeakerMessage args)
+ private void OnToggleIntercomSpeaker(Entity ent, ref ToggleIntercomSpeakerMessage args)
{
- if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
+ if (ent.Comp.RequiresPower && !this.IsPowered(ent, EntityManager))
return;
- SetSpeakerEnabled(uid, args.Actor, args.Enabled, true);
- UpdateIntercomUi(uid, component);
+ SetSpeakerEnabled(ent, args.Actor, args.Enabled, true);
+ ent.Comp.SpeakerEnabled = args.Enabled;
+ Dirty(ent);
}
- private void OnSelectIntercomChannel(EntityUid uid, IntercomComponent component, SelectIntercomChannelMessage args)
+ private void OnSelectIntercomChannel(Entity ent, ref SelectIntercomChannelMessage args)
{
- if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
+ if (ent.Comp.RequiresPower && !this.IsPowered(ent, EntityManager))
return;
- if (!_protoMan.TryIndex(args.Channel, out _) || !component.SupportedChannels.Contains(args.Channel))
+ if (!_protoMan.HasIndex(args.Channel) || !ent.Comp.SupportedChannels.Contains(args.Channel))
return;
- if (TryComp(uid, out var mic))
- mic.BroadcastChannel = args.Channel;
- if (TryComp(uid, out var speaker))
- speaker.Channels = new(){ args.Channel };
- UpdateIntercomUi(uid, component);
+ SetIntercomChannel(ent, args.Channel);
}
- private void UpdateIntercomUi(EntityUid uid, IntercomComponent component)
+ private void SetIntercomChannel(Entity ent, ProtoId? channel)
{
- var micComp = CompOrNull(uid);
- var speakerComp = CompOrNull(uid);
-
- var micEnabled = micComp?.Enabled ?? false;
- var speakerEnabled = speakerComp?.Enabled ?? false;
- var availableChannels = component.SupportedChannels;
- var selectedChannel = micComp?.BroadcastChannel ?? SharedChatSystem.CommonChannel;
- var state = new IntercomBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
- _ui.SetUiState(uid, IntercomUiKey.Key, state);
+ ent.Comp.CurrentChannel = channel;
+
+ if (channel == null)
+ {
+ SetSpeakerEnabled(ent, null, false);
+ SetMicrophoneEnabled(ent, null, false);
+ ent.Comp.MicrophoneEnabled = false;
+ ent.Comp.SpeakerEnabled = false;
+ Dirty(ent);
+ return;
+ }
+
+ if (TryComp(ent, out var mic))
+ mic.BroadcastChannel = channel;
+ if (TryComp(ent, out var speaker))
+ speaker.Channels = new(){ channel };
+ Dirty(ent);
}
}
diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs
index 4341746aaf..3ad101e62d 100644
--- a/Content.Server/Radio/EntitySystems/RadioSystem.cs
+++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs
@@ -33,11 +33,15 @@ public sealed class RadioSystem : EntitySystem
// set used to prevent radio feedback loops.
private readonly HashSet _messages = new();
+ private EntityQuery _exemptQuery;
+
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnIntrinsicReceive);
SubscribeLocalEvent(OnIntrinsicSpeak);
+
+ _exemptQuery = GetEntityQuery();
}
private void OnIntrinsicSpeak(EntityUid uid, IntrinsicRadioTransmitterComponent component, EntitySpokeEvent args)
@@ -121,9 +125,8 @@ public void SendRadioMessage(EntityUid messageSource, string message, RadioChann
var sourceMapId = Transform(radioSource).MapID;
var hasActiveServer = HasActiveServer(sourceMapId, channel.ID);
- var hasMicro = HasComp(radioSource);
+ var sourceServerExempt = _exemptQuery.HasComp(radioSource);
- var speakerQuery = GetEntityQuery();
var radioQuery = EntityQueryEnumerator();
while (canSend && radioQuery.MoveNext(out var receiver, out var radio, out var transform))
{
@@ -138,7 +141,7 @@ public void SendRadioMessage(EntityUid messageSource, string message, RadioChann
continue;
// don't need telecom server for long range channels or handheld radios and intercoms
- var needServer = !channel.LongRange && (!hasMicro || !speakerQuery.HasComponent(receiver));
+ var needServer = !channel.LongRange && !sourceServerExempt;
if (needServer && !hasActiveServer)
continue;
diff --git a/Content.Server/Spreader/SpreaderSystem.cs b/Content.Server/Spreader/SpreaderSystem.cs
index 7de8a43d35..50f5d81183 100644
--- a/Content.Server/Spreader/SpreaderSystem.cs
+++ b/Content.Server/Spreader/SpreaderSystem.cs
@@ -2,6 +2,7 @@
using Content.Server.Atmos.EntitySystems;
using Content.Server.Shuttles.Components;
using Content.Shared.Atmos;
+using Content.Shared.Maps;
using Content.Shared.Spreader;
using Content.Shared.Tag;
using Robust.Shared.Collections;
@@ -175,11 +176,12 @@ private void Spread(EntityUid uid, TransformComponent xform, ProtoId
public void GetNeighbors(EntityUid uid, TransformComponent comp, ProtoId prototype, out ValueList<(MapGridComponent, TileRef)> freeTiles, out ValueList occupiedTiles, out ValueList neighbors)
{
- // TODO remove occupiedTiles -- its currently unused and just slows this method down.
- DebugTools.Assert(_prototype.HasIndex(prototype));
freeTiles = [];
occupiedTiles = [];
neighbors = [];
+ // TODO remove occupiedTiles -- its currently unused and just slows this method down.
+ if (!_prototype.TryIndex(prototype, out var spreaderPrototype))
+ return;
if (!TryComp(comp.GridUid, out var grid))
return;
@@ -244,6 +246,9 @@ public void GetNeighbors(EntityUid uid, TransformComponent comp, ProtoId spreader)
+ {
+ if (!_prototype.Index(spreader).TryGetComponent(out var spreaderComp, EntityManager.ComponentFactory))
+ return false;
+
+ return _prototype.Index(spreaderComp.Id).PreventSpreadOnSpaced;
+ }
}
diff --git a/Content.Shared/Ame/Components/AmeFuelContainerComponent.cs b/Content.Shared/Ame/Components/AmeFuelContainerComponent.cs
index 757a3a515b..455414597e 100644
--- a/Content.Shared/Ame/Components/AmeFuelContainerComponent.cs
+++ b/Content.Shared/Ame/Components/AmeFuelContainerComponent.cs
@@ -9,11 +9,11 @@ public sealed partial class AmeFuelContainerComponent : Component
/// The amount of fuel in the container.
///
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
- public int FuelAmount = 1000;
+ public int FuelAmount = 500;
///
/// The maximum fuel capacity of the container.
///
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
- public int FuelCapacity = 1000;
+ public int FuelCapacity = 500;
}
diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
index 0ce8c99268..0fbfd51d69 100644
--- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
+++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
@@ -196,7 +196,6 @@ protected void SetBuckledTo(Entity buckle, Entity buckle, Entity strap
SetBuckledTo(buckle, strap!);
Appearance.SetData(strap, StrapVisuals.State, true);
Appearance.SetData(buckle, BuckleVisuals.Buckled, true);
- Appearance.SetData(buckle, RotationVisuals.RotationState, RotationState.Horizontal);
_rotationVisuals.SetHorizontalAngle(buckle.Owner, strap.Comp.Rotation);
@@ -363,10 +361,10 @@ private void Buckle(Entity buckle, Entity strap
switch (strap.Comp.Position)
{
case StrapPosition.Stand:
- _standing.Stand(buckle);
+ _standing.Stand(buckle, force: true);
break;
case StrapPosition.Down:
- _standing.Down(buckle, false, false);
+ _standing.Down(buckle, false, false, force: true);
break;
}
@@ -458,10 +456,9 @@ private void Unbuckle(Entity buckle, Entity str
_rotationVisuals.ResetHorizontalAngle(buckle.Owner);
Appearance.SetData(strap, StrapVisuals.State, strap.Comp.BuckledEntities.Count != 0);
Appearance.SetData(buckle, BuckleVisuals.Buckled, false);
- Appearance.SetData(buckle, RotationVisuals.RotationState, RotationState.Vertical);
if (HasComp(buckle) || _mobState.IsIncapacitated(buckle))
- _standing.Down(buckle);
+ _standing.Down(buckle, playSound: false);
else
_standing.Stand(buckle);
diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs b/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs
index eb23aa973b..bfb0cd9cd6 100644
--- a/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs
+++ b/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs
@@ -57,7 +57,7 @@ private void StrapRemoveAll(EntityUid uid, StrapComponent strapComp)
{
foreach (var entity in strapComp.BuckledEntities.ToArray())
{
- TryUnbuckle(entity, entity, true);
+ Unbuckle(entity, entity);
}
}
diff --git a/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs b/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs
index 118f224061..8edfa44ce8 100644
--- a/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs
+++ b/Content.Shared/Chemistry/Reaction/ReactionMixerComponent.cs
@@ -1,5 +1,7 @@
using Content.Shared.Chemistry.Components;
+using Content.Shared.DoAfter;
using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
namespace Content.Shared.Chemistry.Reaction;
@@ -19,9 +21,28 @@ public sealed partial class ReactionMixerComponent : Component
[ViewVariables]
[DataField]
public LocId MixMessage = "default-mixing-success";
+
+ ///
+ /// Defines if interacting is enough to mix with this component
+ ///
+ [ViewVariables]
+ [DataField]
+ public bool MixOnInteract = true;
+
+ ///
+ /// How long it takes to mix with this
+ ///
+ [ViewVariables]
+ [DataField]
+ public TimeSpan TimeToMix = TimeSpan.Zero;
}
[ByRefEvent]
public record struct MixingAttemptEvent(EntityUid Mixed, bool Cancelled = false);
public readonly record struct AfterMixingEvent(EntityUid Mixed, EntityUid Mixer);
+
+[Serializable, NetSerializable]
+public sealed partial class ReactionMixDoAfterEvent : SimpleDoAfterEvent
+{
+}
diff --git a/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs b/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs
index b31cc75576..4a5894d895 100644
--- a/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs
+++ b/Content.Shared/Inventory/VirtualItem/SharedVirtualItemSystem.cs
@@ -99,7 +99,7 @@ public bool TrySpawnVirtualItemInHand(EntityUid blockingEnt, EntityUid user, [No
if (hand.HeldEntity is not { } held)
continue;
- if (held == blockingEnt || HasComp(held))
+ if (held == blockingEnt)
continue;
if (!_handsSystem.TryDrop(user, hand))
diff --git a/Content.Shared/Radio/Components/IntercomComponent.cs b/Content.Shared/Radio/Components/IntercomComponent.cs
index be2734ff16..8d7b87597b 100644
--- a/Content.Shared/Radio/Components/IntercomComponent.cs
+++ b/Content.Shared/Radio/Components/IntercomComponent.cs
@@ -1,23 +1,32 @@
using Robust.Shared.GameStates;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
+using Robust.Shared.Prototypes;
namespace Content.Shared.Radio.Components;
///
/// Handles intercom ui and is authoritative on the channels an intercom can access.
///
-[RegisterComponent, NetworkedComponent]
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)]
public sealed partial class IntercomComponent : Component
{
///
- /// Does this intercom require popwer to function
+ /// Does this intercom require power to function
///
- [DataField("requiresPower"), ViewVariables(VVAccess.ReadWrite)]
+ [DataField]
public bool RequiresPower = true;
+ [DataField, AutoNetworkedField]
+ public bool SpeakerEnabled;
+
+ [DataField, AutoNetworkedField]
+ public bool MicrophoneEnabled;
+
+ [DataField, AutoNetworkedField]
+ public ProtoId? CurrentChannel;
+
///
/// The list of radio channel prototypes this intercom can choose between.
///
- [DataField("supportedChannels", customTypeSerializer: typeof(PrototypeIdListSerializer))]
- public List SupportedChannels = new();
+ [DataField, AutoNetworkedField]
+ public List> SupportedChannels = new();
}
diff --git a/Content.Shared/Radio/Components/TelecomExemptComponent.cs b/Content.Shared/Radio/Components/TelecomExemptComponent.cs
new file mode 100644
index 0000000000..7af5c1c78c
--- /dev/null
+++ b/Content.Shared/Radio/Components/TelecomExemptComponent.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Radio.Components;
+
+///
+/// This is used for a radio that doesn't need a telecom server in order to broadcast.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class TelecomExemptComponent : Component;
diff --git a/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs b/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs
index ea07b5f8a5..cfa553661a 100644
--- a/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs
+++ b/Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs
@@ -31,6 +31,7 @@ public sealed partial class EncryptionKeySystem : EntitySystem
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
+ [Dependency] private readonly SharedWiresSystem _wires = default!;
public override void Initialize()
{
@@ -150,7 +151,7 @@ private void TryRemoveKey(EntityUid uid, EncryptionKeyHolderComponent component,
return;
}
- if (TryComp(uid, out var panel) && !panel.Open)
+ if (!_wires.IsPanelOpen(uid))
{
_popup.PopupClient(Loc.GetString("encryption-keys-panel-locked"), uid, args.User);
return;
@@ -184,8 +185,15 @@ private void OnHolderExamined(EntityUid uid, EncryptionKeyHolderComponent compon
if (component.Channels.Count > 0)
{
- args.PushMarkup(Loc.GetString("examine-encryption-channels-prefix"));
- AddChannelsExamine(component.Channels, component.DefaultChannel, args, _protoManager, "examine-encryption-channel");
+ using (args.PushGroup(nameof(EncryptionKeyComponent)))
+ {
+ args.PushMarkup(Loc.GetString("examine-encryption-channels-prefix"));
+ AddChannelsExamine(component.Channels,
+ component.DefaultChannel,
+ args,
+ _protoManager,
+ "examine-encryption-channel");
+ }
}
}
diff --git a/Content.Shared/Radio/SharedIntercom.cs b/Content.Shared/Radio/SharedIntercom.cs
index 410843312f..f697add8b9 100644
--- a/Content.Shared/Radio/SharedIntercom.cs
+++ b/Content.Shared/Radio/SharedIntercom.cs
@@ -1,4 +1,5 @@
-using Robust.Shared.Serialization;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
namespace Content.Shared.Radio;
@@ -8,23 +9,6 @@ public enum IntercomUiKey
Key,
}
-[Serializable, NetSerializable]
-public sealed class IntercomBoundUIState : BoundUserInterfaceState
-{
- public bool MicEnabled;
- public bool SpeakerEnabled;
- public List AvailableChannels;
- public string SelectedChannel;
-
- public IntercomBoundUIState(bool micEnabled, bool speakerEnabled, List availableChannels, string selectedChannel)
- {
- MicEnabled = micEnabled;
- SpeakerEnabled = speakerEnabled;
- AvailableChannels = availableChannels;
- SelectedChannel = selectedChannel;
- }
-}
-
[Serializable, NetSerializable]
public sealed class ToggleIntercomMicMessage : BoundUserInterfaceMessage
{
diff --git a/Content.Shared/Spreader/EdgeSpreaderPrototype.cs b/Content.Shared/Spreader/EdgeSpreaderPrototype.cs
index fee8f93a6d..33665d82b5 100644
--- a/Content.Shared/Spreader/EdgeSpreaderPrototype.cs
+++ b/Content.Shared/Spreader/EdgeSpreaderPrototype.cs
@@ -10,4 +10,10 @@ public sealed partial class EdgeSpreaderPrototype : IPrototype
{
[IdDataField] public string ID { get; } = string.Empty;
[DataField(required:true)] public int UpdatesPerSecond;
+
+ ///
+ /// If true, this spreader can't spread onto spaced tiles like lattice.
+ ///
+ [DataField]
+ public bool PreventSpreadOnSpaced = true;
}
diff --git a/Content.Shared/Standing/StandingStateSystem.cs b/Content.Shared/Standing/StandingStateSystem.cs
index ed586e970d..8d9be9ab77 100644
--- a/Content.Shared/Standing/StandingStateSystem.cs
+++ b/Content.Shared/Standing/StandingStateSystem.cs
@@ -25,7 +25,10 @@ public bool IsDown(EntityUid uid, StandingStateComponent? standingState = null)
return !standingState.Standing;
}
- public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true,
+ public bool Down(EntityUid uid,
+ bool playSound = true,
+ bool dropHeldItems = true,
+ bool force = false,
StandingStateComponent? standingState = null,
AppearanceComponent? appearance = null,
HandsComponent? hands = null)
@@ -49,11 +52,14 @@ public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true
RaiseLocalEvent(uid, new DropHandItemsEvent(), false);
}
- var msg = new DownAttemptEvent();
- RaiseLocalEvent(uid, msg, false);
+ if (!force)
+ {
+ var msg = new DownAttemptEvent();
+ RaiseLocalEvent(uid, msg, false);
- if (msg.Cancelled)
- return false;
+ if (msg.Cancelled)
+ return false;
+ }
standingState.Standing = false;
Dirty(uid, standingState);
diff --git a/Content.Shared/Tiles/ReplaceFloorOnSpawnComponent.cs b/Content.Shared/Tiles/ReplaceFloorOnSpawnComponent.cs
new file mode 100644
index 0000000000..1b87082def
--- /dev/null
+++ b/Content.Shared/Tiles/ReplaceFloorOnSpawnComponent.cs
@@ -0,0 +1,36 @@
+using Content.Shared.Maps;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Tiles;
+
+///
+/// Replaces floor tiles around this entity when it spawns
+///
+[RegisterComponent, NetworkedComponent, Access(typeof(ReplaceFloorOnSpawnSystem))]
+public sealed partial class ReplaceFloorOnSpawnComponent : Component
+{
+ ///
+ /// The floor tiles that will be replaced. If null, will replace all.
+ ///
+ [DataField]
+ public List>? ReplaceableTiles = new();
+
+ ///
+ /// The tiles that it will replace. Randomly picked from the list.
+ ///
+ [DataField]
+ public List> ReplacementTiles = new();
+
+ ///
+ /// Whether or not there has to be a tile in the location to be replaced.
+ ///
+ [DataField]
+ public bool ReplaceSpace = true;
+
+ ///
+ /// List of offsets from the base tile, used to determine which tiles will be replaced.
+ ///
+ [DataField]
+ public List Offsets = new() { Vector2i.Up, Vector2i.Down, Vector2i.Left, Vector2i.Right, Vector2i.Zero };
+}
diff --git a/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs b/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs
new file mode 100644
index 0000000000..818991f823
--- /dev/null
+++ b/Content.Shared/Tiles/ReplaceFloorOnSpawnSystem.cs
@@ -0,0 +1,48 @@
+using Robust.Shared.Map;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
+
+namespace Content.Shared.Tiles;
+
+public sealed class ReplaceFloorOnSpawnSystem : EntitySystem
+{
+ [Dependency] private readonly ITileDefinitionManager _tile = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly SharedMapSystem _map = default!;
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnMapInit);
+ }
+
+ private void OnMapInit(Entity ent, ref MapInitEvent args)
+ {
+ var xform = Transform(ent);
+ if (xform.GridUid is not { } grid || !TryComp(grid, out var gridComp))
+ return;
+
+ if (ent.Comp.ReplaceableTiles != null && ent.Comp.ReplaceableTiles.Count == 0)
+ return;
+
+ var tileIndices = _map.LocalToTile(grid, gridComp, xform.Coordinates);
+
+ foreach (var offset in ent.Comp.Offsets)
+ {
+ var actualIndices = tileIndices + offset;
+
+ if (!_map.TryGetTileRef(grid, gridComp, actualIndices, out var tile))
+ continue;
+
+ if (ent.Comp.ReplaceableTiles != null &&
+ !tile.Tile.IsEmpty &&
+ !ent.Comp.ReplaceableTiles.Contains(_tile[tile.Tile.TypeId].ID))
+ continue;
+
+ var tileToSet = _random.Pick(ent.Comp.ReplacementTiles);
+ _map.SetTile(grid, gridComp, tile.GridIndices, new Tile(_prototype.Index(tileToSet).TileId));
+ }
+ }
+}
diff --git a/Content.Shared/Wires/SharedWiresSystem.cs b/Content.Shared/Wires/SharedWiresSystem.cs
index d84766a5fc..7032293eaf 100644
--- a/Content.Shared/Wires/SharedWiresSystem.cs
+++ b/Content.Shared/Wires/SharedWiresSystem.cs
@@ -20,6 +20,7 @@ public override void Initialize()
{
base.Initialize();
+ SubscribeLocalEvent(OnStartup);
SubscribeLocalEvent(OnPanelDoAfter);
SubscribeLocalEvent(OnInteractUsing);
SubscribeLocalEvent(OnExamine);
@@ -28,6 +29,11 @@ public override void Initialize()
SubscribeLocalEvent(OnActivatableUIPanelChanged);
}
+ private void OnStartup(Entity ent, ref ComponentStartup args)
+ {
+ UpdateAppearance(ent, ent);
+ }
+
private void OnPanelDoAfter(EntityUid uid, WiresPanelComponent panel, WirePanelDoAfterEvent args)
{
if (args.Cancelled)
diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml
index 4d0bb277f8..c1f6f5632a 100644
--- a/Resources/Changelog/Changelog.yml
+++ b/Resources/Changelog/Changelog.yml
@@ -1,75 +1,4 @@
Entries:
-- author: icekot8
- changes:
- - message: "\u0421argo request console now reports when a request is approved"
- type: Add
- id: 6374
- time: '2024-04-18T00:32:22.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/27038
-- author: Bellwether
- changes:
- - message: Midround zombie outbreaks are less common and spread more slowly.
- type: Tweak
- id: 6375
- time: '2024-04-18T01:06:33.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/27060
-- author: Flareguy
- changes:
- - message: Updated Remote Signaller sprites.
- type: Tweak
- id: 6376
- time: '2024-04-18T01:16:48.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/27073
-- author: Dutch-VanDerLinde
- changes:
- - message: Grey security jumpsuits are now available in the security officer loadout.
- type: Tweak
- id: 6377
- time: '2024-04-18T01:22:09.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/27023
-- author: Tayrtahn
- changes:
- - message: Sodas and other fizzy drinks can be shaken with the verbs menu to build
- up fizziness so they spray when opened.
- type: Add
- id: 6378
- time: '2024-04-18T01:49:58.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25574
-- author: metalgearsloth
- changes:
- - message: Fix lobby UI not resetting for character changes.
- type: Fix
- id: 6379
- time: '2024-04-18T03:01:12.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/27075
-- author: TokenStyle
- changes:
- - message: Benzene is no longer required for the Insuzine recipe.
- type: Tweak
- id: 6380
- time: '2024-04-18T03:03:39.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/26829
-- author: Golinth
- changes:
- - message: The Nukie Agent now comes with a medihud built into their visor!
- type: Add
- id: 6381
- time: '2024-04-18T03:04:14.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/26218
-- author: Krunk
- changes:
- - message: Cyborgs no longer see criminal status icons.
- type: Remove
- id: 6382
- time: '2024-04-18T03:20:44.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/26207
-- author: ArZarLordOfMango
- changes:
- - message: Added autolathe recipe for beverage jug.
- type: Add
- id: 6383
- time: '2024-04-18T03:24:15.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25681
- author: superjj18
changes:
- message: Emergency lighting now changes based on station alert level!
@@ -3818,3 +3747,84 @@
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
diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt
index 1e41be2bb7..f3d458e046 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, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUm418, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BellwetherLogic, BGare, bhenrich, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CaasGit, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DexlerXD, dffdff2423, 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, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Froffy025, Fromoriss, FungiFellow, Futuristic-OK, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, hitomishirichan, Hmeister-real, HolySSSS, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, 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, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, 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, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem
+0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aeshus, Aexxie, Afrokada, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUm418, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BellwetherLogic, BGare, bhenrich, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CaasGit, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DexlerXD, dffdff2423, diraven, 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, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Froffy025, Fromoriss, FungiFellow, Futuristic-OK, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, icekot8, 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, Leander-0, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, 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, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem
diff --git a/Resources/Locale/en-US/chemistry/components/mixing-component.ftl b/Resources/Locale/en-US/chemistry/components/mixing-component.ftl
index a486ed8ede..c434246fab 100644
--- a/Resources/Locale/en-US/chemistry/components/mixing-component.ftl
+++ b/Resources/Locale/en-US/chemistry/components/mixing-component.ftl
@@ -6,9 +6,12 @@ mixing-verb-default-condense = condense
mixing-verb-centrifuge = centrifugation
mixing-verb-electrolysis = electrolyze
mixing-verb-holy = bless
+mixing-verb-stir = stir
+mixing-verb-shake = shake
## Entity
default-mixing-success = You mix the {$mixed} with the {$mixer}
bible-mixing-success = You bless the {$mixed} with the {$mixer}
+spoon-mixing-success = You stir the {$mixed} with the {$mixer}
diff --git a/Resources/Locale/en-US/radio/components/intercom.ftl b/Resources/Locale/en-US/radio/components/intercom.ftl
index e56e3cd0f7..63303999c2 100644
--- a/Resources/Locale/en-US/radio/components/intercom.ftl
+++ b/Resources/Locale/en-US/radio/components/intercom.ftl
@@ -1,5 +1,6 @@
intercom-menu-title = Intercom
intercom-channel-label = Channel:
intercom-button-text-mic = Mic.
-intercom-button-text-speaker = Speak
+intercom-button-text-speaker = Spkr.
+intercom-options-none = No channels
intercom-flavor-text-left = Keep lines free of chatter
diff --git a/Resources/Locale/en-US/reagents/meta/narcotics.ftl b/Resources/Locale/en-US/reagents/meta/narcotics.ftl
index b48eb03b7d..600ceffce6 100644
--- a/Resources/Locale/en-US/reagents/meta/narcotics.ftl
+++ b/Resources/Locale/en-US/reagents/meta/narcotics.ftl
@@ -5,7 +5,7 @@ reagent-name-ephedrine = ephedrine
reagent-desc-ephedrine = A caffeinated adrenaline stimulator chemical that makes you faster and harder to knock down. Also helps combat narcolepsy at dosages over thirty, at the cost of severe nerval stress.
reagent-name-stimulants = hyperzine
-reagent-desc-stimulants = A chemical cocktail developed by Donk Co. that allows agents to recover from stuns faster, move more quickly, and grants a small heal while close to critical condition. Due to the complex nature of the chemical, it is much harder for the body to purge naturally.
+reagent-desc-stimulants = A chemical cocktail developed by Donk Co. that allows agents to recover from stuns faster, move more quickly, and grants a small heal when you're more dead than alive. Due to the complex nature of the chemical, it is much harder for the body to purge naturally.
reagent-name-experimental-stimulants = experimental stimulants
reagent-desc-experimental-stimulants = A prototype version of hyperzine. Usage grants virtual immunity to stun weaponry, rapid tissue regeneration, extreme running speed by reducing lactic acid buildup, and a general feeling of euphoria. Side effects may include extreme levels of anticoagulation, tunnel vision, extreme toxin buildup in the bloodstream, and rapid liver death. Do not give to animals.
diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl
index e5b6810fca..35cea19f78 100644
--- a/Resources/Locale/en-US/tiles/tiles.ftl
+++ b/Resources/Locale/en-US/tiles/tiles.ftl
@@ -87,6 +87,7 @@ tiles-gold-tile = gold tile
tiles-silver-tile = silver tile
tiles-glass-floor = glass floor
tiles-reinforced-glass-floor = reinforced glass floor
+tiles-metal-foam = metal foam floor
tiles-green-circuit-floor = green circuit floor
tiles-blue-circuit-floor = blue circuit floor
tiles-snow = snow
@@ -126,4 +127,4 @@ tiles-mowed-astro-grass = mowed astro-grass
tiles-jungle-astro-grass = jungle astro-grass
tiles-astro-ice = astro-ice
tiles-astro-snow = astro-snow
-tiles-wood-large = large wood
\ No newline at end of file
+tiles-wood-large = large wood
diff --git a/Resources/Maps/origin.yml b/Resources/Maps/origin.yml
index 7dd4d4386f..380447782f 100644
--- a/Resources/Maps/origin.yml
+++ b/Resources/Maps/origin.yml
@@ -12115,26 +12115,17 @@ entities:
rot: 3.141592653589793 rad
pos: -44.5,11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24384
- uid: 116
components:
- type: Transform
pos: -51.5,12.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24382
- uid: 117
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -52.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24383
- uid: 118
components:
- type: Transform
@@ -12143,26 +12134,18 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 1
- links:
- - 24386
- uid: 119
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -17.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24387
- uid: 120
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -13.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24389
- uid: 121
components:
- type: Transform
@@ -12389,7 +12372,7 @@ entities:
pos: 19.5,16.5
parent: 2
- type: Door
- secondsUntilStateChange: -25677.166
+ secondsUntilStateChange: -25890.535
state: Opening
- uid: 156
components:
@@ -13799,17 +13782,11 @@ entities:
- type: Transform
pos: 26.5,15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24448
- uid: 390
components:
- type: Transform
pos: 24.5,15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24448
- uid: 391
components:
- type: Transform
@@ -13843,9 +13820,6 @@ entities:
- type: Transform
pos: 25.5,15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24448
- uid: 397
components:
- type: Transform
@@ -14090,25 +14064,16 @@ entities:
- type: Transform
pos: 40.5,-41.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24461
- uid: 440
components:
- type: Transform
pos: 40.5,-42.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24461
- uid: 441
components:
- type: Transform
pos: 40.5,-43.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24461
- uid: 442
components:
- type: Transform
@@ -14206,7 +14171,7 @@ entities:
pos: 51.5,-3.5
parent: 2
- type: Door
- secondsUntilStateChange: -24490.984
+ secondsUntilStateChange: -24704.354
state: Opening
- uid: 458
components:
@@ -14215,7 +14180,7 @@ entities:
pos: 52.5,-3.5
parent: 2
- type: Door
- secondsUntilStateChange: -24489.768
+ secondsUntilStateChange: -24703.137
state: Opening
- uid: 459
components:
@@ -14372,25 +14337,16 @@ entities:
- type: Transform
pos: -21.5,-12.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24459
- uid: 487
components:
- type: Transform
pos: -21.5,-11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24459
- uid: 488
components:
- type: Transform
pos: -21.5,20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24449
- uid: 489
components:
- type: Transform
@@ -14468,9 +14424,6 @@ entities:
- type: Transform
pos: -21.5,21.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24449
- uid: 504
components:
- type: Transform
@@ -14778,9 +14731,6 @@ entities:
- type: Transform
pos: 0.5,-5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24152
- uid: 557
components:
- type: MetaData
@@ -14788,9 +14738,6 @@ entities:
- type: Transform
pos: 6.5,-7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24152
- uid: 558
components:
- type: Transform
@@ -15239,9 +15186,6 @@ entities:
rot: 1.5707963267948966 rad
pos: 1.5,-8.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24152
- proto: AirlockMaintJanitorLocked
entities:
- uid: 629
@@ -15501,9 +15445,6 @@ entities:
- type: Transform
pos: -22.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24387
- uid: 675
components:
- type: Transform
@@ -16300,9 +16241,6 @@ entities:
- type: Transform
pos: -25.5,45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24388
- uid: 796
components:
- type: MetaData
@@ -16310,9 +16248,6 @@ entities:
- type: Transform
pos: -23.5,38.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24385
- proto: AirlockVirologyGlass
entities:
- uid: 797
@@ -17234,8 +17169,6 @@ entities:
parent: 2
- type: Apc
hasAccess: True
- lastExternalState: Good
- lastChargeState: Full
- uid: 955
components:
- type: MetaData
@@ -17339,8 +17272,6 @@ entities:
parent: 2
- type: Apc
hasAccess: True
- lastExternalState: Good
- lastChargeState: Full
- proto: APCHighCapacity
entities:
- uid: 969
@@ -17489,8 +17420,6 @@ entities:
parent: 2
- type: Apc
hasAccess: True
- lastExternalState: Good
- lastChargeState: Full
- uid: 989
components:
- type: MetaData
@@ -23008,49 +22937,31 @@ entities:
- type: Transform
pos: -78.5,-41.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24444
- uid: 2060
components:
- type: Transform
pos: -78.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24444
- uid: 2061
components:
- type: Transform
pos: -78.5,-42.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24444
- uid: 2062
components:
- type: Transform
pos: -74.5,-46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24443
- uid: 2063
components:
- type: Transform
pos: -74.5,-44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24443
- uid: 2064
components:
- type: Transform
pos: -74.5,-45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24443
- proto: BlastDoorBridge
entities:
- uid: 2065
@@ -23058,25 +22969,16 @@ entities:
- type: Transform
pos: 10.5,47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24425
- uid: 2066
components:
- type: Transform
pos: 10.5,49.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24425
- uid: 2067
components:
- type: Transform
pos: 10.5,48.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24425
- proto: BlastDoorExterior1
entities:
- uid: 2068
@@ -23084,229 +22986,142 @@ entities:
- type: Transform
pos: 18.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24401
- uid: 2069
components:
- type: Transform
pos: 47.5,-51.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24397
- uid: 2070
components:
- type: Transform
pos: 47.5,-52.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24397
- uid: 2071
components:
- type: Transform
pos: 47.5,-53.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24397
- uid: 2072
components:
- type: Transform
pos: 47.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24397
- uid: 2073
components:
- type: Transform
pos: 52.5,-58.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24398
- uid: 2074
components:
- type: Transform
pos: 50.5,-62.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24431
- uid: 2075
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 55.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24400
- uid: 2076
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 54.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24400
- uid: 2077
components:
- type: Transform
pos: -45.5,-34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24445
- uid: 2078
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -40.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24404
- uid: 2079
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -39.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24404
- uid: 2080
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -38.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24404
- uid: 2081
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -37.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24404
- uid: 2082
components:
- type: Transform
pos: -49.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24406
- uid: 2083
components:
- type: Transform
pos: -49.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24406
- uid: 2084
components:
- type: Transform
pos: 51.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24414
- - 24416
- - 24421
- uid: 2085
components:
- type: Transform
pos: 54.5,45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24412
- - 24414
- uid: 2086
components:
- type: Transform
pos: -52.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24435
- uid: 2087
components:
- type: Transform
pos: -52.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24399
- uid: 2088
components:
- type: Transform
pos: -53.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24405
- uid: 2089
components:
- type: Transform
pos: -53.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24405
- uid: 2090
components:
- type: Transform
pos: 53.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24408
- - 24417
- - 24424
- uid: 2091
components:
- type: Transform
pos: 55.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24412
- - 24415
- uid: 2092
components:
- type: Transform
pos: 50.5,47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24410
- uid: 2093
components:
- type: Transform
pos: 57.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24416
- uid: 2094
components:
- type: Transform
pos: 56.5,47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24407
- uid: 2095
components:
- type: Transform
@@ -23317,72 +23132,41 @@ entities:
- type: Transform
pos: 53.5,48.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24407
- - 24422
- - 24424
- uid: 2097
components:
- type: Transform
pos: 55.5,48.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24422
- uid: 2098
components:
- type: Transform
pos: 58.5,47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24408
- uid: 2099
components:
- type: Transform
pos: 52.5,45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24411
- - 24420
- uid: 2100
components:
- type: Transform
pos: 53.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24418
- - 24424
- uid: 2101
components:
- type: Transform
pos: 55.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24418
- - 24421
- uid: 2102
components:
- type: Transform
pos: 58.5,45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24419
- uid: 2103
components:
- type: Transform
pos: 57.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24411
- - 24413
- - 24422
- uid: 2104
components:
- type: Transform
@@ -23393,101 +23177,62 @@ entities:
- type: Transform
pos: 54.5,47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24415
- uid: 2106
components:
- type: Transform
pos: 52.5,47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24417
- uid: 2107
components:
- type: Transform
pos: 51.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24421
- - 24422
- uid: 2108
components:
- type: Transform
pos: 56.5,45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24413
- - 24419
- uid: 2109
components:
- type: Transform
pos: 50.5,45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24410
- - 24420
- uid: 2110
components:
- type: Transform
pos: -18.5,-96.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24427
- uid: 2111
components:
- type: Transform
pos: -18.5,-98.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24427
- uid: 2112
components:
- type: Transform
pos: -26.5,-96.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24428
- uid: 2113
components:
- type: Transform
pos: -26.5,-98.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24428
- uid: 2114
components:
- type: Transform
pos: 67.5,-39.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24396
- uid: 2115
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 72.5,-27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24432
- uid: 2116
components:
- type: Transform
pos: -45.5,-35.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24445
- proto: BlastDoorExterior1Open
entities:
- uid: 2117
@@ -23496,162 +23241,100 @@ entities:
rot: -1.5707963267948966 rad
pos: 24.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2118
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 23.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2119
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 25.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2120
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 26.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2121
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 24.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2122
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 23.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2123
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 25.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2124
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 26.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2125
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 22.5,44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2126
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 22.5,46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24426
- uid: 2127
components:
- type: Transform
pos: -8.5,-91.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2128
components:
- type: Transform
pos: -8.5,-92.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2129
components:
- type: Transform
pos: -8.5,-93.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2130
components:
- type: Transform
pos: -6.5,-91.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2131
components:
- type: Transform
pos: -6.5,-90.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2132
components:
- type: Transform
pos: -6.5,-92.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2133
components:
- type: Transform
pos: -6.5,-93.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- uid: 2134
components:
- type: Transform
pos: -8.5,-90.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24429
- - 24430
- proto: BlastDoorOpen
entities:
- uid: 2135
@@ -23659,86 +23342,56 @@ entities:
- type: Transform
pos: -56.5,-11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24403
- uid: 2136
components:
- type: Transform
pos: -56.5,-12.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24403
- uid: 2137
components:
- type: Transform
pos: -56.5,-13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24403
- uid: 2138
components:
- type: Transform
pos: -56.5,-14.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24403
- uid: 2139
components:
- type: Transform
pos: -56.5,-15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24403
- uid: 2140
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -64.5,-22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24402
- uid: 2141
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -65.5,-22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24402
- uid: 2142
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -66.5,-22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24402
- uid: 2143
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -67.5,-22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24402
- uid: 2144
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -68.5,-22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24402
- proto: BlockGameArcadeComputerCircuitboard
entities:
- uid: 2145
@@ -23781,7 +23434,7 @@ entities:
- type: Transform
pos: -25.389751,-36.57607
parent: 2
-- proto: BookChefGaming
+- proto: BookHowToCookForFortySpaceman
entities:
- uid: 2151
components:
@@ -80698,906 +80351,592 @@ entities:
rot: 1.5707963267948966 rad
pos: 16.5,-55.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12862
components:
- type: Transform
pos: 18.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12863
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 17.5,-55.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12864
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 15.5,-55.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12865
components:
- type: Transform
pos: 18.5,-55.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12866
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -12.5,-10.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26159
- uid: 12867
components:
- type: Transform
pos: 15.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12868
components:
- type: Transform
pos: 18.5,-57.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12869
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 17.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12870
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 16.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12871
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 18.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- uid: 12872
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -14.5,-10.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26159
- uid: 12873
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -13.5,-10.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26159
- uid: 12874
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -11.5,-10.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26159
- uid: 12875
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -25.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26147
- uid: 12876
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -26.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26147
- uid: 12877
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -27.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26147
- uid: 12878
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -28.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26147
- uid: 12879
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -30.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26147
- uid: 12880
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -29.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26147
- uid: 12881
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -35.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26151
- uid: 12882
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -34.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26151
- uid: 12883
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -36.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26151
- uid: 12884
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -37.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26151
- uid: 12885
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -38.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26151
- uid: 12886
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -48.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12887
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -49.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12888
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -50.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12889
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -51.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12890
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -48.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12891
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -49.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12892
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -50.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12893
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -51.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12894
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -52.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12895
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -53.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12896
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -47.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12897
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -46.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26150
- uid: 12898
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -47.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12899
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -46.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12900
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -53.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12901
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -52.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26149
- uid: 12902
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -42.5,14.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26148
- uid: 12903
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -51.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12904
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -52.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12905
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -50.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12906
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -49.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12907
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -48.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12908
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -52.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12909
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -51.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12910
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -50.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12911
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -49.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12912
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -48.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12913
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -53.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12914
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -53.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12915
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -47.5,34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26154
- uid: 12916
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -47.5,30.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26153
- uid: 12917
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -12.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12918
components:
- type: Transform
pos: -10.5,28.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12919
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -9.5,28.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12920
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -42.5,15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26148
- uid: 12921
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -42.5,17.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26148
- uid: 12922
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -42.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26148
- uid: 12923
components:
- type: Transform
pos: -47.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26155
- uid: 12924
components:
- type: Transform
pos: -47.5,14.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26155
- uid: 12925
components:
- type: Transform
pos: -47.5,12.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26155
- uid: 12926
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -8.5,22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12927
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -7.5,22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12928
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -6.5,22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12929
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 43.5,37.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12930
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 44.5,37.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12931
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 45.5,37.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12932
components:
- type: Transform
pos: 46.5,37.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12933
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 46.5,36.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12934
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 47.5,36.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12935
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 48.5,36.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12936
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 48.5,37.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12937
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -9.5,22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12938
components:
- type: Transform
pos: -9.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12939
components:
- type: Transform
pos: -9.5,26.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12940
components:
- type: Transform
pos: -9.5,25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12941
components:
- type: Transform
pos: -9.5,24.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12942
components:
- type: Transform
pos: -9.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12943
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -10.5,22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12944
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -10.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12945
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -10.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12946
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -11.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26152
- uid: 12947
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 48.5,38.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26156
- uid: 12948
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-99.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12949
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-98.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12950
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-100.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12951
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-101.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12952
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-102.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12953
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-103.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12954
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -37.5,-104.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12955
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -37.5,-105.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12956
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -36.5,-105.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12957
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -38.5,-105.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12958
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -38.5,-104.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26157
- - 26158
- uid: 12959
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -11.5,-11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26159
- uid: 12960
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -11.5,-12.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26159
- uid: 12961
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -42.5,16.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26148
- uid: 12962
components:
- type: Transform
@@ -81605,8 +80944,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 2
- links:
- - 26160
- uid: 12963
components:
- type: Transform
@@ -81614,8 +80951,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 2
- links:
- - 26160
- uid: 12964
components:
- type: Transform
@@ -81623,8 +80958,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 2
- links:
- - 26160
- proto: ConveyorBeltAssembly
entities:
- uid: 12965
@@ -82507,22 +81840,12 @@ entities:
- type: Transform
pos: 13.5,-83.5
parent: 2
- - uid: 13036
- components:
- - type: Transform
- pos: 13.5,-84.5
- parent: 2
- uid: 13037
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 17.5,-82.5
parent: 2
- - uid: 13038
- components:
- - type: Transform
- pos: 13.5,-82.5
- parent: 2
- uid: 13039
components:
- type: Transform
@@ -82552,6 +81875,20 @@ entities:
rot: 1.5707963267948966 rad
pos: -8.5,-66.5
parent: 2
+- proto: CryogenicSleepUnitSpawner
+ entities:
+ - uid: 13036
+ components:
+ - type: Transform
+ pos: 13.5,-84.5
+ parent: 2
+- proto: CryogenicSleepUnitSpawnerLateJoin
+ entities:
+ - uid: 13038
+ components:
+ - type: Transform
+ pos: 13.5,-82.5
+ parent: 2
- proto: CryoPod
entities:
- uid: 13044
@@ -140558,44 +139895,29 @@ entities:
- type: Transform
pos: -5.5,3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24456
- uid: 21473
components:
- type: Transform
pos: 38.5,-41.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24451
- uid: 21474
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -20.5,-15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24452
- uid: 21475
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 24.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24454
- uid: 21476
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 16.5,-23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24446
- uid: 21477
components:
- type: Transform
@@ -140604,43 +139926,29 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 2
- links:
- - 24447
- uid: 21478
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -20.5,-33.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24455
- uid: 21479
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 34.5,-23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24446
- uid: 21480
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -20.5,22.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24453
- uid: 21481
components:
- type: Transform
pos: 0.5,-25.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24457
- proto: JetpackBlueFilled
entities:
- uid: 21482
@@ -142227,9 +141535,6 @@ entities:
- type: Transform
pos: 72.5,-28.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 12764
- proto: MachineCentrifuge
entities:
- uid: 21605
@@ -146478,9 +145783,6 @@ entities:
rot: -1.5707963267948966 rad
pos: 5.5,-5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24450
- uid: 22311
components:
- type: Transform
@@ -149140,9 +148442,6 @@ entities:
rot: 1.5707963267948966 rad
pos: 1.5,-7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24450
- uid: 22663
components:
- type: Transform
@@ -154237,9 +153536,6 @@ entities:
rot: 1.5707963267948966 rad
pos: 17.5,-55.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 26146
- proto: ReinforcedPlasmaWindow
entities:
- uid: 23478
@@ -158447,18 +157743,12 @@ entities:
rot: -1.5707963267948966 rad
pos: 66.5,-45.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24395
- uid: 24237
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 66.5,-46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24395
- proto: ShuttersNormalOpen
entities:
- uid: 24238
@@ -158468,8 +157758,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 1
- links:
- - 24463
- uid: 24239
components:
- type: Transform
@@ -158477,8 +157765,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 1
- links:
- - 24391
- uid: 24240
components:
- type: Transform
@@ -158486,8 +157772,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 4
- links:
- - 24442
- uid: 24241
components:
- type: Transform
@@ -158495,17 +157779,12 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 4
- links:
- - 24442
- uid: 24242
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 15.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24243
components:
- type: Transform
@@ -158517,332 +157796,212 @@ entities:
- type: Transform
pos: -32.5,32.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24423
- uid: 24245
components:
- type: Transform
pos: 37.5,-0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24394
- uid: 24246
components:
- type: Transform
pos: -8.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24438
- uid: 24247
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 15.5,11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24248
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 15.5,10.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24249
components:
- type: Transform
pos: 18.5,15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24250
components:
- type: Transform
pos: 17.5,15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24251
components:
- type: Transform
pos: -6.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24438
- uid: 24252
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 48.5,6.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24253
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 35.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24433
- uid: 24254
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 15.5,12.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24255
components:
- type: Transform
pos: 61.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24256
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 15.5,14.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24393
- uid: 24257
components:
- type: Transform
pos: 45.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24258
components:
- type: Transform
pos: 43.5,7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24259
components:
- type: Transform
pos: 62.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24260
components:
- type: Transform
pos: 63.5,-56.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24261
components:
- type: Transform
pos: -30.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24423
- uid: 24262
components:
- type: Transform
pos: 29.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24433
- uid: 24263
components:
- type: Transform
pos: 34.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24433
- uid: 24264
components:
- type: Transform
pos: -31.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24423
- uid: 24265
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 35.5,7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24433
- uid: 24266
components:
- type: Transform
pos: -33.5,27.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24423
- uid: 24267
components:
- type: Transform
pos: -49.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24409
- uid: 24268
components:
- type: Transform
pos: -48.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24409
- uid: 24269
components:
- type: Transform
pos: -31.5,32.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24423
- uid: 24270
components:
- type: Transform
pos: 32.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24433
- uid: 24271
components:
- type: Transform
pos: 39.5,-0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24394
- uid: 24272
components:
- type: Transform
pos: -33.5,32.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24423
- uid: 24273
components:
- type: Transform
pos: -46.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24409
- uid: 24274
components:
- type: Transform
pos: -47.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24409
- uid: 24275
components:
- type: Transform
pos: 43.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24276
components:
- type: Transform
pos: 59.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24277
components:
- type: Transform
pos: 65.5,-54.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24278
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 66.5,-51.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24279
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 66.5,-52.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24280
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 58.5,-51.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24281
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 58.5,-52.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24282
components:
- type: Transform
pos: 61.5,-50.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24283
components:
- type: Transform
pos: 63.5,-50.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24434
- uid: 24284
components:
- type: Transform
@@ -158850,8 +158009,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 1
- links:
- - 24463
- uid: 24285
components:
- type: Transform
@@ -158863,640 +158020,412 @@ entities:
rot: -1.5707963267948966 rad
pos: -33.5,-15.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24390
- uid: 24287
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -33.5,-17.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24390
- uid: 24288
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24289
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,8.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24290
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24291
components:
- type: Transform
pos: 2.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24292
components:
- type: Transform
pos: 1.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24293
components:
- type: Transform
pos: 0.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24294
components:
- type: Transform
pos: 5.5,11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24295
components:
- type: Transform
pos: 4.5,11.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24436
- uid: 24296
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-46.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24391
- uid: 24297
components:
- type: Transform
pos: 34.5,18.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24437
- uid: 24298
components:
- type: Transform
pos: 35.5,18.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24437
- uid: 24299
components:
- type: Transform
pos: 36.5,18.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24437
- uid: 24300
components:
- type: Transform
pos: -7.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24438
- uid: 24301
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 48.5,7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24302
components:
- type: Transform
pos: 46.5,9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24303
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 35.5,-1.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24394
- uid: 24304
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 35.5,-2.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24394
- uid: 24305
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 35.5,-4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24394
- uid: 24306
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 35.5,-5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24394
- uid: 24307
components:
- type: Transform
pos: 41.5,-0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24439
- uid: 24308
components:
- type: Transform
pos: 42.5,-0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24439
- uid: 24309
components:
- type: Transform
pos: 43.5,-0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24439
- uid: 24310
components:
- type: Transform
pos: 46.5,3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24392
- uid: 24311
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-47.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24391
- uid: 24312
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-48.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24391
- uid: 24313
components:
- type: Transform
pos: 3.5,-44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24391
- uid: 24314
components:
- type: Transform
pos: 4.5,-44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24391
- uid: 24315
components:
- type: Transform
pos: 5.5,-44.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24391
- uid: 24316
components:
- type: Transform
pos: 23.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24317
components:
- type: Transform
pos: 22.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24318
components:
- type: Transform
pos: 21.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24319
components:
- type: Transform
pos: 25.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24320
components:
- type: Transform
pos: 26.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24321
components:
- type: Transform
pos: 27.5,5.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24322
components:
- type: Transform
pos: 27.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24323
components:
- type: Transform
pos: 26.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24324
components:
- type: Transform
pos: 25.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24325
components:
- type: Transform
pos: 23.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24326
components:
- type: Transform
pos: 22.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24327
components:
- type: Transform
pos: 21.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24328
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 19.5,3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24329
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 19.5,2.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24330
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 19.5,1.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24331
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 19.5,0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24332
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 19.5,-0.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24333
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 19.5,-1.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24440
- uid: 24334
components:
- type: Transform
pos: 22.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24335
components:
- type: Transform
pos: 23.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24336
components:
- type: Transform
pos: 24.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24337
components:
- type: Transform
pos: 25.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24338
components:
- type: Transform
pos: 26.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24339
components:
- type: Transform
pos: 27.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24340
components:
- type: Transform
pos: 28.5,-20.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24441
- uid: 24341
components:
- type: Transform
pos: 4.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24458
- uid: 24342
components:
- type: Transform
pos: 1.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24458
- uid: 24343
components:
- type: Transform
pos: 3.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24458
- uid: 24344
components:
- type: Transform
pos: 2.5,-3.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24458
- uid: 24345
components:
- type: Transform
pos: 23.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24346
components:
- type: Transform
pos: 24.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24347
components:
- type: Transform
pos: 26.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24348
components:
- type: Transform
pos: 27.5,-40.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24349
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 20.5,-36.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24350
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 20.5,-35.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24351
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 20.5,-34.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24460
- uid: 24352
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,-9.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24459
- uid: 24353
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,-10.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24459
- uid: 24354
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,-13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24459
- uid: 24355
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,-14.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24459
- uid: 24356
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,24.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24449
- uid: 24357
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,23.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24449
- uid: 24358
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,19.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24449
- uid: 24359
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -21.5,18.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24449
- uid: 24360
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 37.5,-35.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24461
- uid: 24361
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 37.5,-36.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 24461
- proto: ShuttleConsoleCircuitboard
entities:
- uid: 24362
@@ -199573,8 +198502,6 @@ entities:
parent: 2
- type: DeviceLinkSink
invokeCounter: 1
- links:
- - 24462
- proto: WindoorSecureArmoryLocked
entities:
- uid: 31248
@@ -199784,18 +198711,12 @@ entities:
rot: 3.141592653589793 rad
pos: 29.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 2261
- uid: 31280
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 39.5,7.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 2263
- uid: 31281
components:
- type: Transform
@@ -199814,18 +198735,12 @@ entities:
rot: 3.141592653589793 rad
pos: 32.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 2262
- uid: 31284
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 39.5,4.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 2264
- uid: 31285
components:
- type: Transform
@@ -199838,9 +198753,6 @@ entities:
rot: 3.141592653589793 rad
pos: 35.5,13.5
parent: 2
- - type: DeviceLinkSink
- links:
- - 2260
- uid: 31287
components:
- type: Transform
diff --git a/Resources/Prototypes/Body/Parts/gingerbread.yml b/Resources/Prototypes/Body/Parts/gingerbread.yml
index 661835ab84..f95e66145b 100644
--- a/Resources/Prototypes/Body/Parts/gingerbread.yml
+++ b/Resources/Prototypes/Body/Parts/gingerbread.yml
@@ -1,7 +1,7 @@
- type: entity
id: PartGingerbread
parent: [BaseItem, BasePart]
- name: "gingerbead body part"
+ name: "gingerbread body part"
abstract: true
components:
- type: Extractable
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_engineering.yml b/Resources/Prototypes/Catalog/Cargo/cargo_engineering.yml
index 7ca6af8451..d4e2b4c60d 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_engineering.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_engineering.yml
@@ -28,6 +28,16 @@
category: cargoproduct-category-name-engineering
group: market
+- type: cargoProduct
+ id: EngineeringFoamGrenade
+ icon:
+ sprite: Objects/Weapons/Grenades/metalfoam.rsi
+ state: icon
+ product: CrateEngineeringFoamGrenade
+ cost: 2500
+ category: cargoproduct-category-name-engineering
+ group: market
+
- type: cargoProduct
id: EngineeringCableBulk
icon:
diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml
index 26a8910c73..62d07b0bed 100644
--- a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml
+++ b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml
@@ -76,6 +76,17 @@
- id: CableHVStack
amount: 3
+- type: entity
+ id: CrateEngineeringFoamGrenade
+ parent: CrateEngineeringSecure
+ name: sealant grenade crate
+ description: 5 metal foam sealant grenades.
+ components:
+ - type: StorageFill
+ contents:
+ - id: MetalFoamGrenade
+ amount: 5
+
- type: entity
id: CrateEngineeringCableBulk
parent: CrateElectrical
diff --git a/Resources/Prototypes/Chemistry/mixing_types.yml b/Resources/Prototypes/Chemistry/mixing_types.yml
index 20d58e70ab..fd73256410 100644
--- a/Resources/Prototypes/Chemistry/mixing_types.yml
+++ b/Resources/Prototypes/Chemistry/mixing_types.yml
@@ -51,3 +51,17 @@
icon:
sprite: Objects/Specific/Chapel/bible.rsi
state: icon
+
+- type: mixingCategory
+ id: Shake
+ verbText: mixing-verb-shake
+ icon:
+ sprite: Objects/Consumable/Drinks/shaker.rsi
+ state: icon
+
+- type: mixingCategory
+ id: Stir
+ verbText: mixing-verb-stir
+ icon:
+ sprite: Objects/Misc/utensils.rsi
+ state: spoon
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
index 79c116b3ca..2053ced0f6 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
@@ -246,6 +246,7 @@
name: carp suit
description: A special suit that makes you look just like a space carp, if your eyesight is bad.
components:
+ - type: AllowSuitStorage
- type: Sprite
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
- type: Item
diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml
index 096e88bcb6..ee300e9aea 100644
--- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml
+++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml
@@ -101,6 +101,8 @@
state: m_foam-north
- map: [ "enum.EdgeLayer.West" ]
state: m_foam-west
+ - type: EdgeSpreader
+ id: MetalFoam
- type: FoamVisuals
animationTime: 0.6
animationState: m_foam-dissolve
@@ -135,7 +137,7 @@
- type: RCDDeconstructable
cost: 2
delay: 2
- fx: EffectRCDDeconstruct2
+ fx: EffectRCDDeconstruct2
- type: Clickable
- type: InteractionOutline
- type: Sprite
@@ -159,6 +161,13 @@
- type: Transform
anchored: true
- type: Airtight
+ - type: ReplaceFloorOnSpawn
+ replaceableTiles:
+ - Plating
+ - Lattice
+ - TrainLattice
+ replacementTiles:
+ - FloorMetalFoam
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Metallic
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
index 1686b723b5..172ed66cc3 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
@@ -338,6 +338,13 @@
sprite: Mobs/Silicon/Bots/supplybot.rsi
layers:
- state: supplybot
+ - type: SpriteMovement
+ movementLayers:
+ movement:
+ state: supplybot-moving
+ noMovementLayers:
+ movement:
+ state: supplybot
- type: GhostRole
makeSentient: true
name: ghost-role-information-supplybot-name
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml
index d2c1249740..604ae28fb3 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml
@@ -11,7 +11,7 @@
- type: MixableSolution
solution: drink
- type: Drink
- - type: Shakeable # Doesn't do anything, but I mean...
+ - type: Shakeable
- type: FitsInDispenser
solution: drink
- type: DrawableSolution
@@ -34,6 +34,10 @@
- type: PhysicalComposition
materialComposition:
Steel: 50
+ - type: ReactionMixer
+ mixOnInteract: false
+ reactionTypes:
+ - Shake
- type: entity
parent: DrinkGlassBase
diff --git a/Resources/Prototypes/Entities/Objects/Devices/radio.yml b/Resources/Prototypes/Entities/Objects/Devices/radio.yml
index 43f84fe404..77b6cac2d3 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/radio.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/radio.yml
@@ -4,6 +4,7 @@
parent: BaseItem
id: RadioHandheld
components:
+ - type: TelecomExempt
- type: RadioMicrophone
broadcastChannel: Handheld
- type: RadioSpeaker
@@ -39,4 +40,4 @@
sprite: Objects/Devices/securityhandy.rsi
- type: Item
sprite: Objects/Devices/securityhandy.rsi
- heldPrefix: walkietalkie
\ No newline at end of file
+ heldPrefix: walkietalkie
diff --git a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml
index 86667f094f..e735b2dcdd 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml
@@ -87,6 +87,11 @@
Blunt: 1
- type: Shovel
speedModifier: 0.1 # you can try
+ - type: ReactionMixer
+ mixMessage: "spoon-mixing-success"
+ timeToMix: 0.5
+ reactionTypes:
+ - Stir
- type: entity
parent: UtensilBasePlastic
@@ -103,6 +108,11 @@
- Spoon
- type: Shovel
speedModifier: 0.1 # you can try
+ - type: ReactionMixer
+ mixMessage: "spoon-mixing-success"
+ timeToMix: 0.5
+ reactionTypes:
+ - Stir
- type: entity
parent: UtensilBasePlastic
@@ -137,6 +147,11 @@
- type: Utensil
types:
- Spoon
+ - type: ReactionMixer
+ mixMessage: "spoon-mixing-success"
+ timeToMix: 0.5
+ reactionTypes:
+ - Stir
- type: MeleeWeapon
wideAnimationRotation: 180
attackRate: 2
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml
index 7cc33b7155..d0d85beb6f 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml
@@ -1,15 +1,28 @@
- type: entity
- name: captain's sabre
parent: BaseItem
+ id: BaseSword
+ abstract: true
+ components:
+ - type: Sharp
+ - type: MeleeWeapon
+ wideAnimationRotation: -135
+ - type: Sprite
+ state: icon
+ - type: Item
+ size: Normal
+ - type: Utensil
+ types:
+ - Knife
+
+- type: entity
+ name: captain's sabre
+ parent: BaseSword
id: CaptainSabre
description: A ceremonial weapon belonging to the captain of the station.
components:
- - type: Sharp
- type: Sprite
sprite: Objects/Weapons/Melee/captain_sabre.rsi
- state: icon
- type: MeleeWeapon
- wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
@@ -21,7 +34,6 @@
reflectProb: .1
spread: 90
- type: Item
- size: Normal
sprite: Objects/Weapons/Melee/captain_sabre.rsi
- type: Tag
tags:
@@ -30,26 +42,22 @@
- type: entity
name: katana
- parent: BaseItem
+ parent: BaseSword
id: Katana
description: Ancient craftwork made with not so ancient plasteel.
components:
- - type: Sharp
- type: Tag
tags:
- Katana
- type: Sprite
sprite: Objects/Weapons/Melee/katana.rsi
- state: icon
- type: MeleeWeapon
- wideAnimationRotation: -135
damage:
types:
Slash: 15
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
- size: Normal
sprite: Objects/Weapons/Melee/katana.rsi
- type: DisarmMalus
@@ -61,14 +69,12 @@
components:
- type: Sprite
sprite: Objects/Weapons/Melee/energykatana.rsi
- state: icon
- type: MeleeWeapon
wideAnimationRotation: -60
damage:
types:
Slash: 30
- type: Item
- size: Normal
sprite: Objects/Weapons/Melee/energykatana.rsi
- type: EnergyKatana
- type: DashAbility
@@ -86,41 +92,34 @@
- type: entity
name: machete
- parent: BaseItem
+ parent: BaseSword
id: Machete
description: A large, vicious looking blade.
components:
- - type: Sharp
- type: Tag
tags:
- Machete
- type: Sprite
sprite: Objects/Weapons/Melee/machete.rsi
- state: icon
- type: MeleeWeapon
- wideAnimationRotation: -135
damage:
types:
Slash: 15
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
- size: Normal
sprite: Objects/Weapons/Melee/machete.rsi
- type: DisarmMalus
- type: entity
name: claymore
- parent: BaseItem
+ parent: BaseSword
id: Claymore
description: An ancient war blade.
components:
- - type: Sharp
- type: Sprite
sprite: Objects/Weapons/Melee/claymore.rsi
- state: icon
- type: MeleeWeapon
- wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
@@ -128,7 +127,6 @@
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
- size: Normal
- type: Clothing
sprite: Objects/Weapons/Melee/claymore.rsi
slots:
@@ -137,41 +135,34 @@
- type: entity
name: cutlass
- parent: BaseItem
+ parent: BaseSword
id: Cutlass
description: A wickedly curved blade, often seen in the hands of space pirates.
components:
- - type: Sharp
- type: Tag
tags:
- Machete
- type: Sprite
sprite: Objects/Weapons/Melee/cutlass.rsi
- state: icon
- type: MeleeWeapon
- wideAnimationRotation: -135
damage:
types:
Slash: 16
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
- size: Normal
sprite: Objects/Weapons/Melee/cutlass.rsi
- type: DisarmMalus
- type: entity
name: The Throngler
- parent: BaseItem
+ parent: BaseSword
id: Throngler
description: Why would you make this?
components:
- - type: Sharp
- type: Sprite
sprite: Objects/Weapons/Melee/Throngler2.rsi
- state: icon
- type: MeleeWeapon
- wideAnimationRotation: -135
attackRate: 10
damage:
types:
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
index b1d260c327..eb382c01e5 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml
@@ -422,6 +422,21 @@
- ReagentId: TearGas
Quantity: 50
+- type: entity
+ parent: SmokeGrenade
+ id: MetalFoamGrenade
+ name: metal foam grenade
+ description: An emergency tool used for patching up holes. Almost as good as real walls.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Grenades/metalfoam.rsi
+ - type: SmokeOnTrigger
+ duration: 10
+ spreadAmount: 13
+ smokePrototype: AluminiumMetalFoam
+ - type: StaticPrice
+ price: 350
+
# Non-explosive "dummy" grenades to use as a distraction.
- type: entity
diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml
index 2cf77d843c..ca1b1b6c40 100644
--- a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml
+++ b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml
@@ -1,5 +1,5 @@
- type: entity
- id: Intercom
+ id: BaseIntercom
name: intercom
description: An intercom. For when the station just needs to know something.
abstract: true
@@ -9,6 +9,10 @@
- type: Electrified
enabled: false
usesApcPower: true
+ - type: TelecomExempt
+ - type: EncryptionKeyHolder
+ keySlots: 3
+ keysExtractionMethod: Prying
- type: RadioMicrophone
powerRequired: true
unobstructedRequired: true
@@ -24,12 +28,14 @@
- type: InteractionOutline
- type: Appearance
- type: WiresVisuals
+ - type: WiresPanelSecurity
- type: ContainerFill
containers:
board: [ IntercomElectronics ]
- type: ContainerContainer
containers:
board: !type:Container
+ key_slots: !type:Container
- type: Sprite
noRot: false
drawdepth: SmallObjects
@@ -49,7 +55,6 @@
visible: false
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
- shader: unshaded
visible: false
- type: Transform
noRot: false
@@ -61,6 +66,7 @@
- type: ActivatableUIRequiresPower
- type: ActivatableUI
key: enum.IntercomUiKey.Key
+ singleUser: true
- type: UserInterface
interfaces:
enum.IntercomUiKey.Key:
@@ -116,7 +122,7 @@
- Wallmount
- type: entity
- id: IntercomAssesmbly
+ id: IntercomAssembly
name: intercom assembly
description: An intercom. It doesn't seem very helpful right now.
components:
@@ -126,7 +132,18 @@
- type: Sprite
drawdepth: SmallObjects
sprite: Structures/Wallmounts/intercom.rsi
- state: build
+ layers:
+ - state: build
+ - state: panel
+ visible: false
+ map: [ "wires" ]
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.ConstructionVisuals.Layer:
+ wires:
+ 0: { visible: false }
+ 1: { visible: true }
- type: Construction
graph: Intercom
node: assembly
@@ -137,97 +154,176 @@
snap:
- Wallmount
+# this weird inheritance BS exists for construction shitcode
+- type: entity
+ id: IntercomConstructed
+ parent: BaseIntercom
+ suffix: Empty, Panel Open
+ components:
+ - type: Sprite
+ layers:
+ - state: base
+ - state: unshaded
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
+ shader: unshaded
+ - state: broadcasting
+ map: ["enum.RadioDeviceVisualLayers.Broadcasting"]
+ shader: unshaded
+ visible: false
+ - state: speaker
+ map: ["enum.RadioDeviceVisualLayers.Speaker"]
+ shader: unshaded
+ visible: false
+ - state: panel
+ map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ visible: true
+ - type: WiresPanel
+ open: true
+
+- type: entity
+ id: Intercom
+ parent: IntercomConstructed
+ suffix: ""
+ components:
+ - type: Sprite
+ layers:
+ - state: base
+ - state: unshaded
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
+ shader: unshaded
+ - state: broadcasting
+ map: ["enum.RadioDeviceVisualLayers.Broadcasting"]
+ shader: unshaded
+ visible: false
+ - state: speaker
+ map: ["enum.RadioDeviceVisualLayers.Speaker"]
+ shader: unshaded
+ visible: false
+ - state: panel
+ map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ - type: WiresPanel
+ open: false
+
- type: entity
id: IntercomCommon
parent: Intercom
suffix: Common
components:
- - type: Intercom
- supportedChannels:
- - Common
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
- type: entity
id: IntercomCommand
parent: Intercom
suffix: Command
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Command
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyCommand
- type: entity
id: IntercomEngineering
parent: Intercom
suffix: Engineering
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Engineering
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyEngineering
- type: entity
id: IntercomMedical
parent: Intercom
suffix: Medical
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Medical
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyMedical
- type: entity
id: IntercomScience
parent: Intercom
suffix: Science
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Science
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyScience
- type: entity
id: IntercomSecurity
parent: Intercom
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: Intercom
- supportedChannels:
- - Common
- - Security
+ - type: WiresPanel
+ openDelay: 5
+ - type: WiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level2
+ wiresAccessible: false
+ - type: Construction
+ node: intercomReinforced
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeySecurity
- type: entity
id: IntercomService
parent: Intercom
suffix: Service
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Service
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyService
- type: entity
id: IntercomSupply
parent: Intercom
suffix: Supply
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Supply
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyCargo
- type: entity
id: IntercomAll
parent: Intercom
suffix: All
components:
- - type: Intercom
- supportedChannels:
- - Common
- - Command
- - Engineering
- - Medical
- - Science
- - Security
- - Service
- - Supply
+ - type: ContainerFill
+ containers:
+ board:
+ - IntercomElectronics
+ key_slots:
+ - EncryptionKeyCommon
+ - EncryptionKeyStationMaster
diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml
index bfd9dd6230..39e29ad115 100644
--- a/Resources/Prototypes/GameRules/events.yml
+++ b/Resources/Prototypes/GameRules/events.yml
@@ -230,7 +230,7 @@
earliestStart: 15
weight: 6
duration: 50
- minimumPlayers: 15 # Hopefully this is enough for the Rat King's potential Army
+ minimumPlayers: 30 # Hopefully this is enough for the Rat King's potential Army (it was not, raised from 15 -> 30)
- type: VentCrittersRule
entries:
- id: MobMouse
diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml
index 21d7310483..bf311f23e7 100644
--- a/Resources/Prototypes/Reagents/narcotics.yml
+++ b/Resources/Prototypes/Reagents/narcotics.yml
@@ -151,8 +151,7 @@
- !type:HealthChange
conditions:
- !type:TotalDamage
- min: 70
- max: 120 # you've got a chance to get out of crit
+ min: 70 # only heals when you're more dead than alive
damage: # heals at the same rate as tricordrazine, doesn't heal poison because if you OD'd I'm not giving you a safety net
groups:
Burn: -1
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/intercom.yml b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/intercom.yml
index 2247860f89..ba29d72539 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/intercom.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/intercom.yml
@@ -11,13 +11,17 @@
doAfter: 2.0
- node: assembly
- entity: IntercomAssesmbly
+ entity: IntercomAssembly
edges:
- to: wired
steps:
- material: Cable
amount: 2
doAfter: 1
+ completed:
+ - !type:VisualizerDataInt
+ key: "enum.ConstructionVisuals.Layer"
+ data: 1
- to: start
completed:
- !type:GivePrototype
@@ -29,7 +33,7 @@
doAfter: 2
- node: wired
- entity: IntercomAssesmbly
+ entity: IntercomAssembly
edges:
- to: electronics
steps:
@@ -45,6 +49,9 @@
- !type:GivePrototype
prototype: CableApcStack1
amount: 2
+ - !type:VisualizerDataInt
+ key: "enum.ConstructionVisuals.Layer"
+ data: 0
steps:
- tool: Cutting
doAfter: 1
@@ -57,7 +64,11 @@
doAfter: 2
- node: intercom
- entity: IntercomCommon #TODO: make this work with encryption keys
+ entity: IntercomConstructed
+ doNotReplaceInheritingEntities: true
+ actions:
+ - !type:SetWiresPanelSecurity
+ wiresAccessible: true
edges:
- to: wired
conditions:
@@ -72,3 +83,27 @@
steps:
- tool: Prying
doAfter: 1
+ - to: intercomReinforced
+ conditions:
+ - !type:WirePanel
+ steps:
+ - material: Steel
+ amount: 1
+ - tool: Welding
+ doAfter: 1
+
+ - node: intercomReinforced
+ actions:
+ - !type:SetWiresPanelSecurity
+ examine: wires-panel-component-on-examine-security-level2
+ wiresAccessible: false
+ edges:
+ - to: intercom
+ conditions:
+ - !type:WirePanel
+ completed:
+ - !type:GivePrototype
+ prototype: SheetSteel1
+ steps:
+ - tool: Welding
+ doAfter: 5
diff --git a/Resources/Prototypes/Recipes/Construction/utilities.yml b/Resources/Prototypes/Recipes/Construction/utilities.yml
index 19f2fee183..82c16de7b6 100644
--- a/Resources/Prototypes/Recipes/Construction/utilities.yml
+++ b/Resources/Prototypes/Recipes/Construction/utilities.yml
@@ -790,7 +790,7 @@
# INTERCOM
- type: construction
name: intercom
- id: IntercomAssesmbly
+ id: IntercomAssembly
graph: Intercom
startNode: start
targetNode: intercom
diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml
index 2a14c0ecd2..96cc5b6aaa 100644
--- a/Resources/Prototypes/Recipes/Reactions/drinks.yml
+++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml
@@ -10,6 +10,8 @@
- type: reaction
id: AlliesCocktail
+ requiredMixerCategories:
+ - Shake
reactants:
Martini:
amount: 2
@@ -20,6 +22,8 @@
- type: reaction
id: Amasec
+ requiredMixerCategories:
+ - Shake
reactants:
Wine:
amount: 2
@@ -32,6 +36,8 @@
- type: reaction
id: Andalusia
+ requiredMixerCategories:
+ - Stir
reactants:
Rum:
amount: 1
@@ -98,6 +104,8 @@
- type: reaction
id: BlueHawaiian
+ requiredMixerCategories:
+ - Shake
reactants:
CoconutRum:
amount: 2
@@ -126,6 +134,8 @@
- type: reaction
id: BahamaMama
+ requiredMixerCategories:
+ - Shake
reactants:
Ice:
amount: 1
@@ -168,6 +178,8 @@
- type: reaction
id: BeepskySmash
+ requiredMixerCategories:
+ - Shake
reactants:
Iron:
amount: 1
@@ -190,6 +202,8 @@
- type: reaction
id: BloodyMary
+ requiredMixerCategories:
+ - Stir
reactants:
JuiceLime:
amount: 1
@@ -280,6 +294,8 @@
- type: reaction
id: DemonsBlood
+ requiredMixerCategories:
+ - Stir
reactants:
Rum:
amount: 1
@@ -294,6 +310,8 @@
- type: reaction
id: DevilsKiss
+ requiredMixerCategories:
+ - Stir
reactants:
Rum:
amount: 1
@@ -306,6 +324,8 @@
- type: reaction
id: DoctorsDelight
+ requiredMixerCategories:
+ - Stir
reactants:
Cream:
amount: 2
@@ -322,6 +342,8 @@
- type: reaction
id: DriestMartini
+ requiredMixerCategories:
+ - Shake
reactants:
Gin:
amount: 1
@@ -332,6 +354,8 @@
- type: reaction
id: ErikaSurprise
+ requiredMixerCategories:
+ - Shake
reactants:
Ale:
amount: 2
@@ -373,6 +397,8 @@
- type: reaction
id: GargleBlaster
+ requiredMixerCategories:
+ - Shake
reactants:
Cognac:
amount: 1
@@ -411,6 +437,8 @@
- type: reaction
id: Gildlager
+ requiredMixerCategories:
+ - Shake
reactants:
Gold:
amount: 1
@@ -548,6 +576,8 @@
- type: reaction
id: IrishCoffee
+ requiredMixerCategories:
+ - Stir
reactants:
Coffee:
amount: 1
@@ -568,6 +598,8 @@
- type: reaction
id: KiraSpecial
+ requiredMixerCategories:
+ - Stir
reactants:
JuiceLime:
amount: 1
@@ -580,6 +612,8 @@
- type: reaction
id: Lemonade
+ requiredMixerCategories:
+ - Stir
reactants:
JuiceLemon:
amount: 1
@@ -592,6 +626,8 @@
- type: reaction
id: LemonLime
+ requiredMixerCategories:
+ - Stir
reactants:
JuiceLemon:
amount: 1
@@ -604,6 +640,8 @@
- type: reaction
id: LongIslandIcedTea
+ requiredMixerCategories:
+ - Stir
reactants:
CubaLibre:
amount: 3
@@ -618,6 +656,8 @@
- type: reaction
id: Manhattan
+ requiredMixerCategories:
+ - Shake
reactants:
Whiskey:
amount: 2
@@ -658,6 +698,8 @@
- type: reaction
id: Martini
+ requiredMixerCategories:
+ - Shake
reactants:
Gin:
amount: 2
@@ -679,6 +721,8 @@
- type: reaction
id: Mojito
+ requiredMixerCategories:
+ - Shake
reactants:
JuiceLime:
amount: 1
@@ -726,6 +770,8 @@
- type: reaction
id: Patron
+ requiredMixerCategories:
+ - Shake
reactants:
Tequila:
amount: 10
@@ -736,6 +782,8 @@
- type: reaction
id: Painkiller
+ requiredMixerCategories:
+ - Shake
reactants:
JuicePineapple:
amount: 3
@@ -838,6 +886,8 @@
- type: reaction
id: ScrewdriverCocktail
+ requiredMixerCategories:
+ - Shake
reactants:
JuiceOrange:
amount: 2
@@ -955,6 +1005,8 @@
- type: reaction
id: ToxinsSpecial
+ requiredMixerCategories:
+ - Shake
reactants:
Rum:
amount: 2
@@ -967,6 +1019,8 @@
- type: reaction
id: VodkaMartini
+ requiredMixerCategories:
+ - Shake
reactants:
Vermouth:
amount: 1
diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml
index 602e9bc441..91b61bec09 100644
--- a/Resources/Prototypes/Tiles/floors.yml
+++ b/Resources/Prototypes/Tiles/floors.yml
@@ -201,7 +201,7 @@
collection: FootstepHull
itemDrop: FloorTileItemBrassFilled
heatCapacity: 10000
-
+
- type: tile
id: FloorBrassReebe
name: tiles-brass-floor-reebe
@@ -1391,6 +1391,21 @@
itemDrop: SheetRGlass1
heatCapacity: 10000
+- type: tile
+ id: FloorMetalFoam
+ name: tiles-metal-foam
+ sprite: /Textures/Tiles/foammetal.png
+ variants: 1
+ placementVariants:
+ - 1.0
+ baseTurf: Plating
+ isSubfloor: false
+ deconstructTools: [ Prying ]
+ footstepSounds:
+ collection: FootstepHull
+ itemDrop: SheetSteel1
+ heatCapacity: 10000
+
# Circuits
- type: tile
id: FloorGreenCircuit
diff --git a/Resources/Prototypes/edge_spreaders.yml b/Resources/Prototypes/edge_spreaders.yml
index 061932c706..c93cc02ba9 100644
--- a/Resources/Prototypes/edge_spreaders.yml
+++ b/Resources/Prototypes/edge_spreaders.yml
@@ -9,3 +9,8 @@
- type: edgeSpreader
id: Smoke
updatesPerSecond: 8
+
+- type: edgeSpreader
+ id: MetalFoam
+ updatesPerSecond: 16
+ preventSpreadOnSpaced: false
diff --git a/Resources/ServerInfo/Guidebook/Science/Science.xml b/Resources/ServerInfo/Guidebook/Science/Science.xml
index 6e0183fc5f..e3de7738c7 100644
--- a/Resources/ServerInfo/Guidebook/Science/Science.xml
+++ b/Resources/ServerInfo/Guidebook/Science/Science.xml
@@ -22,7 +22,7 @@ Each technology costs [color=#a4885c]Research Points[/color] and unlocks recipes
[textlink="Click here to see a list of technologies." link="Technologies"].
## Disciplines
-Technologies are spread over 5 different Disciplines:
+Technologies are spread over 4 different Disciplines:
diff --git a/Resources/ServerInfo/Guidebook/Science/Technologies.xml b/Resources/ServerInfo/Guidebook/Science/Technologies.xml
index 7f0feaca42..ef89c80269 100644
--- a/Resources/ServerInfo/Guidebook/Science/Technologies.xml
+++ b/Resources/ServerInfo/Guidebook/Science/Technologies.xml
@@ -8,9 +8,6 @@ The different technologies and their respective discipline are listed below.
## Industrial
-## Biochemical
-
-
## Arsenal
diff --git a/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/meta.json b/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/meta.json
index 6bb3e77cfe..f459a7caa6 100644
--- a/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/meta.json
+++ b/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/meta.json
@@ -10,6 +10,28 @@
{
"name": "supplybot",
"directions": 4,
+ "delays": [
+ [
+ 0.3,
+ 0.1
+ ],
+ [
+ 0.3,
+ 0.1
+ ],
+ [
+ 0.3,
+ 0.1
+ ],
+ [
+ 0.3,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "supplybot-moving",
+ "directions": 4,
"delays": [
[
0.1,
diff --git a/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot-moving.png b/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot-moving.png
new file mode 100644
index 0000000000..cac976240b
Binary files /dev/null and b/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot-moving.png differ
diff --git a/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot.png b/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot.png
index cac976240b..9a4895603b 100644
Binary files a/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot.png and b/Resources/Textures/Mobs/Silicon/Bots/supplybot.rsi/supplybot.png differ
diff --git a/Resources/Textures/Mobs/Species/lungs_phoronman.png b/Resources/Textures/Mobs/Species/lungs_phoronman.png
deleted file mode 100644
index 1c6d2dc11a..0000000000
Binary files a/Resources/Textures/Mobs/Species/lungs_phoronman.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/equipped-BELT.png b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/equipped-BELT.png
new file mode 100644
index 0000000000..d3cf1cf4c9
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/equipped-BELT.png differ
diff --git a/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/icon.png b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/icon.png
new file mode 100644
index 0000000000..a13dedfc20
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/meta.json b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/meta.json
new file mode 100644
index 0000000000..139eebb04d
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/meta.json
@@ -0,0 +1,27 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by EmoGarbage404",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "primed",
+ "delays": [
+ [
+ 0.2,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "equipped-BELT",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/primed.png b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/primed.png
new file mode 100644
index 0000000000..dafc378c3b
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Grenades/metalfoam.rsi/primed.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/fireaxeflaming.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/fireaxeflaming.rsi/icon.png
index 58e2f14942..ef62ecf5f4 100644
Binary files a/Resources/Textures/Objects/Weapons/Melee/fireaxeflaming.rsi/icon.png and b/Resources/Textures/Objects/Weapons/Melee/fireaxeflaming.rsi/icon.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/intercom.rsi/base.png b/Resources/Textures/Structures/Wallmounts/intercom.rsi/base.png
index 787af3f538..a85cbfbecc 100644
Binary files a/Resources/Textures/Structures/Wallmounts/intercom.rsi/base.png and b/Resources/Textures/Structures/Wallmounts/intercom.rsi/base.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/intercom.rsi/broadcasting.png b/Resources/Textures/Structures/Wallmounts/intercom.rsi/broadcasting.png
index 0566c70e35..962417ccb4 100644
Binary files a/Resources/Textures/Structures/Wallmounts/intercom.rsi/broadcasting.png and b/Resources/Textures/Structures/Wallmounts/intercom.rsi/broadcasting.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/intercom.rsi/build.png b/Resources/Textures/Structures/Wallmounts/intercom.rsi/build.png
index cfd5d5fffa..e8edab0fa0 100644
Binary files a/Resources/Textures/Structures/Wallmounts/intercom.rsi/build.png and b/Resources/Textures/Structures/Wallmounts/intercom.rsi/build.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/intercom.rsi/panel.png b/Resources/Textures/Structures/Wallmounts/intercom.rsi/panel.png
index 3bfeb8df58..68f4cd1240 100644
Binary files a/Resources/Textures/Structures/Wallmounts/intercom.rsi/panel.png and b/Resources/Textures/Structures/Wallmounts/intercom.rsi/panel.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/intercom.rsi/speaker.png b/Resources/Textures/Structures/Wallmounts/intercom.rsi/speaker.png
index eb09c52fc3..4bcd29d7f4 100644
Binary files a/Resources/Textures/Structures/Wallmounts/intercom.rsi/speaker.png and b/Resources/Textures/Structures/Wallmounts/intercom.rsi/speaker.png differ
diff --git a/Resources/Textures/Structures/Wallmounts/intercom.rsi/unshaded.png b/Resources/Textures/Structures/Wallmounts/intercom.rsi/unshaded.png
index 7b0bb63072..a8fda54fc9 100644
Binary files a/Resources/Textures/Structures/Wallmounts/intercom.rsi/unshaded.png and b/Resources/Textures/Structures/Wallmounts/intercom.rsi/unshaded.png differ
diff --git a/Resources/Textures/Tiles/attributions.yml b/Resources/Textures/Tiles/attributions.yml
index 7cfe5535a0..6a6f545d1e 100644
--- a/Resources/Textures/Tiles/attributions.yml
+++ b/Resources/Textures/Tiles/attributions.yml
@@ -16,11 +16,11 @@
copyright: "Modified by github user @Flareguy from plating.png, using damaged plating sprites from /tg/station at commit https://github.com/tgstation/tgstation/blob/6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae/icons/turf/floors.dmi"
source: "https://github.com/space-wizards/space-station-14/pull/21711"
-- files: [ "asteroid_red.png", "asteroid_tile.png", "elevator_shaft.png", "freezer.png", "green_circuit.png", "lino.png", "mono.png", "rock_vault.png", "showroom.png"]
+- files: [ "asteroid_red.png", "asteroid_tile.png", "elevator_shaft.png", "freezer.png", "foammetal.png", "green_circuit.png", "lino.png", "mono.png", "rock_vault.png", "showroom.png"]
license: "CC-BY-SA-3.0"
copyright: "vgstation13 at roughly commit e4d3ea7f69d21c3667be12b114fa935c4640cb05, asteroid_red and asteroid_tile taken from commit /vg/station at commit 02b9f6894af4419c9f7e699a22c402b086d8067e."
source: "https://github.com/vgstation-coders/vgstation13"
-
+
- files: [ "asteroid.png", "asteroid_dug.png", "asteroid0.png"]
license: "CC-BY-SA-3.0"
copyright: "Taken from /tg/station at commit 6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae."
@@ -40,7 +40,7 @@
license: "CC-BY-SA-3.0"
copyright: "Modified from plating.png by github user @Flareguy"
source: "https://github.com/space-wizards/space-station-14/"
-
+
- files: ["rglass.png"]
license: "CC-BY-SA-3.0"
copyright: "tgstation commit 8abb19545828230d92ba18827feeb42a67a55d49, rglass modified by github user @notquitehadouken."
@@ -90,7 +90,7 @@
license: "CC-BY-SA-3.0"
copyright: "Fortuna commit 2a9408a47e2f83d945335e4feeeeafb552173e6f, grasslight and dirt by Peptide based on grassdark.png and dirt."
source: "https://github.com/FortunaSS13/Fortuna"
-
+
- files: ["steel_maint.png", "grating_maint.png", "wood_tile.png"]
license: "CC-BY-SA-3.0"
copyright: "by brainfood for space-station-14, ."
@@ -105,7 +105,7 @@
license: "CC-BY-SA-3.0"
copyright: "taken at https://github.com/ParadiseSS13/Paradise/blob/8b7f4c8b69c74c6de5a755272eb8d3520f3d87c7/icons/turf/floors.dmi"
source: "https://github.com/ParadiseSS13/Paradise"
-
+
- files: ["chromite.png"]
license: "CC-BY-NC-SA-3.0"
copyright: "taken at commit 0587dd16e28108bdf0b0a28e2caae4319845e861, and recolored by TheShuEd"
diff --git a/Resources/Textures/Tiles/foammetal.png b/Resources/Textures/Tiles/foammetal.png
new file mode 100644
index 0000000000..a6afd53b25
Binary files /dev/null and b/Resources/Textures/Tiles/foammetal.png differ
diff --git a/Resources/migration.yml b/Resources/migration.yml
index ef0a5f46b7..bd42de8f2c 100644
--- a/Resources/migration.yml
+++ b/Resources/migration.yml
@@ -358,3 +358,6 @@ FloorTileItemReinforced: PartRodMetal1
#2024-06-25
BookChefGaming: BookHowToCookForFortySpaceman
+
+#2024-06-29
+IntercomAssesmbly: IntercomAssembly