mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-02-14 23:14:45 +01:00
upstream - merge remote "stable"
This commit is contained in:
@@ -37,8 +37,7 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystem<TypingInd
|
||||
if (!layerExists)
|
||||
layer = SpriteSystem.LayerMapReserve((uid, args.Sprite), TypingIndicatorLayers.Base);
|
||||
|
||||
SpriteSystem.LayerSetRsi((uid, args.Sprite), layer, proto.SpritePath);
|
||||
SpriteSystem.LayerSetRsiState((uid, args.Sprite), layer, proto.TypingState);
|
||||
SpriteSystem.LayerSetRsi((uid, args.Sprite), layer, proto.SpritePath, proto.TypingState);
|
||||
args.Sprite.LayerSetShader(layer, proto.Shader);
|
||||
SpriteSystem.LayerSetOffset((uid, args.Sprite), layer, proto.Offset);
|
||||
|
||||
|
||||
@@ -51,22 +51,22 @@ public sealed partial class DocumentParsingManager
|
||||
_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))
|
||||
return false;
|
||||
|
||||
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);
|
||||
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
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Content.Server.Atmos.Components;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared.Body.Systems;
|
||||
using Content.Shared.Body.Components;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System.Collections.Generic;
|
||||
using Robust.Shared.GameObjects;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Component that is used by <see cref="TestListenerSystem{TEvent}"/> to store any information about received events.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class TestListenerComponent : Component
|
||||
{
|
||||
public Dictionary<Type, List<object>> Events = new();
|
||||
}
|
||||
45
Content.IntegrationTests/Tests/Helpers/TestListenerSystem.cs
Normal file
45
Content.IntegrationTests/Tests/Helpers/TestListenerSystem.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Generic system that listens for and records any received events of a given type.
|
||||
/// </summary>
|
||||
public abstract class TestListenerSystem<TEvent> : EntitySystem where TEvent : notnull
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
// TODO
|
||||
// supporting broadcast events requires cleanup on test finish, which will probably require changes to the
|
||||
// test pair/pool manager and would conflict with #36797
|
||||
SubscribeLocalEvent<TestListenerComponent, TEvent>(OnDirectedEvent);
|
||||
}
|
||||
|
||||
protected virtual void OnDirectedEvent(Entity<TestListenerComponent> ent, ref TEvent args)
|
||||
{
|
||||
ent.Comp.Events.GetOrNew(args.GetType()).Add(args);
|
||||
}
|
||||
|
||||
public int Count(EntityUid uid, Func<TEvent, bool>? predicate = null)
|
||||
{
|
||||
return GetEvents(uid, predicate).Count();
|
||||
}
|
||||
|
||||
public void Clear(EntityUid uid)
|
||||
{
|
||||
CompOrNull<TestListenerComponent>(uid)?.Events.Remove(typeof(TEvent));
|
||||
}
|
||||
|
||||
public IEnumerable<TEvent> GetEvents(EntityUid uid, Func<TEvent, bool>? predicate = null)
|
||||
{
|
||||
var events = CompOrNull<TestListenerComponent>(uid)?.Events.GetValueOrDefault(typeof(TEvent));
|
||||
if (events == null)
|
||||
return [];
|
||||
|
||||
return events.Cast<TEvent>().Where(e => predicate?.Invoke(e) ?? true);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using System.Linq;
|
||||
using System.Numerics;
|
||||
using System.Reflection;
|
||||
using Content.Client.Construction;
|
||||
using Content.IntegrationTests.Tests.Helpers;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Construction.Components;
|
||||
using Content.Server.Gravity;
|
||||
@@ -22,6 +23,8 @@ using Robust.Shared.Input;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Reflection;
|
||||
using Robust.UnitTesting;
|
||||
using ItemToggleComponent = Content.Shared.Item.ItemToggle.Components.ItemToggleComponent;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Interaction;
|
||||
@@ -29,6 +32,8 @@ namespace Content.IntegrationTests.Tests.Interaction;
|
||||
// This partial class defines various methods that are useful for performing & validating interactions
|
||||
public abstract partial class InteractionTest
|
||||
{
|
||||
private Dictionary<Type, EntitySystem> _listenerCache = new();
|
||||
|
||||
/// <summary>
|
||||
/// Begin constructing an entity.
|
||||
/// </summary>
|
||||
@@ -758,6 +763,139 @@ public abstract partial class InteractionTest
|
||||
|
||||
#endregion
|
||||
|
||||
#region EventListener
|
||||
|
||||
/// <summary>
|
||||
/// Asserts that running the given action causes an event to be fired directed at the specified entity (defaults to <see cref="Target"/>).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This currently only checks server-side events.
|
||||
/// </remarks>
|
||||
/// <param name="uid">The entity at which the events are supposed to be directed</param>
|
||||
/// <param name="count">How many new events are expected</param>
|
||||
/// <param name="clear">Whether to clear all previously recorded events before invoking the delegate</param>
|
||||
protected async Task AssertFiresEvent<TEvent>(Func<Task> act, EntityUid? uid = null, int count = 1, bool clear = true)
|
||||
where TEvent : notnull
|
||||
{
|
||||
var sys = GetListenerSystem<TEvent>();
|
||||
|
||||
uid ??= STarget;
|
||||
if (uid == null)
|
||||
{
|
||||
Assert.Fail("No target specified");
|
||||
return;
|
||||
}
|
||||
|
||||
if (clear)
|
||||
sys.Clear(uid.Value);
|
||||
else
|
||||
count += sys.Count(uid.Value);
|
||||
|
||||
await Server.WaitPost(() => SEntMan.EnsureComponent<TestListenerComponent>(uid.Value));
|
||||
await act();
|
||||
AssertEvent<TEvent>(uid, count: count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is a variant of <see cref="AssertFiresEvent{TEvent}"/> that passes the delegate to <see cref="RobustIntegrationTest.ServerIntegrationInstance.WaitPost"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This currently only checks for server-side events.
|
||||
/// </remarks>
|
||||
/// <param name="uid">The entity at which the events are supposed to be directed</param>
|
||||
/// <param name="count">How many new events are expected</param>
|
||||
/// <param name="clear">Whether to clear all previously recorded events before invoking the delegate</param>
|
||||
protected async Task AssertPostFiresEvent<TEvent>(Action act, EntityUid? uid = null, int count = 1, bool clear = true)
|
||||
where TEvent : notnull
|
||||
{
|
||||
await AssertFiresEvent<TEvent>(async () => await Server.WaitPost(act), uid, count, clear);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is a variant of <see cref="AssertFiresEvent{TEvent}"/> that passes the delegate to <see cref="RobustIntegrationTest.ServerIntegrationInstance.WaitAssertion"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This currently only checks for server-side events.
|
||||
/// </remarks>
|
||||
/// <param name="uid">The entity at which the events are supposed to be directed</param>
|
||||
/// <param name="count">How many new events are expected</param>
|
||||
/// <param name="clear">Whether to clear all previously recorded events before invoking the delegate</param>
|
||||
protected async Task AssertAssertionFiresEvent<TEvent>(Action act,
|
||||
EntityUid? uid = null,
|
||||
int count = 1,
|
||||
bool clear = true)
|
||||
where TEvent : notnull
|
||||
{
|
||||
await AssertFiresEvent<TEvent>(async () => await Server.WaitAssertion(act), uid, count, clear);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Asserts that the specified event has been fired some number of times at the given entity (defaults to <see cref="Target"/>).
|
||||
/// For this to work, this requires that the entity has been given a <see cref="TestListenerComponent"/>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This currently only checks server-side events.
|
||||
/// </remarks>
|
||||
/// <param name="uid">The entity at which the events were directed</param>
|
||||
/// <param name="count">How many new events are expected</param>
|
||||
/// <param name="predicate">A predicate that can be used to filter the recorded events</param>
|
||||
protected void AssertEvent<TEvent>(EntityUid? uid = null, int count = 1, Func<TEvent,bool>? predicate = null)
|
||||
where TEvent : notnull
|
||||
{
|
||||
Assert.That(GetEvents(uid, predicate).Count, Is.EqualTo(count));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all the events of the specified type that have been fired at the given entity (defaults to <see cref="Target"/>).
|
||||
/// For this to work, this requires that the entity has been given a <see cref="TestListenerComponent"/>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This currently only gets for server-side events.
|
||||
/// </remarks>
|
||||
/// <param name="uid">The entity at which the events were directed</param>
|
||||
/// <param name="predicate">A predicate that can be used to filter the returned events</param>
|
||||
protected IEnumerable<TEvent> GetEvents<TEvent>(EntityUid? uid = null, Func<TEvent, bool>? predicate = null)
|
||||
where TEvent : notnull
|
||||
{
|
||||
uid ??= STarget;
|
||||
if (uid == null)
|
||||
{
|
||||
Assert.Fail("No target specified");
|
||||
return [];
|
||||
}
|
||||
|
||||
Assert.That(SEntMan.HasComponent<TestListenerComponent>(uid), $"Entity must have {nameof(TestListenerComponent)}");
|
||||
return GetListenerSystem<TEvent>().GetEvents(uid.Value, predicate);
|
||||
}
|
||||
|
||||
protected TestListenerSystem<TEvent> GetListenerSystem<TEvent>()
|
||||
where TEvent : notnull
|
||||
{
|
||||
if (_listenerCache.TryGetValue(typeof(TEvent), out var listener))
|
||||
return (TestListenerSystem<TEvent>) listener;
|
||||
|
||||
var type = Server.Resolve<IReflectionManager>().GetAllChildren<TestListenerSystem<TEvent>>().Single();
|
||||
if (!SEntMan.EntitySysManager.TryGetEntitySystem(type, out var systemObj))
|
||||
{
|
||||
// There has to be a listener system that is manually defined. Event subscriptions are locked once
|
||||
// finalized, so we can't really easily create new subscriptions on the fly.
|
||||
// TODO find a better solution
|
||||
throw new InvalidOperationException($"Event {typeof(TEvent).Name} has no associated listener system!");
|
||||
}
|
||||
|
||||
var system = (TestListenerSystem<TEvent>)systemObj;
|
||||
_listenerCache[typeof(TEvent)] = system;
|
||||
return system;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears all recorded events of the given type.
|
||||
/// </summary>
|
||||
protected void ClearEvents<TEvent>(EntityUid uid) where TEvent : notnull
|
||||
=> GetListenerSystem<TEvent>().Clear(uid);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Entity lookups
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using Content.IntegrationTests.Tests.Interaction;
|
||||
using Content.IntegrationTests.Tests.Helpers;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Content.Shared.Slippery;
|
||||
using Content.Shared.Stunnable;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Input;
|
||||
using Robust.Shared.Maths;
|
||||
|
||||
@@ -12,44 +10,32 @@ namespace Content.IntegrationTests.Tests.Movement;
|
||||
|
||||
public sealed class SlippingTest : MovementTest
|
||||
{
|
||||
public sealed class SlipTestSystem : EntitySystem
|
||||
{
|
||||
public HashSet<EntityUid> Slipped = new();
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<SlipperyComponent, SlipEvent>(OnSlip);
|
||||
}
|
||||
|
||||
private void OnSlip(EntityUid uid, SlipperyComponent component, ref SlipEvent args)
|
||||
{
|
||||
Slipped.Add(args.Slipped);
|
||||
}
|
||||
}
|
||||
public sealed class SlipTestSystem : TestListenerSystem<SlipEvent>;
|
||||
|
||||
[Test]
|
||||
public async Task BananaSlipTest()
|
||||
{
|
||||
var sys = SEntMan.System<SlipTestSystem>();
|
||||
await SpawnTarget("TrashBananaPeel");
|
||||
|
||||
var modifier = Comp<MovementSpeedModifierComponent>(Player).SprintSpeedModifier;
|
||||
Assert.That(modifier, Is.EqualTo(1), "Player is not moving at full speed.");
|
||||
|
||||
// Player is to the left of the banana peel and has not slipped.
|
||||
// Player is to the left of the banana peel.
|
||||
Assert.That(Delta(), Is.GreaterThan(0.5f));
|
||||
Assert.That(sys.Slipped, Does.Not.Contain(SEntMan.GetEntity(Player)));
|
||||
|
||||
// Walking over the banana slowly does not trigger a slip.
|
||||
await SetKey(EngineKeyFunctions.Walk, BoundKeyState.Down);
|
||||
await Move(DirectionFlag.East, 1f);
|
||||
await AssertFiresEvent<SlipEvent>(async () => await Move(DirectionFlag.East, 1f), count: 0);
|
||||
|
||||
Assert.That(Delta(), Is.LessThan(0.5f));
|
||||
Assert.That(sys.Slipped, Does.Not.Contain(SEntMan.GetEntity(Player)));
|
||||
AssertComp<KnockedDownComponent>(false, Player);
|
||||
|
||||
// Moving at normal speeds does trigger a slip.
|
||||
await SetKey(EngineKeyFunctions.Walk, BoundKeyState.Up);
|
||||
await Move(DirectionFlag.West, 1f);
|
||||
Assert.That(sys.Slipped, Does.Contain(SEntMan.GetEntity(Player)));
|
||||
await AssertFiresEvent<SlipEvent>(async () => await Move(DirectionFlag.West, 1f));
|
||||
|
||||
// And the person that slipped was the player
|
||||
AssertEvent<SlipEvent>(predicate: @event => @event.Slipped == SPlayer);
|
||||
AssertComp<KnockedDownComponent>(true, Player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,6 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
/// </summary>
|
||||
public float[] GasSpecificHeats => _gasSpecificHeats;
|
||||
|
||||
public string?[] GasReagents = new string[Atmospherics.TotalNumberOfGases];
|
||||
|
||||
private void InitializeGases()
|
||||
{
|
||||
_gasReactions = _protoMan.EnumeratePrototypes<GasReactionPrototype>().ToArray();
|
||||
@@ -37,7 +35,6 @@ namespace Content.Server.Atmos.EntitySystems
|
||||
for (var i = 0; i < GasPrototypes.Length; i++)
|
||||
{
|
||||
_gasSpecificHeats[i] = GasPrototypes[i].SpecificHeat / HeatScale;
|
||||
GasReagents[i] = GasPrototypes[i].Reagent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,9 @@ public sealed class SpaceHeaterSystem : EntitySystem
|
||||
if (!TryComp<GasThermoMachineComponent>(uid, out var thermoMachine))
|
||||
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);
|
||||
DirtyUI(uid, spaceHeater);
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
using Content.Server.Body.Systems;
|
||||
|
||||
namespace Content.Server.Body.Components
|
||||
{
|
||||
[RegisterComponent, Access(typeof(BrainSystem))]
|
||||
public sealed partial class BrainComponent : Component
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Chat.Systems;
|
||||
using Content.Server.EntityEffects;
|
||||
using Content.Shared.Body.Systems;
|
||||
using Content.Shared.Alert;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Body.Components;
|
||||
|
||||
@@ -19,7 +19,7 @@ public sealed partial class ReactionMixerSystem : EntitySystem
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<ReactionMixerComponent, AfterInteractEvent>(OnAfterInteract);
|
||||
SubscribeLocalEvent<ReactionMixerComponent, AfterInteractEvent>(OnAfterInteract, before: [typeof(IngestionSystem)]);
|
||||
SubscribeLocalEvent<ReactionMixerComponent, ShakeEvent>(OnShake);
|
||||
SubscribeLocalEvent<ReactionMixerComponent, ReactionMixDoAfterEvent>(OnDoAfter);
|
||||
}
|
||||
@@ -29,12 +29,13 @@ public sealed partial class ReactionMixerSystem : EntitySystem
|
||||
if (!args.Target.HasValue || !args.CanReach || !entity.Comp.MixOnInteract)
|
||||
return;
|
||||
|
||||
if (!MixAttempt(entity, args.Target.Value, out var solution))
|
||||
if (!MixAttempt(entity, args.Target.Value, out _))
|
||||
return;
|
||||
|
||||
var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.TimeToMix, new ReactionMixDoAfterEvent(), entity, args.Target.Value, entity);
|
||||
|
||||
_doAfterSystem.TryStartDoAfter(doAfterArgs);
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void OnDoAfter(Entity<ReactionMixerComponent> entity, ref ReactionMixDoAfterEvent args)
|
||||
|
||||
@@ -4,7 +4,6 @@ using Content.Server.GameTicking.Presets;
|
||||
using Content.Shared.Administration;
|
||||
using Linguini.Shared.Util;
|
||||
using Robust.Shared.Console;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.GameTicking.Commands
|
||||
{
|
||||
@@ -12,7 +11,6 @@ namespace Content.Server.GameTicking.Commands
|
||||
public sealed class SetGamePresetCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IEntityManager _entity = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
|
||||
public string Command => "setgamepreset";
|
||||
public string Description => Loc.GetString("set-game-preset-command-description", ("command", Command));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@ using Content.Shared.Holopad;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Labels.Components;
|
||||
using Content.Shared.Mobs;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Power;
|
||||
using Content.Shared.Silicons.StationAi;
|
||||
using Content.Shared.Speech;
|
||||
@@ -40,7 +39,6 @@ public sealed class HolopadSystem : SharedHolopadSystem
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly PvsOverrideSystem _pvs = default!;
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
|
||||
private float _updateTimer = 1.0f;
|
||||
private const float UpdateTime = 1.0f;
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Item;
|
||||
using Content.Shared.Lube;
|
||||
using Content.Shared.NameModifier.EntitySystems;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Throwing;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server.Lube;
|
||||
@@ -21,7 +23,7 @@ public sealed class LubedSystem : EntitySystem
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<LubedComponent, ComponentInit>(OnInit);
|
||||
SubscribeLocalEvent<LubedComponent, ContainerGettingInsertedAttemptEvent>(OnHandPickUp);
|
||||
SubscribeLocalEvent<LubedComponent, BeforeGettingEquippedHandEvent>(OnHandPickUp);
|
||||
SubscribeLocalEvent<LubedComponent, RefreshNameModifiersEvent>(OnRefreshNameModifiers);
|
||||
}
|
||||
|
||||
@@ -30,21 +32,38 @@ public sealed class LubedSystem : EntitySystem
|
||||
_nameMod.RefreshNameModifiers(uid);
|
||||
}
|
||||
|
||||
private void OnHandPickUp(EntityUid uid, LubedComponent component, ContainerGettingInsertedAttemptEvent args)
|
||||
/// <remarks>
|
||||
/// Note to whoever makes this predicted—there is a mispredict here that
|
||||
/// would be nice to keep! If this is in shared, the client will predict
|
||||
/// this and not run the pickup animation in <see cref="SharedHandsSystem"/>
|
||||
/// which would (probably) make this effect look less funny. You will
|
||||
/// probably want to either tweak <see cref="BeforeGettingEquippedHandEvent"/>
|
||||
/// to be able to cancel but still run the animation or something—we do want
|
||||
/// the event to run before the animation for stuff like
|
||||
/// <see cref="MultiHandedItemSystem.OnBeforeEquipped"/>.
|
||||
/// </remarks>
|
||||
private void OnHandPickUp(Entity<LubedComponent> ent, ref BeforeGettingEquippedHandEvent args)
|
||||
{
|
||||
if (component.SlipsLeft <= 0)
|
||||
if (args.Cancelled)
|
||||
return;
|
||||
|
||||
if (ent.Comp.SlipsLeft <= 0)
|
||||
{
|
||||
RemComp<LubedComponent>(uid);
|
||||
_nameMod.RefreshNameModifiers(uid);
|
||||
RemComp<LubedComponent>(ent);
|
||||
_nameMod.RefreshNameModifiers(ent.Owner);
|
||||
return;
|
||||
}
|
||||
component.SlipsLeft--;
|
||||
args.Cancel();
|
||||
var user = args.Container.Owner;
|
||||
_transform.SetCoordinates(uid, Transform(user).Coordinates);
|
||||
_transform.AttachToGridOrMap(uid);
|
||||
_throwing.TryThrow(uid, _random.NextVector2(), baseThrowSpeed: component.SlipStrength);
|
||||
_popup.PopupEntity(Loc.GetString("lube-slip", ("target", Identity.Entity(uid, EntityManager))), user, user, PopupType.MediumCaution);
|
||||
|
||||
ent.Comp.SlipsLeft--;
|
||||
args.Cancelled = true;
|
||||
|
||||
_transform.SetCoordinates(ent, Transform(args.User).Coordinates);
|
||||
_transform.AttachToGridOrMap(ent);
|
||||
_throwing.TryThrow(ent, _random.NextVector2(), ent.Comp.SlipStrength);
|
||||
_popup.PopupEntity(Loc.GetString("lube-slip", ("target", Identity.Entity(ent, EntityManager))),
|
||||
args.User,
|
||||
args.User,
|
||||
PopupType.MediumCaution);
|
||||
}
|
||||
|
||||
private void OnRefreshNameModifiers(Entity<LubedComponent> entity, ref RefreshNameModifiersEvent args)
|
||||
|
||||
@@ -9,4 +9,5 @@ public abstract partial class NPCComponent : SharedNPCComponent
|
||||
/// </summary>
|
||||
[DataField("blackboard", customTypeSerializer: typeof(NPCBlackboardSerializer))]
|
||||
public NPCBlackboard Blackboard = new();
|
||||
// TODO FULL GAME SAVE Serialize this
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ public sealed partial class HTNComponent : NPCComponent
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
public HTNPlan? Plan;
|
||||
// TODO FULL GAME SAVE serialize this?
|
||||
|
||||
/// <summary>
|
||||
/// How long to wait after having planned to try planning again.
|
||||
|
||||
@@ -33,6 +33,7 @@ public sealed class HTNSystem : EntitySystem
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<HTNComponent, MobStateChangedEvent>(_npc.OnMobStateChange);
|
||||
SubscribeLocalEvent<HTNComponent, MapInitEvent>(_npc.OnNPCMapInit);
|
||||
SubscribeLocalEvent<HTNComponent, ComponentStartup>(_npc.OnNPCStartup);
|
||||
SubscribeLocalEvent<HTNComponent, PlayerAttachedEvent>(_npc.OnPlayerNPCAttach);
|
||||
SubscribeLocalEvent<HTNComponent, PlayerDetachedEvent>(_npc.OnPlayerNPCDetach);
|
||||
SubscribeLocalEvent<HTNComponent, ComponentShutdown>(OnHTNShutdown);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -63,9 +63,13 @@ namespace Content.Server.NPC.Systems
|
||||
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);
|
||||
}
|
||||
|
||||
public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args)
|
||||
{
|
||||
WakeNPC(uid, component);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ internal sealed class StunOnCollideSystem : EntitySystem
|
||||
if (ent.Comp.Refresh)
|
||||
{
|
||||
_stunSystem.TryUpdateStunDuration(target, ent.Comp.StunAmount);
|
||||
|
||||
_movementMod.TryUpdateMovementSpeedModDuration(
|
||||
target,
|
||||
MovementModStatusSystem.TaserSlowdown,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.DeviceNetwork.Systems;
|
||||
using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.DeviceNetwork;
|
||||
using Content.Shared.DeviceNetwork.Events;
|
||||
@@ -17,7 +16,6 @@ namespace Content.Server.SurveillanceCamera;
|
||||
public sealed class SurveillanceCameraSystem : SharedSurveillanceCameraSystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
|
||||
[Dependency] private readonly ViewSubscriberSystem _viewSubscriberSystem = default!;
|
||||
[Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _userInterface = default!;
|
||||
|
||||
@@ -167,15 +167,21 @@ namespace Content.Shared.ActionBlocker
|
||||
return !ev.Cancelled;
|
||||
}
|
||||
|
||||
public bool CanPickup(EntityUid user, EntityUid item)
|
||||
/// <summary>
|
||||
/// Whether a user can pickup the given item.
|
||||
/// </summary>
|
||||
/// <param name="user">The mob trying to pick up the item.</param>
|
||||
/// <param name="item">The item being picked up.</param>
|
||||
/// <param name="showPopup">Whether or not to show a popup to the player telling them why the attempt failed.</param>
|
||||
public bool CanPickup(EntityUid user, EntityUid item, bool showPopup = false)
|
||||
{
|
||||
var userEv = new PickupAttemptEvent(user, item);
|
||||
var userEv = new PickupAttemptEvent(user, item, showPopup);
|
||||
RaiseLocalEvent(user, userEv);
|
||||
|
||||
if (userEv.Cancelled)
|
||||
return false;
|
||||
|
||||
var itemEv = new GettingPickedUpAttemptEvent(user, item);
|
||||
var itemEv = new GettingPickedUpAttemptEvent(user, item, showPopup);
|
||||
RaiseLocalEvent(item, itemEv);
|
||||
|
||||
return !itemEv.Cancelled;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Clothing.Components;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Silicons.Borgs;
|
||||
@@ -32,6 +33,9 @@ public abstract class SharedArmorSystem : EntitySystem
|
||||
/// <param name="args">The event, contains the running count of armor percentage as a coefficient</param>
|
||||
private void OnCoefficientQuery(Entity<ArmorComponent> ent, ref InventoryRelayedEvent<CoefficientQueryEvent> args)
|
||||
{
|
||||
if (TryComp<MaskComponent>(ent, out var mask) && mask.IsToggled)
|
||||
return;
|
||||
|
||||
foreach (var armorCoefficient in ent.Comp.Modifiers.Coefficients)
|
||||
{
|
||||
args.Args.DamageModifiers.Coefficients[armorCoefficient.Key] = args.Args.DamageModifiers.Coefficients.TryGetValue(armorCoefficient.Key, out var coefficient) ? coefficient * armorCoefficient.Value : armorCoefficient.Value;
|
||||
@@ -40,12 +44,18 @@ public abstract class SharedArmorSystem : EntitySystem
|
||||
|
||||
private void OnDamageModify(EntityUid uid, ArmorComponent component, InventoryRelayedEvent<DamageModifyEvent> args)
|
||||
{
|
||||
if (TryComp<MaskComponent>(uid, out var mask) && mask.IsToggled)
|
||||
return;
|
||||
|
||||
args.Args.Damage = DamageSpecifier.ApplyModifierSet(args.Args.Damage, component.Modifiers);
|
||||
}
|
||||
|
||||
private void OnBorgDamageModify(EntityUid uid, ArmorComponent component,
|
||||
ref BorgModuleRelayedEvent<DamageModifyEvent> args)
|
||||
{
|
||||
if (TryComp<MaskComponent>(uid, out var mask) && mask.IsToggled)
|
||||
return;
|
||||
|
||||
args.Args.Damage = DamageSpecifier.ApplyModifierSet(args.Args.Damage, component.Modifiers);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ namespace Content.Shared.Atmos.EntitySystems
|
||||
|
||||
private EntityQuery<InternalsComponent> _internalsQuery;
|
||||
|
||||
public string?[] GasReagents = new string[Atmospherics.TotalNumberOfGases];
|
||||
|
||||
protected readonly GasPrototype[] GasPrototypes = new GasPrototype[Atmospherics.TotalNumberOfGases];
|
||||
|
||||
public override void Initialize()
|
||||
@@ -26,6 +28,7 @@ namespace Content.Shared.Atmos.EntitySystems
|
||||
for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
|
||||
{
|
||||
GasPrototypes[i] = _prototypeManager.Index<GasPrototype>(i.ToString());
|
||||
GasReagents[i] = GasPrototypes[i].Reagent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,8 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
SubscribeLocalEvent<SleepingComponent, EntityZombifiedEvent>(OnZombified);
|
||||
SubscribeLocalEvent<SleepingComponent, MobStateChangedEvent>(OnMobStateChanged);
|
||||
SubscribeLocalEvent<SleepingComponent, ComponentInit>(OnCompInit);
|
||||
SubscribeLocalEvent<SleepingComponent, ComponentRemove>(OnComponentRemoved);
|
||||
SubscribeLocalEvent<SleepingComponent, RejuvenateEvent>(OnRejuvenate);
|
||||
SubscribeLocalEvent<SleepingComponent, SpeakAttemptEvent>(OnSpeakAttempt);
|
||||
SubscribeLocalEvent<SleepingComponent, CanSeeAttemptEvent>(OnSeeAttempt);
|
||||
SubscribeLocalEvent<SleepingComponent, PointAttemptEvent>(OnPointAttempt);
|
||||
@@ -69,7 +71,6 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
SubscribeLocalEvent<SleepingComponent, InteractHandEvent>(OnInteractHand);
|
||||
SubscribeLocalEvent<SleepingComponent, StunEndAttemptEvent>(OnStunEndAttempt);
|
||||
SubscribeLocalEvent<SleepingComponent, StandUpAttemptEvent>(OnStandUpAttempt);
|
||||
SubscribeLocalEvent<SleepingComponent, RejuvenateEvent>(OnRejuvenate);
|
||||
|
||||
SubscribeLocalEvent<ForcedSleepingStatusEffectComponent, StatusEffectAppliedEvent>(OnStatusEffectApplied);
|
||||
SubscribeLocalEvent<SleepingComponent, UnbuckleAttemptEvent>(OnUnbuckleAttempt);
|
||||
@@ -102,6 +103,12 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
TrySleeping((ent, ent.Comp));
|
||||
}
|
||||
|
||||
private void OnRejuvenate(Entity<SleepingComponent> ent, ref RejuvenateEvent args)
|
||||
{
|
||||
// WAKE UP!!!
|
||||
RemComp<SleepingComponent>(ent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// when sleeping component is added or removed, we do some stuff with other components.
|
||||
/// </summary>
|
||||
@@ -143,6 +150,16 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
_actionsSystem.AddAction(ent, ref ent.Comp.WakeAction, WakeActionId, ent);
|
||||
}
|
||||
|
||||
private void OnComponentRemoved(Entity<SleepingComponent> ent, ref ComponentRemove args)
|
||||
{
|
||||
_actionsSystem.RemoveAction(ent.Owner, ent.Comp.WakeAction);
|
||||
|
||||
var ev = new SleepStateChangedEvent(false);
|
||||
RaiseLocalEvent(ent, ref ev);
|
||||
|
||||
_blindableSystem.UpdateIsBlind(ent.Owner);
|
||||
}
|
||||
|
||||
private void OnSpeakAttempt(Entity<SleepingComponent> ent, ref SpeakAttemptEvent args)
|
||||
{
|
||||
// TODO reduce duplication of this behavior with MobStateSystem somehow
|
||||
@@ -187,11 +204,6 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
||||
private void OnRejuvenate(Entity<SleepingComponent> ent, ref RejuvenateEvent args)
|
||||
{
|
||||
TryWaking((ent.Owner, ent.Comp), true);
|
||||
}
|
||||
|
||||
private void OnExamined(Entity<SleepingComponent> ent, ref ExaminedEvent args)
|
||||
{
|
||||
if (args.IsInDetailsRange)
|
||||
@@ -275,17 +287,6 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
TrySleeping(args.Target);
|
||||
}
|
||||
|
||||
private void Wake(Entity<SleepingComponent> ent)
|
||||
{
|
||||
RemComp<SleepingComponent>(ent);
|
||||
_actionsSystem.RemoveAction(ent.Owner, ent.Comp.WakeAction);
|
||||
|
||||
var ev = new SleepStateChangedEvent(false);
|
||||
RaiseLocalEvent(ent, ref ev);
|
||||
|
||||
_blindableSystem.UpdateIsBlind(ent.Owner);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Try sleeping. Only mobs can sleep.
|
||||
/// </summary>
|
||||
@@ -345,8 +346,7 @@ public sealed partial class SleepingSystem : EntitySystem
|
||||
_popupSystem.PopupClient(Loc.GetString("wake-other-success", ("target", Identity.Entity(ent, EntityManager))), ent, user);
|
||||
}
|
||||
|
||||
Wake((ent, ent.Comp));
|
||||
return true;
|
||||
return RemComp<SleepingComponent>(ent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
6
Content.Shared/Body/Components/BrainComponent.cs
Normal file
6
Content.Shared/Body/Components/BrainComponent.cs
Normal 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;
|
||||
@@ -1,12 +1,13 @@
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared.Body.Systems;
|
||||
using Content.Shared.Alert;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Chemistry.Components;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.Body.Components;
|
||||
namespace Content.Shared.Body.Components;
|
||||
|
||||
[RegisterComponent, Access(typeof(LungSystem))]
|
||||
[RegisterComponent, NetworkedComponent, Access(typeof(LungSystem))]
|
||||
public sealed partial class LungComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
@@ -1,12 +1,12 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Ghost.Components;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Events;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Mind.Components;
|
||||
using Content.Shared.Mobs.Components;
|
||||
using Content.Shared.Pointing;
|
||||
|
||||
namespace Content.Server.Body.Systems;
|
||||
namespace Content.Shared.Body.Systems;
|
||||
|
||||
public sealed class BrainSystem : EntitySystem
|
||||
{
|
||||
@@ -43,4 +43,3 @@ public sealed class BrainSystem : EntitySystem
|
||||
args.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Shared.Atmos.Components;
|
||||
using Content.Shared.Atmos.EntitySystems;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Chemistry.EntitySystems;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Chemistry.Components;
|
||||
using Content.Shared.Clothing;
|
||||
using Content.Shared.Inventory.Events;
|
||||
using BreathToolComponent = Content.Shared.Atmos.Components.BreathToolComponent;
|
||||
using InternalsComponent = Content.Shared.Body.Components.InternalsComponent;
|
||||
|
||||
namespace Content.Server.Body.Systems;
|
||||
namespace Content.Shared.Body.Systems;
|
||||
|
||||
public sealed class LungSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly AtmosphereSystem _atmos = default!;
|
||||
[Dependency] private readonly InternalsSystem _internals = default!;
|
||||
[Dependency] private readonly SharedAtmosphereSystem _atmos = default!;
|
||||
[Dependency] private readonly SharedInternalsSystem _internals = default!;
|
||||
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
|
||||
|
||||
public static string LungSolutionName = "Lung";
|
||||
@@ -573,7 +573,7 @@ namespace Content.Shared.Containers.ItemSlots
|
||||
item = slot.Item;
|
||||
|
||||
// This handles user logic
|
||||
if (user != null && item != null && !_actionBlockerSystem.CanPickup(user.Value, item.Value))
|
||||
if (user != null && item != null && !_actionBlockerSystem.CanPickup(user.Value, item.Value, showPopup: true))
|
||||
return false;
|
||||
|
||||
Eject(uid, slot, item!.Value, user, excludeUserAudio);
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Shared.Inventory;
|
||||
using Content.Shared.Eye.Blinding.Components;
|
||||
using Content.Shared.Tools.Components;
|
||||
using Content.Shared.Item.ItemToggle.Components;
|
||||
using Content.Shared.Clothing.Components;
|
||||
|
||||
namespace Content.Shared.Eye.Blinding.Systems
|
||||
{
|
||||
@@ -29,6 +30,9 @@ namespace Content.Shared.Eye.Blinding.Systems
|
||||
|
||||
private void OnGetProtection(EntityUid uid, EyeProtectionComponent component, GetEyeProtectionEvent args)
|
||||
{
|
||||
if (TryComp<MaskComponent>(uid, out var mask) && mask.IsToggled)
|
||||
return;
|
||||
|
||||
args.Protection += component.ProtectionTime;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ using Robust.Shared.Timing;
|
||||
using System.Linq;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Content.Shared.Clothing.Components;
|
||||
|
||||
namespace Content.Shared.Flash;
|
||||
|
||||
@@ -258,6 +259,9 @@ public abstract class SharedFlashSystem : EntitySystem
|
||||
|
||||
private void OnFlashImmunityFlashAttempt(Entity<FlashImmunityComponent> ent, ref FlashAttemptEvent args)
|
||||
{
|
||||
if (TryComp<MaskComponent>(ent, out var mask) && mask.IsToggled)
|
||||
return;
|
||||
|
||||
if (ent.Comp.Enabled)
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
||||
13
Content.Shared/Ghost/GhostOnMoveComponent.cs
Normal file
13
Content.Shared/Ghost/GhostOnMoveComponent.cs
Normal 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;
|
||||
}
|
||||
@@ -181,7 +181,7 @@ public abstract partial class SharedHandsSystem : EntitySystem
|
||||
if (!CanDropHeld(uid, handName, checkActionBlocker))
|
||||
return false;
|
||||
|
||||
if (!CanPickupToHand(uid, entity.Value, handsComp.ActiveHandId, checkActionBlocker, handsComp))
|
||||
if (!CanPickupToHand(uid, entity.Value, handsComp.ActiveHandId, checkActionBlocker: checkActionBlocker, handsComp: handsComp))
|
||||
return false;
|
||||
|
||||
DoDrop(uid, handName, false, log: false);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Diagnostics;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Item;
|
||||
@@ -84,7 +83,10 @@ public abstract partial class SharedHandsSystem
|
||||
if (!Resolve(entity, ref item, false))
|
||||
return false;
|
||||
|
||||
if (!CanPickupToHand(uid, entity, handId, checkActionBlocker, handsComp, item))
|
||||
if (!CanPickupToHand(uid, entity, handId, checkActionBlocker: checkActionBlocker, showPopup: true, handsComp: handsComp, item: item))
|
||||
return false;
|
||||
|
||||
if (!BeforeDoPickup((uid, handsComp), entity))
|
||||
return false;
|
||||
|
||||
if (animate)
|
||||
@@ -151,7 +153,11 @@ public abstract partial class SharedHandsSystem
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool CanPickupAnyHand(EntityUid uid, EntityUid entity, bool checkActionBlocker = true, HandsComponent? handsComp = null, ItemComponent? item = null)
|
||||
/// <summary>
|
||||
/// Checks whether a given item will fit into the user's first free hand.
|
||||
/// Unless otherwise specified, this will also check the general CanPickup action blocker.
|
||||
/// </summary>
|
||||
public bool CanPickupAnyHand(EntityUid uid, EntityUid entity, bool checkActionBlocker = true, bool showPopup = false, HandsComponent? handsComp = null, ItemComponent? item = null)
|
||||
{
|
||||
if (!Resolve(uid, ref handsComp, false))
|
||||
return false;
|
||||
@@ -159,13 +165,14 @@ public abstract partial class SharedHandsSystem
|
||||
if (!TryGetEmptyHand((uid, handsComp), out var hand))
|
||||
return false;
|
||||
|
||||
return CanPickupToHand(uid, entity, hand, checkActionBlocker, handsComp, item);
|
||||
return CanPickupToHand(uid, entity, hand, checkActionBlocker, showPopup, handsComp, item);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether a given item will fit into a specific user's hand. Unless otherwise specified, this will also check the general CanPickup action blocker.
|
||||
/// Checks whether a given item will fit into a specific user's hand.
|
||||
/// Unless otherwise specified, this will also check the general CanPickup action blocker.
|
||||
/// </summary>
|
||||
public bool CanPickupToHand(EntityUid uid, EntityUid entity, string handId, bool checkActionBlocker = true, HandsComponent? handsComp = null, ItemComponent? item = null)
|
||||
public bool CanPickupToHand(EntityUid uid, EntityUid entity, string handId, bool checkActionBlocker = true, bool showPopup = false, HandsComponent? handsComp = null, ItemComponent? item = null)
|
||||
{
|
||||
if (!Resolve(uid, ref handsComp, false))
|
||||
return false;
|
||||
@@ -176,13 +183,17 @@ public abstract partial class SharedHandsSystem
|
||||
if (handContainer.ContainedEntities.FirstOrNull() != null)
|
||||
return false;
|
||||
|
||||
// Huh, seems kinda weird that this system passes item comp around
|
||||
// everywhere but it's never actually used besides being resolved.
|
||||
// I wouldn't be surprised if there's some API simplifications that
|
||||
// could be made with respect to that.
|
||||
if (!Resolve(entity, ref item, false))
|
||||
return false;
|
||||
|
||||
if (TryComp(entity, out PhysicsComponent? physics) && physics.BodyType == BodyType.Static)
|
||||
return false;
|
||||
|
||||
if (checkActionBlocker && !_actionBlocker.CanPickup(uid, entity))
|
||||
if (checkActionBlocker && !_actionBlocker.CanPickup(uid, entity, showPopup))
|
||||
return false;
|
||||
|
||||
if (!CheckWhitelists((uid, handsComp), handId, entity))
|
||||
@@ -232,6 +243,28 @@ public abstract partial class SharedHandsSystem
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Small helper function meant as a last step before <see cref="DoPickup"/>
|
||||
/// is called. Used to run a cancelable before pickup event that can have
|
||||
/// side effects, unlike the side effect free <see cref="GettingPickedUpAttemptEvent"/>.
|
||||
/// </summary>
|
||||
private bool BeforeDoPickup(Entity<HandsComponent?> user, EntityUid item)
|
||||
{
|
||||
if (!Resolve(user, ref user.Comp))
|
||||
return false;
|
||||
|
||||
var userEv = new BeforeEquippingHandEvent(item);
|
||||
RaiseLocalEvent(user, ref userEv);
|
||||
|
||||
if (userEv.Cancelled)
|
||||
return false;
|
||||
|
||||
var itemEv = new BeforeGettingEquippedHandEvent(user);
|
||||
RaiseLocalEvent(item, ref itemEv);
|
||||
|
||||
return !itemEv.Cancelled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Puts an entity into the player's hand, assumes that the insertion is allowed. In general, you should not be calling this function directly.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Numerics;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Serialization;
|
||||
@@ -156,6 +157,32 @@ namespace Content.Shared.Hands
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raised against an item being picked up before it is actually inserted
|
||||
/// into the pick-up-ers hand container. This can be handled with side
|
||||
/// effects, and may be canceled preventing the pickup in a way that
|
||||
/// <see cref="SharedHandsSystem.CanPickupToHand"/> and similar don't see.
|
||||
/// </summary>
|
||||
/// <param name="User">The user picking up the item.</param>
|
||||
/// <param name="Cancelled">
|
||||
/// If true, the item will not be equipped into the user's hand.
|
||||
/// </param>
|
||||
[ByRefEvent]
|
||||
public record struct BeforeGettingEquippedHandEvent(EntityUid User, bool Cancelled = false);
|
||||
|
||||
/// <summary>
|
||||
/// Raised against a mob picking up and item before it is actually inserted
|
||||
/// into the pick-up-ers hand container. This can be handled with side
|
||||
/// effects, and may be canceled preventing the pickup in a way that
|
||||
/// <see cref="SharedHandsSystem.CanPickupToHand"/> and similar don't see.
|
||||
/// </summary>
|
||||
/// <param name="Item">The item being picked up.</param>
|
||||
/// <param name="Cancelled">
|
||||
/// If true, the item will not be equipped into the user's hand.
|
||||
/// </param>
|
||||
[ByRefEvent]
|
||||
public record struct BeforeEquippingHandEvent(EntityUid Item, bool Cancelled = false);
|
||||
|
||||
/// <summary>
|
||||
/// Raised when putting an entity into a hand slot
|
||||
/// </summary>
|
||||
|
||||
@@ -100,6 +100,7 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
|
||||
{
|
||||
SkinColorationStrategyInput.Unary => skinColoration.FromUnary(speciesPrototype.DefaultHumanSkinTone),
|
||||
SkinColorationStrategyInput.Color => skinColoration.ClosestSkinColor(speciesPrototype.DefaultSkinTone),
|
||||
_ => skinColoration.ClosestSkinColor(speciesPrototype.DefaultSkinTone),
|
||||
};
|
||||
|
||||
return new(
|
||||
@@ -109,11 +110,11 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
|
||||
Color.Black,
|
||||
Color.Black,
|
||||
skinColor,
|
||||
new ()
|
||||
new()
|
||||
);
|
||||
}
|
||||
|
||||
private static IReadOnlyList<Color> RealisticEyeColors = new List<Color>
|
||||
private static IReadOnlyList<Color> _realisticEyeColors = new List<Color>
|
||||
{
|
||||
Color.Brown,
|
||||
Color.Gray,
|
||||
@@ -145,7 +146,7 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
|
||||
|
||||
// TODO: Add random markings
|
||||
|
||||
var newEyeColor = random.Pick(RealisticEyeColors);
|
||||
var newEyeColor = random.Pick(_realisticEyeColors);
|
||||
|
||||
var protoMan = IoCManager.Resolve<IPrototypeManager>();
|
||||
var skinType = protoMan.Index<SpeciesPrototype>(species).SkinColoration;
|
||||
@@ -155,9 +156,10 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
|
||||
{
|
||||
SkinColorationStrategyInput.Unary => strategy.FromUnary(random.NextFloat(0f, 100f)),
|
||||
SkinColorationStrategyInput.Color => strategy.ClosestSkinColor(new Color(random.NextFloat(1), random.NextFloat(1), random.NextFloat(1), 1)),
|
||||
_ => strategy.ClosestSkinColor(new Color(random.NextFloat(1), random.NextFloat(1), random.NextFloat(1), 1)),
|
||||
};
|
||||
|
||||
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ());
|
||||
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new());
|
||||
|
||||
float RandomizeColor(float channel)
|
||||
{
|
||||
|
||||
@@ -37,12 +37,17 @@ public sealed class MultiHandedItemSystem : EntitySystem
|
||||
|
||||
private void OnAttemptPickup(Entity<MultiHandedItemComponent> ent, ref GettingPickedUpAttemptEvent args)
|
||||
{
|
||||
if (_hands.CountFreeHands(args.User) >= ent.Comp.HandsNeeded)
|
||||
if (args.Cancelled || _hands.CountFreeHands(args.User) >= ent.Comp.HandsNeeded)
|
||||
return;
|
||||
|
||||
args.Cancel();
|
||||
_popup.PopupPredictedCursor(Loc.GetString("multi-handed-item-pick-up-fail",
|
||||
("number", ent.Comp.HandsNeeded - 1), ("item", ent.Owner)), args.User);
|
||||
|
||||
if (args.ShowPopup)
|
||||
_popup.PopupPredictedCursor(
|
||||
Loc.GetString("multi-handed-item-pick-up-fail",
|
||||
("number", ent.Comp.HandsNeeded - 1),
|
||||
("item", ent.Owner)),
|
||||
args.User);
|
||||
}
|
||||
|
||||
private void OnVirtualItemDeleted(Entity<MultiHandedItemComponent> ent, ref VirtualItemDeletedEvent args)
|
||||
|
||||
@@ -1,30 +1,47 @@
|
||||
namespace Content.Shared.Item;
|
||||
|
||||
/// <summary>
|
||||
/// Raised on a *mob* when it tries to pickup something
|
||||
/// Raised on a *mob* when it tries to pickup something.
|
||||
/// IMPORTANT: Attempt event subscriptions should not be doing any state changes like throwing items, opening UIs, playing sounds etc!
|
||||
/// </summary>
|
||||
public sealed class PickupAttemptEvent : BasePickupAttemptEvent
|
||||
{
|
||||
public PickupAttemptEvent(EntityUid user, EntityUid item) : base(user, item) { }
|
||||
public PickupAttemptEvent(EntityUid user, EntityUid item, bool showPopup) : base(user, item, showPopup) { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raised directed at entity being picked up when someone tries to pick it up
|
||||
/// Raised directed at entity being picked up when someone tries to pick it up.
|
||||
/// IMPORTANT: Attempt event subscriptions should not be doing any state changes like throwing items, opening UIs, playing sounds etc!
|
||||
/// </summary>
|
||||
public sealed class GettingPickedUpAttemptEvent : BasePickupAttemptEvent
|
||||
{
|
||||
public GettingPickedUpAttemptEvent(EntityUid user, EntityUid item) : base(user, item) { }
|
||||
public GettingPickedUpAttemptEvent(EntityUid user, EntityUid item, bool showPopup) : base(user, item, showPopup) { }
|
||||
}
|
||||
|
||||
[Virtual]
|
||||
public class BasePickupAttemptEvent : CancellableEntityEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The mob that is picking up the item.
|
||||
/// </summary>
|
||||
public readonly EntityUid User;
|
||||
/// <summary>
|
||||
/// The item being picked up.
|
||||
/// </summary>
|
||||
|
||||
public readonly EntityUid Item;
|
||||
|
||||
public BasePickupAttemptEvent(EntityUid user, EntityUid item)
|
||||
/// <summary>
|
||||
/// Whether or not to show a popup message to the player telling them why the attempt was cancelled.
|
||||
/// This should be true when this event is raised during interactions, and false when it is raised
|
||||
/// for disabling verbs or similar that do not do the actual pickup.
|
||||
/// </summary>
|
||||
public bool ShowPopup;
|
||||
|
||||
public BasePickupAttemptEvent(EntityUid user, EntityUid item, bool showPopup)
|
||||
{
|
||||
User = user;
|
||||
Item = item;
|
||||
ShowPopup = showPopup;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,6 @@ public sealed partial class ParcelWrappingSystem : EntitySystem
|
||||
wrapper.Owner != target &&
|
||||
// Wrapper should never be empty, but may as well make sure.
|
||||
!_charges.IsEmpty(wrapper.Owner) &&
|
||||
_whitelist.IsWhitelistPass(wrapper.Comp.Whitelist, target) &&
|
||||
_whitelist.IsBlacklistFail(wrapper.Comp.Blacklist, target);
|
||||
_whitelist.CheckBoth(target, wrapper.Comp.Blacklist, wrapper.Comp.Whitelist);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,6 +212,7 @@ namespace Content.Shared.Preferences
|
||||
return new()
|
||||
{
|
||||
Species = species,
|
||||
Appearance = HumanoidCharacterAppearance.DefaultWithSpecies(species),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
using Content.Shared.Inventory;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Storage.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Applies an ongoing pickup area around the attached entity.
|
||||
/// </summary>
|
||||
[RegisterComponent, AutoGenerateComponentPause]
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[AutoGenerateComponentState]
|
||||
[AutoGenerateComponentPause]
|
||||
public sealed partial class MagnetPickupComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("nextScan")]
|
||||
[AutoPausedField]
|
||||
[AutoNetworkedField]
|
||||
public TimeSpan NextScan = TimeSpan.Zero;
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -47,6 +47,7 @@ public sealed class MagnetPickupSystem : EntitySystem
|
||||
continue;
|
||||
|
||||
comp.NextScan += ScanDelay;
|
||||
Dirty(uid, comp);
|
||||
|
||||
if (!_inventory.TryGetContainingSlot((uid, xform, meta), out var slotDef))
|
||||
continue;
|
||||
|
||||
@@ -379,7 +379,7 @@ public abstract class SharedStrippableSystem : EntitySystem
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_handsSystem.CanPickupToHand(target, activeItem.Value, handName, checkActionBlocker: false, target.Comp))
|
||||
if (!_handsSystem.CanPickupToHand(target, activeItem.Value, handName, checkActionBlocker: false, handsComp: target.Comp))
|
||||
{
|
||||
_popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-put-message", ("owner", Identity.Entity(target, EntityManager))));
|
||||
return false;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
using Content.Shared.Eye.Blinding.Components;
|
||||
using Content.Shared.Eye.Blinding.Systems;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Robust.Shared.Network;
|
||||
|
||||
namespace Content.Shared.Traits.Assorted;
|
||||
|
||||
@@ -38,18 +37,23 @@ public sealed class PermanentBlindnessSystem : EntitySystem
|
||||
{
|
||||
_blinding.SetMinDamage((blindness.Owner, blindable), 0);
|
||||
}
|
||||
|
||||
// Heal all eye damage when the component is removed.
|
||||
// Otherwise you would still be blind, but not *permanently* blind, meaning you have to heal the eye damage with oculine.
|
||||
// This is needed for changelings that transform from a blind player to a non-blind one.
|
||||
_blinding.AdjustEyeDamage((blindness.Owner, blindable), -blindable.EyeDamage);
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<PermanentBlindnessComponent> blindness, ref MapInitEvent args)
|
||||
{
|
||||
if(!TryComp<BlindableComponent>(blindness.Owner, out var blindable))
|
||||
if (!TryComp<BlindableComponent>(blindness.Owner, out var blindable))
|
||||
return;
|
||||
|
||||
if (blindness.Comp.Blindness != 0)
|
||||
_blinding.SetMinDamage((blindness.Owner, blindable), blindness.Comp.Blindness);
|
||||
else
|
||||
{
|
||||
var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude;
|
||||
var maxMagnitudeInt = (int)BlurryVisionComponent.MaxMagnitude;
|
||||
_blinding.SetMinDamage((blindness.Owner, blindable), maxMagnitudeInt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ public sealed partial class TimerTriggerComponent : Component
|
||||
|
||||
/// <summary>
|
||||
/// The entity that activated this trigger.
|
||||
/// TODO: use WeakEntityReference once the engine PR is merged!
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public EntityUid? User;
|
||||
|
||||
@@ -168,7 +168,8 @@ public sealed partial class TriggerSystem
|
||||
|
||||
if (timer.NextTrigger <= curTime)
|
||||
{
|
||||
Trigger(uid, timer.User, timer.KeyOut);
|
||||
var user = TerminatingOrDeleted(timer.User) ? null : timer.User;
|
||||
Trigger(uid, user, timer.KeyOut);
|
||||
// Remove after triggering to prevent it from starting the timer again
|
||||
RemComp<ActiveTimerTriggerComponent>(uid);
|
||||
if (TryComp<AppearanceComponent>(uid, out var appearance))
|
||||
|
||||
@@ -107,6 +107,7 @@ public sealed partial class TriggerSystem : EntitySystem
|
||||
ent.Comp.NextTrigger = curTime + ent.Comp.Delay;
|
||||
var delay = ent.Comp.InitialBeepDelay ?? ent.Comp.BeepInterval;
|
||||
ent.Comp.NextBeep = curTime + delay;
|
||||
ent.Comp.User = user;
|
||||
Dirty(ent);
|
||||
|
||||
var ev = new ActiveTimerTriggerEvent(user);
|
||||
|
||||
@@ -17,7 +17,7 @@ public sealed partial class PendingZombieComponent : Component
|
||||
{
|
||||
DamageDict = new ()
|
||||
{
|
||||
{ "Poison", 0.4 },
|
||||
{ "Poison", 0.3 },
|
||||
}
|
||||
};
|
||||
|
||||
@@ -34,7 +34,7 @@ public sealed partial class PendingZombieComponent : Component
|
||||
/// The amount of time left before the infected begins to take damage.
|
||||
/// </summary>
|
||||
[DataField("gracePeriod"), ViewVariables(VVAccess.ReadWrite)]
|
||||
public TimeSpan GracePeriod = TimeSpan.Zero;
|
||||
public TimeSpan GracePeriod = TimeSpan.FromMinutes(2);
|
||||
|
||||
/// <summary>
|
||||
/// The minimum amount of time initial infected have before they start taking infection damage.
|
||||
|
||||
@@ -1447,5 +1447,19 @@ Entries:
|
||||
id: 175
|
||||
time: '2025-09-25T21:43:53.0000000+00:00'
|
||||
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
|
||||
Order: 2
|
||||
|
||||
@@ -1,413 +1,15 @@
|
||||
Entries:
|
||||
- author: EmoGarbage404
|
||||
- author: CoconutThunder
|
||||
changes:
|
||||
- message: You can now patch holes in the floors of the evac shuttle and ATS.
|
||||
- message: Fixed lubed items being thrown when looking at the pickup verb.
|
||||
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 !
|
||||
- message: Fixed multihanded items showing a popup when looking at the pickup verb.
|
||||
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.
|
||||
- message: Fixed a bug with lubed handcuffs.
|
||||
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
|
||||
changes:
|
||||
- message: Shuttle impact force is now proportional to direction of impact.
|
||||
type: Tweak
|
||||
id: 8548
|
||||
time: '2025-05-21T13:32:46.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37667
|
||||
- author: muburu
|
||||
changes:
|
||||
- message: Singularity beacons and powersinks now require two free hands to hold.
|
||||
type: Tweak
|
||||
id: 8549
|
||||
time: '2025-05-21T17:11:34.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37683
|
||||
- author: ElectroJr
|
||||
changes:
|
||||
- message: Microwaving the nuke disk will now slightly randomize the nuke countdown
|
||||
timer.
|
||||
type: Add
|
||||
id: 8550
|
||||
time: '2025-05-21T18:06:58.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/36114
|
||||
- author: AsnDen
|
||||
changes:
|
||||
- message: Cyborgs now can scream. 9 new screaming sound were added.
|
||||
type: Tweak
|
||||
id: 8551
|
||||
time: '2025-05-21T19:49:56.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/32329
|
||||
- author: ScarKy0
|
||||
changes:
|
||||
- message: The "Help another traitor" objective now requires you help them complete
|
||||
all of their objectives.
|
||||
type: Tweak
|
||||
- message: The "Help another traitor" objective now updates it's progress according
|
||||
to the progress of who you're supposed to help, allowing for partial completion.
|
||||
type: Tweak
|
||||
id: 8552
|
||||
time: '2025-05-21T20:45:35.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37679
|
||||
- author: PJB3005
|
||||
changes:
|
||||
- message: Significantly reduced video memory usage of the parallax system.
|
||||
type: Tweak
|
||||
id: 8553
|
||||
time: '2025-05-22T01:22:08.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37180
|
||||
- author: ArtisticRoomba
|
||||
changes:
|
||||
- message: Tesla coils can now hold a max capacity of 5 MJ, and receive 5 MJ of
|
||||
energy when struck by lightning.
|
||||
type: Tweak
|
||||
- message: Tesla coils can now only output a maximum of 350 kW to the grid. This
|
||||
was done to make power flow smoother (it was triggering epilepsy in extreme
|
||||
circumstances).
|
||||
type: Tweak
|
||||
id: 8554
|
||||
time: '2025-05-22T01:39:49.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37626
|
||||
- author: Wolfkey-SomeoneElseTookMyUsername
|
||||
changes:
|
||||
- message: You can now construct disposal signalers, which trigger a signal every
|
||||
time an item passes through them.
|
||||
type: Add
|
||||
id: 8555
|
||||
time: '2025-05-22T02:18:57.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37535
|
||||
- author: ScarKy0
|
||||
changes:
|
||||
- message: The "Escape alive and unrestrained" objective now counts as partially
|
||||
complete if you show up handcuffed. Being dead still has it count as a total
|
||||
fail!
|
||||
type: Tweak
|
||||
id: 8556
|
||||
time: '2025-05-22T03:25:07.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37680
|
||||
- author: EmoGarbage404
|
||||
changes:
|
||||
- message: Added cargo orders for gold and silver ingots.
|
||||
type: Add
|
||||
- message: Reduced prices of cardboard and paper material crate.
|
||||
type: Tweak
|
||||
id: 8557
|
||||
time: '2025-05-22T08:42:20.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37713
|
||||
- author: ArtisticRoomba
|
||||
changes:
|
||||
- message: The volume of large gas canisters have been increased to 1500L to encourage
|
||||
their usage in resolving pressure problems in spaced rooms. The gas that starts
|
||||
inside of the tanks and the price of them has increased to compensate.
|
||||
type: Tweak
|
||||
id: 8558
|
||||
time: '2025-05-22T18:12:25.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37564
|
||||
- author: Hitlinemoss
|
||||
changes:
|
||||
- message: Liquid soap is now slippery.
|
||||
type: Fix
|
||||
id: 8559
|
||||
time: '2025-05-23T21:57:06.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37747
|
||||
id: 8561
|
||||
time: '2025-05-25T05:10:58.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/38705
|
||||
- author: CoconutThunder
|
||||
changes:
|
||||
- message: The Chief Medical Officer should now appear with the correct precedence
|
||||
@@ -3963,3 +3565,382 @@
|
||||
id: 9011
|
||||
time: '2025-09-27T17:01:14.0000000+00:00'
|
||||
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: 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
|
||||
- author: archee1
|
||||
changes:
|
||||
- message: Space Cobras no longer attack Space Adders automatically.
|
||||
type: Fix
|
||||
id: 9051
|
||||
time: '2025-10-08T11:30:29.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37424
|
||||
- author: aada
|
||||
changes:
|
||||
- message: Buckets are now destructible.
|
||||
type: Tweak
|
||||
id: 9052
|
||||
time: '2025-10-08T13:58:37.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40772
|
||||
- author: UpAndLeaves
|
||||
changes:
|
||||
- message: Zombie infections now take approximately three minutes longer to bring
|
||||
a fully healed person to critical condition.
|
||||
type: Tweak
|
||||
id: 9053
|
||||
time: '2025-10-08T14:11:01.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37445
|
||||
- author: YoungThugSS14
|
||||
changes:
|
||||
- message: The temperature gun bolts now count as energy projectiles for the sake
|
||||
of reflection.
|
||||
type: Tweak
|
||||
- message: The temperature gun's cold projectile can no longer pass through windows.
|
||||
type: Fix
|
||||
- message: The temperature gun now has color-appropriate muzzle flashes.
|
||||
type: Fix
|
||||
id: 9054
|
||||
time: '2025-10-08T15:10:19.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37581
|
||||
- author: K-Dynamic
|
||||
changes:
|
||||
- message: Energy shotgun lethal projectiles can now hit holo mobs.
|
||||
type: Fix
|
||||
id: 9055
|
||||
time: '2025-10-08T15:23:02.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/37920
|
||||
- author: Hitlinemoss
|
||||
changes:
|
||||
- message: Folders and clipboards are now available in the Trinkets loadout tab.
|
||||
type: Add
|
||||
id: 9056
|
||||
time: '2025-10-08T15:49:21.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/39920
|
||||
- author: SlamBamActionman
|
||||
changes:
|
||||
- message: Disablers, temperature guns and tasers can now hit holo mobs.
|
||||
type: Fix
|
||||
id: 9057
|
||||
time: '2025-10-08T21:59:39.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40782
|
||||
- author: Centronias
|
||||
changes:
|
||||
- message: You can now attach paper labels to wrapped parcels.
|
||||
type: Add
|
||||
id: 9058
|
||||
time: '2025-10-08T22:27:58.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40783
|
||||
- author: ToastEnjoyer
|
||||
changes:
|
||||
- message: On fland, the wardens enforcer has been removed.
|
||||
type: Remove
|
||||
id: 9059
|
||||
time: '2025-10-08T23:45:56.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40786
|
||||
- author: Princess-Cheeseballs
|
||||
changes:
|
||||
- message: Dying while asleep shouldn't permanently blind you anymore.
|
||||
type: Fix
|
||||
id: 9061
|
||||
time: '2025-10-09T13:46:20.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40366
|
||||
- author: kontakt
|
||||
changes:
|
||||
- message: Bulldog magazines are now only accessible through emagged fabricators.
|
||||
type: Tweak
|
||||
id: 9062
|
||||
time: '2025-10-09T14:00:07.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40790
|
||||
|
||||
@@ -731,4 +731,37 @@
|
||||
id: 88
|
||||
time: '2025-09-25T21:36:16.0000000+00:00'
|
||||
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
|
||||
- author: Vortebo
|
||||
changes:
|
||||
- message: On Relic, some small changes to address unintended gameplay issues and
|
||||
further increase historical accuracy.
|
||||
type: Tweak
|
||||
id: 91
|
||||
time: '2025-10-08T16:59:59.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40537
|
||||
- author: ToastEnjoyer
|
||||
changes:
|
||||
- message: On box, the wardens enforcer has been removed from their office.
|
||||
type: Remove
|
||||
id: 92
|
||||
time: '2025-10-08T20:41:46.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/40785
|
||||
Order: 1
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
discord-round-notifications-new = A new round is starting!
|
||||
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-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
|
||||
|
||||
@@ -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-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-description = A cute but mischievous mothroach.
|
||||
|
||||
|
||||
@@ -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 = Vox Left Arm Tattoo (Heart)
|
||||
|
||||
marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart)
|
||||
marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart)
|
||||
|
||||
marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (hive)
|
||||
marking-TattooVoxHiveChest = Vox Chest Tattoo (hive)
|
||||
marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (Hive)
|
||||
marking-TattooVoxHiveChest = Vox Chest Tattoo (Hive)
|
||||
|
||||
marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (nightling)
|
||||
marking-TattooVoxNightlingChest = Vox Chest Tattoo (nightling)
|
||||
marking-TattooVoxNightlingChest-nightling_s = 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 = Eye Scar (Right)
|
||||
|
||||
@@ -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-weapon-antique-laser = antique laser pistol
|
||||
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
|
||||
steal-target-groups-figurines = figurine
|
||||
|
||||
@@ -43,6 +43,7 @@ loadout-group-passenger-neck = Passenger neck
|
||||
loadout-group-bartender-head = Bartender head
|
||||
loadout-group-bartender-jumpsuit = Bartender jumpsuit
|
||||
loadout-group-bartender-outerclothing = Bartender outer clothing
|
||||
loadout-group-bartender-shaker = Bartender shaker
|
||||
|
||||
loadout-group-chef-head = Chef head
|
||||
loadout-group-chef-mask = Chef mask
|
||||
|
||||
@@ -91,7 +91,7 @@ uplink-pistol-magazine-name = Pistol Magazine (.35 auto)
|
||||
uplink-pistol-magazine-desc = Pistol magazine with 10 cartridges. Compatible with the Viper.
|
||||
|
||||
uplink-pistol-magazine-c20r-name = SMG magazine (.35 auto)
|
||||
uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 cartridges. Compatible with C-20r.
|
||||
uplink-pistol-magazine-c20r-desc = SMG magazine with 30 cartridges. Compatible with C-20r.
|
||||
|
||||
uplink-magazine-bulldog-pellet-name = Drum magazine (.50 pellet)
|
||||
uplink-magazine-bulldog-pellet-desc = Shotgun magazine with 8 shells filled with buckshot. Compatible with the Bulldog.
|
||||
|
||||
@@ -66,7 +66,10 @@ entities:
|
||||
- type: OccluderTree
|
||||
- type: SpreaderGrid
|
||||
- type: Shuttle
|
||||
dampingModifier: 0.25
|
||||
- type: DeviceNetwork
|
||||
configurators: []
|
||||
deviceLists: []
|
||||
transmitFrequencyId: ArrivalsShuttleTimer
|
||||
- type: GridPathfinding
|
||||
- type: Gravity
|
||||
gravityShakeSound: !type:SoundPathSpecifier
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
meta:
|
||||
format: 7
|
||||
category: Grid
|
||||
engineVersion: 264.0.0
|
||||
engineVersion: 267.1.0
|
||||
forkId: ""
|
||||
forkVersion: ""
|
||||
time: 08/06/2025 14:30:26
|
||||
entityCount: 176
|
||||
time: 09/27/2025 19:19:05
|
||||
entityCount: 180
|
||||
maps: []
|
||||
grids:
|
||||
- 1
|
||||
@@ -93,34 +93,12 @@ entities:
|
||||
uniqueMixes:
|
||||
- volume: 2500
|
||||
immutable: True
|
||||
moles:
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
moles: {}
|
||||
- volume: 2500
|
||||
temperature: 293.15
|
||||
moles:
|
||||
- 21.824879
|
||||
- 82.10312
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
Oxygen: 21.824879
|
||||
Nitrogen: 82.10312
|
||||
chunkSize: 4
|
||||
- type: GasTileOverlay
|
||||
- type: RadiationGridResistance
|
||||
@@ -155,6 +133,21 @@ entities:
|
||||
- type: Transform
|
||||
pos: 6.5,1.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: AtmosDeviceFanDirectional
|
||||
entities:
|
||||
- uid: 177
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 8.5,-4.5
|
||||
parent: 1
|
||||
- uid: 178
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 8.5,1.5
|
||||
parent: 1
|
||||
- proto: CableApcExtension
|
||||
entities:
|
||||
- uid: 111
|
||||
@@ -464,6 +457,9 @@ entities:
|
||||
entities:
|
||||
- uid: 9
|
||||
components:
|
||||
- type: MetaData
|
||||
desc: Used to pilot the prison shuttle.
|
||||
name: prison shuttle console
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 13.5,-1.5
|
||||
@@ -726,13 +722,6 @@ entities:
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 12.5,0.5
|
||||
parent: 1
|
||||
- proto: PrefilledSyringe
|
||||
entities:
|
||||
- uid: 6
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 13.5,-0.5
|
||||
parent: 1
|
||||
- proto: RadioHandheld
|
||||
entities:
|
||||
- uid: 94
|
||||
@@ -747,41 +736,57 @@ entities:
|
||||
- type: Transform
|
||||
pos: 5.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 53
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 9.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 54
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 12.5,1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 55
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 12.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 56
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 14.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 57
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 14.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 58
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 14.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 89
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 5.5,1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- proto: SMESBasic
|
||||
entities:
|
||||
- uid: 100
|
||||
@@ -806,6 +811,13 @@ entities:
|
||||
- type: Transform
|
||||
pos: 3.5,0.5
|
||||
parent: 1
|
||||
- proto: Syringe
|
||||
entities:
|
||||
- uid: 6
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 13.5,-0.5
|
||||
parent: 1
|
||||
- proto: Table
|
||||
entities:
|
||||
- uid: 76
|
||||
@@ -1027,12 +1039,16 @@ entities:
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 74
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- proto: WindoorSecureSecurityLocked
|
||||
entities:
|
||||
- uid: 11
|
||||
@@ -1040,16 +1056,37 @@ entities:
|
||||
- type: Transform
|
||||
pos: 1.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 75
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 90
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 179
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 8.5,1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 180
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 8.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- proto: WindowDirectional
|
||||
entities:
|
||||
- uid: 36
|
||||
@@ -1057,89 +1094,121 @@ entities:
|
||||
- type: Transform
|
||||
pos: 5.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 50
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 3.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 61
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 13.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 62
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 13.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 63
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 13.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 64
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 12.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 65
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 12.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 66
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 9.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 67
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 68
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 69
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 70
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 4.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 71
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 2.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 87
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 5.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 170
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 4.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 171
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
...
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
meta:
|
||||
format: 7
|
||||
category: Grid
|
||||
engineVersion: 264.0.0
|
||||
engineVersion: 267.1.0
|
||||
forkId: ""
|
||||
forkVersion: ""
|
||||
time: 07/25/2025 18:00:45
|
||||
entityCount: 176
|
||||
time: 09/27/2025 19:18:41
|
||||
entityCount: 180
|
||||
maps: []
|
||||
grids:
|
||||
- 1
|
||||
@@ -66,7 +66,7 @@ entities:
|
||||
0,-1:
|
||||
0: 61166
|
||||
1,-1:
|
||||
0: 65262
|
||||
0: 65278
|
||||
1,0:
|
||||
0: 14
|
||||
2,0:
|
||||
@@ -83,18 +83,8 @@ entities:
|
||||
- volume: 2500
|
||||
temperature: 293.15
|
||||
moles:
|
||||
- 21.824879
|
||||
- 82.10312
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
- 0
|
||||
Oxygen: 21.824879
|
||||
Nitrogen: 82.10312
|
||||
chunkSize: 4
|
||||
- type: GasTileOverlay
|
||||
- type: RadiationGridResistance
|
||||
@@ -114,31 +104,20 @@ entities:
|
||||
parent: 1
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- proto: AirlockFreezerLocked
|
||||
- proto: AirlockEngineeringLocked
|
||||
entities:
|
||||
- uid: 10
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-0.5
|
||||
parent: 1
|
||||
- type: AccessReader
|
||||
access:
|
||||
- - Atmospherics
|
||||
- - Captain
|
||||
- - CentralCommand
|
||||
- - Chemistry
|
||||
- - ChiefEngineer
|
||||
- - ChiefMedicalOfficer
|
||||
- - Command
|
||||
- - Cryogenics
|
||||
- - Engineering
|
||||
- - Medical
|
||||
- type: Door
|
||||
secondsUntilStateChange: -613.913
|
||||
state: Opening
|
||||
- type: DeviceLinkSource
|
||||
lastSignals:
|
||||
DoorStatus: True
|
||||
- proto: AirlockMedicalLocked
|
||||
entities:
|
||||
- uid: 85
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-2.5
|
||||
parent: 1
|
||||
- proto: AirlockShuttle
|
||||
entities:
|
||||
- uid: 59
|
||||
@@ -160,6 +139,21 @@ entities:
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 4.5,0.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: AtmosDeviceFanDirectional
|
||||
entities:
|
||||
- uid: 91
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 8.5,-4.5
|
||||
parent: 1
|
||||
- uid: 177
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 8.5,1.5
|
||||
parent: 1
|
||||
- proto: CableApcExtension
|
||||
entities:
|
||||
- uid: 110
|
||||
@@ -325,7 +319,7 @@ entities:
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 5.5,-2.5
|
||||
pos: 5.5,-3.5
|
||||
parent: 1
|
||||
- uid: 52
|
||||
components:
|
||||
@@ -630,11 +624,6 @@ entities:
|
||||
- type: Transform
|
||||
pos: 4.5,-3.5
|
||||
parent: 1
|
||||
- uid: 85
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-2.5
|
||||
parent: 1
|
||||
- proto: LockerWallMedicalFilled
|
||||
entities:
|
||||
- uid: 8
|
||||
@@ -643,6 +632,8 @@ entities:
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 2.5,-4.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: MedkitBruteFilled
|
||||
entities:
|
||||
- uid: 6
|
||||
@@ -753,13 +744,6 @@ entities:
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 12.5,0.5
|
||||
parent: 1
|
||||
- proto: PrefilledSyringe
|
||||
entities:
|
||||
- uid: 175
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 13.5,-0.5
|
||||
parent: 1
|
||||
- proto: Rack
|
||||
entities:
|
||||
- uid: 88
|
||||
@@ -788,16 +772,15 @@ entities:
|
||||
- type: Transform
|
||||
pos: 4.5,-1.5
|
||||
parent: 1
|
||||
- uid: 91
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 92
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- proto: ShuttleWindow
|
||||
entities:
|
||||
- uid: 32
|
||||
@@ -805,41 +788,57 @@ entities:
|
||||
- type: Transform
|
||||
pos: 5.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 53
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 9.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 54
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 12.5,1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 55
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 12.5,-4.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 56
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 14.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 57
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 14.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 58
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 14.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 89
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 5.5,1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- proto: SMESBasic
|
||||
entities:
|
||||
- uid: 100
|
||||
@@ -876,6 +875,13 @@ entities:
|
||||
- type: Transform
|
||||
pos: 3.5,0.5
|
||||
parent: 1
|
||||
- proto: Syringe
|
||||
entities:
|
||||
- uid: 175
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 13.5,-0.5
|
||||
parent: 1
|
||||
- proto: Table
|
||||
entities:
|
||||
- uid: 76
|
||||
@@ -1079,12 +1085,16 @@ entities:
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 74
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- proto: WindowDirectional
|
||||
entities:
|
||||
- uid: 36
|
||||
@@ -1092,68 +1102,116 @@ entities:
|
||||
- type: Transform
|
||||
pos: 5.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 61
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 13.5,-0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 62
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 13.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 63
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 13.5,-2.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 64
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 12.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 65
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 12.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 66
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 9.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 67
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-3.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 68
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 69
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 9.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 70
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 7.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 87
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 5.5,0.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 178
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 3.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 179
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 2.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
- uid: 180
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 1.5,-1.5
|
||||
parent: 1
|
||||
- type: DeltaPressure
|
||||
gridUid: 1
|
||||
...
|
||||
|
||||
@@ -7011,7 +7011,7 @@ entities:
|
||||
- uid: 955
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 5.5,-4.5
|
||||
pos: 7.5,-4.5
|
||||
parent: 2
|
||||
- type: WarpPoint
|
||||
location: Automated Trade Station
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
meta:
|
||||
format: 7
|
||||
category: Map
|
||||
engineVersion: 266.0.0
|
||||
engineVersion: 267.2.0
|
||||
forkId: ""
|
||||
forkVersion: ""
|
||||
time: 09/06/2025 03:51:25
|
||||
entityCount: 28793
|
||||
time: 10/08/2025 20:15:18
|
||||
entityCount: 28790
|
||||
maps:
|
||||
- 780
|
||||
grids:
|
||||
@@ -10936,8 +10936,8 @@ entities:
|
||||
id: docking46345
|
||||
localAnchorB: -0.5,-1
|
||||
localAnchorA: -66.5,22
|
||||
damping: 42.40102
|
||||
stiffness: 380.5907
|
||||
damping: 42.401035
|
||||
stiffness: 380.59082
|
||||
- type: OccluderTree
|
||||
- type: Shuttle
|
||||
dampingModifier: 0.25
|
||||
@@ -23112,18 +23112,6 @@ entities:
|
||||
- type: Transform
|
||||
pos: 7.3923097,47.786827
|
||||
parent: 8364
|
||||
- proto: BoxShotgunSlug
|
||||
entities:
|
||||
- uid: 7852
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -7.2934785,34.60984
|
||||
parent: 8364
|
||||
- uid: 9144
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -7.289858,34.610893
|
||||
parent: 8364
|
||||
- proto: BoxSterileMask
|
||||
entities:
|
||||
- uid: 5467
|
||||
@@ -182974,15 +182962,6 @@ entities:
|
||||
- type: Physics
|
||||
canCollide: False
|
||||
- type: InsideEntityStorage
|
||||
- proto: WeaponShotgunEnforcer
|
||||
entities:
|
||||
- uid: 9086
|
||||
components:
|
||||
- type: Transform
|
||||
pos: -7.4221897,34.38881
|
||||
parent: 8364
|
||||
- type: BallisticAmmoProvider
|
||||
proto: ShellShotgunSlug
|
||||
- proto: WeaponShotgunKammerer
|
||||
entities:
|
||||
- uid: 26308
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
meta:
|
||||
format: 7
|
||||
category: Map
|
||||
engineVersion: 267.1.0
|
||||
engineVersion: 267.2.0
|
||||
forkId: ""
|
||||
forkVersion: ""
|
||||
time: 09/24/2025 21:56:25
|
||||
entityCount: 36083
|
||||
time: 10/08/2025 23:22:51
|
||||
entityCount: 36080
|
||||
maps:
|
||||
- 1
|
||||
grids:
|
||||
@@ -30897,11 +30897,6 @@ entities:
|
||||
- type: Transform
|
||||
pos: 16.61324,11.471256
|
||||
parent: 13329
|
||||
- uid: 10642
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 31.342075,13.304442
|
||||
parent: 13329
|
||||
- uid: 18486
|
||||
components:
|
||||
- type: Transform
|
||||
@@ -31282,11 +31277,6 @@ entities:
|
||||
- type: Transform
|
||||
pos: 16.446573,11.429589
|
||||
parent: 13329
|
||||
- uid: 9340
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 31.685825,13.288817
|
||||
parent: 13329
|
||||
- proto: BoxLightMixed
|
||||
entities:
|
||||
- uid: 1644
|
||||
@@ -227061,13 +227051,6 @@ entities:
|
||||
- type: Transform
|
||||
pos: 19.469765,12.608503
|
||||
parent: 13329
|
||||
- proto: WeaponShotgunEnforcer
|
||||
entities:
|
||||
- uid: 9339
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 31.498325,13.851317
|
||||
parent: 13329
|
||||
- proto: WeaponShotgunHandmade
|
||||
entities:
|
||||
- uid: 5418
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -54,7 +54,7 @@
|
||||
sprite: Clothing/Head/Hoods/Bio/security.rsi
|
||||
state: icon
|
||||
product: CrateSecurityBiosuit
|
||||
cost: 800
|
||||
cost: 1600
|
||||
category: cargoproduct-category-name-security
|
||||
group: market
|
||||
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
- id: DrinkWaterBottleFull
|
||||
- type: Tag
|
||||
tags:
|
||||
- BoxCardboard
|
||||
- BoxHug
|
||||
|
||||
- type: entity
|
||||
@@ -212,7 +213,7 @@
|
||||
- id: EmergencyOxygenTankFilled
|
||||
- id: EmergencyMedipen
|
||||
- id: Flare
|
||||
- id: FoodSnackNutribrick
|
||||
- id: FoodBreadNutriBatard
|
||||
- id: DrinkWaterBottleFull
|
||||
|
||||
- type: entity
|
||||
@@ -226,7 +227,7 @@
|
||||
- id: EmergencyNitrogenTankFilled
|
||||
- id: EmergencyMedipen
|
||||
- id: Flare
|
||||
- id: FoodSnackNutribrick
|
||||
- id: FoodBreadNutriBatard
|
||||
- id: DrinkWaterBottleFull
|
||||
- type: Sprite
|
||||
layers:
|
||||
@@ -246,7 +247,7 @@
|
||||
- id: EmergencyOxygenTankFilled
|
||||
- id: EmergencyMedipen
|
||||
- id: Flare
|
||||
- id: FoodSnackNutribrick
|
||||
- id: FoodBreadCottonNutriBatard
|
||||
- id: DrinkWaterBottleFull
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,5,3
|
||||
whitelist:
|
||||
whitelist: # TODO cardboard boxes shouldn't have whitelisting
|
||||
tags:
|
||||
- Candle
|
||||
- type: StorageFill
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
layers:
|
||||
- state: box_medical # Corvax-Resprite
|
||||
- state: bodybags
|
||||
- type: Storage
|
||||
- type: Storage # TODO cardboard boxes shouldn't have whitelisting
|
||||
whitelist:
|
||||
tags:
|
||||
- BodyBag
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
id: LockerFillHeadOfSecurityNoHardsuit
|
||||
table: !type:AllSelector
|
||||
children:
|
||||
- id: WeaponEnergyShotgun
|
||||
- id: WeaponEnergyMagnum
|
||||
- id: BookSpaceLaw
|
||||
- id: BoxEncryptionKeySecurity
|
||||
- id: CigarGoldCase
|
||||
@@ -331,7 +331,6 @@
|
||||
- id: RubberStampHos
|
||||
- id: BoxHoSCircuitboards
|
||||
- id: WeaponDisabler
|
||||
- id: WeaponTaser
|
||||
- id: WantedListCartridge
|
||||
- id: DrinkHosFlask
|
||||
# Corvax-Start
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
children:
|
||||
- id: FlashlightSeclite
|
||||
- id: WeaponDisabler
|
||||
- id: WeaponTaser
|
||||
- id: ClothingBeltSecurityFilled
|
||||
- id: Flash
|
||||
- id: ClothingEyesGlassesSecurity
|
||||
@@ -49,6 +48,7 @@
|
||||
amount: 2
|
||||
- id: NetworkConfigurator
|
||||
- id: Binoculars
|
||||
- id: WeaponEnergyShotgun
|
||||
|
||||
- type: entityTable
|
||||
id: FillLockerWardenHarduit
|
||||
@@ -75,7 +75,6 @@
|
||||
- id: FlashlightSeclite
|
||||
prob: 0.8
|
||||
- id: WeaponDisabler
|
||||
- id: WeaponTaser
|
||||
- id: ClothingUniformJumpsuitSecGrey
|
||||
prob: 0.3
|
||||
- id: ClothingHeadHelmetBasic
|
||||
@@ -111,7 +110,6 @@
|
||||
table: !type:AllSelector
|
||||
children:
|
||||
- id: ClothingEyesGlassesSecurity
|
||||
- id: WeaponTaser
|
||||
- id: WeaponDisabler
|
||||
- id: TrackingImplanter
|
||||
amount: 2
|
||||
|
||||
@@ -1,529 +1,4 @@
|
||||
# Belts that need/have visualizers
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltUtility
|
||||
name: utility belt
|
||||
description: Can hold various things.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/utility.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/utility.rsi
|
||||
- type: Storage
|
||||
maxItemSize: Normal
|
||||
# Don't add more than absolutely needed to this whitelist!
|
||||
# Utility belts shouldn't just be free extra storage.
|
||||
# This is only intended for basic engineering equipment.
|
||||
whitelist:
|
||||
tags:
|
||||
- Powerdrill
|
||||
- Wirecutter
|
||||
- Crowbar
|
||||
- Screwdriver
|
||||
- Flashlight
|
||||
- Wrench
|
||||
- GeigerCounter
|
||||
- Flare
|
||||
- CableCoil
|
||||
- CigPack
|
||||
- Radio
|
||||
- HolofanProjector
|
||||
- Multitool
|
||||
- AppraisalTool
|
||||
- JawsOfLife
|
||||
- GPS
|
||||
- WeldingMask
|
||||
- RemoteSignaller
|
||||
- UtilityKnife
|
||||
components:
|
||||
- StationMap
|
||||
- SprayPainter
|
||||
- SprayPainterAmmo
|
||||
- NetworkConfigurator
|
||||
- RCD
|
||||
- RCDAmmo
|
||||
- Welder
|
||||
- PowerCell
|
||||
- Geiger
|
||||
- TrayScanner
|
||||
- GasAnalyzer
|
||||
- HandLabeler
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
drill:
|
||||
whitelist:
|
||||
tags:
|
||||
- Powerdrill
|
||||
cutters_red:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wirecutter
|
||||
crowbar:
|
||||
whitelist:
|
||||
tags:
|
||||
- Crowbar
|
||||
crowbar_red:
|
||||
whitelist:
|
||||
tags:
|
||||
- CrowbarRed
|
||||
jaws:
|
||||
whitelist:
|
||||
tags:
|
||||
- JawsOfLife
|
||||
screwdriver_nuke:
|
||||
whitelist:
|
||||
tags:
|
||||
- Screwdriver
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
multitool:
|
||||
whitelist:
|
||||
tags:
|
||||
- Multitool
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
- type: Tag
|
||||
tags:
|
||||
- UtilityBelt
|
||||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltChiefEngineer
|
||||
name: chief engineer's toolbelt
|
||||
description: Holds tools, looks snazzy.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/ce.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/ce.rsi
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,9,1
|
||||
# TODO: Fill this out more.
|
||||
whitelist:
|
||||
tags:
|
||||
- Wirecutter
|
||||
- Crowbar
|
||||
- Screwdriver
|
||||
- Flashlight
|
||||
- Wrench
|
||||
- GeigerCounter
|
||||
- Flare
|
||||
- CableCoil
|
||||
- Powerdrill
|
||||
- JawsOfLife
|
||||
- CigPack
|
||||
- Radio
|
||||
- HolofanProjector
|
||||
- Multitool
|
||||
- AppraisalTool
|
||||
- UtilityKnife
|
||||
components:
|
||||
- StationMap
|
||||
- SprayPainter
|
||||
- SprayPainterAmmo
|
||||
- NetworkConfigurator
|
||||
- RCD
|
||||
- RCDAmmo
|
||||
- Welder
|
||||
- Flash
|
||||
- Handcuff
|
||||
- PowerCell
|
||||
- Geiger
|
||||
- TrayScanner
|
||||
- GasAnalyzer
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
drill:
|
||||
whitelist:
|
||||
tags:
|
||||
- Powerdrill
|
||||
cutters_red:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wirecutter
|
||||
crowbar:
|
||||
whitelist:
|
||||
tags:
|
||||
- Crowbar
|
||||
crowbar_red:
|
||||
whitelist:
|
||||
tags:
|
||||
- CrowbarRed
|
||||
jaws:
|
||||
whitelist:
|
||||
tags:
|
||||
- JawsOfLife
|
||||
screwdriver_nuke:
|
||||
whitelist:
|
||||
tags:
|
||||
- Screwdriver
|
||||
multitool:
|
||||
whitelist:
|
||||
tags:
|
||||
- Multitool
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
- type: StealTarget
|
||||
stealGroup: ChiefEngineerToolBelt
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltAssault
|
||||
name: assault belt
|
||||
description: A tactical assault belt.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/assault.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/assault.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- CigPack
|
||||
- Taser
|
||||
components:
|
||||
- Stunbaton
|
||||
- FlashOnTrigger
|
||||
- SmokeOnTrigger
|
||||
- Flash
|
||||
- Handcuff
|
||||
- BallisticAmmoProvider
|
||||
- Ammo
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
flashbang:
|
||||
whitelist:
|
||||
components:
|
||||
- FlashOnTrigger
|
||||
stunbaton:
|
||||
whitelist:
|
||||
components:
|
||||
- Stunbaton
|
||||
tear_gas_grenade:
|
||||
whitelist:
|
||||
components:
|
||||
- SmokeOnTrigger
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltJanitor
|
||||
name: janibelt
|
||||
description: A belt used to hold most janitorial supplies.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/janitor.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/janitor.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
- Bottle
|
||||
- Spray
|
||||
- Soap
|
||||
- Flashlight
|
||||
- CigPack
|
||||
- TrashBag
|
||||
- WetFloorSign
|
||||
- HolosignProjector
|
||||
- Plunger
|
||||
- GoldenPlunger
|
||||
- WireBrush
|
||||
components:
|
||||
- LightReplacer
|
||||
- SmokeOnTrigger
|
||||
maxItemSize: Large
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
bottle:
|
||||
whitelist:
|
||||
tags:
|
||||
- Bottle
|
||||
bottle_spray:
|
||||
whitelist:
|
||||
tags:
|
||||
- Spray
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltMedical
|
||||
name: medical belt
|
||||
description: Can hold various medical equipment.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/medical.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/medical.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
- Bottle
|
||||
- Spray
|
||||
- Brutepack
|
||||
- Bloodpack
|
||||
- Gauze
|
||||
- Ointment
|
||||
- CigPack
|
||||
- PillCanister
|
||||
- Radio
|
||||
- DiscreteHealthAnalyzer
|
||||
- SurgeryTool
|
||||
- Dropper
|
||||
components:
|
||||
- Hypospray
|
||||
- Injector
|
||||
- Pill
|
||||
- HandLabeler
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
bottle:
|
||||
whitelist:
|
||||
tags:
|
||||
- Bottle
|
||||
hypo:
|
||||
whitelist:
|
||||
components:
|
||||
- Hypospray
|
||||
pill:
|
||||
whitelist:
|
||||
components:
|
||||
- Pill
|
||||
tags:
|
||||
- PillCanister
|
||||
bottle_spray:
|
||||
whitelist:
|
||||
tags:
|
||||
- Spray
|
||||
# spray_med:
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - SprayMedical
|
||||
# wrench_medical:
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - WrenchMedical
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltMedical
|
||||
id: ClothingBeltMedicalEMT
|
||||
name: EMT belt
|
||||
description: Perfect for holding various equipment for medical emergencies.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/emt.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/emt.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltPlant
|
||||
name: botanical belt
|
||||
description: A belt used to hold most hydroponics supplies. Suprisingly, not green.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/plant.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/plant.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
# - PlantAnalyzer
|
||||
- PlantSampleTaker
|
||||
- BotanyShovel
|
||||
- BotanyHoe
|
||||
- BotanyHatchet
|
||||
- PlantSampleTaker
|
||||
- PlantBGone
|
||||
- Bottle
|
||||
- Syringe
|
||||
- CigPack
|
||||
- Dropper
|
||||
components:
|
||||
- Seed
|
||||
- Smokable
|
||||
- HandLabeler
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
hatchet:
|
||||
whitelist:
|
||||
tags:
|
||||
- BotanyHatchet
|
||||
# hydro:
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - PlantAnalyzer # Dunno what to put here, should be aight.
|
||||
hoe:
|
||||
whitelist:
|
||||
tags:
|
||||
- BotanyHoe
|
||||
secateurs: # We don't have secateurs and this looks similar enough.
|
||||
whitelist:
|
||||
tags:
|
||||
- BotanyShovel
|
||||
plantbgone:
|
||||
whitelist:
|
||||
tags:
|
||||
- PlantBGone
|
||||
bottle:
|
||||
whitelist:
|
||||
tags:
|
||||
- Bottle
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltChef
|
||||
name: chef belt
|
||||
description: A belt used to hold kitchen knives and condiments for quick access.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/chef.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/chef.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- KitchenKnife
|
||||
- Cleaver
|
||||
- RollingPin
|
||||
- Coldsauce
|
||||
- Enzyme
|
||||
- Hotsauce
|
||||
- Ketchup
|
||||
- BBQsauce
|
||||
- SaltShaker
|
||||
- PepperShaker
|
||||
- CigPack
|
||||
- Packet
|
||||
- Skewer
|
||||
- MonkeyCube
|
||||
- Mayo
|
||||
components:
|
||||
- Mousetrap
|
||||
- Smokable
|
||||
- Utensil
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
kitchenknife:
|
||||
whitelist:
|
||||
tags:
|
||||
- KitchenKnife
|
||||
cleaver:
|
||||
whitelist:
|
||||
tags:
|
||||
- Cleaver
|
||||
rollingpin:
|
||||
whitelist:
|
||||
tags:
|
||||
- RollingPin
|
||||
coldsauce:
|
||||
whitelist:
|
||||
tags:
|
||||
- Coldsauce
|
||||
enzyme:
|
||||
whitelist:
|
||||
tags:
|
||||
- Enzyme
|
||||
hotsauce:
|
||||
whitelist:
|
||||
tags:
|
||||
- Hotsauce
|
||||
ketchup:
|
||||
whitelist:
|
||||
tags:
|
||||
- Ketchup
|
||||
bbqsauce:
|
||||
whitelist:
|
||||
tags:
|
||||
- BBQsauce
|
||||
saltshaker:
|
||||
whitelist:
|
||||
tags:
|
||||
- SaltShaker
|
||||
peppershaker:
|
||||
whitelist:
|
||||
tags:
|
||||
- PepperShaker
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingBeltStorageBase, ContentsExplosionResistanceBase, BaseSecurityContraband]
|
||||
id: ClothingBeltSecurity
|
||||
name: security belt
|
||||
description: Can hold security gear like handcuffs and flashes.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/security.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/security.rsi
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.9
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- CigPack
|
||||
- Taser
|
||||
- SecBeltEquip
|
||||
- Radio
|
||||
- Sidearm
|
||||
- MagazinePistol
|
||||
- MagazineMagnum
|
||||
- CombatKnife
|
||||
- Truncheon
|
||||
- HandGrenade
|
||||
components:
|
||||
- Stunbaton
|
||||
- FlashOnTrigger
|
||||
- SmokeOnTrigger
|
||||
- Flash
|
||||
- Handcuff
|
||||
- BallisticAmmoProvider
|
||||
- CartridgeAmmo
|
||||
- DoorRemote
|
||||
- Whistle
|
||||
- BalloonPopper
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
flashbang:
|
||||
whitelist:
|
||||
components:
|
||||
- FlashOnTrigger
|
||||
stunbaton:
|
||||
whitelist:
|
||||
components:
|
||||
- Stunbaton
|
||||
tear_gas_grenade:
|
||||
whitelist:
|
||||
components:
|
||||
- SmokeOnTrigger
|
||||
sprite: Clothing/Belt/belt_overlay.rsi
|
||||
- type: Appearance
|
||||
## Belts that need/have visualizers
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingBeltBase, ClothingSlotBase, BaseCommandContraband]
|
||||
@@ -557,7 +32,36 @@
|
||||
- CaptainSabre
|
||||
- type: Appearance
|
||||
|
||||
# Belts without visualizers
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltQuiver
|
||||
name: quiver
|
||||
description: Can hold up to 15 arrows, and fits snug around your waist.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/quiver.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- map: [ "enum.StorageContainerVisualLayers.Fill" ]
|
||||
visible: false
|
||||
- type: Clothing
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,7,3
|
||||
maxItemSize: Small
|
||||
whitelist:
|
||||
tags:
|
||||
- Arrow
|
||||
- Plunger
|
||||
- type: Appearance
|
||||
- type: StorageContainerVisuals
|
||||
maxFillLevels: 3
|
||||
fillBaseName: fill-
|
||||
- type: Construction
|
||||
graph: Quiver
|
||||
node: Quiver
|
||||
|
||||
## Belts without visualizers
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingBeltAmmoProviderBase, BaseSecurityBartenderContraband]
|
||||
@@ -578,19 +82,24 @@
|
||||
capacity: 14
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltBase
|
||||
id: ClothingBeltChampion
|
||||
name: championship belt
|
||||
description: Proves to the world that you are the strongest!
|
||||
parent: [ ClothingBeltStorageBase, BaseMagicalContraband ]
|
||||
id: ClothingBeltWand
|
||||
name: wand belt
|
||||
description: A belt designed to hold various rods of power. A veritable fanny pack of exotic magic.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/champion.rsi
|
||||
sprite: Clothing/Belt/wand.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/champion.rsi
|
||||
quickEquip: true
|
||||
- type: Tag
|
||||
tags:
|
||||
- Kangaroo
|
||||
sprite: Clothing/Belt/wand.rsi
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,15,1
|
||||
whitelist:
|
||||
tags:
|
||||
- WizardWand
|
||||
- WhitelistChameleon
|
||||
|
||||
## Holsters
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
@@ -616,20 +125,22 @@
|
||||
sprite: Clothing/Belt/syndieholster.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/syndieholster.rsi
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: Storage
|
||||
maxItemSize: Huge
|
||||
grid:
|
||||
- 0,0,3,3
|
||||
whitelist:
|
||||
components:
|
||||
- Gun
|
||||
- BallisticAmmoProvider
|
||||
- CartridgeAmmo
|
||||
- Gun
|
||||
- BallisticAmmoProvider
|
||||
- CartridgeAmmo
|
||||
- type: StaticPrice
|
||||
price: 500
|
||||
|
||||
## Webbing
|
||||
|
||||
# Weirdly the only webbing with a storage whitelist and item mapper.
|
||||
# Might be worth making less common (armory only?) and removing the whitelist to eliminate the inconsistency.
|
||||
- type: entity
|
||||
parent: ClothingBeltSecurity
|
||||
id: ClothingBeltSecurityWebbing
|
||||
@@ -688,50 +199,3 @@
|
||||
sprite: Clothing/Belt/militarywebbingmed.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/militarywebbingmed.rsi
|
||||
- type: Item
|
||||
size: Huge
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.1
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltBase
|
||||
id: ClothingBeltSuspendersRed
|
||||
name: red suspenders
|
||||
description: For holding your pants up.
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- MimeBelt
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/suspenders_red.rsi
|
||||
state: icon
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/suspenders_red.rsi
|
||||
quickEquip: true
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltSuspendersRed
|
||||
id: ClothingBeltSuspendersBlack
|
||||
name: black suspenders
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/suspenders_black.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/suspenders_black.rsi
|
||||
|
||||
- type: entity
|
||||
parent: [ ClothingBeltStorageBase, BaseMagicalContraband ]
|
||||
id: ClothingBeltWand
|
||||
name: wand belt
|
||||
description: A belt designed to hold various rods of power. A veritable fanny pack of exotic magic.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/wand.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/wand.rsi
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,15,1
|
||||
whitelist:
|
||||
tags:
|
||||
- WizardWand
|
||||
|
||||
422
Resources/Prototypes/Entities/Clothing/Belt/job.yml
Normal file
422
Resources/Prototypes/Entities/Clothing/Belt/job.yml
Normal file
@@ -0,0 +1,422 @@
|
||||
# Belts meant to be used by a specific job to hold their tools
|
||||
|
||||
- type: entity
|
||||
abstract: true
|
||||
parent: ClothingBeltStorageBase
|
||||
id: BaseClothingBeltEngineering
|
||||
components:
|
||||
- type: Storage
|
||||
# Don't add more than absolutely needed to this whitelist!
|
||||
# Utility belts shouldn't just be free extra storage.
|
||||
# This is only intended for basic engineering equipment.
|
||||
whitelist:
|
||||
tags:
|
||||
- Powerdrill
|
||||
- Wirecutter
|
||||
- Crowbar
|
||||
- Screwdriver
|
||||
- Flashlight
|
||||
- Wrench
|
||||
- GeigerCounter
|
||||
- Flare
|
||||
- CableCoil
|
||||
- CigPack
|
||||
- Radio
|
||||
- HolofanProjector
|
||||
- Multitool
|
||||
- AppraisalTool
|
||||
- JawsOfLife
|
||||
- GPS
|
||||
- WeldingMask
|
||||
- RemoteSignaller
|
||||
- UtilityKnife
|
||||
components:
|
||||
- StationMap
|
||||
- SprayPainter
|
||||
- SprayPainterAmmo
|
||||
- NetworkConfigurator
|
||||
- RCD
|
||||
- RCDAmmo
|
||||
- Welder
|
||||
- PowerCell
|
||||
- Geiger
|
||||
- TrayScanner
|
||||
- GasAnalyzer
|
||||
- HandLabeler
|
||||
- type: ItemMapper
|
||||
sprite: &BeltOverlay Clothing/Belt/belt_overlay.rsi
|
||||
mapLayers:
|
||||
drill:
|
||||
whitelist:
|
||||
tags:
|
||||
- Powerdrill
|
||||
cutters_red:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wirecutter
|
||||
crowbar:
|
||||
whitelist:
|
||||
tags:
|
||||
- Crowbar
|
||||
crowbar_red:
|
||||
whitelist:
|
||||
tags:
|
||||
- CrowbarRed
|
||||
jaws:
|
||||
whitelist:
|
||||
tags:
|
||||
- JawsOfLife
|
||||
screwdriver_nuke:
|
||||
whitelist:
|
||||
tags:
|
||||
- Screwdriver
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
multitool:
|
||||
whitelist:
|
||||
tags:
|
||||
- Multitool
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: BaseClothingBeltEngineering
|
||||
id: ClothingBeltUtility
|
||||
name: utility belt
|
||||
description: Can hold various things.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/utility.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/utility.rsi
|
||||
- type: Tag
|
||||
tags:
|
||||
- UtilityBelt
|
||||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: BaseClothingBeltEngineering
|
||||
id: ClothingBeltChiefEngineer
|
||||
name: chief engineer's toolbelt
|
||||
description: Holds tools, looks snazzy.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/ce.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/ce.rsi
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,9,1
|
||||
- type: StealTarget
|
||||
stealGroup: ChiefEngineerToolBelt
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltJanitor
|
||||
name: janibelt
|
||||
description: A belt used to hold most janitorial supplies.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/janitor.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/janitor.rsi
|
||||
- type: Storage
|
||||
maxItemSize: Large
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
- Bottle
|
||||
- Spray
|
||||
- Soap
|
||||
- Flashlight
|
||||
- CigPack
|
||||
- TrashBag
|
||||
- WetFloorSign
|
||||
- HolosignProjector
|
||||
- Plunger
|
||||
- GoldenPlunger
|
||||
- WireBrush
|
||||
components:
|
||||
- LightReplacer
|
||||
- SmokeOnTrigger
|
||||
- type: ItemMapper
|
||||
sprite: *BeltOverlay
|
||||
mapLayers:
|
||||
bottle:
|
||||
whitelist:
|
||||
tags:
|
||||
- Bottle
|
||||
bottle_spray:
|
||||
whitelist:
|
||||
tags:
|
||||
- Spray
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltMedical
|
||||
name: medical belt
|
||||
description: Can hold various medical equipment.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/medical.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/medical.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
- Bottle
|
||||
- Spray
|
||||
- Brutepack
|
||||
- Bloodpack
|
||||
- Gauze
|
||||
- Ointment
|
||||
- CigPack
|
||||
- PillCanister
|
||||
- Radio
|
||||
- DiscreteHealthAnalyzer
|
||||
- SurgeryTool
|
||||
- Dropper
|
||||
components:
|
||||
- Hypospray
|
||||
- Injector
|
||||
- Pill
|
||||
- HandLabeler
|
||||
- type: ItemMapper
|
||||
sprite: *BeltOverlay
|
||||
mapLayers:
|
||||
bottle:
|
||||
whitelist:
|
||||
tags:
|
||||
- Bottle
|
||||
hypo:
|
||||
whitelist:
|
||||
components:
|
||||
- Hypospray
|
||||
pill:
|
||||
whitelist:
|
||||
components:
|
||||
- Pill
|
||||
tags:
|
||||
- PillCanister
|
||||
bottle_spray:
|
||||
whitelist:
|
||||
tags:
|
||||
- Spray
|
||||
# spray_med:
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - SprayMedical
|
||||
# wrench_medical:
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - WrenchMedical
|
||||
wrench:
|
||||
whitelist:
|
||||
tags:
|
||||
- Wrench
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltMedical
|
||||
id: ClothingBeltMedicalEMT
|
||||
name: EMT belt
|
||||
description: Perfect for holding various equipment for medical emergencies.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/emt.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/emt.rsi
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltPlant
|
||||
name: botanical belt
|
||||
description: A belt used to hold most hydroponics supplies. Suprisingly, not green.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/plant.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/plant.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
# - PlantAnalyzer
|
||||
- PlantSampleTaker
|
||||
- BotanyShovel
|
||||
- BotanyHoe
|
||||
- BotanyHatchet
|
||||
- PlantSampleTaker
|
||||
- PlantBGone
|
||||
- Bottle
|
||||
- Syringe
|
||||
- CigPack
|
||||
- Dropper
|
||||
components:
|
||||
- Seed
|
||||
- Smokable
|
||||
- HandLabeler
|
||||
- type: ItemMapper
|
||||
sprite: *BeltOverlay
|
||||
mapLayers:
|
||||
hatchet:
|
||||
whitelist:
|
||||
tags:
|
||||
- BotanyHatchet
|
||||
# hydro:
|
||||
# whitelist:
|
||||
# tags:
|
||||
# - PlantAnalyzer # Dunno what to put here, should be aight.
|
||||
hoe:
|
||||
whitelist:
|
||||
tags:
|
||||
- BotanyHoe
|
||||
secateurs: # We don't have secateurs and this looks similar enough.
|
||||
whitelist:
|
||||
tags:
|
||||
- BotanyShovel
|
||||
plantbgone:
|
||||
whitelist:
|
||||
tags:
|
||||
- PlantBGone
|
||||
bottle:
|
||||
whitelist:
|
||||
tags:
|
||||
- Bottle
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltChef
|
||||
name: chef belt
|
||||
description: A belt used to hold kitchen knives and condiments for quick access.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/chef.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/chef.rsi
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- KitchenKnife
|
||||
- Cleaver
|
||||
- RollingPin
|
||||
- Coldsauce
|
||||
- Enzyme
|
||||
- Hotsauce
|
||||
- Ketchup
|
||||
- BBQsauce
|
||||
- SaltShaker
|
||||
- PepperShaker
|
||||
- CigPack
|
||||
- Packet
|
||||
- Skewer
|
||||
- MonkeyCube
|
||||
- Mayo
|
||||
components:
|
||||
- Mousetrap
|
||||
- Smokable
|
||||
- Utensil
|
||||
- type: ItemMapper
|
||||
sprite: *BeltOverlay
|
||||
mapLayers:
|
||||
kitchenknife:
|
||||
whitelist:
|
||||
tags:
|
||||
- KitchenKnife
|
||||
cleaver:
|
||||
whitelist:
|
||||
tags:
|
||||
- Cleaver
|
||||
rollingpin:
|
||||
whitelist:
|
||||
tags:
|
||||
- RollingPin
|
||||
coldsauce:
|
||||
whitelist:
|
||||
tags:
|
||||
- Coldsauce
|
||||
enzyme:
|
||||
whitelist:
|
||||
tags:
|
||||
- Enzyme
|
||||
hotsauce:
|
||||
whitelist:
|
||||
tags:
|
||||
- Hotsauce
|
||||
ketchup:
|
||||
whitelist:
|
||||
tags:
|
||||
- Ketchup
|
||||
bbqsauce:
|
||||
whitelist:
|
||||
tags:
|
||||
- BBQsauce
|
||||
saltshaker:
|
||||
whitelist:
|
||||
tags:
|
||||
- SaltShaker
|
||||
peppershaker:
|
||||
whitelist:
|
||||
tags:
|
||||
- PepperShaker
|
||||
- type: Appearance
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingBeltStorageBase, ContentsExplosionResistanceBase, BaseSecurityContraband]
|
||||
id: ClothingBeltSecurity
|
||||
name: security belt
|
||||
description: Can hold security gear like handcuffs and flashes.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/security.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/security.rsi
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.9
|
||||
- type: Storage
|
||||
whitelist:
|
||||
tags:
|
||||
- CigPack
|
||||
- Taser
|
||||
- SecBeltEquip
|
||||
- Radio
|
||||
- Sidearm
|
||||
- MagazinePistol
|
||||
- MagazineMagnum
|
||||
- CombatKnife
|
||||
- Truncheon
|
||||
- HandGrenade
|
||||
components:
|
||||
- Stunbaton
|
||||
- FlashOnTrigger
|
||||
- SmokeOnTrigger
|
||||
- Flash
|
||||
- Handcuff
|
||||
- BallisticAmmoProvider
|
||||
- CartridgeAmmo
|
||||
- DoorRemote
|
||||
- Whistle
|
||||
- BalloonPopper
|
||||
- type: ItemMapper
|
||||
sprite: *BeltOverlay
|
||||
mapLayers:
|
||||
flashbang:
|
||||
whitelist:
|
||||
components:
|
||||
- FlashOnTrigger
|
||||
stunbaton:
|
||||
whitelist:
|
||||
components:
|
||||
- Stunbaton
|
||||
tear_gas_grenade:
|
||||
whitelist:
|
||||
components:
|
||||
- SmokeOnTrigger
|
||||
- type: Appearance
|
||||
@@ -1,28 +0,0 @@
|
||||
- type: entity
|
||||
parent: ClothingBeltStorageBase
|
||||
id: ClothingBeltQuiver
|
||||
name: quiver
|
||||
description: Can hold up to 15 arrows, and fits snug around your waist.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/quiver.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- map: [ "enum.StorageContainerVisualLayers.Fill" ]
|
||||
visible: false
|
||||
- type: Clothing
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,7,3
|
||||
maxItemSize: Small
|
||||
whitelist:
|
||||
tags:
|
||||
- Arrow
|
||||
- Plunger
|
||||
- type: Appearance
|
||||
- type: StorageContainerVisuals
|
||||
maxFillLevels: 3
|
||||
fillBaseName: fill-
|
||||
- type: Construction
|
||||
graph: Quiver
|
||||
node: Quiver
|
||||
44
Resources/Prototypes/Entities/Clothing/Belt/simple.yml
Normal file
44
Resources/Prototypes/Entities/Clothing/Belt/simple.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
# For cosmetic belts parenting off ClothingBeltBase
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltBase
|
||||
id: ClothingBeltChampion
|
||||
name: championship belt
|
||||
description: Proves to the world that you are the strongest!
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/champion.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/champion.rsi
|
||||
quickEquip: true
|
||||
- type: Tag
|
||||
tags:
|
||||
- Kangaroo # Kangaroo wearable. Dare to challenge the champ?
|
||||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltBase
|
||||
id: ClothingBeltSuspendersRed
|
||||
name: red suspenders
|
||||
description: For holding your pants up.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/suspenders_red.rsi
|
||||
state: icon
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/suspenders_red.rsi
|
||||
quickEquip: true
|
||||
- type: Tag
|
||||
tags:
|
||||
- MimeBelt
|
||||
- WhitelistChameleon
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBeltSuspendersRed
|
||||
id: ClothingBeltSuspendersBlack
|
||||
name: black suspenders
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Belt/suspenders_black.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Belt/suspenders_black.rsi
|
||||
@@ -1,5 +1,5 @@
|
||||
- type: entity
|
||||
parent: ClothingOuterBaseLarge
|
||||
parent: [ClothingOuterBaseLarge, AllowSuitStorageClothingGasTanks]
|
||||
id: ClothingOuterBioGeneral
|
||||
name: bio suit
|
||||
suffix: Generic
|
||||
@@ -64,7 +64,7 @@
|
||||
sprite: Clothing/OuterClothing/Bio/scientist.rsi
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingOuterBioGeneral, BaseSecurityContraband]
|
||||
parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseSecurityContraband]
|
||||
id: ClothingOuterBioSecurity
|
||||
name: bio suit
|
||||
suffix: Security
|
||||
@@ -82,7 +82,11 @@
|
||||
Piercing: 0.8
|
||||
- type: ZombificationResistance
|
||||
zombificationResistanceCoefficient: 0.4
|
||||
|
||||
- type: GroupExamine
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.95
|
||||
sprintModifier: 0.95
|
||||
|
||||
- type: entity
|
||||
parent: ClothingOuterBioGeneral
|
||||
id: ClothingOuterBioVirology
|
||||
|
||||
@@ -288,6 +288,8 @@
|
||||
tags:
|
||||
- CorgiWearable
|
||||
- WhitelistChameleon
|
||||
- type: AddAccentClothing
|
||||
accent: BarkAccent
|
||||
|
||||
- type: entity
|
||||
parent: ClothingOuterBase
|
||||
|
||||
@@ -119,10 +119,6 @@
|
||||
weight: 0.1
|
||||
children:
|
||||
- id: DawInstrumentMachineCircuitboard
|
||||
- !type:GroupSelector
|
||||
weight: 0.05
|
||||
children:
|
||||
- id: SuperSynthesizerInstrument
|
||||
|
||||
- type: entityTable
|
||||
id: SalvageInstrumentTable
|
||||
@@ -140,8 +136,6 @@
|
||||
tableId: WoodwindInstrumentTable
|
||||
- !type:NestedSelector
|
||||
tableId: SpecialInstrumentTable
|
||||
- id: SuperSynthesizerInstrument
|
||||
weight: 0.3
|
||||
|
||||
- type: entity
|
||||
id: RandomInstruments
|
||||
|
||||
@@ -13,6 +13,52 @@
|
||||
!type:SimpleColoring
|
||||
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
|
||||
id: VoxLArmScales
|
||||
bodyPart: LArm
|
||||
|
||||
@@ -54,6 +54,50 @@
|
||||
- sprite: Mobs/Customization/vox_tattoos.rsi
|
||||
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
|
||||
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.
|
||||
@@ -130,4 +174,126 @@
|
||||
forcedColoring: true
|
||||
sprites:
|
||||
- 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
|
||||
|
||||
|
||||
@@ -1215,6 +1215,8 @@
|
||||
true
|
||||
NavSmash: !type:Bool
|
||||
true
|
||||
- type: Puller
|
||||
needsHands: false
|
||||
- type: Prying
|
||||
pryPowered: true
|
||||
force: true
|
||||
@@ -1978,6 +1980,12 @@
|
||||
parent: MobMouse
|
||||
id: MobMouseCancer
|
||||
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
|
||||
color: LightGreen
|
||||
- type: PointLight
|
||||
|
||||
@@ -393,6 +393,7 @@
|
||||
- type: NpcFactionMember
|
||||
factions:
|
||||
- Xeno
|
||||
- SimpleHostile
|
||||
- type: MeleeWeapon
|
||||
angle: 0
|
||||
animation: WeaponArcBite
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
components:
|
||||
- type: Spectral
|
||||
- type: Tag
|
||||
tags:
|
||||
tags: # BAD: Intentional removal of inherited tag
|
||||
- AllowGhostShownByEvent
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -109,6 +109,24 @@
|
||||
32:
|
||||
sprite: Mobs/Species/Human/displacement.rsi
|
||||
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
|
||||
parent: BaseSpeciesDummy
|
||||
|
||||
@@ -30,6 +30,44 @@
|
||||
- type: Damageable
|
||||
damageContainer: Biological
|
||||
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
|
||||
# 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.
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
# map: ["enum.OpenableVisuals.Layer"]
|
||||
|
||||
## 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
|
||||
- type: entity
|
||||
@@ -103,13 +103,14 @@
|
||||
visuals:
|
||||
enum.OpenableVisuals.Opened:
|
||||
enum.OpenableVisuals.Layer:
|
||||
True: {state: "icon_open"}
|
||||
False: {state: "icon"}
|
||||
True: {state: "icon_open"} # lid off
|
||||
False: {state: "icon"} # lid on
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
map: ["enum.OpenableVisuals.Layer"]
|
||||
- type: ExaminableSolution
|
||||
solution: *sol
|
||||
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
|
||||
|
||||
@@ -121,11 +122,12 @@
|
||||
- type: Appearance
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon_empty
|
||||
- state: icon
|
||||
- state: fill-1
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
visible: false
|
||||
- type: SolutionContainerVisuals
|
||||
solutionName: *sol
|
||||
maxFillLevels: 5
|
||||
fillBaseName: fill-
|
||||
inHandsMaxFillLevels: 3
|
||||
@@ -139,7 +141,7 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon_empty
|
||||
- state: icon
|
||||
map: [ "enum.SolutionContainerLayers.Base" ]
|
||||
- state: fill-1
|
||||
map: [ "enum.SolutionContainerLayers.Fill" ]
|
||||
@@ -169,8 +171,8 @@
|
||||
visuals:
|
||||
enum.OpenableVisuals.Opened:
|
||||
enum.OpenableVisuals.Layer:
|
||||
True: {state: "icon_open"}
|
||||
False: {state: "icon_empty"}
|
||||
True: {state: "icon_open"} # lid off
|
||||
False: {state: "icon_empty"} # lid on
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon_empty
|
||||
|
||||
@@ -117,6 +117,34 @@
|
||||
materialComposition:
|
||||
Plastic: 25
|
||||
|
||||
# Strong plastic
|
||||
- type: entity
|
||||
abstract: true
|
||||
parent: DrinkBaseMaterialPlastic
|
||||
id: DrinkBaseMaterialStrongPlastic
|
||||
components:
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger: # Overkill threshold
|
||||
!type:DamageTrigger
|
||||
damage: 200
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 20 # can take a few more hits than basic plastic
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalCrunch # TODO a plastic break collection
|
||||
- !type:SpillBehavior { }
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Plastic: 100
|
||||
|
||||
# Fragile cardboard
|
||||
- type: entity
|
||||
abstract: true
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/alco-bottle.rsi
|
||||
layers:
|
||||
- state: icon_blue # todo add "icon_empty" state
|
||||
- state: icon_empty
|
||||
map: ["enum.OpenableVisuals.Layer"]
|
||||
- state: fill-6
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
@@ -260,7 +260,7 @@
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/alco-bottle.rsi
|
||||
layers:
|
||||
- state: icon_green # todo icon_empty
|
||||
- state: icon_empty
|
||||
map: ["enum.OpenableVisuals.Layer"]
|
||||
- state: fill-6
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
grindable:
|
||||
grindable: &grindable
|
||||
reagents: # 5u -> 1/2 steel sheet (10u)
|
||||
- ReagentId: Aluminium # Fun fact: soda can makeup is approx. 75% aluminium and 25% tin/iron.
|
||||
Quantity: 4
|
||||
@@ -51,12 +51,7 @@
|
||||
reagents:
|
||||
- ReagentId: Cola
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cola
|
||||
@@ -76,12 +71,7 @@
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cola
|
||||
@@ -101,12 +91,7 @@
|
||||
reagents:
|
||||
- ReagentId: IcedTea
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/ice_tea_can.rsi
|
||||
- type: Item
|
||||
@@ -125,12 +110,7 @@
|
||||
reagents:
|
||||
- ReagentId: LemonLime
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/lemon-lime.rsi
|
||||
- type: Item
|
||||
@@ -149,12 +129,7 @@
|
||||
reagents:
|
||||
- ReagentId: LemonLimeCranberry
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi
|
||||
- type: Item
|
||||
@@ -206,12 +181,7 @@
|
||||
reagents:
|
||||
- ReagentId: GrapeSoda
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/purple_can.rsi
|
||||
- type: Item
|
||||
@@ -230,12 +200,7 @@
|
||||
reagents:
|
||||
- ReagentId: RootBeer
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/rootbeer.rsi
|
||||
- type: Item
|
||||
@@ -258,12 +223,7 @@
|
||||
reagents:
|
||||
- ReagentId: SodaWater
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/sodawater.rsi
|
||||
- type: Item
|
||||
@@ -282,12 +242,7 @@
|
||||
reagents:
|
||||
- ReagentId: SpaceMountainWind
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi
|
||||
- type: Item
|
||||
@@ -306,12 +261,7 @@
|
||||
reagents:
|
||||
- ReagentId: SpaceUp
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/space-up.rsi
|
||||
- type: Item
|
||||
@@ -330,12 +280,7 @@
|
||||
reagents:
|
||||
- ReagentId: SolDry
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/sol_dry.rsi
|
||||
- type: Item
|
||||
@@ -354,12 +299,7 @@
|
||||
reagents:
|
||||
- ReagentId: Starkist
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/starkist.rsi
|
||||
- type: Item
|
||||
@@ -378,12 +318,7 @@
|
||||
reagents:
|
||||
- ReagentId: TonicWater
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/tonic.rsi
|
||||
- type: Item
|
||||
@@ -402,12 +337,7 @@
|
||||
reagents:
|
||||
- ReagentId: FourteenLoko
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/fourteen_loko.rsi
|
||||
- type: Item
|
||||
@@ -426,12 +356,7 @@
|
||||
reagents:
|
||||
- ReagentId: ChangelingSting
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/changelingsting.rsi
|
||||
- type: Item
|
||||
@@ -450,12 +375,7 @@
|
||||
reagents:
|
||||
- ReagentId: DrGibb
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/dr_gibb.rsi
|
||||
- type: Item
|
||||
@@ -478,12 +398,7 @@
|
||||
Quantity: 20
|
||||
- ReagentId: Ice
|
||||
Quantity: 5
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/robustnukie.rsi
|
||||
- type: Item
|
||||
@@ -502,12 +417,7 @@
|
||||
reagents:
|
||||
- ReagentId: EnergyDrink
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/energy_drink.rsi
|
||||
- type: Item
|
||||
@@ -526,12 +436,7 @@
|
||||
reagents:
|
||||
- ReagentId: ShamblersJuice
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/shamblersjuice.rsi
|
||||
- type: Item
|
||||
@@ -550,12 +455,7 @@
|
||||
reagents:
|
||||
- ReagentId: PwrGame
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/pwrgame.rsi
|
||||
- type: Item
|
||||
@@ -574,12 +474,7 @@
|
||||
reagents:
|
||||
- ReagentId: Beer
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/beer_can.rsi
|
||||
- type: Item
|
||||
@@ -602,12 +497,7 @@
|
||||
reagents:
|
||||
- ReagentId: Wine
|
||||
Quantity: 30
|
||||
grindable:
|
||||
reagents:
|
||||
- ReagentId: Aluminium
|
||||
Quantity: 4
|
||||
- ReagentId: Iron
|
||||
Quantity: 1
|
||||
grindable: *grindable
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/wine_can.rsi
|
||||
- type: Item
|
||||
|
||||
@@ -22,22 +22,16 @@
|
||||
# A mug is a type of cup.[2]
|
||||
- type: entity
|
||||
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
|
||||
name: mug
|
||||
description: A mug.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/mug.rsi
|
||||
layers:
|
||||
- state: icon-0
|
||||
- state: icon-3
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
visible: false
|
||||
- type: Appearance
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 3
|
||||
fillBaseName: icon-
|
||||
inHandsFillBaseName: null
|
||||
|
||||
## Misc Cups
|
||||
|
||||
@@ -53,18 +47,13 @@
|
||||
price: 125
|
||||
|
||||
- type: entity
|
||||
parent: DrinkBaseMug
|
||||
parent: DrinkBaseMug # a teacup is basically a mug
|
||||
id: DrinkTeacupEmpty
|
||||
name: teacup
|
||||
description: A plain white porcelain teacup.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/teacup.rsi
|
||||
layers:
|
||||
- state: icon-0
|
||||
- state: icon-4
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
visible: false
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 4
|
||||
|
||||
@@ -76,20 +65,11 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
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
|
||||
fillBaseName: fill # todo rename to "fill-" to match DrinkVisualsFillOverlay
|
||||
inHandsMaxFillLevels: 1
|
||||
|
||||
- type: entity
|
||||
parent: [DrinkBaseMaterialCardboard, DrinkBaseCup] # TODO should use DrinkVisualsFill but state names are wrong and no inhand
|
||||
parent: [DrinkBaseMaterialCardboard, DrinkBaseCup, DrinkBaseEmptyTrash, DrinkVisualsFill]
|
||||
id: DrinkWaterCup
|
||||
name: water cup
|
||||
description: A paper water cup.
|
||||
@@ -102,22 +82,14 @@
|
||||
size: Tiny
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/water_cup.rsi
|
||||
layers:
|
||||
- state: icon-0
|
||||
- state: icon-1
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
visible: false
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 1
|
||||
fillBaseName: icon-
|
||||
inHandsFillBaseName: null
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- DrinkCup
|
||||
- WhitelistChameleon
|
||||
- type: Appearance
|
||||
- type: TrashOnSolutionEmpty
|
||||
solution: drink
|
||||
- type: Clothing
|
||||
slots:
|
||||
- HEAD
|
||||
@@ -240,16 +212,13 @@
|
||||
- ReagentId: HotCocoa
|
||||
Quantity: 20
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/hot_coco.rsi
|
||||
state: icon-vend
|
||||
sprite: Objects/Consumable/Drinks/mug.rsi
|
||||
state: icon-vend-brown
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/hot_coco.rsi
|
||||
layers:
|
||||
- state: icon-0
|
||||
- map: ["enum.SolutionContainerLayers.Fill"]
|
||||
state: icon-4
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 4
|
||||
- state: icon
|
||||
- state: fill-3
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
- type: TrashOnSolutionEmpty
|
||||
solution: drink
|
||||
|
||||
@@ -267,16 +236,13 @@
|
||||
- ReagentId: Coffee
|
||||
Quantity: 20
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/hot_coffee.rsi
|
||||
state: icon-vend
|
||||
sprite: Objects/Consumable/Drinks/mug.rsi
|
||||
state: icon-vend-brown
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/hot_coffee.rsi
|
||||
layers:
|
||||
- state: icon-0
|
||||
- map: ["enum.SolutionContainerLayers.Fill"]
|
||||
state: icon-4
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 4
|
||||
- state: icon
|
||||
- state: fill-3
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
- type: TrashOnSolutionEmpty
|
||||
solution: drink
|
||||
|
||||
@@ -293,16 +259,17 @@
|
||||
reagents:
|
||||
- ReagentId: CafeLatte
|
||||
Quantity: 20
|
||||
- type: Icon
|
||||
sprite: Objects/Consumable/Drinks/cafe_latte.rsi
|
||||
state: icon-vend
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/cafe_latte.rsi
|
||||
layers:
|
||||
- state: icon_empty
|
||||
- state: fill-1
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
- type: Appearance
|
||||
- state: icon
|
||||
- state: fill-1
|
||||
map: ["enum.SolutionContainerLayers.Fill"]
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 1
|
||||
fillBaseName: fill-
|
||||
changeColor: false
|
||||
- type: TrashOnSolutionEmpty
|
||||
solution: drink
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
collection: packetOpenSounds
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: icon
|
||||
- state: icon_empty
|
||||
map: ["enum.OpenableVisuals.Layer"]
|
||||
- state: fill6
|
||||
- state: fill-6
|
||||
map: [ "enum.SolutionContainerLayers.Fill" ] # already has liquid, so no visible: false
|
||||
- state: icon-front
|
||||
map: [ "enum.SolutionContainerLayers.Overlay" ]
|
||||
@@ -20,13 +20,6 @@
|
||||
maxVol: 30
|
||||
- type: SolutionContainerVisuals
|
||||
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
|
||||
solution: drink
|
||||
|
||||
@@ -97,8 +90,6 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/jar_what.rsi
|
||||
- type: ExaminableSolution
|
||||
solution: drink
|
||||
- type: FitsInDispenser
|
||||
solution: drink
|
||||
- type: Tag
|
||||
|
||||
@@ -4,35 +4,23 @@
|
||||
|
||||
# Transformable container - normal glass
|
||||
- type: entity
|
||||
parent: [DrinkBaseMaterialGlass, DrinkBaseCup] # todo parent to DrinkVisualsFillOverlay after in-hands are added
|
||||
parent: [DrinkBaseMaterialGlass, DrinkBaseCup, DrinkVisualsFillOverlay]
|
||||
id: DrinkGlass
|
||||
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.
|
||||
components:
|
||||
- type: Sprite
|
||||
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
|
||||
solutions:
|
||||
drink:
|
||||
maxVol: 30
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 9
|
||||
fillBaseName: fill # todo rename to "fill-", add in-hands, then add parent "DrinkVisualsFillOverlay"
|
||||
metamorphic: true
|
||||
metamorphicDefaultSprite:
|
||||
sprite: Objects/Consumable/Drinks/glass_clear.rsi
|
||||
state: icon
|
||||
inHandsMaxFillLevels: 3
|
||||
inHandsFillBaseName: -fill-
|
||||
- type: Tag
|
||||
tags:
|
||||
- DrinkCup # Do these tags
|
||||
@@ -47,14 +35,6 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
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
|
||||
solutions:
|
||||
drink:
|
||||
|
||||
@@ -12,17 +12,8 @@
|
||||
size: Tiny
|
||||
- type: Sprite
|
||||
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
|
||||
maxFillLevels: 2
|
||||
fillBaseName: fill # TODO rename to "fill-" to match "DrinkVisualsFillOverlay"
|
||||
inHandsMaxFillLevels: 1
|
||||
- type: FitsInDispenser
|
||||
solution: drink
|
||||
@@ -146,6 +137,21 @@
|
||||
reactionTypes:
|
||||
- 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
|
||||
parent: [DrinkBaseMaterialMetal, DrinkBase]
|
||||
id: DrinkJigger
|
||||
@@ -184,11 +190,6 @@
|
||||
maxVol: 60
|
||||
- type: Sprite
|
||||
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
|
||||
maxFillLevels: 6
|
||||
inHandsMaxFillLevels: 2
|
||||
|
||||
@@ -731,7 +731,7 @@
|
||||
name: crostini
|
||||
parent: FoodBreadSliceBase
|
||||
id: FoodBreadBaguetteSlice
|
||||
description: Bon ap-petite!
|
||||
description: Bon ap-pétite!
|
||||
components:
|
||||
- type: Sprite
|
||||
state: crostini
|
||||
@@ -753,7 +753,7 @@
|
||||
parent: FoodBreadBaguetteSlice
|
||||
id: FoodBreadBaguetteCottonSlice
|
||||
name: cotton crostini
|
||||
description: Bon az-zetite!
|
||||
description: Bon az-zétite!
|
||||
components:
|
||||
- type: Sprite
|
||||
state: crostini-cotton
|
||||
@@ -1001,3 +1001,57 @@
|
||||
damage:
|
||||
groups:
|
||||
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
|
||||
|
||||
@@ -533,6 +533,7 @@
|
||||
tags:
|
||||
- Trash
|
||||
- HappyHonk
|
||||
- BoxCardboard
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ToyMouse
|
||||
@@ -704,7 +705,8 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- CluwneHappyHonk
|
||||
- CluwneHappyHonk # BAD: Intentional removal of parent tag
|
||||
- BoxCardboard
|
||||
- type: Sprite
|
||||
sprite: Objects/Storage/Happyhonk/cluwne.rsi
|
||||
state: box
|
||||
@@ -882,7 +884,7 @@
|
||||
grid:
|
||||
- 0,0,1,1
|
||||
maxItemSize: Normal
|
||||
whitelist:
|
||||
whitelist: # TODO BoxCardboard shouldn't have whitelisted storage
|
||||
tags:
|
||||
- ClothMade
|
||||
- type: Item
|
||||
|
||||
@@ -1242,6 +1242,23 @@
|
||||
- state: plain-cooked-inhand-right
|
||||
color: "#F7E3A3"
|
||||
|
||||
- type: entity
|
||||
parent: FoodMeatChickenFried
|
||||
id: FoodMeatChickenFriedVox
|
||||
name: mystery fried chicken
|
||||
description: “Eleven secret herbs and… oh no. That’s not chicken."
|
||||
components:
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
food:
|
||||
reagents:
|
||||
- ReagentId: Nutriment
|
||||
Quantity: 2
|
||||
- ReagentId: Protein
|
||||
Quantity: 5
|
||||
- ReagentId: Ammonia
|
||||
Quantity: 3
|
||||
|
||||
- type: entity
|
||||
parent: FoodMeatBase
|
||||
id: FoodMeatDuckCooked
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user