Merge branch 'master' into offmed-staging

This commit is contained in:
Janet Blackquill
2025-10-07 23:41:47 -04:00
352 changed files with 2698 additions and 1901 deletions

View File

@@ -14,6 +14,9 @@ namespace Content.Client.Administration.UI.Notes;
[GenerateTypedNameReferences] [GenerateTypedNameReferences]
public sealed partial class AdminNotesLine : BoxContainer public sealed partial class AdminNotesLine : BoxContainer
{ {
[Dependency] private readonly ILogManager _logManager = default!;
private readonly ISawmill _sawmill = default!;
private readonly SpriteSystem _sprites; private readonly SpriteSystem _sprites;
private const string AdminNotesTextureBase = "/Textures/Interface/AdminNotes/"; private const string AdminNotesTextureBase = "/Textures/Interface/AdminNotes/";
@@ -33,6 +36,8 @@ public sealed partial class AdminNotesLine : BoxContainer
public AdminNotesLine(SpriteSystem sprites, SharedAdminNote note) public AdminNotesLine(SpriteSystem sprites, SharedAdminNote note)
{ {
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
_sawmill = _logManager.GetSawmill("admin.notes");
_sprites = sprites; _sprites = sprites;
Note = note; Note = note;
@@ -61,7 +66,7 @@ public sealed partial class AdminNotesLine : BoxContainer
if (iconPath is null) if (iconPath is null)
{ {
SeverityRect.Visible = false; SeverityRect.Visible = false;
Logger.WarningS("admin.notes", $"Could not find an icon for note ID {Note.Id}"); _sawmill.Warning($"Could not find an icon for note ID {Note.Id}");
} }
else else
{ {

View File

@@ -37,8 +37,7 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystem<TypingInd
if (!layerExists) if (!layerExists)
layer = SpriteSystem.LayerMapReserve((uid, args.Sprite), TypingIndicatorLayers.Base); layer = SpriteSystem.LayerMapReserve((uid, args.Sprite), TypingIndicatorLayers.Base);
SpriteSystem.LayerSetRsi((uid, args.Sprite), layer, proto.SpritePath); SpriteSystem.LayerSetRsi((uid, args.Sprite), layer, proto.SpritePath, proto.TypingState);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), layer, proto.TypingState);
args.Sprite.LayerSetShader(layer, proto.Shader); args.Sprite.LayerSetShader(layer, proto.Shader);
SpriteSystem.LayerSetOffset((uid, args.Sprite), layer, proto.Offset); SpriteSystem.LayerSetOffset((uid, args.Sprite), layer, proto.Offset);

View File

@@ -30,8 +30,10 @@ namespace Content.Client.Construction.UI
[Dependency] private readonly IUserInterfaceManager _uiManager = default!; [Dependency] private readonly IUserInterfaceManager _uiManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IClientPreferencesManager _preferencesManager = default!; [Dependency] private readonly IClientPreferencesManager _preferencesManager = default!;
private readonly SpriteSystem _spriteSystem; [Dependency] private readonly ILogManager _logManager = default!;
private readonly ISawmill _sawmill = default!;
private readonly SpriteSystem _spriteSystem;
private readonly IConstructionMenuView _constructionView; private readonly IConstructionMenuView _constructionView;
private readonly EntityWhitelistSystem _whitelistSystem; private readonly EntityWhitelistSystem _whitelistSystem;
@@ -87,6 +89,8 @@ namespace Content.Client.Construction.UI
{ {
// This is a lot easier than a factory // This is a lot easier than a factory
IoCManager.InjectDependencies(this); IoCManager.InjectDependencies(this);
_sawmill = _logManager.GetSawmill("construction.menu");
_constructionView = new ConstructionMenu(); _constructionView = new ConstructionMenu();
_whitelistSystem = _entManager.System<EntityWhitelistSystem>(); _whitelistSystem = _entManager.System<EntityWhitelistSystem>();
_spriteSystem = _entManager.System<SpriteSystem>(); _spriteSystem = _entManager.System<SpriteSystem>();
@@ -284,7 +288,7 @@ namespace Content.Client.Construction.UI
if (!_constructionSystem!.TryGetRecipePrototype(recipe.ID, out var targetProtoId)) if (!_constructionSystem!.TryGetRecipePrototype(recipe.ID, out var targetProtoId))
{ {
Logger.Error("Cannot find the target prototype in the recipe cache with the id \"{0}\" of {1}.", _sawmill.Error("Cannot find the target prototype in the recipe cache with the id \"{0}\" of {1}.",
recipe.ID, recipe.ID,
nameof(ConstructionPrototype)); nameof(ConstructionPrototype));
continue; continue;

View File

@@ -7,7 +7,6 @@ using Robust.Client.UserInterface;
using Robust.Shared.ContentPack; using Robust.Shared.ContentPack;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Reflection; using Robust.Shared.Reflection;
using Robust.Shared.Sandboxing;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using static Pidgin.Parser; using static Pidgin.Parser;
@@ -21,7 +20,7 @@ public sealed partial class DocumentParsingManager
[Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IReflectionManager _reflectionManager = default!; [Dependency] private readonly IReflectionManager _reflectionManager = default!;
[Dependency] private readonly IResourceManager _resourceManager = default!; [Dependency] private readonly IResourceManager _resourceManager = default!;
[Dependency] private readonly ISandboxHelper _sandboxHelper = default!; [Dependency] private readonly IDynamicTypeFactory _dynamicTypeFactory = default!;
private readonly Dictionary<string, Parser<char, Control>> _tagControlParsers = new(); private readonly Dictionary<string, Parser<char, Control>> _tagControlParsers = new();
private Parser<char, Control> _controlParser = default!; private Parser<char, Control> _controlParser = default!;
@@ -43,7 +42,7 @@ public sealed partial class DocumentParsingManager
foreach (var typ in _reflectionManager.GetAllChildren<IDocumentTag>()) foreach (var typ in _reflectionManager.GetAllChildren<IDocumentTag>())
{ {
_tagControlParsers.Add(typ.Name, CreateTagControlParser(typ.Name, typ, _sandboxHelper)); _tagControlParsers.Add(typ.Name, CreateTagControlParser(typ.Name, typ, _dynamicTypeFactory));
} }
ControlParser = whitespaceAndCommentParser.Then(_controlParser.Many()); ControlParser = whitespaceAndCommentParser.Then(_controlParser.Many());
@@ -51,22 +50,22 @@ public sealed partial class DocumentParsingManager
_sawmill = Logger.GetSawmill("Guidebook"); _sawmill = Logger.GetSawmill("Guidebook");
} }
public bool TryAddMarkup(Control control, ProtoId<GuideEntryPrototype> entryId, bool log = true) public bool TryAddMarkup(Control control, ProtoId<GuideEntryPrototype> entryId)
{ {
if (!_prototype.Resolve(entryId, out var entry)) if (!_prototype.Resolve(entryId, out var entry))
return false; return false;
using var file = _resourceManager.ContentFileReadText(entry.Text); using var file = _resourceManager.ContentFileReadText(entry.Text);
return TryAddMarkup(control, file.ReadToEnd(), log); return TryAddMarkup(control, file.ReadToEnd());
} }
public bool TryAddMarkup(Control control, GuideEntry entry, bool log = true) public bool TryAddMarkup(Control control, GuideEntry entry)
{ {
using var file = _resourceManager.ContentFileReadText(entry.Text); using var file = _resourceManager.ContentFileReadText(entry.Text);
return TryAddMarkup(control, file.ReadToEnd(), log); return TryAddMarkup(control, file.ReadToEnd());
} }
public bool TryAddMarkup(Control control, string text, bool log = true) public bool TryAddMarkup(Control control, string text)
{ {
try try
{ {
@@ -87,14 +86,14 @@ public sealed partial class DocumentParsingManager
return true; return true;
} }
private Parser<char, Control> CreateTagControlParser(string tagId, Type tagType, ISandboxHelper sandbox) private Parser<char, Control> CreateTagControlParser(string tagId, Type tagType, IDynamicTypeFactory typeFactory)
{ {
return Map( return Map(
(args, controls) => (args, controls) =>
{ {
try try
{ {
var tag = (IDocumentTag) sandbox.CreateInstance(tagType); var tag = (IDocumentTag) typeFactory.CreateInstance(tagType);
if (!tag.TryParseTag(args, out var control)) if (!tag.TryParseTag(args, out var control))
{ {
_sawmill.Error($"Failed to parse {tagId} args"); _sawmill.Error($"Failed to parse {tagId} args");

View File

@@ -8,6 +8,11 @@ namespace Content.Client.Guidebook.Richtext;
[UsedImplicitly] [UsedImplicitly]
public sealed class Table : TableContainer, IDocumentTag public sealed class Table : TableContainer, IDocumentTag
{ {
[Dependency] private readonly ILogManager _logManager = default!;
private ISawmill Sawmill => _sawmill ??= _logManager.GetSawmill("table");
private ISawmill? _sawmill;
public bool TryParseTag(Dictionary<string, string> args, [NotNullWhen(true)] out Control? control) public bool TryParseTag(Dictionary<string, string> args, [NotNullWhen(true)] out Control? control)
{ {
HorizontalExpand = true; HorizontalExpand = true;
@@ -15,7 +20,7 @@ public sealed class Table : TableContainer, IDocumentTag
if (!args.TryGetValue("Columns", out var columns) || !int.TryParse(columns, out var columnsCount)) if (!args.TryGetValue("Columns", out var columns) || !int.TryParse(columns, out var columnsCount))
{ {
Logger.Error("Guidebook tag \"Table\" does not specify required property \"Columns.\""); Sawmill.Error("Guidebook tag \"Table\" does not specify required property \"Columns.\"");
control = null; control = null;
return false; return false;
} }

View File

@@ -1,4 +1,4 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Client.UserInterface; using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.Controls;
@@ -12,6 +12,11 @@ namespace Content.Client.Guidebook.RichText;
[UsedImplicitly] [UsedImplicitly]
public sealed class TextLinkTag : IMarkupTagHandler public sealed class TextLinkTag : IMarkupTagHandler
{ {
[Dependency] private readonly ILogManager _logManager = default!;
private ISawmill Sawmill => _sawmill ??= _logManager.GetSawmill(Name);
private ISawmill? _sawmill;
public static Color LinkColor => Color.CornflowerBlue; public static Color LinkColor => Color.CornflowerBlue;
public string Name => "textlink"; public string Name => "textlink";
@@ -53,7 +58,7 @@ public sealed class TextLinkTag : IMarkupTagHandler
if (control.TryGetParentHandler<ILinkClickHandler>(out var handler)) if (control.TryGetParentHandler<ILinkClickHandler>(out var handler))
handler.HandleClick(link); handler.HandleClick(link);
else else
Logger.Warning("Warning! No valid ILinkClickHandler found."); Sawmill.Warning("Warning! No valid ILinkClickHandler found.");
} }
} }

View File

@@ -20,7 +20,9 @@ namespace Content.Client.Launcher
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IClipboardManager _clipboard = default!; [Dependency] private readonly IClipboardManager _clipboard = default!;
[Dependency] private readonly ILogManager _logManager = default!;
private ISawmill _sawmill = default!;
private LauncherConnectingGui? _control; private LauncherConnectingGui? _control;
private Page _currentPage; private Page _currentPage;
@@ -59,6 +61,8 @@ namespace Content.Client.Launcher
protected override void Startup() protected override void Startup()
{ {
_sawmill = _logManager.GetSawmill("launcher-ui");
_control = new LauncherConnectingGui(this, _random, _prototypeManager, _cfg, _clipboard); _control = new LauncherConnectingGui(this, _random, _prototypeManager, _cfg, _clipboard);
_userInterfaceManager.StateRoot.AddChild(_control); _userInterfaceManager.StateRoot.AddChild(_control);
@@ -115,12 +119,12 @@ namespace Content.Client.Launcher
} }
else else
{ {
Logger.InfoS("launcher-ui", $"Redial not possible, no Ss14Address"); _sawmill.Info($"Redial not possible, no Ss14Address");
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.ErrorS("launcher-ui", $"Redial exception: {ex}"); _sawmill.Error($"Redial exception: {ex}");
} }
return false; return false;
} }

View File

@@ -14,12 +14,18 @@ namespace Content.Client.UserInterface.Systems.Alerts.Widgets;
[GenerateTypedNameReferences] [GenerateTypedNameReferences]
public sealed partial class AlertsUI : UIWidget public sealed partial class AlertsUI : UIWidget
{ {
[Dependency] private readonly ILogManager _logManager = default!;
private readonly ISawmill _sawmill = default!;
// also known as Control.Children? // also known as Control.Children?
private readonly Dictionary<AlertKey, AlertControl> _alertControls = new(); private readonly Dictionary<AlertKey, AlertControl> _alertControls = new();
public AlertsUI() public AlertsUI()
{ {
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
_sawmill = _logManager.GetSawmill("alertsui");
} }
public void SyncControls(AlertsSystem alertsSystem, public void SyncControls(AlertsSystem alertsSystem,
@@ -78,7 +84,7 @@ public sealed partial class AlertsUI : UIWidget
{ {
if (!alertKey.AlertType.HasValue) if (!alertKey.AlertType.HasValue)
{ {
Logger.WarningS("alert", "found alertkey without alerttype," + _sawmill.Warning("found alertkey without alerttype," +
" alert keys should never be stored without an alerttype set: {0}", alertKey); " alert keys should never be stored without an alerttype set: {0}", alertKey);
continue; continue;
} }
@@ -86,7 +92,7 @@ public sealed partial class AlertsUI : UIWidget
var alertType = alertKey.AlertType.Value; var alertType = alertKey.AlertType.Value;
if (!alertsSystem.TryGet(alertType, out var newAlert)) if (!alertsSystem.TryGet(alertType, out var newAlert))
{ {
Logger.ErrorS("alert", "Unrecognized alertType {0}", alertType); _sawmill.Error("Unrecognized alertType {0}", alertType);
continue; continue;
} }

View File

@@ -33,7 +33,9 @@ public sealed class ReplayMainScreen : State
[Dependency] private readonly IClientRobustSerializer _serializer = default!; [Dependency] private readonly IClientRobustSerializer _serializer = default!;
[Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!;
[Dependency] private readonly ContentReplayPlaybackManager _replayMan = default!; [Dependency] private readonly ContentReplayPlaybackManager _replayMan = default!;
[Dependency] private readonly ILogManager _logManager = default!;
private ISawmill _sawmill = default!;
private ReplayMainMenuControl _mainMenuControl = default!; private ReplayMainMenuControl _mainMenuControl = default!;
private SelectReplayWindow? _selectWindow; private SelectReplayWindow? _selectWindow;
private ResPath _directory; private ResPath _directory;
@@ -42,6 +44,8 @@ public sealed class ReplayMainScreen : State
protected override void Startup() protected override void Startup()
{ {
_sawmill = _logManager.GetSawmill("replay.screen");
_mainMenuControl = new(_resourceCache); _mainMenuControl = new(_resourceCache);
_userInterfaceManager.StateRoot.AddChild(_mainMenuControl); _userInterfaceManager.StateRoot.AddChild(_mainMenuControl);
@@ -263,7 +267,7 @@ public sealed class ReplayMainScreen : State
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Error($"Failed to load replay info. Exception: {ex}"); _sawmill.Error($"Failed to load replay info. Exception: {ex}");
SelectReplay(null); SelectReplay(null);
return; return;
} }

View File

@@ -112,7 +112,9 @@ public sealed class SpaceHeaterSystem : EntitySystem
if (!TryComp<GasThermoMachineComponent>(uid, out var thermoMachine)) if (!TryComp<GasThermoMachineComponent>(uid, out var thermoMachine))
return; return;
thermoMachine.TargetTemperature = float.Clamp(thermoMachine.TargetTemperature + args.Temperature, thermoMachine.MinTemperature, thermoMachine.MaxTemperature); thermoMachine.TargetTemperature = float.Clamp(thermoMachine.TargetTemperature + args.Temperature,
spaceHeater.MinTemperature,
spaceHeater.MaxTemperature);
UpdateAppearance(uid); UpdateAppearance(uid);
DirtyUI(uid, spaceHeater); DirtyUI(uid, spaceHeater);

View File

@@ -1,9 +0,0 @@
using Content.Server.Body.Systems;
namespace Content.Server.Body.Components
{
[RegisterComponent, Access(typeof(BrainSystem))]
public sealed partial class BrainComponent : Component
{
}
}

View File

@@ -1,6 +1,3 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Runtime.InteropServices;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Administration.Managers; using Content.Server.Administration.Managers;
using Content.Server.Administration.Systems; using Content.Server.Administration.Systems;
@@ -18,6 +15,9 @@ using Robust.Shared.Network;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Replays; using Robust.Shared.Replays;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Runtime.InteropServices;
namespace Content.Server.Chat.Managers; namespace Content.Server.Chat.Managers;
@@ -45,6 +45,7 @@ internal sealed partial class ChatManager : IChatManager
[Dependency] private readonly PlayerRateLimitManager _rateLimitManager = default!; [Dependency] private readonly PlayerRateLimitManager _rateLimitManager = default!;
[Dependency] private readonly ISharedPlayerManager _player = default!; [Dependency] private readonly ISharedPlayerManager _player = default!;
[Dependency] private readonly DiscordChatLink _discordLink = default!; [Dependency] private readonly DiscordChatLink _discordLink = default!;
[Dependency] private readonly ILogManager _logManager = default!;
/// <summary> /// <summary>
/// The maximum length a player-sent message can be sent /// The maximum length a player-sent message can be sent
@@ -54,6 +55,7 @@ internal sealed partial class ChatManager : IChatManager
private bool _oocEnabled = true; private bool _oocEnabled = true;
private bool _adminOocEnabled = true; private bool _adminOocEnabled = true;
private ISawmill _sawmill = default!;
private readonly Dictionary<NetUserId, ChatUser> _players = new(); private readonly Dictionary<NetUserId, ChatUser> _players = new();
public void Initialize() public void Initialize()
@@ -64,6 +66,8 @@ internal sealed partial class ChatManager : IChatManager
_configurationManager.OnValueChanged(CCVars.OocEnabled, OnOocEnabledChanged, true); _configurationManager.OnValueChanged(CCVars.OocEnabled, OnOocEnabledChanged, true);
_configurationManager.OnValueChanged(CCVars.AdminOocEnabled, OnAdminOocEnabledChanged, true); _configurationManager.OnValueChanged(CCVars.AdminOocEnabled, OnAdminOocEnabledChanged, true);
_sawmill = _logManager.GetSawmill("SERVER");
RegisterRateLimits(); RegisterRateLimits();
} }
@@ -111,7 +115,7 @@ internal sealed partial class ChatManager : IChatManager
{ {
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message))); var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message)));
ChatMessageToAll(ChatChannel.Server, message, wrappedMessage, EntityUid.Invalid, hideChat: false, recordReplay: true, colorOverride: colorOverride); ChatMessageToAll(ChatChannel.Server, message, wrappedMessage, EntityUid.Invalid, hideChat: false, recordReplay: true, colorOverride: colorOverride);
Logger.InfoS("SERVER", message); _sawmill.Info(message);
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}"); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}");
} }

View File

@@ -19,7 +19,7 @@ public sealed partial class ReactionMixerSystem : EntitySystem
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<ReactionMixerComponent, AfterInteractEvent>(OnAfterInteract); SubscribeLocalEvent<ReactionMixerComponent, AfterInteractEvent>(OnAfterInteract, before: [typeof(IngestionSystem)]);
SubscribeLocalEvent<ReactionMixerComponent, ShakeEvent>(OnShake); SubscribeLocalEvent<ReactionMixerComponent, ShakeEvent>(OnShake);
SubscribeLocalEvent<ReactionMixerComponent, ReactionMixDoAfterEvent>(OnDoAfter); SubscribeLocalEvent<ReactionMixerComponent, ReactionMixDoAfterEvent>(OnDoAfter);
} }
@@ -29,12 +29,13 @@ public sealed partial class ReactionMixerSystem : EntitySystem
if (!args.Target.HasValue || !args.CanReach || !entity.Comp.MixOnInteract) if (!args.Target.HasValue || !args.CanReach || !entity.Comp.MixOnInteract)
return; return;
if (!MixAttempt(entity, args.Target.Value, out var solution)) if (!MixAttempt(entity, args.Target.Value, out _))
return; return;
var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.TimeToMix, new ReactionMixDoAfterEvent(), entity, args.Target.Value, entity); var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.TimeToMix, new ReactionMixDoAfterEvent(), entity, args.Target.Value, entity);
_doAfterSystem.TryStartDoAfter(doAfterArgs); _doAfterSystem.TryStartDoAfter(doAfterArgs);
args.Handled = true;
} }
private void OnDoAfter(Entity<ReactionMixerComponent> entity, ref ReactionMixDoAfterEvent args) private void OnDoAfter(Entity<ReactionMixerComponent> entity, ref ReactionMixDoAfterEvent args)

View File

@@ -13,11 +13,14 @@ namespace Content.Server.GameTicking.Commands
[AnyCommand] [AnyCommand]
sealed class JoinGameCommand : IConsoleCommand sealed class JoinGameCommand : IConsoleCommand
{ {
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IConfigurationManager _cfg = default!;
private readonly ISawmill _sawmill = default!;
public string Command => "joingame"; public string Command => "joingame";
public string Description => ""; public string Description => "";
public string Help => ""; public string Help => "";
@@ -25,6 +28,8 @@ namespace Content.Server.GameTicking.Commands
public JoinGameCommand() public JoinGameCommand()
{ {
IoCManager.InjectDependencies(this); IoCManager.InjectDependencies(this);
_sawmill = _logManager.GetSawmill("security");
} }
public void Execute(IConsoleShell shell, string argStr, string[] args) public void Execute(IConsoleShell shell, string argStr, string[] args)
{ {
@@ -46,7 +51,7 @@ namespace Content.Server.GameTicking.Commands
if (ticker.PlayerGameStatuses.TryGetValue(player.UserId, out var status) && status == PlayerGameStatus.JoinedGame) if (ticker.PlayerGameStatuses.TryGetValue(player.UserId, out var status) && status == PlayerGameStatus.JoinedGame)
{ {
Logger.InfoS("security", $"{player.Name} ({player.UserId}) attempted to latejoin while in-game."); _sawmill.Info($"{player.Name} ({player.UserId}) attempted to latejoin while in-game.");
shell.WriteError($"{player.Name} is not in the lobby. This incident will be reported."); shell.WriteError($"{player.Name} is not in the lobby. This incident will be reported.");
return; return;
} }

View File

@@ -1,11 +0,0 @@
namespace Content.Server.Ghost.Components
{
[RegisterComponent]
public sealed partial class GhostOnMoveComponent : Component
{
[DataField("canReturn")] public bool CanReturn { get; set; } = true;
[DataField("mustBeDead")]
public bool MustBeDead = false;
}
}

View File

@@ -9,4 +9,5 @@ public abstract partial class NPCComponent : SharedNPCComponent
/// </summary> /// </summary>
[DataField("blackboard", customTypeSerializer: typeof(NPCBlackboardSerializer))] [DataField("blackboard", customTypeSerializer: typeof(NPCBlackboardSerializer))]
public NPCBlackboard Blackboard = new(); public NPCBlackboard Blackboard = new();
// TODO FULL GAME SAVE Serialize this
} }

View File

@@ -24,6 +24,7 @@ public sealed partial class HTNComponent : NPCComponent
/// </summary> /// </summary>
[ViewVariables] [ViewVariables]
public HTNPlan? Plan; public HTNPlan? Plan;
// TODO FULL GAME SAVE serialize this?
/// <summary> /// <summary>
/// How long to wait after having planned to try planning again. /// How long to wait after having planned to try planning again.

View File

@@ -33,6 +33,7 @@ public sealed class HTNSystem : EntitySystem
base.Initialize(); base.Initialize();
SubscribeLocalEvent<HTNComponent, MobStateChangedEvent>(_npc.OnMobStateChange); SubscribeLocalEvent<HTNComponent, MobStateChangedEvent>(_npc.OnMobStateChange);
SubscribeLocalEvent<HTNComponent, MapInitEvent>(_npc.OnNPCMapInit); SubscribeLocalEvent<HTNComponent, MapInitEvent>(_npc.OnNPCMapInit);
SubscribeLocalEvent<HTNComponent, ComponentStartup>(_npc.OnNPCStartup);
SubscribeLocalEvent<HTNComponent, PlayerAttachedEvent>(_npc.OnPlayerNPCAttach); SubscribeLocalEvent<HTNComponent, PlayerAttachedEvent>(_npc.OnPlayerNPCAttach);
SubscribeLocalEvent<HTNComponent, PlayerDetachedEvent>(_npc.OnPlayerNPCDetach); SubscribeLocalEvent<HTNComponent, PlayerDetachedEvent>(_npc.OnPlayerNPCDetach);
SubscribeLocalEvent<HTNComponent, ComponentShutdown>(OnHTNShutdown); SubscribeLocalEvent<HTNComponent, ComponentShutdown>(OnHTNShutdown);

View File

@@ -0,0 +1,28 @@
using Content.Shared.StatusEffectNew;
using Robust.Shared.Prototypes;
namespace Content.Server.NPC.HTN.Preconditions;
/// <summary>
/// Returns true if entity have specified status effect
/// </summary>
public sealed partial class HasStatusEffectPrecondition : HTNPrecondition
{
private StatusEffectsSystem _statusEffects = default!;
[DataField(required: true)]
public EntProtoId StatusEffect;
public override void Initialize(IEntitySystemManager sysManager)
{
base.Initialize(sysManager);
_statusEffects = sysManager.GetEntitySystem<StatusEffectsSystem>();
}
public override bool IsMet(NPCBlackboard blackboard)
{
var owner = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
return _statusEffects.HasStatusEffect(owner, StatusEffect);
}
}

View File

@@ -63,9 +63,13 @@ namespace Content.Server.NPC.Systems
WakeNPC(uid, component); WakeNPC(uid, component);
} }
public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args) public void OnNPCStartup(EntityUid uid, HTNComponent component, ComponentStartup args)
{ {
component.Blackboard.SetValue(NPCBlackboard.Owner, uid); component.Blackboard.SetValue(NPCBlackboard.Owner, uid);
}
public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args)
{
WakeNPC(uid, component); WakeNPC(uid, component);
} }

View File

@@ -0,0 +1,6 @@
using Content.Shared.Body.Systems;
namespace Content.Shared.Body.Components;
[RegisterComponent, Access(typeof(BrainSystem))]
public sealed partial class BrainComponent : Component;

View File

@@ -1,12 +1,12 @@
using Content.Server.Body.Components; using Content.Shared.Body.Components;
using Content.Server.Ghost.Components;
using Content.Shared.Body.Events; using Content.Shared.Body.Events;
using Content.Shared.Ghost;
using Content.Shared.Mind; using Content.Shared.Mind;
using Content.Shared.Mind.Components; using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Components;
using Content.Shared.Pointing; using Content.Shared.Pointing;
namespace Content.Server.Body.Systems; namespace Content.Shared.Body.Systems;
public sealed class BrainSystem : EntitySystem public sealed class BrainSystem : EntitySystem
{ {
@@ -43,4 +43,3 @@ public sealed class BrainSystem : EntitySystem
args.Cancel(); args.Cancel();
} }
} }

View File

@@ -0,0 +1,13 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Ghost;
[RegisterComponent, NetworkedComponent]
public sealed partial class GhostOnMoveComponent : Component
{
[DataField]
public bool CanReturn = true;
[DataField]
public bool MustBeDead;
}

View File

@@ -205,6 +205,7 @@ namespace Content.Shared.Preferences
return new() return new()
{ {
Species = species, Species = species,
Appearance = HumanoidCharacterAppearance.DefaultWithSpecies(species),
}; };
} }

View File

@@ -1,15 +1,19 @@
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Robust.Shared.GameStates;
namespace Content.Shared.Storage.Components; namespace Content.Shared.Storage.Components;
/// <summary> /// <summary>
/// Applies an ongoing pickup area around the attached entity. /// Applies an ongoing pickup area around the attached entity.
/// </summary> /// </summary>
[RegisterComponent, AutoGenerateComponentPause] [RegisterComponent, NetworkedComponent]
[AutoGenerateComponentState]
[AutoGenerateComponentPause]
public sealed partial class MagnetPickupComponent : Component public sealed partial class MagnetPickupComponent : Component
{ {
[ViewVariables(VVAccess.ReadWrite), DataField("nextScan")] [ViewVariables(VVAccess.ReadWrite), DataField("nextScan")]
[AutoPausedField] [AutoPausedField]
[AutoNetworkedField]
public TimeSpan NextScan = TimeSpan.Zero; public TimeSpan NextScan = TimeSpan.Zero;
/// <summary> /// <summary>

View File

@@ -47,6 +47,7 @@ public sealed class MagnetPickupSystem : EntitySystem
continue; continue;
comp.NextScan += ScanDelay; comp.NextScan += ScanDelay;
Dirty(uid, comp);
if (!_inventory.TryGetContainingSlot((uid, xform, meta), out var slotDef)) if (!_inventory.TryGetContainingSlot((uid, xform, meta), out var slotDef))
continue; continue;

View File

@@ -1447,5 +1447,19 @@ Entries:
id: 175 id: 175
time: '2025-09-25T21:43:53.0000000+00:00' time: '2025-09-25T21:43:53.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40246 url: https://github.com/space-wizards/space-station-14/pull/40246
- author: Kowlin
changes:
- message: Adjusted meatspike admin log severities.
type: Tweak
id: 176
time: '2025-10-03T11:31:37.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40604
- author: Kowlin
changes:
- message: Stun prods are now high severity when crafted.
type: Tweak
id: 177
time: '2025-10-05T07:40:15.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40709
Name: Admin Name: Admin
Order: 2 Order: 2

View File

@@ -1,312 +1,4 @@
Entries: Entries:
- author: EmoGarbage404
changes:
- message: You can now patch holes in the floors of the evac shuttle and ATS.
type: Fix
id: 8501
time: '2025-05-17T01:54:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36989
- author: Lanedon
changes:
- message: Multiple head gear now hides the hair !
type: Fix
id: 8502
time: '2025-05-17T05:05:43.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36818
- author: ArtisticRoomba
changes:
- message: Metal foam grenades have been added to station engineer lockers.
type: Add
- message: Metal foam grenades have been tweaked to cover more area over a longer
period of time.
type: Tweak
- message: Metal foam grenades now have a 5 second timer.
type: Tweak
- message: Aluminum foam walls now take one hit to destroy.
type: Tweak
id: 8503
time: '2025-05-17T05:21:24.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37476
- author: EmoGarbage404
changes:
- message: Fixed tetherguns not having a beam when dragging.
type: Fix
id: 8504
time: '2025-05-17T05:22:40.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37510
- author: aada
changes:
- message: Id cards now have the same max length as character names.
type: Fix
id: 8505
time: '2025-05-17T05:27:39.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/35407
- author: ArtisticRoomba
changes:
- message: Radiation collector power output has been buffed. Remember engineers,
the third level on the PA is safe for long term use!
type: Tweak
id: 8506
time: '2025-05-17T07:45:44.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37475
- author: Ilya246
changes:
- message: Shuttles can now deal (weak) collision damage.
type: Add
id: 8507
time: '2025-05-17T17:11:08.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37422
- author: VlaDOS1408
changes:
- message: Fax UI Menu has been reworked and now behaves better on resizing
type: Tweak
id: 8508
time: '2025-05-17T17:20:11.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33825
- author: YotaXP
changes:
- message: Favorites selected in the construction menu will now persist between
rounds.
type: Tweak
id: 8509
time: '2025-05-17T17:37:19.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/35867
- author: perryprog
changes:
- message: You can now link cutter machines to material silos.
type: Tweak
id: 8510
time: '2025-05-18T01:51:58.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37554
- author: Spangs04
changes:
- message: Resprited Telecomms
type: Tweak
id: 8511
time: '2025-05-18T02:10:56.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/35811
- author: EmoGarbage404
changes:
- message: Added the salvage job board! This board allows salvagers to access and
complete a variety of jobs in order to rank up, earn spesos, and unlock new
cargo orders. Work hard and you too may become a Supreme Salvager.
type: Add
id: 8512
time: '2025-05-18T04:02:52.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37549
- author: EmoGarbage404
changes:
- message: Lathes can no longer connect to research servers on separate grids
type: Tweak
id: 8513
time: '2025-05-18T04:04:28.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36821
- author: 0leshe
changes:
- message: Changed max and minimum amount of jigger transfer amount
type: Tweak
id: 8514
time: '2025-05-18T04:14:23.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/35962
- author: ArtisticRoomba
changes:
- message: Air grenades have been added! These can fill up a spaced room of ~30
tiles with fresh air. They can be found in Atmospheric Technician's lockers.
Use them wisely!
type: Add
id: 8515
time: '2025-05-18T04:32:52.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37531
- author: EmoGarbage404
changes:
- message: Various salvage equipment can now be unlocked through the job board and
purchased through cargo.
type: Add
- message: Space debris and the mining asteroid no longer generate salvage equipment
type: Tweak
id: 8516
time: '2025-05-18T06:40:59.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37561
- author: mrjajkes
changes:
- message: Add Blatantly Nuclear as a Nuke Song.
type: Add
id: 8517
time: '2025-05-18T07:30:20.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/35927
- author: metalgearsloth
changes:
- message: Shuttles now are treated as rooved for daylight.
type: Tweak
id: 8518
time: '2025-05-18T07:47:35.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36112
- author: ScarKy0
changes:
- message: Deliveries can now very rarely spawn as bomb-type! They grant A LOT of
spesos... at a price.
type: Add
id: 8519
time: '2025-05-18T08:57:23.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37069
- author: ScarKy0
changes:
- message: Aloxadone has been tweaked. The recipe has been altered to be simplier
to make and the healing values have been increased.
type: Tweak
id: 8523
time: '2025-05-18T09:16:14.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37239
- author: Simyon
changes:
- message: The Syndicate and Wizard Communications Console now no longer show who
the message was sent by.
type: Tweak
id: 8524
time: '2025-05-18T09:18:18.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37567
- author: SuperGDPWYL
changes:
- message: A Lone Operative detonating the nuke on-station will now end the round.
type: Add
- message: The endscreen will now properly show how successful Lone Operatives were.
type: Fix
id: 8525
time: '2025-05-18T11:34:33.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36498
- author: metalgearsloth
changes:
- message: Fixes being able to grab items through walls.
type: Fix
id: 8526
time: '2025-05-18T14:38:32.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37570
- author: qwerltaz
changes:
- message: Water vapor is now dangerous to slime life-forms.
type: Add
id: 8527
time: '2025-05-18T22:55:40.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32751
- author: slarticodefast
changes:
- message: Added a new keybind for swapping hands in the other direction (if you
got more than two). Defaults to Shift+X. Useful for cycling through borg modules.
type: Add
id: 8528
time: '2025-05-19T01:17:35.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37588
- author: keronshb
changes:
- message: Force Wall timers changed so it despawns faster than it can be cast.
type: Tweak
- message: Force Wall users can now interact while inside of the wall, but also
can be attacked while inside of the wall.
type: Tweak
id: 8529
time: '2025-05-19T01:30:46.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37525
- author: Samuka
changes:
- message: Holy water now evaporates.
type: Fix
id: 8530
time: '2025-05-19T16:14:40.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37611
- author: aada
changes:
- message: Pepper makes you cough.
type: Add
id: 8531
time: '2025-05-19T18:23:38.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36358
- author: Entvari
changes:
- message: Hyper Capacity Powercells are now available as Tier 3 Industrial Research.
type: Add
- message: The Tier 3 Industrial Research 'Portable Fission' has been renamed to
Optimized Microgalvanism to better reflect this.
type: Tweak
id: 8532
time: '2025-05-19T22:35:08.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37619
- author: RedBookcase
changes:
- message: The Salvage section of the guidebook has been updated.
type: Fix
id: 8533
time: '2025-05-19T22:39:23.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37593
- author: SpeltIncorrectyl
changes:
- message: Kammerer now has a tighter spread to compensate for its lower rate of
fire.
type: Tweak
id: 8534
time: '2025-05-19T22:45:18.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37616
- author: Pronana
changes:
- message: Galoshes now slow on puddles again
type: Fix
id: 8535
time: '2025-05-20T02:47:03.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37628
- author: slarticodefast
changes:
- message: Added a reduced motion version of the seeing rainbows overlay.
type: Add
id: 8536
time: '2025-05-20T12:36:08.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37584
- author: B-Kirill
changes:
- message: Added new fun meteors variations (Cosmic cow, Honksteroid, Space potato)
that drop unique loot upon destruction. Urist McMeteor now shatters into meat
when explodes.
type: Add
id: 8537
time: '2025-05-20T13:04:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37327
- author: Kittygyat
changes:
- message: Added a new, faster way for slimepeople to access their own special inventory,
with LMB.
type: Add
id: 8538
time: '2025-05-20T16:55:21.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37592
- author: FrostWinters
changes:
- message: Histamines no longer cause radiation.
type: Tweak
- message: Epinephrine treats Histamines above OD threshold.
type: Tweak
id: 8544
time: '2025-05-21T01:12:54.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37460
- author: Minty642
changes:
- message: Added fungal soil, maintenance version of hydroponics.
type: Add
id: 8545
time: '2025-05-21T04:59:51.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36245
- author: metalgearsloth
changes:
- message: Picking up items with area pickups (e.g. trash bags) no longer lags the
game.
type: Fix
id: 8546
time: '2025-05-21T06:16:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37638
- author: Errant
changes:
- message: High-energy shuttle impacts now deal much less damage.
type: Tweak
id: 8547
time: '2025-05-21T10:37:36.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37578
- author: metalgearsloth - author: metalgearsloth
changes: changes:
- message: Shuttle impact force is now proportional to direction of impact. - message: Shuttle impact force is now proportional to direction of impact.
@@ -3963,3 +3655,307 @@
id: 9011 id: 9011
time: '2025-09-27T17:01:14.0000000+00:00' time: '2025-09-27T17:01:14.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39914 url: https://github.com/space-wizards/space-station-14/pull/39914
- author: SignalSender
changes:
- message: reworked salv instrument spawns to include more instruments
type: Tweak
id: 9012
time: '2025-09-27T20:51:52.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40572
- author: keronshb
changes:
- message: 'EXPERIMENTAL: Tasers, a short-ranged gun capable of causing targets
to become prone, are now added into Warden, HoS, and Security locker fills.'
type: Add
id: 9013
time: '2025-09-27T21:21:05.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39087
- author: SurrealShibe
changes:
- message: Vulpkanin now audibly gasp.
type: Fix
id: 9014
time: '2025-09-28T03:25:39.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40579
- author: keronshb
changes:
- message: Tasers can now be used by Pacifists.
type: Tweak
id: 9015
time: '2025-09-28T03:43:02.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40588
- author: beck-thompson
changes:
- message: Labelers can no longer add markup tags to items
type: Fix
id: 9016
time: '2025-09-28T18:33:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40600
- author: SirWarock
changes:
- message: Fixed Shotgun Ammo Count not properly updating when reloading!
type: Fix
id: 9017
time: '2025-09-29T10:28:45.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40568
- author: BoskiYourk, spanky_spanky
changes:
- message: Microwaves can now be picked up when unwrenched, and optionally, used
as a weapon.
type: Tweak
id: 9018
time: '2025-09-30T21:55:10.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40618
- author: leahcat
changes:
- message: moved desoxyephedrine from ambrosia plants to glasstle.
type: Tweak
id: 9019
time: '2025-10-01T04:05:41.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40638
- author: SignalSender
changes:
- message: Musicians now have a Stage Name
type: Tweak
id: 9020
time: '2025-10-01T11:46:34.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40640
- author: Velcroboy
changes:
- message: Shutters, blast doors, and lights can now be linked using the "Link Defaults"
button.
type: Tweak
id: 9021
time: '2025-10-01T20:22:50.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37690
- author: YoungThugSS14
changes:
- message: The Prisoner Eva Suit now has the same stats as an emergency eva suit.
type: Tweak
id: 9022
time: '2025-10-01T20:23:37.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36696
- author: K-Dynamic
changes:
- message: Puddles now spill over at 50u instead of 20u.
type: Add
id: 9023
time: '2025-10-01T20:28:13.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/38044
- author: Mixelz
changes:
- message: Circuit Totes, a new type of box to compactly carry conspicous chunks
of Circuits!
type: Add
- message: Head Lockers now compact all circuit boards & stamps into boxes for convenience.
type: Tweak
- message: The Surplus Circuit Crate is now a Tote!
type: Tweak
id: 9024
time: '2025-10-01T23:22:33.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39868
- author: sudobeans
changes:
- message: utility knife, which can be made in the autolathe.
type: Add
id: 9025
time: '2025-10-02T09:02:36.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39567
- author: kosticia
changes:
- message: Anomalies with inconsistent particles no longer shuffle right before
collision with particle.
type: Fix
id: 9026
time: '2025-10-02T20:11:25.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40624
- author: archee1
changes:
- message: Material doors now have destruction sounds and will drop a portion of
their construction materials when destroyed.
type: Add
- message: Material doors now have reduced health, resistances, construction time,
and construction costs
type: Tweak
id: 9027
time: '2025-10-02T22:47:11.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/36597
- author: PJB3005
changes:
- message: You can stuff the nuke disk in plushies now.
type: Tweak
id: 9028
time: '2025-10-03T09:53:41.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40674
- author: Crude Oil
changes:
- message: Returned PDA lights to original brightness
type: Fix
id: 9029
time: '2025-10-03T20:33:25.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40687
- author: NoreUhh
changes:
- message: The Syndicate Cyborg Martyr Module can now be used multiple times.
type: Tweak
id: 9030
time: '2025-10-03T23:35:01.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40224
- author: K-Dynamic
changes:
- message: Adds smart equip function to pocket 1, pocket 2, and suit storage slots.
Default binds are Shift+F and Shift+G for first and second pocket, Shift+H for
suit storage.
type: Add
id: 9031
time: '2025-10-04T01:44:30.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/37975
- author: AwareFoxy
changes:
- message: Added Pride-O-Mat to marathon!
type: Add
id: 9032
time: '2025-10-04T16:50:52.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40696
- author: Moomoobeef
changes:
- message: Evac directional signs now glow in the dark!
type: Tweak
id: 9033
time: '2025-10-04T20:27:15.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/38545
- author: NoreUhh
changes:
- message: The Ian suit makes you bark now. Woof!
type: Tweak
id: 9034
time: '2025-10-05T08:06:06.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40694
- author: Princess-Cheeseballs
changes:
- message: Incendiary rounds now deal a mix of pierce damage and heat damage instead
of primarily heat damage.
type: Tweak
id: 9035
time: '2025-10-05T08:38:36.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39204
- author: Centronias
changes:
- message: Stirring is once again prioritized over drinking. No longer will your
bartender be very tempted to taste test your drink as they stir it.
type: Fix
id: 9036
time: '2025-10-05T22:12:24.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40704
- author: jessicamaybe
changes:
- message: Skeletons are now playable instruments!
type: Add
id: 9037
time: '2025-10-07T00:59:20.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40009
- author: Huaqas, Davyei
changes:
- message: 3 new Holy Books have been added to the Chaplain's loadout.
type: Add
id: 9038
time: '2025-10-07T07:39:37.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39181
- author: Huaqas
changes:
- message: The Tanakh and Satanic bibles have been removed.
type: Remove
id: 9039
time: '2025-10-07T09:14:49.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39698
- author: jessicamaybe
changes:
- message: Gorillas can now pull objects.
type: Tweak
id: 9040
time: '2025-10-07T09:31:46.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40700
- author: SurrealShibe
changes:
- message: Added the nutri-batard to mime survival boxes in place of the nutri-brick.
type: Add
id: 9041
time: '2025-10-07T10:18:50.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40601
- author: Lordbrandon12
changes:
- message: Fixed issue allowing space heater temperature to be set above the allowed
limit.
type: Fix
id: 9042
time: '2025-10-07T12:53:59.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40453
- author: IProduceWidgets
changes:
- message: Vox that take excessive amounts of fire damage will now burn into fried
chicken.
type: Tweak
id: 9043
time: '2025-10-07T14:12:25.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40115
- author: BoskiYourk, spanky_spanky
changes:
- message: The Head of Security now has an energy magnum, a self-charging multi-mode
laser revolver, in their locker instead of the energy shotgun.
type: Add
- message: The Warden now has the energy shotgun in their locker round-start.
type: Tweak
id: 9044
time: '2025-10-07T16:05:07.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40615
- author: FungiFellow
changes:
- message: Cancer Mice now have unique ghost role entries.
type: Tweak
id: 9045
time: '2025-10-07T16:33:42.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40102
- author: FungiFellow
changes:
- message: Biosuits can now fit Gastanks in Suit Storage, the Security Biosuit can
fit both Gastanks and Weapons
type: Add
- message: Security Biosuits Cost has been increased 800->1600
type: Tweak
id: 9046
time: '2025-10-07T18:22:07.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/39888
- author: Hitlinemoss
changes:
- message: MRE wrappers are no longer twice as nutritious as the actual food within.
type: Fix
id: 9047
time: '2025-10-07T19:36:32.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40761
- author: TrixxedHeart
changes:
- message: 'Added new markings for Vox: 3 new beak types, 2 beak markings, 1 overlay
6 head, and 3 chest markings.'
type: Add
- message: Fixed sprite layering issue where a Vox's back leg would appear on top
of their front leg in side sprites.
type: Fix
id: 9048
time: '2025-10-07T23:14:11.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40569
- author: Hitlinemoss
changes:
- message: Bartenders with a significant amount of playtime can now select a golden
shaker in the loadout menu.
type: Add
id: 9049
time: '2025-10-07T23:37:43.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40762
- author: SlamBamActionman
changes:
- message: The Energy Shotgun no longer has a self-recharge or wide fire mode, but
charges faster in rechargers.
type: Tweak
id: 9050
time: '2025-10-08T02:51:21.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40757

View File

@@ -731,4 +731,22 @@
id: 88 id: 88
time: '2025-09-25T21:36:16.0000000+00:00' time: '2025-09-25T21:36:16.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40546 url: https://github.com/space-wizards/space-station-14/pull/40546
- author: Absotively
changes:
- message: Updated Elkridge's burn chambers for safer delta pressure handling
type: Tweak
id: 89
time: '2025-09-30T03:45:17.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40590
- author: ToastEnjoyer
changes:
- message: On Marathon, added various improvements to engineering, parts of maints,
and some service improvements.
type: Tweak
- message: On Marathon, the security front has been fixed so that power is there
roundstart.
type: Fix
id: 90
time: '2025-10-07T02:21:21.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/40725
Order: 1 Order: 1

View File

@@ -1,5 +1,5 @@
discord-round-notifications-new = A new round is starting! discord-round-notifications-new = A new round is starting!
discord-round-notifications-started = Round #{$id} on map "{$map}" started. discord-round-notifications-started = Round #{$id} on map "{$map}" started.
discord-round-notifications-end = Round #{$id} has ended. It lasted for {$hours} hours, {$minutes} minutes, and {$seconds} seconds. discord-round-notifications-end = Round #{$id} has ended. It lasted for {$hours} hours, {$minutes} minutes, and {$seconds} seconds.
discord-round-notifications-end-ping = <@&{$roleId}>, the server will reboot shortly! discord-round-notifications-end-ping = <@&{$roleId}>, a new round will start soon!
discord-round-notifications-unknown-map = Unknown discord-round-notifications-unknown-map = Unknown

View File

@@ -32,6 +32,9 @@ ghost-role-information-silicon-rules = You are a [color={role-type-silicon-color
ghost-role-information-mouse-name = Mouse ghost-role-information-mouse-name = Mouse
ghost-role-information-mouse-description = A hungry and mischievous mouse. ghost-role-information-mouse-description = A hungry and mischievous mouse.
ghost-role-information-cancer-mouse-name = Cancer Mouse
ghost-role-information-cancer-mouse-description = An irradiated mouse, spread your affliction and seek food.
ghost-role-information-mothroach-name = Mothroach ghost-role-information-mothroach-name = Mothroach
ghost-role-information-mothroach-description = A cute but mischievous mothroach. ghost-role-information-mothroach-description = A cute but mischievous mothroach.

View File

@@ -1,14 +1,62 @@
marking-TattooVoxNightlingHead-tattoo_nightling_head = Vox Head Tattoo (Nightling)
marking-TattooVoxNightlingHead = Vox Head Tattoo (Nightling)
marking-TattooVoxArrowHead-tattoo_arrow_head = Vox Head Tattoo (Arrow)
marking-TattooVoxArrowHead = Vox Head Tattoo (Arrow)
marking-VoxTattooEyeliner-eyeliner = Eyeliner
marking-VoxTattooEyeliner = Eyeliner
marking-VoxVisage-visage = Visage (Full)
marking-VoxVisage = Visage (Full)
marking-VoxVisageL-visage_l = Visage (Left)
marking-VoxVisageL = Visage (Left)
marking-VoxVisageR-visage_r = Visage (Right)
marking-VoxVisageR = Visage (Right)
marking-VoxCheek-cheekblush = Cheeks
marking-VoxCheek = Cheeks
marking-VoxBeak-beak = Beak (Pointed)
marking-VoxBeak = Beak (Pointed)
marking-VoxBeakSquareCere-beak_squarecere = Beak (Square Cere)
marking-VoxBeakSquareCere = Beak (Square Cere)
marking-VoxBeakHooked-beak_hooked = Beak (Hooked)
marking-VoxBeakHooked = Beak (Hooked)
marking-VoxBeakShaved-beak_shaved = Beak (Shaved)
marking-VoxBeakShaved = Beak (Shaved)
marking-VoxBeakCoverTip-beakcover_tip = Beak Tip
marking-VoxBeakCoverTip = Beak Tip
marking-VoxBeakCoverStripe-beakcover_stripe = Beak Stripe
marking-VoxBeakCoverStripe = Beak Stripe
marking-TattooVoxHeartLeftArm-heart_l_arm = Vox Left Arm Tattoo (Heart) marking-TattooVoxHeartLeftArm-heart_l_arm = Vox Left Arm Tattoo (Heart)
marking-TattooVoxHeartLeftArm = Vox Left Arm Tattoo (Heart) marking-TattooVoxHeartLeftArm = Vox Left Arm Tattoo (Heart)
marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart) marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart)
marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart) marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart)
marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (hive) marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (Hive)
marking-TattooVoxHiveChest = Vox Chest Tattoo (hive) marking-TattooVoxHiveChest = Vox Chest Tattoo (Hive)
marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (nightling) marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (Nightling)
marking-TattooVoxNightlingChest = Vox Chest Tattoo (nightling) marking-TattooVoxNightlingChest = Vox Chest Tattoo (Nightling)
marking-TattooVoxNightbelt-nightbelt = Vox Stomach Tattoo (Nightling)
marking-TattooVoxNightbelt = Vox Stomach Tattoo (Nightling)
marking-TattooVoxChestV-night_v = Vox Chest Tattoo (V Shape)
marking-TattooVoxChestV = Vox Chest Tattoo (V Shape)
marking-TattooVoxUnderbelly-underbelly = Underbelly
marking-TattooVoxUnderbelly = Underbelly
marking-VoxScarEyeRight-vox_scar_eye_right = Right Eye Scar marking-VoxScarEyeRight-vox_scar_eye_right = Right Eye Scar
marking-VoxScarEyeRight = Eye Scar (Right) marking-VoxScarEyeRight = Eye Scar (Right)

View File

@@ -11,7 +11,7 @@ steal-target-groups-captain-id-card = captain ID card
steal-target-groups-jetpack-captain-filled = captain's jetpack steal-target-groups-jetpack-captain-filled = captain's jetpack
steal-target-groups-weapon-antique-laser = antique laser pistol steal-target-groups-weapon-antique-laser = antique laser pistol
steal-target-groups-nuke-disk = nuclear authentication disk steal-target-groups-nuke-disk = nuclear authentication disk
steal-target-groups-weapon-energy-shot-gun = energy shotgun steal-target-groups-weapon-energy-magnum = energy magnum
# Thief Collection # Thief Collection
steal-target-groups-figurines = figurine steal-target-groups-figurines = figurine

View File

@@ -43,6 +43,7 @@ loadout-group-passenger-neck = Passenger neck
loadout-group-bartender-head = Bartender head loadout-group-bartender-head = Bartender head
loadout-group-bartender-jumpsuit = Bartender jumpsuit loadout-group-bartender-jumpsuit = Bartender jumpsuit
loadout-group-bartender-outerclothing = Bartender outer clothing loadout-group-bartender-outerclothing = Bartender outer clothing
loadout-group-bartender-shaker = Bartender shaker
loadout-group-chef-head = Chef head loadout-group-chef-head = Chef head
loadout-group-chef-mask = Chef mask loadout-group-chef-mask = Chef mask

File diff suppressed because it is too large Load Diff

View File

@@ -54,7 +54,7 @@
sprite: Clothing/Head/Hoods/Bio/security.rsi sprite: Clothing/Head/Hoods/Bio/security.rsi
state: icon state: icon
product: CrateSecurityBiosuit product: CrateSecurityBiosuit
cost: 800 cost: 1600
category: cargoproduct-category-name-security category: cargoproduct-category-name-security
group: market group: market

View File

@@ -183,6 +183,7 @@
- id: DrinkWaterBottleFull - id: DrinkWaterBottleFull
- type: Tag - type: Tag
tags: tags:
- BoxCardboard
- BoxHug - BoxHug
- type: entity - type: entity
@@ -212,7 +213,7 @@
- id: EmergencyOxygenTankFilled - id: EmergencyOxygenTankFilled
- id: EmergencyMedipen - id: EmergencyMedipen
- id: Flare - id: Flare
- id: FoodSnackNutribrick - id: FoodBreadNutriBatard
- id: DrinkWaterBottleFull - id: DrinkWaterBottleFull
- type: entity - type: entity
@@ -226,7 +227,7 @@
- id: EmergencyNitrogenTankFilled - id: EmergencyNitrogenTankFilled
- id: EmergencyMedipen - id: EmergencyMedipen
- id: Flare - id: Flare
- id: FoodSnackNutribrick - id: FoodBreadNutriBatard
- id: DrinkWaterBottleFull - id: DrinkWaterBottleFull
- type: Sprite - type: Sprite
layers: layers:
@@ -246,7 +247,7 @@
- id: EmergencyOxygenTankFilled - id: EmergencyOxygenTankFilled
- id: EmergencyMedipen - id: EmergencyMedipen
- id: Flare - id: Flare
- id: FoodSnackNutribrick - id: FoodBreadCottonNutriBatard
- id: DrinkWaterBottleFull - id: DrinkWaterBottleFull
- type: entity - type: entity

View File

@@ -408,7 +408,7 @@
- type: Storage - type: Storage
grid: grid:
- 0,0,5,3 - 0,0,5,3
whitelist: whitelist: # TODO cardboard boxes shouldn't have whitelisting
tags: tags:
- Candle - Candle
- type: StorageFill - type: StorageFill

View File

@@ -102,7 +102,7 @@
layers: layers:
- state: box - state: box
- state: bodybags - state: bodybags
- type: Storage - type: Storage # TODO cardboard boxes shouldn't have whitelisting
whitelist: whitelist:
tags: tags:
- BodyBag - BodyBag

View File

@@ -308,7 +308,7 @@
id: LockerFillHeadOfSecurityNoHardsuit id: LockerFillHeadOfSecurityNoHardsuit
table: !type:AllSelector table: !type:AllSelector
children: children:
- id: WeaponEnergyShotgun - id: WeaponEnergyMagnum
- id: BookSpaceLaw - id: BookSpaceLaw
- id: BoxEncryptionKeySecurity - id: BoxEncryptionKeySecurity
- id: CigarGoldCase - id: CigarGoldCase

View File

@@ -46,6 +46,7 @@
amount: 2 amount: 2
- id: NetworkConfigurator - id: NetworkConfigurator
- id: Binoculars - id: Binoculars
- id: WeaponEnergyShotgun
- type: entityTable - type: entityTable
id: FillLockerWardenHarduit id: FillLockerWardenHarduit

View File

@@ -1,5 +1,5 @@
- type: entity - type: entity
parent: ClothingOuterBaseLarge parent: [ClothingOuterBaseLarge, AllowSuitStorageClothingGasTanks]
id: ClothingOuterBioGeneral id: ClothingOuterBioGeneral
name: bio suit name: bio suit
suffix: Generic suffix: Generic
@@ -64,7 +64,7 @@
sprite: Clothing/OuterClothing/Bio/scientist.rsi sprite: Clothing/OuterClothing/Bio/scientist.rsi
- type: entity - type: entity
parent: [ClothingOuterBioGeneral, BaseSecurityContraband] parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseSecurityContraband]
id: ClothingOuterBioSecurity id: ClothingOuterBioSecurity
name: bio suit name: bio suit
suffix: Security suffix: Security
@@ -82,6 +82,10 @@
Piercing: 0.8 Piercing: 0.8
- type: ZombificationResistance - type: ZombificationResistance
zombificationResistanceCoefficient: 0.4 zombificationResistanceCoefficient: 0.4
- type: GroupExamine
- type: ClothingSpeedModifier
walkModifier: 0.95
sprintModifier: 0.95
- type: entity - type: entity
parent: ClothingOuterBioGeneral parent: ClothingOuterBioGeneral

View File

@@ -13,6 +13,52 @@
!type:SimpleColoring !type:SimpleColoring
color: "#937e3d" color: "#937e3d"
- type: marking
# The cere is the base of the top part of the beak, the cere on this beak, is a square.
id: VoxBeakSquareCere
bodyPart: Snout
markingCategory: Snout
forcedColoring: true
speciesRestriction: [Vox]
sprites:
- sprite: Mobs/Customization/vox_parts.rsi
state: beak_squarecere
coloring:
default:
type:
!type:SimpleColoring
color: "#937e3d"
- type: marking
id: VoxBeakShaved
bodyPart: Snout
markingCategory: Snout
forcedColoring: true
speciesRestriction: [Vox]
sprites:
- sprite: Mobs/Customization/vox_parts.rsi
state: beak_shaved
coloring:
default:
type:
!type:SimpleColoring
color: "#937e3d"
- type: marking
id: VoxBeakHooked
bodyPart: Snout
markingCategory: Snout
forcedColoring: true
speciesRestriction: [Vox]
sprites:
- sprite: Mobs/Customization/vox_parts.rsi
state: beak_hooked
coloring:
default:
type:
!type:SimpleColoring
color: "#937e3d"
- type: marking - type: marking
id: VoxLArmScales id: VoxLArmScales
bodyPart: LArm bodyPart: LArm

View File

@@ -54,6 +54,50 @@
- sprite: Mobs/Customization/vox_tattoos.rsi - sprite: Mobs/Customization/vox_tattoos.rsi
state: nightling_s state: nightling_s
- type: marking
id: TattooVoxNightbelt
bodyPart: Chest
markingCategory: Chest
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: nightbelt
- type: marking
id: TattooVoxChestV
bodyPart: Chest
markingCategory: Chest
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: chest_v_1
- sprite: Mobs/Customization/vox_tattoos.rsi
state: chest_v_2
- type: marking
id: TattooVoxUnderbelly
bodyPart: Chest
markingCategory: Chest
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: underbelly
- type: marking - type: marking
id: TattooVoxTailRing id: TattooVoxTailRing
# TODO // Looks off on some tails (i.e docked/amputated), if conditionals for markings ever get implemented this needs to be updated to account for those. # TODO // Looks off on some tails (i.e docked/amputated), if conditionals for markings ever get implemented this needs to be updated to account for those.
@@ -131,3 +175,125 @@
sprites: sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi - sprite: Mobs/Customization/vox_tattoos.rsi
state: eyeshadow_large state: eyeshadow_large
- type: marking
id: VoxTattooEyeliner
bodyPart: Eyes
markingCategory: Overlay
speciesRestriction: [Vox]
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: eyeliner
- type: marking
id: VoxBeakCoverStripe
bodyPart: Snout
markingCategory: SnoutCover
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
speciesRestriction: [Vox]
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: beakcover_stripe
- type: marking
id: VoxBeakCoverTip
bodyPart: Snout
markingCategory: SnoutCover
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
speciesRestriction: [Vox]
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: beakcover_tip
- type: marking
id: TattooVoxArrowHead
bodyPart: Head
markingCategory: Head
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: tattoo_arrow_head
- type: marking
id: TattooVoxNightlingHead
bodyPart: Head
markingCategory: Head
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: tattoo_nightling_head
- type: marking
id: VoxVisage
bodyPart: Head
markingCategory: Head
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: visage
- type: marking
id: VoxVisageL
bodyPart: Head
markingCategory: Head
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: visage_l
- type: marking
id: VoxVisageR
bodyPart: Head
markingCategory: Head
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: visage_r
- type: marking
id: VoxCheek
bodyPart: Head
markingCategory: Head
speciesRestriction: [Vox]
coloring:
default:
type:
!type:TattooColoring
fallbackColor: "#666666"
sprites:
- sprite: Mobs/Customization/vox_tattoos.rsi
state: cheekblush

View File

@@ -1215,6 +1215,8 @@
true true
NavSmash: !type:Bool NavSmash: !type:Bool
true true
- type: Puller
needsHands: false
- type: Prying - type: Prying
pryPowered: true pryPowered: true
force: true force: true
@@ -1978,6 +1980,12 @@
parent: MobMouse parent: MobMouse
id: MobMouseCancer id: MobMouseCancer
components: components:
- type: GhostRole
name: ghost-role-information-cancer-mouse-name
description: ghost-role-information-cancer-mouse-description
rules: ghost-role-information-freeagent-rules
mindRoles:
- MindRoleGhostRoleFreeAgent
- type: Sprite - type: Sprite
color: LightGreen color: LightGreen
- type: PointLight - type: PointLight

View File

@@ -76,7 +76,7 @@
components: components:
- type: Spectral - type: Spectral
- type: Tag - type: Tag
tags: tags: # BAD: Intentional removal of inherited tag
- AllowGhostShownByEvent - AllowGhostShownByEvent
- type: entity - type: entity

View File

@@ -109,6 +109,24 @@
32: 32:
sprite: Mobs/Species/Human/displacement.rsi sprite: Mobs/Species/Human/displacement.rsi
state: jumpsuit-female state: jumpsuit-female
- type: Instrument
program: 13 # Xylophone. Woodblock is 115 (another good option)
- type: ActivatableUI
blockSpectators: true # otherwise they can play client-side music
inHandsOnly: false
singleUser: true
requiresComplex: true
verbOnly: true
verbText: verb-instrument-openui
key: enum.InstrumentUiKey.Key
- type: UserInterface
interfaces:
enum.InstrumentUiKey.Key:
type: InstrumentBoundUserInterface
enum.HumanoidMarkingModifierKey.Key:
type: HumanoidMarkingModifierBoundUserInterface
enum.StrippingUiKey.Key:
type: StrippableBoundUserInterface
- type: entity - type: entity
parent: BaseSpeciesDummy parent: BaseSpeciesDummy

View File

@@ -30,6 +30,44 @@
- type: Damageable - type: Damageable
damageContainer: Biological damageContainer: Biological
damageModifierSet: Vox damageModifierSet: Vox
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 400
behaviors:
- !type:GibBehavior { }
- trigger:
!type:DamageTypeTrigger
damageType: Heat
damage: 1500
behaviors:
- !type:SpawnEntitiesBehavior
spawnInContainer: true
spawn:
FoodMeatChickenFriedVox:
min: 3
max: 5
- !type:BurnBodyBehavior { }
- !type:PlaySoundBehavior
sound:
collection: MeatLaserImpact
- trigger:
!type:DamageTypeTrigger
damageType: Radiation
damage: 15
behaviors:
- !type:PopupBehavior
popup: mouth-taste-metal
popupType: LargeCaution
targetOnly: true
- trigger:
!type:DamageTypeTrigger
damageType: Radiation
damage: 40
behaviors:
- !type:VomitBehavior
- type: PassiveDamage - type: PassiveDamage
# Augment normal health regen to be able to tank some Poison damage # Augment normal health regen to be able to tank some Poison damage
# This allows Vox to take their mask off temporarily to eat something without needing a trip to medbay afterwards. # This allows Vox to take their mask off temporarily to eat something without needing a trip to medbay afterwards.

View File

@@ -91,7 +91,7 @@
# map: ["enum.OpenableVisuals.Layer"] # map: ["enum.OpenableVisuals.Layer"]
## Bases for visuals ## Bases for visuals
# TODO standardize state names for fill levels and openable visuals # New drinks should mirror these state names to reduce clutter when creating new prototypes
# Basic visualizer for an openable entity. Requires DrinkBaseOpenable # Basic visualizer for an openable entity. Requires DrinkBaseOpenable
- type: entity - type: entity
@@ -103,13 +103,14 @@
visuals: visuals:
enum.OpenableVisuals.Opened: enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer: enum.OpenableVisuals.Layer:
True: {state: "icon_open"} True: {state: "icon_open"} # lid off
False: {state: "icon"} False: {state: "icon"} # lid on
- type: Sprite - type: Sprite
layers: layers:
- state: icon - state: icon
map: ["enum.OpenableVisuals.Layer"] map: ["enum.OpenableVisuals.Layer"]
- type: ExaminableSolution - type: ExaminableSolution
solution: *sol
examinableWhileClosed: false # If you can't see the fill levels on the sprite, we can assume it's opaque examinableWhileClosed: false # If you can't see the fill levels on the sprite, we can assume it's opaque
heldOnly: true # If it's opaque, you probably can't see through the open lid from a distance heldOnly: true # If it's opaque, you probably can't see through the open lid from a distance
@@ -121,11 +122,12 @@
- type: Appearance - type: Appearance
- type: Sprite - type: Sprite
layers: layers:
- state: icon_empty - state: icon
- state: fill-1 - state: fill-1
map: ["enum.SolutionContainerLayers.Fill"] map: ["enum.SolutionContainerLayers.Fill"]
visible: false visible: false
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
solutionName: *sol
maxFillLevels: 5 maxFillLevels: 5
fillBaseName: fill- fillBaseName: fill-
inHandsMaxFillLevels: 3 inHandsMaxFillLevels: 3
@@ -139,7 +141,7 @@
components: components:
- type: Sprite - type: Sprite
layers: layers:
- state: icon_empty - state: icon
map: [ "enum.SolutionContainerLayers.Base" ] map: [ "enum.SolutionContainerLayers.Base" ]
- state: fill-1 - state: fill-1
map: [ "enum.SolutionContainerLayers.Fill" ] map: [ "enum.SolutionContainerLayers.Fill" ]
@@ -169,8 +171,8 @@
visuals: visuals:
enum.OpenableVisuals.Opened: enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer: enum.OpenableVisuals.Layer:
True: {state: "icon_open"} True: {state: "icon_open"} # lid off
False: {state: "icon_empty"} False: {state: "icon_empty"} # lid on
- type: Sprite - type: Sprite
layers: layers:
- state: icon_empty - state: icon_empty

View File

@@ -106,7 +106,7 @@
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/alco-bottle.rsi sprite: Objects/Consumable/Drinks/alco-bottle.rsi
layers: layers:
- state: icon_blue # todo add "icon_empty" state - state: icon_empty
map: ["enum.OpenableVisuals.Layer"] map: ["enum.OpenableVisuals.Layer"]
- state: fill-6 - state: fill-6
map: ["enum.SolutionContainerLayers.Fill"] map: ["enum.SolutionContainerLayers.Fill"]
@@ -260,7 +260,7 @@
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/alco-bottle.rsi sprite: Objects/Consumable/Drinks/alco-bottle.rsi
layers: layers:
- state: icon_green # todo icon_empty - state: icon_empty
map: ["enum.OpenableVisuals.Layer"] map: ["enum.OpenableVisuals.Layer"]
- state: fill-6 - state: fill-6
map: ["enum.SolutionContainerLayers.Fill"] map: ["enum.SolutionContainerLayers.Fill"]

View File

@@ -9,7 +9,7 @@
solutions: solutions:
drink: drink:
maxVol: 30 maxVol: 30
grindable: grindable: &grindable
reagents: # 5u -> 1/2 steel sheet (10u) reagents: # 5u -> 1/2 steel sheet (10u)
- ReagentId: Aluminium # Fun fact: soda can makeup is approx. 75% aluminium and 25% tin/iron. - ReagentId: Aluminium # Fun fact: soda can makeup is approx. 75% aluminium and 25% tin/iron.
Quantity: 4 Quantity: 4
@@ -51,12 +51,7 @@
reagents: reagents:
- ReagentId: Cola - ReagentId: Cola
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Tag - type: Tag
tags: tags:
- Cola - Cola
@@ -76,12 +71,7 @@
solutions: solutions:
drink: drink:
maxVol: 30 maxVol: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Tag - type: Tag
tags: tags:
- Cola - Cola
@@ -101,12 +91,7 @@
reagents: reagents:
- ReagentId: IcedTea - ReagentId: IcedTea
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/ice_tea_can.rsi sprite: Objects/Consumable/Drinks/ice_tea_can.rsi
- type: Item - type: Item
@@ -125,12 +110,7 @@
reagents: reagents:
- ReagentId: LemonLime - ReagentId: LemonLime
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/lemon-lime.rsi sprite: Objects/Consumable/Drinks/lemon-lime.rsi
- type: Item - type: Item
@@ -149,12 +129,7 @@
reagents: reagents:
- ReagentId: LemonLimeCranberry - ReagentId: LemonLimeCranberry
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi
- type: Item - type: Item
@@ -206,12 +181,7 @@
reagents: reagents:
- ReagentId: GrapeSoda - ReagentId: GrapeSoda
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/purple_can.rsi sprite: Objects/Consumable/Drinks/purple_can.rsi
- type: Item - type: Item
@@ -230,12 +200,7 @@
reagents: reagents:
- ReagentId: RootBeer - ReagentId: RootBeer
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/rootbeer.rsi sprite: Objects/Consumable/Drinks/rootbeer.rsi
- type: Item - type: Item
@@ -258,12 +223,7 @@
reagents: reagents:
- ReagentId: SodaWater - ReagentId: SodaWater
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/sodawater.rsi sprite: Objects/Consumable/Drinks/sodawater.rsi
- type: Item - type: Item
@@ -282,12 +242,7 @@
reagents: reagents:
- ReagentId: SpaceMountainWind - ReagentId: SpaceMountainWind
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi
- type: Item - type: Item
@@ -306,12 +261,7 @@
reagents: reagents:
- ReagentId: SpaceUp - ReagentId: SpaceUp
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/space-up.rsi sprite: Objects/Consumable/Drinks/space-up.rsi
- type: Item - type: Item
@@ -330,12 +280,7 @@
reagents: reagents:
- ReagentId: SolDry - ReagentId: SolDry
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/sol_dry.rsi sprite: Objects/Consumable/Drinks/sol_dry.rsi
- type: Item - type: Item
@@ -354,12 +299,7 @@
reagents: reagents:
- ReagentId: Starkist - ReagentId: Starkist
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/starkist.rsi sprite: Objects/Consumable/Drinks/starkist.rsi
- type: Item - type: Item
@@ -378,12 +318,7 @@
reagents: reagents:
- ReagentId: TonicWater - ReagentId: TonicWater
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/tonic.rsi sprite: Objects/Consumable/Drinks/tonic.rsi
- type: Item - type: Item
@@ -402,12 +337,7 @@
reagents: reagents:
- ReagentId: FourteenLoko - ReagentId: FourteenLoko
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/fourteen_loko.rsi sprite: Objects/Consumable/Drinks/fourteen_loko.rsi
- type: Item - type: Item
@@ -426,12 +356,7 @@
reagents: reagents:
- ReagentId: ChangelingSting - ReagentId: ChangelingSting
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/changelingsting.rsi sprite: Objects/Consumable/Drinks/changelingsting.rsi
- type: Item - type: Item
@@ -450,12 +375,7 @@
reagents: reagents:
- ReagentId: DrGibb - ReagentId: DrGibb
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/dr_gibb.rsi sprite: Objects/Consumable/Drinks/dr_gibb.rsi
- type: Item - type: Item
@@ -478,12 +398,7 @@
Quantity: 20 Quantity: 20
- ReagentId: Ice - ReagentId: Ice
Quantity: 5 Quantity: 5
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/robustnukie.rsi sprite: Objects/Consumable/Drinks/robustnukie.rsi
- type: Item - type: Item
@@ -502,12 +417,7 @@
reagents: reagents:
- ReagentId: EnergyDrink - ReagentId: EnergyDrink
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/energy_drink.rsi sprite: Objects/Consumable/Drinks/energy_drink.rsi
- type: Item - type: Item
@@ -526,12 +436,7 @@
reagents: reagents:
- ReagentId: ShamblersJuice - ReagentId: ShamblersJuice
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/shamblersjuice.rsi sprite: Objects/Consumable/Drinks/shamblersjuice.rsi
- type: Item - type: Item
@@ -550,12 +455,7 @@
reagents: reagents:
- ReagentId: PwrGame - ReagentId: PwrGame
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/pwrgame.rsi sprite: Objects/Consumable/Drinks/pwrgame.rsi
- type: Item - type: Item
@@ -574,12 +474,7 @@
reagents: reagents:
- ReagentId: Beer - ReagentId: Beer
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/beer_can.rsi sprite: Objects/Consumable/Drinks/beer_can.rsi
- type: Item - type: Item
@@ -602,12 +497,7 @@
reagents: reagents:
- ReagentId: Wine - ReagentId: Wine
Quantity: 30 Quantity: 30
grindable: grindable: *grindable
reagents:
- ReagentId: Aluminium
Quantity: 4
- ReagentId: Iron
Quantity: 1
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/wine_can.rsi sprite: Objects/Consumable/Drinks/wine_can.rsi
- type: Item - type: Item

View File

@@ -22,22 +22,16 @@
# A mug is a type of cup.[2] # A mug is a type of cup.[2]
- type: entity - type: entity
abstract: true abstract: true
parent: [ DrinkBaseMaterialPorcelain, DrinkBaseCup ] # todo Should use DrinkVisualsFill, but inheritors have no in-hand and state names are wrong parent: [ DrinkBaseMaterialPorcelain, DrinkBaseCup, DrinkVisualsFill ]
id: DrinkBaseMug id: DrinkBaseMug
name: mug name: mug
description: A mug. description: A mug.
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/mug.rsi sprite: Objects/Consumable/Drinks/mug.rsi
layers:
- state: icon-0
- state: icon-3
map: ["enum.SolutionContainerLayers.Fill"]
visible: false
- type: Appearance
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 3 maxFillLevels: 3
fillBaseName: icon- inHandsFillBaseName: null
## Misc Cups ## Misc Cups
@@ -53,18 +47,13 @@
price: 125 price: 125
- type: entity - type: entity
parent: DrinkBaseMug parent: DrinkBaseMug # a teacup is basically a mug
id: DrinkTeacupEmpty id: DrinkTeacupEmpty
name: teacup name: teacup
description: A plain white porcelain teacup. description: A plain white porcelain teacup.
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/teacup.rsi sprite: Objects/Consumable/Drinks/teacup.rsi
layers:
- state: icon-0
- state: icon-4
map: ["enum.SolutionContainerLayers.Fill"]
visible: false
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 4 maxFillLevels: 4
@@ -76,20 +65,11 @@
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/glass_coupe_shape.rsi sprite: Objects/Consumable/Drinks/glass_coupe_shape.rsi
layers:
- state: icon # todo add "icon_empty" state to match DrinkVisualsFillOverlay
map: [ "enum.SolutionContainerLayers.Base" ]
- state: fill1
map: [ "enum.SolutionContainerLayers.Fill" ]
visible: false
- state: icon-front
map: [ "enum.SolutionContainerLayers.Overlay" ]
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
fillBaseName: fill # todo rename to "fill-" to match DrinkVisualsFillOverlay
inHandsMaxFillLevels: 1 inHandsMaxFillLevels: 1
- type: entity - type: entity
parent: [DrinkBaseMaterialCardboard, DrinkBaseCup] # TODO should use DrinkVisualsFill but state names are wrong and no inhand parent: [DrinkBaseMaterialCardboard, DrinkBaseCup, DrinkBaseEmptyTrash, DrinkVisualsFill]
id: DrinkWaterCup id: DrinkWaterCup
name: water cup name: water cup
description: A paper water cup. description: A paper water cup.
@@ -102,22 +82,14 @@
size: Tiny size: Tiny
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/water_cup.rsi sprite: Objects/Consumable/Drinks/water_cup.rsi
layers:
- state: icon-0
- state: icon-1
map: ["enum.SolutionContainerLayers.Fill"]
visible: false
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 1 maxFillLevels: 1
fillBaseName: icon- inHandsFillBaseName: null
- type: Tag - type: Tag
tags: tags:
- Trash - Trash
- DrinkCup - DrinkCup
- WhitelistChameleon - WhitelistChameleon
- type: Appearance
- type: TrashOnSolutionEmpty
solution: drink
- type: Clothing - type: Clothing
slots: slots:
- HEAD - HEAD
@@ -240,16 +212,13 @@
- ReagentId: HotCocoa - ReagentId: HotCocoa
Quantity: 20 Quantity: 20
- type: Icon - type: Icon
sprite: Objects/Consumable/Drinks/hot_coco.rsi sprite: Objects/Consumable/Drinks/mug.rsi
state: icon-vend state: icon-vend-brown
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/hot_coco.rsi
layers: layers:
- state: icon-0 - state: icon
- map: ["enum.SolutionContainerLayers.Fill"] - state: fill-3
state: icon-4 map: ["enum.SolutionContainerLayers.Fill"]
- type: SolutionContainerVisuals
maxFillLevels: 4
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink solution: drink
@@ -267,16 +236,13 @@
- ReagentId: Coffee - ReagentId: Coffee
Quantity: 20 Quantity: 20
- type: Icon - type: Icon
sprite: Objects/Consumable/Drinks/hot_coffee.rsi sprite: Objects/Consumable/Drinks/mug.rsi
state: icon-vend state: icon-vend-brown
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/hot_coffee.rsi
layers: layers:
- state: icon-0 - state: icon
- map: ["enum.SolutionContainerLayers.Fill"] - state: fill-3
state: icon-4 map: ["enum.SolutionContainerLayers.Fill"]
- type: SolutionContainerVisuals
maxFillLevels: 4
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink solution: drink
@@ -293,16 +259,17 @@
reagents: reagents:
- ReagentId: CafeLatte - ReagentId: CafeLatte
Quantity: 20 Quantity: 20
- type: Icon
sprite: Objects/Consumable/Drinks/cafe_latte.rsi
state: icon-vend
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/cafe_latte.rsi sprite: Objects/Consumable/Drinks/cafe_latte.rsi
layers: layers:
- state: icon_empty - state: icon
- state: fill-1 - state: fill-1
map: ["enum.SolutionContainerLayers.Fill"] map: ["enum.SolutionContainerLayers.Fill"]
- type: Appearance
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 1 maxFillLevels: 1
fillBaseName: fill-
changeColor: false changeColor: false
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink solution: drink

View File

@@ -8,9 +8,9 @@
collection: packetOpenSounds collection: packetOpenSounds
- type: Sprite - type: Sprite
layers: layers:
- state: icon - state: icon_empty
map: ["enum.OpenableVisuals.Layer"] map: ["enum.OpenableVisuals.Layer"]
- state: fill6 - state: fill-6
map: [ "enum.SolutionContainerLayers.Fill" ] # already has liquid, so no visible: false map: [ "enum.SolutionContainerLayers.Fill" ] # already has liquid, so no visible: false
- state: icon-front - state: icon-front
map: [ "enum.SolutionContainerLayers.Overlay" ] map: [ "enum.SolutionContainerLayers.Overlay" ]
@@ -20,13 +20,6 @@
maxVol: 30 maxVol: 30
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 6 maxFillLevels: 6
fillBaseName: fill # TODO rename to "fill-"
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: {state: "icon_open"}
False: {state: "icon"}
- type: TrashOnSolutionEmpty - type: TrashOnSolutionEmpty
solution: drink solution: drink
@@ -97,8 +90,6 @@
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/jar_what.rsi sprite: Objects/Consumable/Drinks/jar_what.rsi
- type: ExaminableSolution
solution: drink
- type: FitsInDispenser - type: FitsInDispenser
solution: drink solution: drink
- type: Tag - type: Tag

View File

@@ -4,35 +4,23 @@
# Transformable container - normal glass # Transformable container - normal glass
- type: entity - type: entity
parent: [DrinkBaseMaterialGlass, DrinkBaseCup] # todo parent to DrinkVisualsFillOverlay after in-hands are added parent: [DrinkBaseMaterialGlass, DrinkBaseCup, DrinkVisualsFillOverlay]
id: DrinkGlass id: DrinkGlass
name: metamorphic glass name: metamorphic glass
description: A metamorphic glass that automagically turns into a glass appropriate for the drink within. There's a sanded off patent number on the bottom. description: A metamorphic glass that automagically turns into a glass appropriate for the drink within. There's a sanded off patent number on the bottom.
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/glass_clear.rsi sprite: Objects/Consumable/Drinks/glass_clear.rsi
layers:
- state: icon # TODO add "icon_empty" state to match "DrinkVisualsFillOverlay"
map: [ "enum.SolutionContainerLayers.Base" ]
- state: fill1
map: [ "enum.SolutionContainerLayers.Fill" ]
visible: false
- state: icon-front
map: [ "enum.SolutionContainerLayers.Overlay" ]
- type: Appearance
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
drink: drink:
maxVol: 30 maxVol: 30
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 9 maxFillLevels: 9
fillBaseName: fill # todo rename to "fill-", add in-hands, then add parent "DrinkVisualsFillOverlay"
metamorphic: true metamorphic: true
metamorphicDefaultSprite: metamorphicDefaultSprite:
sprite: Objects/Consumable/Drinks/glass_clear.rsi sprite: Objects/Consumable/Drinks/glass_clear.rsi
state: icon state: icon
inHandsMaxFillLevels: 3
inHandsFillBaseName: -fill-
- type: Tag - type: Tag
tags: tags:
- DrinkCup # Do these tags - DrinkCup # Do these tags
@@ -47,14 +35,6 @@
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/jar.rsi sprite: Objects/Consumable/Drinks/jar.rsi
layers:
- state: icon
map: [ "enum.SolutionContainerLayers.Base" ]
- state: fill1
map: [ "enum.SolutionContainerLayers.Fill" ]
visible: false
- state: icon-front
map: [ "enum.SolutionContainerLayers.Overlay" ]
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
drink: drink:

View File

@@ -12,17 +12,8 @@
size: Tiny size: Tiny
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/shotglass.rsi sprite: Objects/Consumable/Drinks/shotglass.rsi
layers:
- state: icon # TODO add "icon_empty" state to match "DrinkVisualsFillOverlay"
map: [ "enum.SolutionContainerLayers.Base" ]
- state: fill1
map: [ "enum.SolutionContainerLayers.Fill" ]
visible: false
- state: icon-front
map: [ "enum.SolutionContainerLayers.Overlay" ]
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 2 maxFillLevels: 2
fillBaseName: fill # TODO rename to "fill-" to match "DrinkVisualsFillOverlay"
inHandsMaxFillLevels: 1 inHandsMaxFillLevels: 1
- type: FitsInDispenser - type: FitsInDispenser
solution: drink solution: drink
@@ -146,6 +137,21 @@
reactionTypes: reactionTypes:
- Shake - Shake
- type: entity
parent: DrinkShaker
id: DrinkShakerGold
name: golden shaker
description: A gold-plated shaker given as a token of appreciation for years of service. It doesn't make the drinks taste any different.
components:
- type: Sprite
sprite: Objects/Consumable/Drinks/shaker_gold.rsi
- type: Item
sprite: Objects/Consumable/Drinks/shaker_gold.rsi
- type: PhysicalComposition
materialComposition:
Gold: 10 # Gold plated, not solid gold
Steel: 40
- type: entity - type: entity
parent: [DrinkBaseMaterialMetal, DrinkBase] parent: [DrinkBaseMaterialMetal, DrinkBase]
id: DrinkJigger id: DrinkJigger
@@ -184,11 +190,6 @@
maxVol: 60 maxVol: 60
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Drinks/pitcher.rsi sprite: Objects/Consumable/Drinks/pitcher.rsi
layers:
- state: icon # TODO add "icon_empty" state to match "DrinkVisualsFill"
- state: fill-1
map: ["enum.SolutionContainerLayers.Fill"]
visible: false
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 6 maxFillLevels: 6
inHandsMaxFillLevels: 2 inHandsMaxFillLevels: 2

View File

@@ -731,7 +731,7 @@
name: crostini name: crostini
parent: FoodBreadSliceBase parent: FoodBreadSliceBase
id: FoodBreadBaguetteSlice id: FoodBreadBaguetteSlice
description: Bon ap-petite! description: Bon ap-pétite!
components: components:
- type: Sprite - type: Sprite
state: crostini state: crostini
@@ -753,7 +753,7 @@
parent: FoodBreadBaguetteSlice parent: FoodBreadBaguetteSlice
id: FoodBreadBaguetteCottonSlice id: FoodBreadBaguetteCottonSlice
name: cotton crostini name: cotton crostini
description: Bon az-zetite! description: Bon az-zétite!
components: components:
- type: Sprite - type: Sprite
state: crostini-cotton state: crostini-cotton
@@ -1001,3 +1001,57 @@
damage: damage:
groups: groups:
Brute: 1 Brute: 1
- type: entity
parent: FoodBreadBase
id: FoodBreadNutriBatard
name: nutri-bâtard
description: bon 'pétite!
components:
- type: Sprite
sprite: Objects/Consumable/Food/Baked/bread.rsi
state: batard
- type: Item
size: Small
storedOffset: -1,0
heldPrefix: batard
- type: Tag
tags:
- ReptilianFood
- type: FlavorProfile
flavors:
- nutribrick
- peppery
- salty
- bread
- type: entity
parent: FoodBreadNutriBatard
id: FoodBreadCottonNutriBatard
name: cotton nutri-bâtard
description: bon 'pétite!
components:
- type: Edible
requiresSpecialDigestion: true
- type: Sprite
sprite: Objects/Consumable/Food/Baked/bread.rsi
state: batard-cotton
- type: FlavorProfile
flavors:
- peppery
- salty
- bread
- type: Tag
tags:
- ClothMade
- type: Item
size: Small
storedOffset: -1,0
heldPrefix: batard-cotton
- type: SolutionContainerManager
solutions:
food:
maxVol: 26
reagents:
- ReagentId: Fiber
Quantity: 20

View File

@@ -533,6 +533,7 @@
tags: tags:
- Trash - Trash
- HappyHonk - HappyHonk
- BoxCardboard
- type: StorageFill - type: StorageFill
contents: contents:
- id: ToyMouse - id: ToyMouse
@@ -704,7 +705,8 @@
- type: Tag - type: Tag
tags: tags:
- Trash - Trash
- CluwneHappyHonk - CluwneHappyHonk # BAD: Intentional removal of parent tag
- BoxCardboard
- type: Sprite - type: Sprite
sprite: Objects/Storage/Happyhonk/cluwne.rsi sprite: Objects/Storage/Happyhonk/cluwne.rsi
state: box state: box
@@ -882,7 +884,7 @@
grid: grid:
- 0,0,1,1 - 0,0,1,1
maxItemSize: Normal maxItemSize: Normal
whitelist: whitelist: # TODO BoxCardboard shouldn't have whitelisted storage
tags: tags:
- ClothMade - ClothMade
- type: Item - type: Item

View File

@@ -1242,6 +1242,23 @@
- state: plain-cooked-inhand-right - state: plain-cooked-inhand-right
color: "#F7E3A3" color: "#F7E3A3"
- type: entity
parent: FoodMeatChickenFried
id: FoodMeatChickenFriedVox
name: mystery fried chicken
description: “Eleven secret herbs and… oh no. Thats not chicken."
components:
- type: SolutionContainerManager
solutions:
food:
reagents:
- ReagentId: Nutriment
Quantity: 2
- ReagentId: Protein
Quantity: 5
- ReagentId: Ammonia
Quantity: 3
- type: entity - type: entity
parent: FoodMeatBase parent: FoodMeatBase
id: FoodMeatDuckCooked id: FoodMeatDuckCooked

View File

@@ -864,10 +864,10 @@
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
food: food:
maxVol: 45 maxVol: 25
reagents: reagents:
- ReagentId: Fiber - ReagentId: Fiber
Quantity: 40 Quantity: 20
- type: Tag - type: Tag
tags: tags:
- ClothMade - ClothMade

View File

@@ -27,7 +27,7 @@
id: PackPaperRollingFilters id: PackPaperRollingFilters
description: A pack of filters and thin pieces of paper used to make fine smokeables. description: A pack of filters and thin pieces of paper used to make fine smokeables.
components: components:
- type: Storage - type: Storage # Redundant
whitelist: whitelist:
tags: tags:
- RollingPaper - RollingPaper

View File

@@ -65,4 +65,5 @@
- state: holo - state: holo
- type: Tag - type: Tag
tags: tags:
- BoxCardboard
- BoxHug - BoxHug

View File

@@ -108,7 +108,7 @@
- ReagentId: Plasma - ReagentId: Plasma
Quantity: 10 Quantity: 10
canReact: false canReact: false
- type: Tag - type: Tag # Redundant
tags: tags:
- Sheet - Sheet
- ConstructionMaterial - ConstructionMaterial

View File

@@ -263,7 +263,7 @@
- type: Storage - type: Storage
grid: grid:
- 0,0,5,3 - 0,0,5,3
whitelist: whitelist: # Redundant
tags: tags:
- Document - Document
- type: ItemMapper - type: ItemMapper

View File

@@ -1,5 +1,5 @@
- type: entity - type: entity
name: bible name: space bible
description: New Interstellar Version 2340. description: New Interstellar Version 2340.
parent: BaseStorageItem parent: BaseStorageItem
id: Bible id: Bible
@@ -96,21 +96,10 @@
event: !type:SummonActionEvent event: !type:SummonActionEvent
- type: entity - type: entity
parent: Bible
name: tanakh
description: "For God's chosen crewmembers"
id: BibleTanakh
components:
- type: Sprite
sprite: Objects/Specific/Chapel/tanakh.rsi
- type: Item
sprite: Objects/Specific/Chapel/tanakh.rsi
- type: entity
parent: Bible
name: druidic tablet
description: "It's the mystery of the druids!"
id: BibleDruid id: BibleDruid
name: druidic tablet
parent: Bible
description: "It's the mystery of the druids!"
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Specific/Chapel/mysteryofthedruids.rsi sprite: Objects/Specific/Chapel/mysteryofthedruids.rsi
@@ -118,10 +107,10 @@
sprite: Objects/Specific/Chapel/mysteryofthedruids.rsi sprite: Objects/Specific/Chapel/mysteryofthedruids.rsi
- type: entity - type: entity
parent: Bible
name: communist manifesto
description: "Remove the mask of humanity from Capital."
id: BibleCommunistManifesto id: BibleCommunistManifesto
name: communist manifesto
parent: Bible
description: "Remove the mask of humanity from Capital."
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Specific/Chapel/communistmanifesto.rsi sprite: Objects/Specific/Chapel/communistmanifesto.rsi
@@ -129,23 +118,45 @@
sprite: Objects/Specific/Chapel/communistmanifesto.rsi sprite: Objects/Specific/Chapel/communistmanifesto.rsi
- type: entity - type: entity
id: BibleNarsie
name: tome of nar'sie
parent: Bible parent: Bible
name: satanic bible description: "What could possibly go wrong with a book covered in blood?"
description: "What could possibly go wrong?"
id: BibleSatanic
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Specific/Chapel/satanicbible.rsi sprite: Objects/Specific/Chapel/tomeofnarsie.rsi
- type: Item - type: Item
sprite: Objects/Specific/Chapel/satanicbible.rsi sprite: Objects/Specific/Chapel/tomeofnarsie.rsi
- type: entity - type: entity
parent: Bible
name: codex nanotrasimus
description: "A familiar book containing the Sacred Operating Procedures."
id: BibleNanoTrasen id: BibleNanoTrasen
name: codex nanotrasimus
parent: Bible
description: "A familiar book containing the Sacred Operating Procedures."
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Specific/Chapel/codexnanotrasimus.rsi sprite: Objects/Specific/Chapel/codexnanotrasimus.rsi
- type: Item - type: Item
sprite: Objects/Specific/Chapel/codexnanotrasimus.rsi sprite: Objects/Specific/Chapel/codexnanotrasimus.rsi
- type: entity
id: BibleHonk
name: mirth of the honkmother
parent: Bible
description: "Oh great and glorious Mother, Mistress of Mirth, Matron of Mask and Merriments, Blessed is she amongst us jesters."
components:
- type: Sprite
sprite: Objects/Specific/Chapel/honk.rsi
- type: Item
sprite: Objects/Specific/Chapel/honk.rsi
- type: entity
id: BibleRatvar
name: tablet of ratvar
parent: Bible
description: "A holy relic of the Clockwork Cult, blessed by the Clockwork Justice, Ratvar."
components:
- type: Sprite
sprite: Objects/Specific/Chapel/ratvartablet.rsi
- type: Item
sprite: Objects/Specific/Chapel/ratvartablet.rsi

View File

@@ -278,9 +278,11 @@
parent: Plunger parent: Plunger
description: A plunger with a plastic suction cup coated in a thin layer of gold given as a token of appreciation for years of service. Still used to unclog drains. description: A plunger with a plastic suction cup coated in a thin layer of gold given as a token of appreciation for years of service. Still used to unclog drains.
components: components:
- type: Tag - type: Tag # TODO change Plunger into a tool so we dont got to layer Tags like below.
tags: tags:
- GoldenPlunger - GoldenPlunger
- Plunger
- WhitelistChameleon
- type: Sprite - type: Sprite
sprite: Objects/Specific/Janitorial/golden_plunger.rsi sprite: Objects/Specific/Janitorial/golden_plunger.rsi
state: plunger state: plunger

View File

@@ -5,7 +5,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeAntiMateriel - CartridgeAntiMateriel
- type: CartridgeAmmo - type: CartridgeAmmo
proto: BulletAntiMateriel proto: BulletAntiMateriel

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeCaselessRifle - CartridgeCaselessRifle
- type: CartridgeAmmo - type: CartridgeAmmo
deleteOnSpawn: true deleteOnSpawn: true

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeHeavyRifle - CartridgeHeavyRifle
- type: CartridgeAmmo - type: CartridgeAmmo
proto: BulletHeavyRifle proto: BulletHeavyRifle

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeLightRifle - CartridgeLightRifle
- type: CartridgeAmmo - type: CartridgeAmmo
proto: BulletLightRifle proto: BulletLightRifle

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeMagnum - CartridgeMagnum
- type: CartridgeAmmo - type: CartridgeAmmo
proto: BulletMagnum proto: BulletMagnum

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgePistol - CartridgePistol
- type: CartridgeAmmo - type: CartridgeAmmo
proto: BulletPistol proto: BulletPistol

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeRifle - CartridgeRifle
- type: CartridgeAmmo - type: CartridgeAmmo
proto: BulletRifle proto: BulletRifle

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- ShellShotgun - ShellShotgun
- type: CartridgeAmmo - type: CartridgeAmmo
soundEject: soundEject:
@@ -26,7 +25,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- ShellShotgun - ShellShotgun
- ShellShotgunLight - ShellShotgunLight
- type: Sprite - type: Sprite
@@ -59,7 +57,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- ShellShotgun - ShellShotgun
- ShellShotgunLight - ShellShotgunLight
- type: Sprite - type: Sprite
@@ -118,7 +115,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- ShellShotgun - ShellShotgun
- ShellShotgunLight - ShellShotgunLight
- type: Sprite - type: Sprite
@@ -147,7 +143,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- ShellShotgun - ShellShotgun
- ShellShotgunLight - ShellShotgunLight
- type: Sprite - type: Sprite

View File

@@ -6,7 +6,6 @@
components: components:
- type: Tag - type: Tag
tags: tags:
- Cartridge
- CartridgeCap - CartridgeCap
- type: CartridgeAmmo - type: CartridgeAmmo
- type: Sprite - type: Sprite

View File

@@ -337,7 +337,7 @@
components: components:
- type: BallisticAmmoProvider - type: BallisticAmmoProvider
proto: CartridgePistol proto: CartridgePistol
whitelist: whitelist: # Redundant
tags: tags:
- CartridgePistol - CartridgePistol
soundInsert: soundInsert:

View File

@@ -815,7 +815,7 @@
- type: entity - type: entity
name: energy shotgun name: energy shotgun
parent: [BaseWeaponBattery, BaseGunWieldable, BaseGrandTheftContraband] parent: [BaseWeaponBattery, BaseGunWieldable, BaseSecurityContraband]
id: WeaponEnergyShotgun id: WeaponEnergyShotgun
description: A one-of-a-kind prototype energy weapon that uses various shotgun configurations. It offers the possibility of both lethal and non-lethal shots, making it a versatile weapon. description: A one-of-a-kind prototype energy weapon that uses various shotgun configurations. It offers the possibility of both lethal and non-lethal shots, making it a versatile weapon.
components: components:
@@ -839,34 +839,69 @@
soundGunshot: soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg
- type: ProjectileBatteryAmmoProvider - type: ProjectileBatteryAmmoProvider
proto: BulletLaserSpread proto: BulletLaserSpreadNarrow
fireCost: 150 fireCost: 80
- type: BatteryWeaponFireModes - type: BatteryWeaponFireModes
fireModes: fireModes:
- proto: BulletLaserSpread
fireCost: 150
- proto: BulletLaserSpreadNarrow - proto: BulletLaserSpreadNarrow
fireCost: 200 fireCost: 80
- proto: BulletDisablerSmgSpread - proto: BulletDisablerSmgSpread
fireCost: 120 fireCost: 48
- type: Item - type: Item
size: Large size: Large
sprite: Objects/Weapons/Guns/Battery/inhands_64x.rsi sprite: Objects/Weapons/Guns/Battery/inhands_64x.rsi
heldPrefix: energy heldPrefix: energy
- type: GunRequiresWield #remove when inaccuracy on spreads is fixed
- type: Battery
maxCharge: 480
startingCharge: 480
- type: entity
name: energy magnum
parent: [BaseWeaponBatterySmall, BaseGrandTheftContraband]
id: WeaponEnergyMagnum
description: A high powered self-charging energy pistol designed for elite security personnel. It has has three firing modes allowing for either high damage, window piercing, or non-lethal disabling.
components:
- type: Sprite
sprite: Objects/Weapons/Guns/Battery/energy_magnum.rsi
layers:
- state: base
map: [ "enum.GunVisualLayers.Base" ]
- state: mag-unshaded-1
visible: false
map: [ "enum.GunVisualLayers.MagUnshaded" ]
shader: unshaded
- type: MagazineVisuals
magState: mag
steps: 4
zeroVisible: true
- type: Appearance
- type: Clothing
sprite: Objects/Weapons/Guns/Battery/energy_magnum.rsi
- type: Tag - type: Tag
tags: tags:
- HighRiskItem - HighRiskItem
- type: StealTarget - type: StealTarget
stealGroup: WeaponEnergyShotgun stealGroup: WeaponEnergyMagnum
- type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Gun
- type: Battery soundGunshot:
maxCharge: 1200 path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg
startingCharge: 1200 - type: ProjectileBatteryAmmoProvider
proto: BulletLaserMagnum
fireCost: 150
- type: BatteryWeaponFireModes
fireModes:
- proto: BulletLaserMagnum
fireCost: 150
- proto: BulletLaserWindowPiercingMagnum
fireCost: 150
- proto: BulletDisabler
fireCost: 62.5
- type: BatterySelfRecharger - type: BatterySelfRecharger
autoRecharge: true autoRecharge: true
autoRechargeRate: 24 autoRechargeRate: 48
autoRechargePause: true autoRechargePause: true
autoRechargePauseTime: 30 autoRechargePauseTime: 10
- type: entity - type: entity
name: temperature gun name: temperature gun

View File

@@ -425,7 +425,7 @@
description: It fires large meteors. description: It fires large meteors.
components: components:
- type: BallisticAmmoProvider - type: BallisticAmmoProvider
whitelist: whitelist: # Redundant
tags: tags:
- CartridgeRocket - CartridgeRocket
proto: MeteorMedium proto: MeteorMedium
@@ -438,7 +438,7 @@
description: It fires slow immovable rods. description: It fires slow immovable rods.
components: components:
- type: BallisticAmmoProvider - type: BallisticAmmoProvider
whitelist: whitelist: # Redundant
tags: tags:
- CartridgeRocket - CartridgeRocket
proto: ImmovableRodSlow proto: ImmovableRodSlow

View File

@@ -1305,7 +1305,7 @@
spread: 30 spread: 30
- type: entity - type: entity
name: narrow laser barrage name: lethal laser barrage
id: BulletLaserSpreadNarrow id: BulletLaserSpreadNarrow
categories: [ HideSpawnMenu ] categories: [ HideSpawnMenu ]
parent: BulletLaser parent: BulletLaser
@@ -1325,3 +1325,52 @@
proto: BulletDisablerSmg proto: BulletDisablerSmg
count: 3 #bit stronger than a disabler if you hit your shots you goober, still not a 2 hit stun though count: 3 #bit stronger than a disabler if you hit your shots you goober, still not a 2 hit stun though
spread: 9 spread: 9
- type: entity
name: magnum laser bolt
id: BulletLaserMagnum
categories: [ HideSpawnMenu ]
parent: BulletLaser
components:
- type: Sprite
sprite: Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi
layers:
- state: magnum
shader: unshaded
- type: PointLight
enabled: true
color: "#ff4300"
- type: Projectile
impactEffect: BulletImpactEffectOrangeDisabler
damage:
types:
Heat: 30
- type: entity
name: magnum window-piercing bolt
id: BulletLaserWindowPiercingMagnum
categories: [ HideSpawnMenu ]
parent: BulletLaser
components:
- type: Sprite
sprite: Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi
layers:
- state: magnum_piercing
shader: unshaded
- type: PointLight
enabled: true
color: "#ff4300"
- type: Projectile
impactEffect: BulletImpactEffectOrangeDisabler
damage:
types:
Heat: 20
- type: Fixtures
fixtures:
projectile:
shape:
!type:PhysShapeAabb
bounds: "-0.1,-0.1,0.1,0.1"
hard: false
mask:
- Opaque

View File

@@ -153,7 +153,7 @@
suffix: armor-piercing suffix: armor-piercing
components: components:
- type: RevolverAmmoProvider - type: RevolverAmmoProvider
whitelist: whitelist: # Redundant
tags: tags:
- CartridgeMagnum - CartridgeMagnum
- SpeedLoaderMagnum - SpeedLoaderMagnum

View File

@@ -1,8 +1,8 @@
- type: entity - type: entity
id: BaseMaterialDoor
parent: BaseStructure
name: door
abstract: true abstract: true
parent: BaseStructure
id: BaseMaterialDoor
name: door
description: A door, where will it lead? description: A door, where will it lead?
components: components:
- type: Anchorable - type: Anchorable
@@ -63,31 +63,31 @@
- type: BlockWeather - type: BlockWeather
- type: entity - type: entity
abstract: true
parent: BaseMaterialDoor parent: BaseMaterialDoor
id: BaseMaterialDoorNavMap id: BaseMaterialDoorNavMap
abstract: true
components: components:
- type: NavMapDoor - type: NavMapDoor
### Metal doors ### ### Metal doors ###
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: MetalDoor id: MetalDoor
name: metal door name: metal door
parent: BaseMaterialDoorNavMap
components: components:
- type: Construction - type: Construction
graph: DoorGraph graph: DoorGraph
node: metalDoor node: metalDoor
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: &DamageTrigger200 # Overkill threshold
!type:DamageTrigger !type:DamageTrigger
damage: 200 damage: 200
behaviors: behaviors: &OverkillBehavior
- !type:DoActsBehavior - !type:DoActsBehavior
acts: ["Destruction"] acts: ["Destruction"]
- trigger: - trigger: &DamageTrigger150
!type:DamageTrigger !type:DamageTrigger
damage: 150 damage: 150
behaviors: behaviors:
@@ -103,30 +103,20 @@
max: 5 max: 5
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: PlasmaDoor id: PlasmaDoor
name: plasma door name: plasma door
parent: BaseMaterialDoorNavMap
description: A door, where will it lead?
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/MineralDoors/plasma_door.rsi sprite: Structures/Doors/MineralDoors/plasma_door.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- type: Construction - type: Construction
graph: DoorGraph graph: DoorGraph
node: plasmaDoor node: plasmaDoor
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger200
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 200 - trigger: *DamageTrigger150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger:
!type:DamageTrigger
damage: 150
behaviors: behaviors:
- !type:DoActsBehavior - !type:DoActsBehavior
acts: ["Destruction"] acts: ["Destruction"]
@@ -140,30 +130,20 @@
max: 5 max: 5
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: GoldDoor id: GoldDoor
name: gold door name: gold door
parent: BaseMaterialDoorNavMap
description: A door, where will it lead?
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/MineralDoors/gold_door.rsi sprite: Structures/Doors/MineralDoors/gold_door.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- type: Construction - type: Construction
graph: DoorGraph graph: DoorGraph
node: goldDoor node: goldDoor
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger200
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 200 - trigger: *DamageTrigger150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger:
!type:DamageTrigger
damage: 150
behaviors: behaviors:
- !type:DoActsBehavior - !type:DoActsBehavior
acts: ["Destruction"] acts: ["Destruction"]
@@ -177,30 +157,20 @@
max: 5 max: 5
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: SilverDoor id: SilverDoor
name: silver door name: silver door
parent: BaseMaterialDoorNavMap
description: A door, where will it lead?
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/MineralDoors/silver_door.rsi sprite: Structures/Doors/MineralDoors/silver_door.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- type: Construction - type: Construction
graph: DoorGraph graph: DoorGraph
node: silverDoor node: silverDoor
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger200
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 200 - trigger: *DamageTrigger150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger:
!type:DamageTrigger
damage: 150
behaviors: behaviors:
- !type:DoActsBehavior - !type:DoActsBehavior
acts: ["Destruction"] acts: ["Destruction"]
@@ -214,35 +184,26 @@
max: 5 max: 5
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: BananiumDoor id: BananiumDoor
name: bananium door name: bananium door
parent: BaseMaterialDoorNavMap
description: A door, where will it lead?
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/MineralDoors/bananium_door.rsi sprite: Structures/Doors/MineralDoors/bananium_door.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- type: Door - type: Door
openSound: openSound: &BikeHornSound
path: /Audio/Items/bikehorn.ogg collection: BikeHorn
closeSound: params:
path: /Audio/Items/bikehorn.ogg variation: 0.125
closeSound: *BikeHornSound
- type: Construction - type: Construction
graph: DoorGraph graph: DoorGraph
node: bananiumDoor node: bananiumDoor
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger200
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 200 - trigger: *DamageTrigger150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger:
!type:DamageTrigger
damage: 150
behaviors: behaviors:
- !type:DoActsBehavior - !type:DoActsBehavior
acts: ["Destruction"] acts: ["Destruction"]
@@ -258,9 +219,9 @@
### Other doors ### ### Other doors ###
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: WoodDoor id: WoodDoor
name: wooden door name: wooden door
parent: BaseMaterialDoorNavMap
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/MineralDoors/wood_door.rsi sprite: Structures/Doors/MineralDoors/wood_door.rsi
@@ -273,16 +234,11 @@
graph: DoorGraph graph: DoorGraph
node: woodDoor node: woodDoor
- type: Damageable - type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Wood damageModifierSet: Wood
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger150
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger: - trigger:
!type:DamageTrigger !type:DamageTrigger
damage: 75 damage: 75
@@ -299,16 +255,12 @@
max: 5 max: 5
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: PaperDoor id: PaperDoor
name: paper door name: paper door
parent: BaseMaterialDoorNavMap
description: A door, where will it lead?
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/MineralDoors/paper_door.rsi sprite: Structures/Doors/MineralDoors/paper_door.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- type: Door - type: Door
openSound: openSound:
path: /Audio/Effects/paperdoor_openclose.ogg path: /Audio/Effects/paperdoor_openclose.ogg
@@ -318,16 +270,11 @@
graph: DoorGraph graph: DoorGraph
node: paperDoor node: paperDoor
- type: Damageable - type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Wood damageModifierSet: Wood
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger150
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger: - trigger:
!type:DamageTrigger !type:DamageTrigger
damage: 50 damage: 50
@@ -344,16 +291,13 @@
max: 5 max: 5
- type: entity - type: entity
parent: BaseMaterialDoorNavMap
id: WebDoor id: WebDoor
name: web door name: web door
parent: BaseMaterialDoorNavMap
description: A door, leading to the lands of the spiders... or a spaced room. description: A door, leading to the lands of the spiders... or a spaced room.
components: components:
- type: Sprite - type: Sprite
sprite: Structures/Doors/web_door.rsi sprite: Structures/Doors/web_door.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- type: Door - type: Door
closeSound: closeSound:
path: /Audio/Effects/rustle1.ogg path: /Audio/Effects/rustle1.ogg
@@ -366,21 +310,8 @@
damageModifierSet: Web damageModifierSet: Web
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: # Excess damage, don't spawn entities - trigger: *DamageTrigger150
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 100
behaviors:
- !type:PlaySoundBehavior
sound:
collection: WoodDestroy
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger:
!type:DamageTrigger
damage: 150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- trigger: - trigger:
!type:DamageTrigger !type:DamageTrigger
damage: 50 damage: 50
@@ -397,8 +328,8 @@
max: 2 max: 2
- type: entity - type: entity
id: CardDoor
parent: BaseMaterialDoorNavMap parent: BaseMaterialDoorNavMap
id: CardDoor
name: cardboard door name: cardboard door
components: components:
- type: Sprite - type: Sprite
@@ -417,16 +348,11 @@
path: path:
"/Audio/Weapons/pierce.ogg" "/Audio/Weapons/pierce.ogg"
- type: Damageable - type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Card damageModifierSet: Card
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger: *DamageTrigger150
!type:DamageTrigger behaviors: *OverkillBehavior
damage: 60 #excess damage (nuke?). avoid computational cost of spawning entities.
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger: - trigger:
!type:DamageTrigger !type:DamageTrigger
damage: 30 damage: 30

View File

@@ -190,10 +190,6 @@
whitelist: whitelist:
tags: tags:
- Plunger - Plunger
goldenplunger_slot:
name: janitorial-trolley-slot-component-slot-name-goldenplunger
whitelist:
tags:
- GoldenPlunger - GoldenPlunger
priority: 8 priority: 8
wetfloorsign_slot4: wetfloorsign_slot4:

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobQuartermaster role: JobQuartermaster
time: 72000 #20 hrs time: 20h
# Jumpsuit # Jumpsuit
- type: loadout - type: loadout

View File

@@ -1,3 +1,12 @@
- type: loadoutEffectGroup
id: SeniorBar
effects:
- !type:JobRequirementLoadoutEffect
requirement:
!type:RoleTimeRequirement
role: JobBartender
time: 52h # 1 hour per week for 1 year
# Head # Head
- type: loadout - type: loadout
id: BartenderHead id: BartenderHead
@@ -40,3 +49,13 @@
id: BartenderWintercoat id: BartenderWintercoat
equipment: equipment:
outerClothing: ClothingOuterWinterBar outerClothing: ClothingOuterWinterBar
# Misc
- type: loadout
id: BartenderGoldenShaker
effects:
- !type:GroupLoadoutEffect
proto: SeniorBar
storage:
back:
- DrinkShakerGold

View File

@@ -1,3 +1,33 @@
# Playtime requirement for NanoTrasen Bible, Codex NanoTrasimus
- type: loadoutEffectGroup
id: NanoTrasenBibleRequirement
effects:
- !type:JobRequirementLoadoutEffect
requirement:
!type:RoleTimeRequirement
role: JobCaptain
time: 7200 #2 hrs
# Playtime requirement for Druid Bible, Druidic Tablet
- type: loadoutEffectGroup
id: DruidBibleRequirement
effects:
- !type:JobRequirementLoadoutEffect
requirement:
!type:RoleTimeRequirement
role: JobBotanist
time: 18000 #5 hrs
# Playtime requirement for Clown Bible, Mirth of the Honkmother
- type: loadoutEffectGroup
id: ClownBibleRequirement
effects:
- !type:JobRequirementLoadoutEffect
requirement:
!type:RoleTimeRequirement
role: JobClown
time: 18000 #5 hrs
# Head # Head
- type: loadout - type: loadout
id: ChaplainHead id: ChaplainHead
@@ -87,24 +117,39 @@
- type: loadout - type: loadout
id: BibleDruid id: BibleDruid
effects:
- !type:GroupLoadoutEffect
proto: DruidBibleRequirement
storage: storage:
back: back:
- BibleDruid - BibleDruid
- type: loadout - type: loadout
id: BibleNanoTrasen id: BibleNanoTrasen
effects:
- !type:GroupLoadoutEffect
proto: NanoTrasenBibleRequirement
storage: storage:
back: back:
- BibleNanoTrasen - BibleNanoTrasen
- type: loadout - type: loadout
id: BibleSatanic id: BibleNarsie
storage: storage:
back: back:
- BibleSatanic - BibleNarsie
- type: loadout - type: loadout
id: BibleTanakh id: BibleHonk
effects:
- !type:GroupLoadoutEffect
proto: ClownBibleRequirement
storage: storage:
back: back:
- BibleTanakh - BibleHonk
- type: loadout
id: BibleRatvar
storage:
back:
- BibleRatvar

View File

@@ -5,7 +5,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobJanitor role: JobJanitor
time: 187200 #52 hrs (1 hour per week for 1 year) time: 52h # 1 hour per week for 1 year
# Head # Head
- type: loadout - type: loadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobPassenger role: JobPassenger
time: 36000 #10 hrs, silly reward for people who play passenger a lot time: 10h # silly reward for people who play passenger a lot
# Head of Greytide (for grey mantle) # Head of Greytide (for grey mantle)
- type: loadoutEffectGroup - type: loadoutEffectGroup
@@ -16,7 +16,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobPassenger role: JobPassenger
time: 72000 #20 hrs, fun mantle for the most experienced greytiders time: 20h # fun mantle for the most experienced greytiders
# Face # Face
- type: loadout - type: loadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobCaptain role: JobCaptain
time: 72000 #20 hrs time: 20h
# Jumpsuit # Jumpsuit
- type: loadout - type: loadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobHeadOfPersonnel role: JobHeadOfPersonnel
time: 72000 #20 hrs time: 20h
# Professional HoP Time # Professional HoP Time
- type: loadoutEffectGroup - type: loadoutEffectGroup
@@ -16,7 +16,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobHeadOfPersonnel role: JobHeadOfPersonnel
time: 54000 #15 hrs, special reward for HoP mains time: 15h # special reward for HoP mains
# Jumpsuit # Jumpsuit
- type: loadout - type: loadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobChiefEngineer role: JobChiefEngineer
time: 72000 #20 hrs time: 20h
# Jumpsuit # Jumpsuit
- type: loadout - type: loadout

View File

@@ -6,17 +6,17 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobAtmosphericTechnician role: JobAtmosphericTechnician
time: 21600 #6 hrs time: 6h
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobStationEngineer role: JobStationEngineer
time: 21600 #6 hrs time: 6h
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Engineering department: Engineering
time: 216000 # 60 hrs time: 60h
# Head # Head
- type: startingGear - type: startingGear

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobChiefMedicalOfficer role: JobChiefMedicalOfficer
time: 72000 #20 hrs time: 20h
# Jumpsuit # Jumpsuit
- type: loadout - type: loadout

View File

@@ -6,17 +6,17 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobChemist role: JobChemist
time: 21600 #6 hrs time: 6h
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobMedicalDoctor role: JobMedicalDoctor
time: 21600 #6 hrs time: 6h
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Medical department: Medical
time: 216000 # 60 hrs time: 60h
# Other Timers # Other Timers
@@ -27,7 +27,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobMedicalDoctor role: JobMedicalDoctor
time: 108000 #30 hrs time: 30h
# Head # Head

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobResearchDirector role: JobResearchDirector
time: 72000 #20 hrs time: 20h
# Head # Head
- type: loadout - type: loadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Science department: Science
time: 216000 #60 hrs time: 60h
# Head # Head
- type: startingGear - type: startingGear

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobHeadOfSecurity role: JobHeadOfSecurity
time: 72000 #20 hrs time: 20h
# Jumpsuit # Jumpsuit
- type: loadout - type: loadout

View File

@@ -6,12 +6,12 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobWarden role: JobWarden
time: 21600 #6 hrs time: 6h
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Security department: Security
time: 216000 # 60 hrs time: 60h
#Security Star #Security Star
- type: loadoutEffectGroup - type: loadoutEffectGroup
@@ -21,7 +21,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Security department: Security
time: 360000 #100 hrs time: 100h
# Head # Head
- type: loadout - type: loadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobLibrarian role: JobLibrarian
time: 3600 # 1 hour of being the biggest nerd on the station time: 1h # for being the biggest nerd on the station
- type: loadoutEffectGroup - type: loadoutEffectGroup
id: JensenTimer id: JensenTimer
@@ -15,7 +15,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Cargo department: Cargo
time: 36000 #10 hours of being a space trucker time: 10h # 10 hours of being a space trucker
# Basic options # Basic options
# Glasses # Glasses

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Command department: Command
time: 3600 # 1 hour time: 1h
# Flowers # Flowers
- type: loadout - type: loadout
@@ -308,7 +308,7 @@
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:OverallPlaytimeRequirement !type:OverallPlaytimeRequirement
time: 36000 # 10hr time: 10h
storage: storage:
back: back:
- TowelColorWhite - TowelColorWhite
@@ -320,7 +320,7 @@
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:OverallPlaytimeRequirement !type:OverallPlaytimeRequirement
time: 1800000 # 500hr time: 500h
storage: storage:
back: back:
- TowelColorSilver - TowelColorSilver
@@ -332,7 +332,7 @@
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:OverallPlaytimeRequirement !type:OverallPlaytimeRequirement
time: 3600000 # 1000hr time: 1000h
storage: storage:
back: back:
- TowelColorGold - TowelColorGold
@@ -345,7 +345,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Cargo department: Cargo
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorLightBrown - TowelColorLightBrown
@@ -358,7 +358,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Civilian department: Civilian
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorGreen - TowelColorGreen
@@ -371,7 +371,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Command department: Command
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorDarkBlue - TowelColorDarkBlue
@@ -384,7 +384,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Engineering department: Engineering
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorOrange - TowelColorOrange
@@ -397,7 +397,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Medical department: Medical
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorLightBlue - TowelColorLightBlue
@@ -410,7 +410,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Science department: Science
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorPurple - TowelColorPurple
@@ -423,7 +423,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Security department: Security
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorRed - TowelColorRed
@@ -436,7 +436,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobPassenger role: JobPassenger
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorGray - TowelColorGray
@@ -449,7 +449,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobChaplain role: JobChaplain
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorBlack - TowelColorBlack
@@ -462,7 +462,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobLibrarian role: JobLibrarian
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorDarkGreen - TowelColorDarkGreen
@@ -475,7 +475,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobLawyer role: JobLawyer
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorMaroon - TowelColorMaroon
@@ -488,7 +488,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobClown role: JobClown
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorYellow - TowelColorYellow
@@ -501,7 +501,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobMime role: JobMime
time: 360000 # 100hr time: 100h
storage: storage:
back: back:
- TowelColorMime - TowelColorMime

View File

@@ -270,6 +270,13 @@
- BartenderApron - BartenderApron
- BartenderWintercoat - BartenderWintercoat
- type: loadoutGroup
id: BartenderGoldenShaker
name: loadout-group-bartender-shaker
minLimit: 0
loadouts:
- BartenderGoldenShaker
- type: loadoutGroup - type: loadoutGroup
id: ChefHead id: ChefHead
name: loadout-group-chef-head name: loadout-group-chef-head
@@ -381,10 +388,11 @@
minLimit: 1 minLimit: 1
loadouts: loadouts:
- Bible - Bible
- BibleDruid
- BibleNanoTrasen - BibleNanoTrasen
- BibleSatanic - BibleDruid
- BibleTanakh - BibleHonk
- BibleRatvar
- BibleNarsie
- type: loadoutGroup - type: loadoutGroup
id: JanitorHead id: JanitorHead

View File

@@ -61,6 +61,7 @@
- BartenderJumpsuit - BartenderJumpsuit
- CommonBackpack - CommonBackpack
- BartenderOuterClothing - BartenderOuterClothing
- BartenderGoldenShaker
- Glasses - Glasses
- Survival - Survival
- Trinkets - Trinkets

Some files were not shown because too many files have changed in this diff Show More