Merge branch 'master' of ssh://github.com/space-wizards/space-station-14 into staging

This commit is contained in:
Vasilis The Pikachu
2025-02-06 01:11:50 +01:00
651 changed files with 14740 additions and 8220 deletions

View File

@@ -1,6 +1,6 @@
<DefaultWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MinSize="280 160" Title="Temperature Control Unit">
MinSize="280 160" Title="{Loc comp-space-heater-ui-title}">
<BoxContainer Name="VboxContainer" Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">

View File

@@ -13,6 +13,7 @@ namespace Content.Client.Ghost
[Dependency] private readonly IClientConsoleHost _console = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly PointLightSystem _pointLightSystem = default!;
[Dependency] private readonly ContentEyeSystem _contentEye = default!;
public int AvailableGhostRoleCount { get; private set; }
@@ -79,8 +80,27 @@ namespace Content.Client.Ghost
if (args.Handled)
return;
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup"), args.Performer);
_contentEye.RequestToggleLight(uid, component);
TryComp<PointLightComponent>(uid, out var light);
if (!component.DrawLight)
{
// normal lighting
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup-normal"), args.Performer);
_contentEye.RequestEye(component.DrawFov, true);
}
else if (!light?.Enabled ?? false) // skip this option if we have no PointLightComponent
{
// enable personal light
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup-personal-light"), args.Performer);
_pointLightSystem.SetEnabled(uid, true, light);
}
else
{
// fullbright mode
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup-fullbright"), args.Performer);
_contentEye.RequestEye(component.DrawFov, false);
_pointLightSystem.SetEnabled(uid, false, light);
}
args.Handled = true;
}

View File

@@ -1,5 +1,8 @@
using Content.Shared.Magic;
using Content.Shared.Magic.Events;
namespace Content.Client.Magic;
public sealed class MagicSystem : SharedMagicSystem;
public sealed class MagicSystem : SharedMagicSystem
{
}

View File

@@ -4,6 +4,7 @@ using Robust.Client.Animations;
using Robust.Client.GameObjects;
using Robust.Shared.Animations;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Client.Orbit;
@@ -11,8 +12,8 @@ public sealed class OrbitVisualsSystem : EntitySystem
{
[Dependency] private readonly IRobustRandom _robustRandom = default!;
[Dependency] private readonly AnimationPlayerSystem _animations = default!;
[Dependency] private readonly IGameTiming _timing = default!;
private readonly string _orbitAnimationKey = "orbiting";
private readonly string _orbitStopKey = "orbiting_stop";
public override void Initialize()
@@ -21,11 +22,11 @@ public sealed class OrbitVisualsSystem : EntitySystem
SubscribeLocalEvent<OrbitVisualsComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<OrbitVisualsComponent, ComponentRemove>(OnComponentRemove);
SubscribeLocalEvent<OrbitVisualsComponent, AnimationCompletedEvent>(OnAnimationCompleted);
}
private void OnComponentInit(EntityUid uid, OrbitVisualsComponent component, ComponentInit args)
{
_robustRandom.SetSeed((int)_timing.CurTime.TotalMilliseconds);
component.OrbitDistance =
_robustRandom.NextFloat(0.75f * component.OrbitDistance, 1.25f * component.OrbitDistance);
@@ -38,15 +39,10 @@ public sealed class OrbitVisualsSystem : EntitySystem
}
var animationPlayer = EnsureComp<AnimationPlayerComponent>(uid);
if (_animations.HasRunningAnimation(uid, animationPlayer, _orbitAnimationKey))
return;
if (_animations.HasRunningAnimation(uid, animationPlayer, _orbitStopKey))
{
_animations.Stop(uid, animationPlayer, _orbitStopKey);
_animations.Stop((uid, animationPlayer), _orbitStopKey);
}
_animations.Play(uid, animationPlayer, GetOrbitAnimation(component), _orbitAnimationKey);
}
private void OnComponentRemove(EntityUid uid, OrbitVisualsComponent component, ComponentRemove args)
@@ -57,14 +53,9 @@ public sealed class OrbitVisualsSystem : EntitySystem
sprite.EnableDirectionOverride = false;
var animationPlayer = EnsureComp<AnimationPlayerComponent>(uid);
if (_animations.HasRunningAnimation(uid, animationPlayer, _orbitAnimationKey))
{
_animations.Stop(uid, animationPlayer, _orbitAnimationKey);
}
if (!_animations.HasRunningAnimation(uid, animationPlayer, _orbitStopKey))
{
_animations.Play(uid, animationPlayer, GetStopAnimation(component, sprite), _orbitStopKey);
_animations.Play((uid, animationPlayer), GetStopAnimation(component, sprite), _orbitStopKey);
}
}
@@ -74,7 +65,8 @@ public sealed class OrbitVisualsSystem : EntitySystem
foreach (var (orbit, sprite) in EntityManager.EntityQuery<OrbitVisualsComponent, SpriteComponent>())
{
var angle = new Angle(Math.PI * 2 * orbit.Orbit);
var progress = (float)(_timing.CurTime.TotalSeconds / orbit.OrbitLength) % 1;
var angle = new Angle(Math.PI * 2 * progress);
var vec = angle.RotateVec(new Vector2(orbit.OrbitDistance, 0));
sprite.Rotation = angle;
@@ -82,38 +74,6 @@ public sealed class OrbitVisualsSystem : EntitySystem
}
}
private void OnAnimationCompleted(EntityUid uid, OrbitVisualsComponent component, AnimationCompletedEvent args)
{
if (args.Key == _orbitAnimationKey && TryComp(uid, out AnimationPlayerComponent? animationPlayer))
{
_animations.Play(uid, animationPlayer, GetOrbitAnimation(component), _orbitAnimationKey);
}
}
private Animation GetOrbitAnimation(OrbitVisualsComponent component)
{
var length = component.OrbitLength;
return new Animation()
{
Length = TimeSpan.FromSeconds(length),
AnimationTracks =
{
new AnimationTrackComponentProperty()
{
ComponentType = typeof(OrbitVisualsComponent),
Property = nameof(OrbitVisualsComponent.Orbit),
KeyFrames =
{
new AnimationTrackProperty.KeyFrame(0.0f, 0f),
new AnimationTrackProperty.KeyFrame(1.0f, length),
},
InterpolationMode = AnimationInterpolationMode.Linear
}
}
};
}
private Animation GetStopAnimation(OrbitVisualsComponent component, SpriteComponent sprite)
{
var length = component.OrbitStopLength;

View File

@@ -5,6 +5,7 @@ using Content.Server.Store.Systems;
using Content.Server.Traitor.Uplink;
using Content.Shared.FixedPoint;
using Content.Shared.Inventory;
using Content.Shared.Mind;
using Content.Shared.Store;
using Content.Shared.Store.Components;
using Content.Shared.StoreDiscount.Components;
@@ -64,6 +65,7 @@ public sealed class StoreTests
await server.WaitAssertion(() =>
{
var invSystem = entManager.System<InventorySystem>();
var mindSystem = entManager.System<SharedMindSystem>();
human = entManager.SpawnEntity("HumanUniformDummy", coordinates);
uniform = entManager.SpawnEntity("UniformDummy", coordinates);
@@ -72,6 +74,9 @@ public sealed class StoreTests
Assert.That(invSystem.TryEquip(human, uniform, "jumpsuit"));
Assert.That(invSystem.TryEquip(human, pda, "id"));
var mind = mindSystem.CreateMind(null);
mindSystem.TransferTo(mind, human, mind: mind);
FixedPoint2 originalBalance = 20;
uplinkSystem.AddUplink(human, originalBalance, null, true);

View File

@@ -892,5 +892,36 @@ public sealed partial class AdminVerbSystem
Message = string.Join(": ", superslipName, Loc.GetString("admin-smite-super-slip-description"))
};
args.Verbs.Add(superslip);
var omniaccentName = Loc.GetString("admin-smite-omni-accent-name").ToLowerInvariant();
Verb omniaccent = new()
{
Text = omniaccentName,
Category = VerbCategory.Smite,
Icon = new SpriteSpecifier.Rsi(new("Interface/Actions/voice-mask.rsi"), "icon"),
Act = () =>
{
EnsureComp<BarkAccentComponent>(args.Target);
EnsureComp<BleatingAccentComponent>(args.Target);
EnsureComp<FrenchAccentComponent>(args.Target);
EnsureComp<GermanAccentComponent>(args.Target);
EnsureComp<LizardAccentComponent>(args.Target);
EnsureComp<MobsterAccentComponent>(args.Target);
EnsureComp<MothAccentComponent>(args.Target);
EnsureComp<OwOAccentComponent>(args.Target);
EnsureComp<SkeletonAccentComponent>(args.Target);
EnsureComp<SouthernAccentComponent>(args.Target);
EnsureComp<SpanishAccentComponent>(args.Target);
EnsureComp<StutteringAccentComponent>(args.Target);
if (_random.Next(0, 8) == 0)
{
EnsureComp<BackwardsAccentComponent>(args.Target); // was asked to make this at a low chance idk
}
},
Impact = LogImpact.Extreme,
Message = string.Join(": ", omniaccentName, Loc.GetString("admin-smite-omni-accent-description"))
};
args.Verbs.Add(omniaccent);
}
}

View File

@@ -45,5 +45,6 @@ public sealed class LogSystem : EntitySystem
}
QueueDel(uid);
args.Handled = true;
}
}

View File

@@ -64,6 +64,7 @@ namespace Content.Server.Cargo.Systems
_audio.PlayPvs(component.ConfirmSound, uid);
UpdateBankAccount(stationUid.Value, bank, (int) price);
QueueDel(args.Used);
args.Handled = true;
}
private void OnInit(EntityUid uid, CargoOrderConsoleComponent orderConsole, ComponentInit args)

View File

@@ -19,4 +19,17 @@ public sealed class MagicSystem : SharedMagicSystem
{
_chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), InGameICChatType.Speak, false);
}
public override void OnVoidApplause(VoidApplauseSpellEvent ev)
{
base.OnVoidApplause(ev);
_chat.TryEmoteWithChat(ev.Performer, ev.Emote);
var perfXForm = Transform(ev.Performer);
var targetXForm = Transform(ev.Target);
Spawn(ev.Effect, perfXForm.Coordinates);
Spawn(ev.Effect, targetXForm.Coordinates);
}
}

View File

@@ -118,15 +118,15 @@ public sealed class HealingSystem : EntitySystem
_audio.PlayPvs(healing.HealingEndSound, entity.Owner, AudioHelpers.WithVariation(0.125f, _random).WithVolume(1f));
// Logic to determine the whether or not to repeat the healing action
args.Repeat = (HasDamage(entity.Comp, healing) && !dontRepeat);
args.Repeat = (HasDamage(entity, healing) && !dontRepeat);
if (!args.Repeat && !dontRepeat)
_popupSystem.PopupEntity(Loc.GetString("medical-item-finished-using", ("item", args.Used)), entity.Owner, args.User);
args.Handled = true;
}
private bool HasDamage(DamageableComponent component, HealingComponent healing)
private bool HasDamage(Entity<DamageableComponent> ent, HealingComponent healing)
{
var damageableDict = component.Damage.DamageDict;
var damageableDict = ent.Comp.Damage.DamageDict;
var healingDict = healing.Damage.DamageDict;
foreach (var type in healingDict)
{
@@ -136,6 +136,23 @@ public sealed class HealingSystem : EntitySystem
}
}
if (TryComp<BloodstreamComponent>(ent, out var bloodstream))
{
// Is ent missing blood that we can restore?
if (healing.ModifyBloodLevel > 0
&& _solutionContainerSystem.ResolveSolution(ent.Owner, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution, out var bloodSolution)
&& bloodSolution.Volume < bloodSolution.MaxVolume)
{
return true;
}
// Is ent bleeding and can we stop it?
if (healing.BloodlossModifier < 0 && bloodstream.BleedAmount > 0)
{
return true;
}
}
return false;
}
@@ -175,14 +192,7 @@ public sealed class HealingSystem : EntitySystem
if (TryComp<StackComponent>(uid, out var stack) && stack.Count < 1)
return false;
var anythingToDo =
HasDamage(targetDamage, component) ||
component.ModifyBloodLevel > 0 // Special case if healing item can restore lost blood...
&& TryComp<BloodstreamComponent>(target, out var bloodstream)
&& _solutionContainerSystem.ResolveSolution(target, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution, out var bloodSolution)
&& bloodSolution.Volume < bloodSolution.MaxVolume; // ...and there is lost blood to restore.
if (!anythingToDo)
if (!HasDamage((target, targetDamage), component))
{
_popupSystem.PopupEntity(Loc.GetString("medical-item-cant-use", ("item", uid)), uid, user);
return false;

View File

@@ -27,13 +27,12 @@ public sealed partial class BuyerAntagCondition : ListingCondition
public override bool Condition(ListingConditionArgs args)
{
var ent = args.EntityManager;
var minds = ent.System<SharedMindSystem>();
if (!minds.TryGetMind(args.Buyer, out var mindId, out var mind))
return true;
if (!ent.HasComponent<MindComponent>(args.Buyer))
return true; // inanimate objects don't have minds
var roleSystem = ent.System<SharedRoleSystem>();
var roles = roleSystem.MindGetAllRoleInfo(mindId);
var roles = roleSystem.MindGetAllRoleInfo(args.Buyer);
if (Blacklist != null)
{

View File

@@ -30,14 +30,12 @@ public sealed partial class BuyerDepartmentCondition : ListingCondition
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
var ent = args.EntityManager;
var minds = ent.System<SharedMindSystem>();
// this is for things like surplus crate
if (!minds.TryGetMind(args.Buyer, out var mindId, out _))
return true;
if (!ent.TryGetComponent<MindComponent>(args.Buyer, out var _))
return true; // inanimate objects don't have minds
var jobs = ent.System<SharedJobSystem>();
jobs.MindTryGetJob(mindId, out var job);
jobs.MindTryGetJob(args.Buyer, out var job);
if (Blacklist != null && job != null)
{

View File

@@ -27,14 +27,12 @@ public sealed partial class BuyerJobCondition : ListingCondition
public override bool Condition(ListingConditionArgs args)
{
var ent = args.EntityManager;
var minds = ent.System<SharedMindSystem>();
// this is for things like surplus crate
if (!minds.TryGetMind(args.Buyer, out var mindId, out _))
return true;
if (!ent.TryGetComponent<MindComponent>(args.Buyer, out var _))
return true; // inanimate objects don't have minds
var jobs = ent.System<SharedJobSystem>();
jobs.MindTryGetJob(mindId, out var job);
jobs.MindTryGetJob(args.Buyer, out var job);
if (Blacklist != null)
{

View File

@@ -2,6 +2,7 @@ using Content.Shared.Humanoid;
using Content.Shared.Store;
using Content.Shared.Humanoid.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
using Content.Shared.Mind;
namespace Content.Server.Store.Conditions;
@@ -27,7 +28,10 @@ public sealed partial class BuyerSpeciesCondition : ListingCondition
{
var ent = args.EntityManager;
if (!ent.TryGetComponent<HumanoidAppearanceComponent>(args.Buyer, out var appearance))
if (!ent.TryGetComponent<MindComponent>(args.Buyer, out var mind))
return true; // needed to obtain body entityuid to check for humanoid appearance
if (!ent.TryGetComponent<HumanoidAppearanceComponent>(mind.OwnedEntity, out var appearance))
return true; // inanimate or non-humanoid entities should be handled elsewhere, main example being surplus crates
if (Blacklist != null)

View File

@@ -10,6 +10,7 @@ using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using System.Linq;
using Content.Shared.Mind;
namespace Content.Server.Store.Systems;
@@ -69,10 +70,13 @@ public sealed partial class StoreSystem : EntitySystem
if (!component.OwnerOnly)
return;
component.AccountOwner ??= args.User;
if (!_mind.TryGetMind(args.User, out var mind, out _))
return;
component.AccountOwner ??= mind;
DebugTools.Assert(component.AccountOwner != null);
if (component.AccountOwner == args.User)
if (component.AccountOwner == mind)
return;
_popup.PopupEntity(Loc.GetString("store-not-account-owner", ("store", uid)), uid, args.User);

View File

@@ -1,7 +1,6 @@
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
using Content.Server.Power.Events;
using Content.Server.Stunnable.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Damage.Events;
using Content.Shared.Examine;

View File

@@ -5,6 +5,7 @@ using Content.Shared.FixedPoint;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Implants;
using Content.Shared.Inventory;
using Content.Shared.Mind;
using Content.Shared.PDA;
using Content.Shared.Store;
using Content.Shared.Store.Components;
@@ -19,6 +20,7 @@ public sealed class UplinkSystem : EntitySystem
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly StoreSystem _store = default!;
[Dependency] private readonly SharedSubdermalImplantSystem _subdermalImplant = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[ValidatePrototypeId<CurrencyPrototype>]
public const string TelecrystalCurrencyPrototype = "Telecrystal";
@@ -61,8 +63,12 @@ public sealed class UplinkSystem : EntitySystem
/// </summary>
private void SetUplink(EntityUid user, EntityUid uplink, FixedPoint2 balance, bool giveDiscounts)
{
if (!_mind.TryGetMind(user, out var mind, out _))
return;
var store = EnsureComp<StoreComponent>(uplink);
store.AccountOwner = user;
store.AccountOwner = mind;
store.Balance.Clear();
_store.TryAddCurrency(new Dictionary<string, FixedPoint2> { { TelecrystalCurrencyPrototype, balance } },
@@ -70,10 +76,10 @@ public sealed class UplinkSystem : EntitySystem
store);
var uplinkInitializedEvent = new StoreInitializedEvent(
TargetUser: user,
TargetUser: mind,
Store: uplink,
UseDiscounts: giveDiscounts,
Listings: _store.GetAvailableListings(user, uplink, store)
Listings: _store.GetAvailableListings(mind, uplink, store)
.ToArray());
RaiseLocalEvent(ref uplinkInitializedEvent);
}

View File

@@ -1,28 +0,0 @@
namespace Content.Server.Weapons.Melee.EnergySword;
[RegisterComponent]
internal sealed partial class EnergySwordComponent : Component
{
[ViewVariables(VVAccess.ReadWrite), DataField("activatedColor"), AutoNetworkedField]
public Color ActivatedColor = Color.DodgerBlue;
/// <summary>
/// A color option list for the random color picker.
/// </summary>
[DataField("colorOptions")]
public List<Color> ColorOptions = new()
{
Color.Tomato,
Color.DodgerBlue,
Color.Aqua,
Color.MediumSpringGreen,
Color.MediumOrchid
};
public bool Hacked = false;
/// <summary>
/// RGB cycle rate for hacked e-swords.
/// </summary>
[DataField("cycleRate")]
public float CycleRate = 1f;
}

View File

@@ -26,7 +26,8 @@ public sealed class SolutionSpikerSystem : EntitySystem
private void OnInteractUsing(Entity<RefillableSolutionComponent> entity, ref InteractUsingEvent args)
{
TrySpike(args.Used, args.Target, args.User, entity.Comp);
if (TrySpike(args.Used, args.Target, args.User, entity.Comp))
args.Handled = true;
}
/// <summary>
@@ -36,7 +37,7 @@ public sealed class SolutionSpikerSystem : EntitySystem
/// <param name="source">Source of the solution.</param>
/// <param name="target">Target to spike with the solution from source.</param>
/// <param name="user">User spiking the target solution.</param>
private void TrySpike(EntityUid source, EntityUid target, EntityUid user, RefillableSolutionComponent? spikableTarget = null,
private bool TrySpike(EntityUid source, EntityUid target, EntityUid user, RefillableSolutionComponent? spikableTarget = null,
SolutionSpikerComponent? spikableSource = null,
SolutionContainerManagerComponent? managerSource = null,
SolutionContainerManagerComponent? managerTarget = null)
@@ -46,21 +47,23 @@ public sealed class SolutionSpikerSystem : EntitySystem
|| !_solution.TryGetRefillableSolution((target, spikableTarget, managerTarget), out var targetSoln, out var targetSolution)
|| !_solution.TryGetSolution((source, managerSource), spikableSource.SourceSolution, out _, out var sourceSolution))
{
return;
return false;
}
if (targetSolution.Volume == 0 && !spikableSource.IgnoreEmpty)
{
_popup.PopupClient(Loc.GetString(spikableSource.PopupEmpty, ("spiked-entity", target), ("spike-entity", source)), user, user);
return;
return false;
}
if (!_solution.ForceAddSolution(targetSoln.Value, sourceSolution))
return;
return false;
_popup.PopupClient(Loc.GetString(spikableSource.Popup, ("spiked-entity", target), ("spike-entity", source)), user, user);
sourceSolution.RemoveAllSolution();
if (spikableSource.Delete)
QueueDel(source);
return true;
}
}

View File

@@ -17,4 +17,16 @@ public sealed partial class DragInsertContainerComponent : Component
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public bool UseVerbs = true;
/// <summary>
/// The delay in seconds before a drag will be completed.
/// </summary>
[DataField]
public TimeSpan EntryDelay = TimeSpan.Zero;
/// <summary>
/// If entry delay isn't zero, this sets whether an entity dragging itself into the container should be delayed.
/// </summary>
[DataField]
public bool DelaySelfEntry = false;
}

View File

@@ -2,24 +2,28 @@ using Content.Shared.ActionBlocker;
using Content.Shared.Administration.Logs;
using Content.Shared.Climbing.Systems;
using Content.Shared.Database;
using Content.Shared.DoAfter;
using Content.Shared.DragDrop;
using Content.Shared.Verbs;
using Robust.Shared.Containers;
using Robust.Shared.Serialization;
namespace Content.Shared.Containers;
public sealed class DragInsertContainerSystem : EntitySystem
public sealed partial class DragInsertContainerSystem : EntitySystem
{
[Dependency] private readonly ISharedAdminLogManager _adminLog = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly ClimbSystem _climb = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DragInsertContainerComponent, DragDropTargetEvent>(OnDragDropOn, before: new []{ typeof(ClimbSystem)});
SubscribeLocalEvent<DragInsertContainerComponent, DragInsertContainerDoAfterEvent>(OnDragFinished);
SubscribeLocalEvent<DragInsertContainerComponent, CanDropTargetEvent>(OnCanDragDropOn);
SubscribeLocalEvent<DragInsertContainerComponent, GetVerbsEvent<AlternativeVerb>>(OnGetAlternativeVerb);
}
@@ -33,7 +37,34 @@ public sealed class DragInsertContainerSystem : EntitySystem
if (!_container.TryGetContainer(ent, comp.ContainerId, out var container))
return;
args.Handled = Insert(args.Dragged, args.User, ent, container);
if (comp.EntryDelay <= TimeSpan.Zero ||
!comp.DelaySelfEntry && args.User == args.Dragged)
{
//instant insertion
args.Handled = Insert(args.Dragged, args.User, ent, container);
return;
}
//delayed insertion
var doAfterArgs = new DoAfterArgs(EntityManager, args.User, comp.EntryDelay, new DragInsertContainerDoAfterEvent(), ent, args.Dragged, ent)
{
BreakOnDamage = true,
BreakOnMove = true,
NeedHand = false,
};
_doAfter.TryStartDoAfter(doAfterArgs);
args.Handled = true;
}
private void OnDragFinished(Entity<DragInsertContainerComponent> ent, ref DragInsertContainerDoAfterEvent args)
{
if (args.Handled || args.Cancelled || args.Args.Target == null)
return;
if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container))
return;
Insert(args.Args.Target.Value, args.User, ent, container);
}
private void OnCanDragDropOn(Entity<DragInsertContainerComponent> ent, ref CanDropTargetEvent args)
@@ -117,4 +148,9 @@ public sealed class DragInsertContainerSystem : EntitySystem
_adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(user):player} inserted {ToPrettyString(target):player} into container {ToPrettyString(containerEntity)}");
return true;
}
[Serializable, NetSerializable]
public sealed partial class DragInsertContainerDoAfterEvent : SimpleDoAfterEvent
{
}
}

View File

@@ -13,13 +13,13 @@ public sealed partial class EnsnareableComponent : Component
/// <summary>
/// How much should this slow down the entities walk?
/// </summary>
[DataField]
[DataField, AutoNetworkedField]
public float WalkSpeed = 1.0f;
/// <summary>
/// How much should this slow down the entities sprint?
/// </summary>
[DataField]
[DataField, AutoNetworkedField]
public float SprintSpeed = 1.0f;
/// <summary>

View File

@@ -38,6 +38,12 @@ public sealed partial class EnsnaringComponent : Component
[DataField]
public float StaminaDamage = 55f;
/// <summary>
/// How many times can the ensnare be applied to the same target?
/// </summary>
[DataField]
public float MaxEnsnares = 1;
/// <summary>
/// Should this ensnare someone when thrown?
/// </summary>

View File

@@ -256,23 +256,18 @@ public abstract class SharedEnsnareableSystem : EntitySystem
if (!TryComp<EnsnareableComponent>(target, out var ensnareable))
return false;
// Need to insert before free legs check.
Container.Insert(ensnare, ensnareable.Container);
var numEnsnares = ensnareable.Container.ContainedEntities.Count;
var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count();
var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count);
var freeLegs = legs - ensnaredLegs;
if (freeLegs > 0)
//Don't do anything if the maximum number of ensnares is applied.
if (numEnsnares >= component.MaxEnsnares)
return false;
// Apply stamina damage to target if they weren't ensnared before.
if (ensnareable.IsEnsnared != true)
Container.Insert(ensnare, ensnareable.Container);
// Apply stamina damage to target
if (TryComp<StaminaComponent>(target, out var stamina))
{
if (TryComp<StaminaComponent>(target, out var stamina))
{
_stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina);
}
_stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina);
}
component.Ensnared = target;

View File

@@ -21,10 +21,4 @@ public sealed partial class OrbitVisualsComponent : Component
/// How long should the orbit stop animation last in seconds?
/// </summary>
public float OrbitStopLength = 1.0f;
/// <summary>
/// How far along in the orbit, from 0 to 1, is this entity?
/// </summary>
[Animatable]
public float Orbit { get; set; } = 0.0f;
}

View File

@@ -0,0 +1,24 @@
using Content.Shared.Actions;
using Content.Shared.Chat.Prototypes;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Magic.Events;
public sealed partial class VoidApplauseSpellEvent : EntityTargetActionEvent, ISpeakSpell
{
[DataField]
public string? Speech { get; private set; }
/// <summary>
/// Emote to use.
/// </summary>
[DataField]
public ProtoId<EmotePrototype> Emote = "ClapSingle";
/// <summary>
/// Visual effect entity that is spawned at both the user's and the target's location.
/// </summary>
[DataField]
public EntProtoId Effect = "EffectVoidBlink";
}

View File

@@ -7,7 +7,6 @@ using Content.Shared.Doors.Components;
using Content.Shared.Doors.Systems;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Humanoid;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Lock;
@@ -15,9 +14,6 @@ using Content.Shared.Magic.Components;
using Content.Shared.Magic.Events;
using Content.Shared.Maps;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Content.Shared.Physics;
using Content.Shared.Popups;
using Content.Shared.Speech.Muting;
@@ -37,6 +33,10 @@ using Robust.Shared.Spawners;
namespace Content.Shared.Magic;
// TODO: Move BeforeCast & Prerequirements (like Wizard clothes) to action comp
// Alt idea - make it its own comp and split, like the Charge PR
// TODO: Move speech to actionComp or again, its own ECS
// TODO: Use the MagicComp just for pure backend things like spawning patterns?
/// <summary>
/// Handles learning and using spells (actions)
/// </summary>
@@ -60,7 +60,6 @@ public abstract class SharedMagicSystem : EntitySystem
[Dependency] private readonly LockSystem _lock = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly SharedStunSystem _stun = default!;
@@ -80,79 +79,7 @@ public abstract class SharedMagicSystem : EntitySystem
SubscribeLocalEvent<ChargeSpellEvent>(OnChargeSpell);
SubscribeLocalEvent<RandomGlobalSpawnSpellEvent>(OnRandomGlobalSpawnSpell);
SubscribeLocalEvent<MindSwapSpellEvent>(OnMindSwapSpell);
// Spell wishlist
// A wishlish of spells that I'd like to implement or planning on implementing in a future PR
// TODO: InstantDoAfterSpell and WorldDoafterSpell
// Both would be an action that take in an event, that passes an event to trigger once the doafter is done
// This would be three events:
// 1 - Event that triggers from the action that starts the doafter
// 2 - The doafter event itself, which passes the event with it
// 3 - The event to trigger once the do-after finishes
// TODO: Inanimate objects to life ECS
// AI sentience
// TODO: Flesh2Stone
// Entity Target spell
// Synergy with Inanimate object to life (detects player and allows player to move around)
// TODO: Lightning Spell
// Should just fire lightning, try to prevent arc back to caster
// TODO: Magic Missile (homing projectile ecs)
// Instant action, target any player (except self) on screen
// TODO: Random projectile ECS for magic-carp, wand of magic
// TODO: Recall Spell
// mark any item in hand to recall
// ItemRecallComponent
// Event adds the component if it doesn't exist and the performer isn't stored in the comp
// 2nd firing of the event checks to see if the recall comp has this uid, and if it does it calls it
// if no free hands, summon at feet
// if item deleted, clear stored item
// TODO: Jaunt (should be its own ECS)
// Instant action
// When clicked, disappear/reappear (goes to paused map)
// option to restrict to tiles
// option for requiring entry/exit (blood jaunt)
// speed option
// TODO: Summon Events
// List of wizard events to add into the event pool that frequently activate
// floor is lava
// change places
// ECS that when triggered, will periodically trigger a random GameRule
// Would need a controller/controller entity?
// TODO: Summon Guns
// Summon a random gun at peoples feet
// Get every alive player (not in cryo, not a simplemob)
// TODO: After Antag Rework - Rare chance of giving gun collector status to people
// TODO: Summon Magic
// Summon a random magic wand at peoples feet
// Get every alive player (not in cryo, not a simplemob)
// TODO: After Antag Rework - Rare chance of giving magic collector status to people
// TODO: Bottle of Blood
// Summons Slaughter Demon
// TODO: Slaughter Demon
// Also see Jaunt
// TODO: Field Spells
// Should be able to specify a grid of tiles (3x3 for example) that it effects
// Timed despawn - so it doesn't last forever
// Ignore caster - for spells that shouldn't effect the caster (ie if timestop should effect the caster)
// TODO: Touch toggle spell
// 1 - When toggled on, show in hand
// 2 - Block hand when toggled on
// - Require free hand
// 3 - use spell event when toggled & click
SubscribeLocalEvent<VoidApplauseSpellEvent>(OnVoidApplause);
}
private void OnBeforeCastSpell(Entity<MagicComponent> ent, ref BeforeCastSpellEvent args)
@@ -402,8 +329,7 @@ public abstract class SharedMagicSystem : EntitySystem
return;
var transform = Transform(args.Performer);
if (transform.MapID != args.Target.GetMapId(EntityManager) || !_interaction.InRangeUnobstructed(args.Performer, args.Target, range: 1000F, collisionMask: CollisionGroup.Opaque, popup: true))
if (transform.MapID != _transform.GetMapId(args.Target) || !_interaction.InRangeUnobstructed(args.Performer, args.Target, range: 1000F, collisionMask: CollisionGroup.Opaque, popup: true))
return;
_transform.SetCoordinates(args.Performer, args.Target);
@@ -411,6 +337,17 @@ public abstract class SharedMagicSystem : EntitySystem
Speak(args);
args.Handled = true;
}
public virtual void OnVoidApplause(VoidApplauseSpellEvent ev)
{
if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer))
return;
ev.Handled = true;
Speak(ev);
_transform.SwapPositions(ev.Performer, ev.Target);
}
// End Teleport Spells
#endregion
#region Spell Helpers
@@ -435,7 +372,7 @@ public abstract class SharedMagicSystem : EntitySystem
}
// End Spell Helpers
#endregion
#region Smite Spells
#region Touch Spells
private void OnSmiteSpell(SmiteSpellEvent ev)
{
if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer))
@@ -454,7 +391,8 @@ public abstract class SharedMagicSystem : EntitySystem
_body.GibBody(ev.Target, true, body);
}
// End Smite Spells
// End Touch Spells
#endregion
#region Knock Spells
/// <summary>

View File

@@ -2,6 +2,7 @@
using Content.Shared.Implants;
using Content.Shared.Implants.Components;
using Content.Shared.Mindshield.Components;
using Robust.Shared.Containers;
namespace Content.Shared.Mindshield.FakeMindShield;
@@ -13,7 +14,9 @@ public sealed class SharedFakeMindShieldImplantSystem : EntitySystem
base.Initialize();
SubscribeLocalEvent<SubdermalImplantComponent, FakeMindShieldToggleEvent>(OnFakeMindShieldToggle);
SubscribeLocalEvent<FakeMindShieldImplantComponent, ImplantImplantedEvent>(ImplantCheck);
SubscribeLocalEvent<FakeMindShieldImplantComponent, EntGotRemovedFromContainerMessage>(ImplantDraw);
}
/// <summary>
/// Raise the Action of a Implanted user toggling their implant to the FakeMindshieldComponent on their entity
/// </summary>
@@ -33,4 +36,9 @@ public sealed class SharedFakeMindShieldImplantSystem : EntitySystem
if (ev.Implanted != null)
EnsureComp<FakeMindShieldComponent>(ev.Implanted.Value);
}
private void ImplantDraw(Entity<FakeMindShieldImplantComponent> ent, ref EntGotRemovedFromContainerMessage ev)
{
RemComp<FakeMindShieldComponent>(ev.Container.Owner);
}
}

View File

@@ -19,7 +19,7 @@ using Robust.Shared.Utility;
namespace Content.Shared.Slippery;
[UsedImplicitly]
[UsedImplicitly]
public sealed class SlipperySystem : EntitySystem
{
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
@@ -83,7 +83,7 @@ public sealed class SlipperySystem : EntitySystem
{
if (HasComp<SpeedModifiedByContactComponent>(args.OtherEntity))
_speedModifier.AddModifiedEntity(args.OtherEntity);
}
}
private bool CanSlip(EntityUid uid, EntityUid toSlip)
{

View File

@@ -37,10 +37,10 @@ public sealed partial class StoreComponent : Component
public HashSet<ProtoId<CurrencyPrototype>> CurrencyWhitelist = new();
/// <summary>
/// The person who "owns" the store/account. Used if you want the listings to be fixed
/// The person/mind who "owns" the store/account. Used if you want the listings to be fixed
/// regardless of who activated it. I.E. role specific items for uplinks.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public EntityUid? AccountOwner = null;
/// <summary>

View File

@@ -2,7 +2,7 @@ using Content.Shared.Stunnable;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
namespace Content.Server.Stunnable.Components;
namespace Content.Shared.Stunnable;
[RegisterComponent, NetworkedComponent]
[AutoGenerateComponentState]

View File

@@ -0,0 +1,40 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Weapons.Melee.EnergySword;
[RegisterComponent, NetworkedComponent, Access(typeof(EnergySwordSystem))]
[AutoGenerateComponentState]
public sealed partial class EnergySwordComponent : Component
{
/// <summary>
/// What color the blade will be when activated.
/// </summary>
[DataField, AutoNetworkedField]
public Color ActivatedColor = Color.DodgerBlue;
/// <summary>
/// A color option list for the random color picker.
/// </summary>
[DataField]
public List<Color> ColorOptions = new()
{
Color.Tomato,
Color.DodgerBlue,
Color.Aqua,
Color.MediumSpringGreen,
Color.MediumOrchid
};
/// <summary>
/// Whether the energy sword has been pulsed by a multitool,
/// causing the blade to cycle RGB colors.
/// </summary>
[DataField, AutoNetworkedField]
public bool Hacked;
/// <summary>
/// RGB cycle rate for hacked e-swords.
/// </summary>
[DataField]
public float CycleRate = 1f;
}

View File

@@ -5,7 +5,7 @@ using Content.Shared.Toggleable;
using Content.Shared.Tools.Systems;
using Robust.Shared.Random;
namespace Content.Server.Weapons.Melee.EnergySword;
namespace Content.Shared.Weapons.Melee.EnergySword;
public sealed class EnergySwordSystem : EntitySystem
{
@@ -22,18 +22,22 @@ public sealed class EnergySwordSystem : EntitySystem
SubscribeLocalEvent<EnergySwordComponent, InteractUsingEvent>(OnInteractUsing);
}
// Used to pick a random color for the blade on map init.
private void OnMapInit(EntityUid uid, EnergySwordComponent comp, MapInitEvent args)
private void OnMapInit(Entity<EnergySwordComponent> entity, ref MapInitEvent args)
{
if (comp.ColorOptions.Count != 0)
comp.ActivatedColor = _random.Pick(comp.ColorOptions);
if (entity.Comp.ColorOptions.Count != 0)
{
entity.Comp.ActivatedColor = _random.Pick(entity.Comp.ColorOptions);
Dirty(entity);
}
if (!TryComp(uid, out AppearanceComponent? appearanceComponent))
if (!TryComp(entity, out AppearanceComponent? appearanceComponent))
return;
_appearance.SetData(uid, ToggleableLightVisuals.Color, comp.ActivatedColor, appearanceComponent);
_appearance.SetData(entity, ToggleableLightVisuals.Color, entity.Comp.ActivatedColor, appearanceComponent);
}
// Used to make the make the blade multicolored when using a multitool on it.
private void OnInteractUsing(EntityUid uid, EnergySwordComponent comp, InteractUsingEvent args)
// Used to make the blade multicolored when using a multitool on it.
private void OnInteractUsing(Entity<EnergySwordComponent> entity, ref InteractUsingEvent args)
{
if (args.Handled)
return;
@@ -42,14 +46,16 @@ public sealed class EnergySwordSystem : EntitySystem
return;
args.Handled = true;
comp.Hacked = !comp.Hacked;
entity.Comp.Hacked = !entity.Comp.Hacked;
if (comp.Hacked)
if (entity.Comp.Hacked)
{
var rgb = EnsureComp<RgbLightControllerComponent>(uid);
_rgbSystem.SetCycleRate(uid, comp.CycleRate, rgb);
var rgb = EnsureComp<RgbLightControllerComponent>(entity);
_rgbSystem.SetCycleRate(entity, entity.Comp.CycleRate, rgb);
}
else
RemComp<RgbLightControllerComponent>(uid);
RemComp<RgbLightControllerComponent>(entity);
Dirty(entity);
}
}

View File

@@ -6,6 +6,11 @@
license: "CC-BY-SA-3.0"
copyright: "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432"
source: "https://github.com/tgstation/tgstation"
- files:
- clap-single.ogg
license: "CC-BY-SA-3.0"
copyright: "Taken from Citadel Station at https://github.com/Citadel-Station-13/Citadel-Station-13/commit/e145bdafe83e2cf38d148c39f073da5e7b0cb456"
source: "https://github.com/Citadel-Station-13/Citadel-Station-13"
- files:
- snap1.ogg
- snap2.ogg

Binary file not shown.

View File

@@ -191,3 +191,8 @@
license: "CC0-1.0"
copyright: "by AftrLite (Github). Uses audio from hypospray.ogg and hiss.ogg (Found in Resources/Audio/Items)"
source: "https://github.com/space-wizards/space-station-14/pull/33097"
- files: ["shutter.ogg"]
license: "CC-BY-3.0"
copyright: "Created by Tomlija, converted to OGG and modified by themias."
source: "https://freesound.org/people/Tomlija/sounds/99565/"

Binary file not shown.

Binary file not shown.

View File

@@ -22,3 +22,9 @@
copyright: '"forcewall.ogg", "knock.ogg", "blink.ogg", "ethereal_enter.ogg", and "ethereal_exit.ogg" by Citadel Station 13'
license: CC-BY-SA-3.0
source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5
- files:
- voidblink.ogg
copyright: '"voidblink.ogg" by Citadel Station 13'
license: CC-BY-SA-3.0
source: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/e145bdafe83e2cf38d148c39f073da5e7b0cb456

View File

@@ -737,5 +737,12 @@ Entries:
id: 91
time: '2025-01-21T23:23:47.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34563
- author: ScarKy0
changes:
- message: Added the omni-accent smite. It adds most accents onto the target.
type: Add
id: 92
time: '2025-02-02T20:00:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34824
Name: Admin
Order: 1

View File

@@ -1,217 +1,4 @@
Entries:
- author: drakewill-CRL
changes:
- message: Produce harvested from sentient plants are no longer sentient themselves.
type: Fix
id: 7381
time: '2024-09-16T00:04:45.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32192
- author: DrSmugleaf
changes:
- message: Fixed examine sometimes flickering and closing until you examine something
around you.
type: Fix
id: 7382
time: '2024-09-16T08:51:54.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32205
- author: ArtisticRoomba
changes:
- message: The Bruise-O-Mat alcohol vendor has been added to the nukie outpost,
for all your pre-op drinking needs. Seems to have developed a witty personality,
too...
type: Add
id: 7383
time: '2024-09-16T08:59:00.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32107
- author: ArtisticRoomba
changes:
- message: The binary translator key in the syndie uplink is now correctly marked
as syndicate contraband.
type: Tweak
id: 7384
time: '2024-09-16T10:01:49.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32193
- author: MissKay1994
changes:
- message: Lizards are now poisoned by hot chocolate
type: Fix
id: 7385
time: '2024-09-16T12:45:15.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32147
- author: Alice Liddel
changes:
- message: Crayon charges increased from 15 to 25
type: Add
id: 7386
time: '2024-09-17T00:35:57.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32061
- author: TheShuEd
changes:
- message: Anomalous infections added! People can now be infected by anomalies!
This allows you to use abnormal abilities, but can easily kill the host. To
cure them, bombard them with containment particles, because if the anomaly inside
them explodes, their bodies will be gibbed....
type: Add
- message: Flesh anomaly resprite
type: Tweak
- message: anomalies now disconnect from the anomaly synchronizer if they are too
far away from it.
type: Fix
id: 7387
time: '2024-09-17T09:49:19.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31876
- author: TheShuEd
changes:
- message: fix Tech anomaly loud sounds and superfast flickering
type: Fix
id: 7388
time: '2024-09-17T16:05:38.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32245
- author: drakewill-CRL
changes:
- message: Fixed plant mutations carrying over to other plants and future rounds.
type: Fix
id: 7389
time: '2024-09-17T19:45:42.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32257
- author: Moomoobeef
changes:
- message: Added more names to the pool of names the AI can have.
type: Add
id: 7390
time: '2024-09-17T22:09:55.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31951
- author: Calecute
changes:
- message: Corrected cake batter recipe in guidebook
type: Fix
id: 7391
time: '2024-09-18T15:15:34.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32276
- author: Beck Thompson
changes:
- message: Recycler no longer allows basic materials to be inserted into it.
type: Fix
id: 7392
time: '2024-09-18T21:58:59.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32144
- author: deltanedas
changes:
- message: Epinephrine now adds Adrenaline, because it is.
type: Tweak
id: 7393
time: '2024-09-18T23:00:48.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32076
- author: ShadowCommander
changes:
- message: Fixed clicking on chairs and beds with an entity buckled to them not
unbuckling them.
type: Fix
id: 7394
time: '2024-09-18T23:55:26.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/29998
- author: Winkarst-cpu
changes:
- message: Now fire leaves burn marks on the tiles that were affected by it.
type: Add
id: 7395
time: '2024-09-19T00:23:50.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31939
- author: ArchRBX
changes:
- message: Mass scanners and shuttle consoles now display coordinates beneath IFF
labels
type: Add
- message: IFF labels that are beyond the viewport extents maintain their heading
and don't hug corners
type: Fix
id: 7396
time: '2024-09-19T01:25:47.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31501
- author: coffeeware
changes:
- message: a powered TEG won't produce infinite power when destroyed
type: Fix
id: 7397
time: '2024-09-19T02:15:44.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/29972
- author: Boaz1111
changes:
- message: Added plasma and uranium arrows.
type: Add
id: 7398
time: '2024-09-19T08:41:24.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31241
- author: Ertanic
changes:
- message: Wanted list program and its cartridge.
type: Add
- message: The cartridge has been added to the HOS locker.
type: Add
- message: Added target to thief on wanted list cartridge.
type: Add
id: 7399
time: '2024-09-19T10:22:02.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31223
- author: Errant
changes:
- message: Crew monitor list can now be filtered by name and job.
type: Add
id: 7400
time: '2024-09-19T10:23:45.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31659
- author: deltanedas
changes:
- message: Removed the flare blueprint from salvage, it's now unlocked roundstart
in autolathes.
type: Remove
id: 7401
time: '2024-09-19T13:45:04.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32303
- author: deltanedas
changes:
- message: Increased the thieving beacon's range to 2 tiles.
type: Tweak
id: 7402
time: '2024-09-19T13:55:31.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31340
- author: Winkarst-cpu
changes:
- message: The first editable line in the dialog window now grabs the keyboard focus
once it's open.
type: Fix
id: 7403
time: '2024-09-19T14:01:54.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31294
- author: Plykiya
changes:
- message: You can now transfer someone from a rollerbed to a bed directly.
type: Tweak
id: 7404
time: '2024-09-19T14:08:33.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32089
- author: SaphireLattice
changes:
- message: Fland now has public glass airlocks sectioning the hallway.
type: Fix
id: 7405
time: '2024-09-19T19:17:19.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32264
- author: Plykiya
changes:
- message: Cockroaches and mothroaches can no longer damage things with their bites.
type: Tweak
id: 7406
time: '2024-09-19T22:15:45.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32221
- author: PopGamer46
changes:
- message: The rat king's rats now follow you instead of idling when there is no
one to attack during the CheeseEm order
type: Tweak
id: 7407
time: '2024-09-19T23:27:23.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32181
- author: JIPDawg
changes:
- message: Small Hydraulic clamp now correctly consumes 2% battery instead of recharging
@@ -3908,3 +3695,213 @@
id: 7880
time: '2025-01-30T17:48:11.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34557
- author: keronshb
changes:
- message: Added Void's Applause! A Wizard Spell that switches your location with
the target.
type: Add
id: 7881
time: '2025-01-31T00:10:36.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34591
- author: Nox38
changes:
- message: Rebalanced Box's armory and increased its max security officers to 7.
type: Tweak
id: 7882
time: '2025-01-31T07:23:03.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34750
- author: SlamBamActionman
changes:
- message: Forcefeeding pills now takes 2 seconds (was 1 second), while eating them
takes 0.6 seconds (was 1 second).
type: Tweak
id: 7883
time: '2025-01-31T11:59:38.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34764
- author: themias
changes:
- message: Updated sound effects for shutters
type: Tweak
id: 7884
time: '2025-01-31T17:41:52.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34774
- author: Nox38
changes:
- message: Renamed riot bullet shield to ballistic shield
type: Tweak
- message: Renamed riot laser shield to ablative shield
type: Tweak
id: 7885
time: '2025-01-31T23:39:22.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34794
- author: Nox38
changes:
- message: Set Marathon's max secoffs to 8.
type: Tweak
- message: Restocked Marathon's armory.
type: Tweak
id: 7886
time: '2025-02-01T06:32:42.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34798
- author: ToxicSonicFan04
changes:
- message: Added Sink to Chemistry on Box Station!
type: Add
id: 7887
time: '2025-02-01T06:35:36.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34803
- author: NazrinNya
changes:
- message: Flesh Kudzu now contains razorium, making it unsafe to eat.
type: Tweak
id: 7888
time: '2025-02-01T12:10:20.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32821
- author: Boaz1111
changes:
- message: 'New Reagent: Coldsauce! It can be made using the Frost Oil from Chilly
Peppers, similar to Hotsauce from Capsaicin Oil!'
type: Add
- message: Coldsauce packets and bottles now contain Coldsauce, instead of Frost
Oil.
type: Tweak
id: 7889
time: '2025-02-01T15:20:01.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34458
- author: Toxic, Nox
changes:
- message: Changed Packed armory.
type: Tweak
id: 7890
time: '2025-02-01T21:19:28.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34808
- author: Minty642
changes:
- message: Added Gold and Silver Solidification, just mix with frost oil.
type: Add
id: 7891
time: '2025-02-02T01:00:32.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33239
- author: Tayrtahn
changes:
- message: Ghosts and anomaly cores no longer jitter when starting to follow a target.
type: Fix
id: 7892
time: '2025-02-02T01:38:03.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34797
- author: DieselMohawk
changes:
- message: Renamed ablative shield to laser shield
type: Tweak
- message: Changed description for laser shield & ballistic shield
type: Tweak
id: 7893
time: '2025-02-03T01:04:04.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34841
- author: keronshb
changes:
- message: The Hypereutactic Blade has been added to the game as an alternative
to the double bladed energy sword. It's a massive sword with high attack power,
100% reflect chance, but slow movement and use speed.
type: Add
id: 7894
time: '2025-02-03T21:22:22.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32414
- author: AgentSmithRadio
changes:
- message: Added manager wire hacking menus to nearly all vending machines. Get
hacking and see what's hidden!
type: Add
id: 7895
time: '2025-02-03T23:33:14.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32934
- author: ps3moira
changes:
- message: Changed 3D item sprites to cabinet perspective
type: Tweak
id: 7896
time: '2025-02-04T07:52:10.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34293
- author: impubbi
changes:
- message: Bolas will now only be applied once.
type: Fix
id: 7897
time: '2025-02-04T16:11:46.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34723
- author: slarticodefast
changes:
- message: Added binoculars. You can find them in maints loot and the warden's locker.
type: Add
id: 7898
time: '2025-02-04T21:46:50.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34687
- author: Spacemann
changes:
- message: Added 4 randomized maintenance rooms to in Convex station. These will
change every round with a different layout.
type: Add
id: 7899
time: '2025-02-04T22:58:30.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34866
- author: Winkarst-cpu
changes:
- message: Observers now have a personal point light and can toggle it.
type: Add
id: 7900
time: '2025-02-04T23:26:06.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33607
- author: whatston3
changes:
- message: Healing items that reduce bleeding can now be applied to undamaged mobs.
type: Tweak
id: 7901
time: '2025-02-05T03:23:31.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33526
- author: DuckManZach
changes:
- message: Floor pills have some new interesting surprises!
type: Add
id: 7902
time: '2025-02-05T08:42:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34843
- author: Gavin-TC
changes:
- message: Changed common utensil sprites to appear smaller and more proportionate.
type: Tweak
id: 7903
time: '2025-02-05T13:08:53.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34277
- author: Booblesnoot42
changes:
- message: Inserting another person into a cryogenic sleeping unit is no longer
instant.
type: Tweak
id: 7904
time: '2025-02-05T14:46:21.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34619
- author: hyperDelegate
changes:
- message: The Nuclear Operative Reinforcement Teleporter now costs 30TC (was 35).
type: Tweak
id: 7905
time: '2025-02-05T14:54:46.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34675
- author: Farrellka
changes:
- message: Removed the old long ears for human!
type: Remove
- message: Added more long (elf) ears for human!
type: Add
id: 7906
time: '2025-02-05T16:49:04.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33572
- author: keronshb
changes:
- message: Disabler - decreased fire cost, increased projectile speed.
type: Tweak
- message: Disabler SMG - decreased fire cost, increased fire rate.
type: Tweak
id: 7907
time: '2025-02-05T23:12:07.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34890

File diff suppressed because one or more lines are too long

View File

@@ -56,6 +56,7 @@ admin-smite-vomit-organs-name = Vomit Organs
admin-smite-ghostkick-name = Ghost Kick
admin-smite-nyanify-name = Cat Ears
admin-smite-kill-sign-name = Kill Sign
admin-smite-omni-accent-name = Omni-Accent
## Smite descriptions
@@ -99,6 +100,7 @@ admin-smite-super-bonk-description = Slams them on every single table on the Sta
admin-smite-super-bonk-lite-description= Slams them on every single table on the Station and beyond. Stops when the target is dead.
admin-smite-terminate-description = Creates a Terminator ghost role with the sole objective of killing them.
admin-smite-super-slip-description = Slips them really, really hard.
admin-smite-omni-accent-description = Makes the target speak with almost every accent available.
## Tricks descriptions

View File

@@ -11,6 +11,7 @@ chat-emote-name-squeak = Squeak
chat-emote-name-thump = Thump Tail
chat-emote-name-click = Click
chat-emote-name-clap = Clap
chat-emote-name-clap-single = Single Clap
chat-emote-name-snap = Snap
chat-emote-name-salute = Salute
chat-emote-name-gasp = Gasp
@@ -45,6 +46,7 @@ chat-emote-msg-squeak = squeaks.
chat-emote-msg-thump = thumps {POSS-ADJ($entity)} tail.
chat-emote-msg-click = clicks.
chat-emote-msg-clap = claps!
chat-emote-msg-clap-single = claps their hands together.
chat-emote-msg-snap = snaps {POSS-ADJ($entity)} fingers.
chat-emote-msg-salute = salutes.
chat-emote-msg-gasp = gasps.

View File

@@ -1,4 +1,5 @@
comp-space-heater-ui-thermostat = Thermostat:
comp-space-heater-ui-title = Temperature Control Unit
comp-space-heater-ui-thermostat = Thermostat:
comp-space-heater-ui-mode = Mode
comp-space-heater-ui-status-disabled = Off
comp-space-heater-ui-status-enabled = On

View File

@@ -35,11 +35,11 @@ criminal-records-permission-denied = Permission denied
## Security channel notifications
criminal-records-console-wanted = {$name} ({$job}) was made wanted by {$officer} for: {$reason}.
criminal-records-console-not-wanted = {$officer} cleared the wanted status of {$name} ({$job}).
criminal-records-console-suspected = {$officer} marked {$name} ({$job}) as suspicious because of: {$reason}
criminal-records-console-not-suspected = {$name} ({$job}) has been cleared of suspicion by {$officer}.
criminal-records-console-detained = {$name} ({$job}) has been detained by {$officer}.
criminal-records-console-released = {$name} ({$job}) has been released by {$officer}.
criminal-records-console-not-wanted = {$officer} cleared the wanted status of {$name} ($job).
criminal-records-console-paroled = {$name} ({$job}) has been released on parole by {$officer}.
criminal-records-console-not-parole = {$officer} cleared the parole status of {$name} ({$job}).
criminal-records-console-unknown-officer = <unknown>

View File

@@ -73,7 +73,7 @@ names-ai-dataset-55 = Hivebot Overmind
names-ai-dataset-56 = Huey
# A play on the fad apple spawned of putting "i" infront of your tech products name
names-ai-dataset-57 = iAI
names-ai-dataset-57 = iCore
# Hell on earth (web browser)
names-ai-dataset-58 = I.E. 6
@@ -99,7 +99,7 @@ names-ai-dataset-70 = Max 404
names-ai-dataset-71 = Metalhead
names-ai-dataset-72 = M.I.M.I
names-ai-dataset-73 = MK ULTRA
names-ai-dataset-74 = MoMMI
names-ai-dataset-74 = Monarch
names-ai-dataset-75 = Mugsy3000
names-ai-dataset-76 = Multivac
names-ai-dataset-77 = NCH

View File

@@ -3,7 +3,9 @@ ghost-gui-ghost-warp-button = Ghost Warp
ghost-gui-ghost-roles-button = Ghost Roles ({$count})
ghost-gui-toggle-ghost-visibility-popup-on = Enabled visibility of ghosts.
ghost-gui-toggle-ghost-visibility-popup-off = Disabled visibility of ghosts.
ghost-gui-toggle-lighting-manager-popup = Toggled all lighting.
ghost-gui-toggle-lighting-manager-popup-normal = Lighting normal.
ghost-gui-toggle-lighting-manager-popup-personal-light = Enabled personal light.
ghost-gui-toggle-lighting-manager-popup-fullbright = Fullbright mode.
ghost-gui-toggle-fov-popup = Toggled field-of-view.
ghost-gui-toggle-hearing-popup-on = You can now hear all messages.

View File

@@ -1,12 +1,12 @@
reagent-effect-status-effect-Stun = stunning
reagent-effect-status-effect-KnockedDown = knockdown
reagent-effect-status-effect-Jitter = jittering
reagent-effect-status-effect-TemporaryBlindness = blindess
reagent-effect-status-effect-TemporaryBlindness = blindness
reagent-effect-status-effect-SeeingRainbows = hallucinations
reagent-effect-status-effect-Muted = inability to speak
reagent-effect-status-effect-Stutter = stuttering
reagent-effect-status-effect-ForcedSleep = unconsciousness
reagent-effect-status-effect-Drunk = drunkness
reagent-effect-status-effect-Drunk = drunkenness
reagent-effect-status-effect-PressureImmunity = pressure immunity
reagent-effect-status-effect-Pacified = combat pacification
reagent-effect-status-effect-RatvarianLanguage = ratvarian language patterns

View File

@@ -6,3 +6,5 @@ action-speech-spell-fireball = ONI'SOMA!
action-speech-spell-summon-guns = YOR'NEE VES-KORFA
action-speech-spell-summon-magic = RYGOIN FEMA-VERECO
action-speech-spell-mind-swap = GIN'YU CAPAN!
action-speech-spell-cluwne = !KNOH
action-speech-spell-slip = SLEE PARRI!

View File

@@ -1 +1,6 @@
marking-HumanLongEars = Long Ears
marking-HumanLongEars = Long Ears Standard
marking-LongEarsWide = Long Ears Wide
marking-LongEarsSmall = Long Ears Small
marking-LongEarsUpwards = Long Ears Upwards
marking-LongEarsTall = Long Ears Tall
marking-LongEarsThin = Long Ears Thin

View File

@@ -0,0 +1,3 @@
### Messages that pop up when metabolizing Frost Oil.
frost-oil-effect-light-cold = You feel a slight cold tingle in your throat...

View File

@@ -7,8 +7,8 @@ reagent-desc-bbq-sauce = Hand wipes not included.
reagent-name-cornoil = corn oil
reagent-desc-cornoil = Corn oil, A delicious oil used in cooking. Made from corn.
reagent-name-frostoil = frostoil
reagent-desc-frostoil = Leaves the tongue numb in its passage.
reagent-name-coldsauce = coldsauce
reagent-desc-coldsauce = Leaves the tongue numb in its passage.
reagent-name-horseradish-sauce = horseradish sauce
reagent-desc-horseradish-sauce = Smelly horseradish sauce.

View File

@@ -36,3 +36,6 @@ reagent-desc-oil = Used by chefs to cook.
reagent-name-capsaicin-oil = Capsaicin Oil
reagent-desc-capsaicin-oil = Capsaicin Oil is the ingredient found in different types of hot peppers.
reagent-name-frost-oil = Frost Oil
reagent-desc-frost-oil = Frost Oil is the ingredient found in chilly peppers, a rare pepper mutation.

View File

@@ -0,0 +1 @@
shutter-rattle = *rattle rattle*

View File

@@ -1,10 +1,13 @@
# Spells
spellbook-fireball-name = Fireball
spellbook-fireball-desc = Get most crew exploding with rage when they see this fireball heading toward them!
spellbook-fireball-desc = Get most crew exploding with rage when they see this fireball heading toward them! Upgradeable.
spellbook-blink-name = Blink
spellbook-blink-desc = Don't blink or you'll miss yourself teleporting away.
spellbook-voidapplause-name = Void Applause
spellbook-voidapplause-desc = Swap places with the target, doesn't it make you want to do the boogie?
spellbook-force-wall-name = Force Wall
spellbook-force-wall-desc = Make three walls of pure force that you can pass through, but other's can't.
@@ -23,6 +26,15 @@ spellbook-ethereal-jaunt-description = Slip into the ethereal plane to slip away
spellbook-mind-swap-name = Mind Swap
spellbook-mind-swap-description = Exchange bodies with another person!
spellbook-smite-name = Smite
spellbook-smite-desc = Don't like them? EXPLODE them into giblets! Requires Wizard Robe & Hat.
spellbook-cluwne-name = Cluwne's Curse
spellbook-cluwne-desc = For when you really hate someone and Smite isn't enough. Requires Wizard Robe & Hat.
spellbook-slip-name = Slippery Slope
spellbook-slip-desc = Learn the ancient ways of the Janitor and curse your target to be slippery. Requires Wizard Robe & Hat.
# Equipment
spellbook-wand-polymorph-door-name = Wand of Entrance

View File

@@ -17,6 +17,9 @@ uplink-esword-desc = A very dangerous energy sword that can reflect shots. Can b
uplink-esword-double-name = Double Bladed Energy Sword
uplink-esword-double-desc = A much more expensive counter part to the normal energy sword: with a much higher reflection chance, larger attack angle, higher structural damage, and faster swing. Makes a lot of noise when used or turned on.
uplink-hypereutactic-blade-name = Hypereutactic Blade
uplink-hypereutactic-blade-desc = A gigantic energy sword with power that matches its looks. Requires two hands. Slow and unwieldy, yet pretty adept at reflecting. Previously made infamous by an operative wearing a joy mask. You wouldn't want to see this coming at you down the hall!
uplink-edagger-name = Energy Dagger
uplink-edagger-desc = A small energy blade conveniently disguised in the form of a pen.

File diff suppressed because it is too large Load Diff

View File

@@ -66,6 +66,11 @@ entities:
bodyType: Dynamic
- type: Fixtures
fixtures: {}
- type: DeviceNetwork
configurators: []
deviceLists: []
transmitFrequencyId: ShuttleTimer
deviceNetId: Wireless
- type: OccluderTree
- type: SpreaderGrid
- type: Shuttle

View File

@@ -541,7 +541,11 @@ entities:
chunkSize: 4
- type: GasTileOverlay
- type: RadiationGridResistance
- type: EmergencyShuttle
- type: DeviceNetwork
configurators: []
deviceLists: []
transmitFrequencyId: ShuttleTimer
deviceNetId: Wireless
- proto: AirAlarm
entities:
- uid: 218

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -395,7 +395,6 @@ entities:
2109: -42,-13
2152: -37,22
2153: -36,22
2182: -34,20
2183: -38,15
2310: -51,8
2411: -60,1
@@ -420,6 +419,7 @@ entities:
2841: -48,6
2861: -42,-16
2862: -40,-16
2871: -36,20
- node:
angle: 4.71238898038469 rad
color: '#DE3A3AFF'
@@ -1729,12 +1729,10 @@ entities:
515: -30,13
516: -30,15
517: -30,17
518: -30,19
525: -28,16
526: -28,19
543: -32,11
545: -32,18
546: -32,19
547: -32,20
592: -32,26
593: -32,27
@@ -2263,7 +2261,6 @@ entities:
523: -31,12
533: -26,16
534: -26,19
535: -29,18
536: -29,15
537: -29,13
614: -27,11
@@ -2411,7 +2408,6 @@ entities:
2166: -37,14
2172: -35,18
2176: -34,18
2177: -36,18
2180: -30,11
2184: -33,18
2717: 51,-5
@@ -2422,6 +2418,7 @@ entities:
2730: 29,-8
2731: 30,-8
2732: 31,-8
2876: -36,18
- node:
color: '#EFB34196'
id: QuarterTileOverlayGreyscale270
@@ -2593,8 +2590,8 @@ entities:
617: -27,10
2173: -35,18
2175: -34,18
2178: -36,18
2185: -33,18
2875: -36,18
- node:
color: '#EFB34196'
id: QuarterTileOverlayGreyscale90
@@ -2844,7 +2841,6 @@ entities:
decals:
287: 31,4
431: -2,-25
2158: -34,16
- node:
color: '#EFB34196'
id: ThreeQuarterTileOverlayGreyscale90
@@ -3005,6 +3001,7 @@ entities:
id: WarnEndS
decals:
2142: -37,20
2868: -35,20
- node:
color: '#52B4E996'
id: WarnFullGreyscale
@@ -3024,7 +3021,6 @@ entities:
1900: 26,15
2097: -60,0
2099: -60,2
2146: -35,20
2338: -47,-3
2339: -47,-2
2390: -55,4
@@ -3051,6 +3047,7 @@ entities:
2792: 6,15
2802: 8,17
2835: -53,8
2867: -35,20
- node:
color: '#52B4E996'
id: WarnLineGreyscaleE
@@ -3155,11 +3152,9 @@ entities:
924: 21,8
2133: -59,4
2140: -59,5
2147: -35,20
2167: -37,14
2168: -37,15
2169: -37,16
2179: -36,18
2342: -43,-3
2343: -43,-2
2387: -53,4
@@ -3192,6 +3187,7 @@ entities:
2831: -46,7
2834: -46,8
2838: -46,5
2866: -35,20
- node:
color: '#FFFFFFFF'
id: WarnLineW
@@ -4859,6 +4855,54 @@ entities:
- type: Transform
pos: -49.383278,-8.450993
parent: 4812
- proto: ActionToggleBlock
entities:
- uid: 12052
components:
- type: Transform
parent: 7935
- type: InstantAction
originalIconColor: '#FFFFFFFF'
container: 7935
- uid: 13922
components:
- type: Transform
parent: 13921
- type: InstantAction
originalIconColor: '#FFFFFFFF'
container: 13921
- proto: ActionToggleInternals
entities:
- uid: 10945
components:
- type: Transform
parent: 13680
- type: InstantAction
originalIconColor: '#FFFFFFFF'
container: 13680
- uid: 13919
components:
- type: Transform
parent: 13917
- type: InstantAction
originalIconColor: '#FFFFFFFF'
container: 13917
- proto: ActionToggleJetpack
entities:
- uid: 8332
components:
- type: Transform
parent: 13680
- type: InstantAction
originalIconColor: '#FFFFFFFF'
container: 13680
- uid: 13918
components:
- type: Transform
parent: 13917
- type: InstantAction
originalIconColor: '#FFFFFFFF'
container: 13917
- proto: ActionToggleLight
entities:
- uid: 6594
@@ -5918,6 +5962,11 @@ entities:
- type: Transform
pos: -34.5,13.5
parent: 4812
- uid: 8043
components:
- type: Transform
pos: -32.5,18.5
parent: 4812
- uid: 10941
components:
- type: Transform
@@ -7584,11 +7633,6 @@ entities:
- type: Transform
pos: -30.5,25.5
parent: 4812
- uid: 12052
components:
- type: Transform
pos: -32.5,18.5
parent: 4812
- proto: AirlockServiceLocked
entities:
- uid: 6675
@@ -21403,6 +21447,16 @@ entities:
- type: Transform
pos: -17.5,32.5
parent: 4812
- uid: 13926
components:
- type: Transform
pos: -36.5,10.5
parent: 4812
- uid: 13928
components:
- type: Transform
pos: -36.5,9.5
parent: 4812
- proto: CableApcStack
entities:
- uid: 6196
@@ -28096,6 +28150,16 @@ entities:
- type: Transform
pos: -40.5,8.5
parent: 4812
- uid: 13929
components:
- type: Transform
pos: -36.5,10.5
parent: 4812
- uid: 13930
components:
- type: Transform
pos: -36.5,9.5
parent: 4812
- proto: CableMVStack
entities:
- uid: 8586
@@ -60798,29 +60862,51 @@ entities:
- uid: 12053
components:
- type: Transform
anchored: True
pos: -37.5,22.5
parent: 4812
- type: Physics
bodyType: Static
- proto: GunSafePistolMk58
entities:
- uid: 13920
components:
- type: Transform
anchored: True
pos: -33.5,20.5
parent: 4812
- type: Physics
bodyType: Static
- proto: GunSafeRifleLecter
entities:
- uid: 12215
components:
- type: Transform
anchored: True
pos: -37.5,20.5
parent: 4812
- type: Physics
bodyType: Static
- proto: GunSafeShotgunKammerer
entities:
- uid: 12054
components:
- type: Transform
anchored: True
pos: -34.5,22.5
parent: 4812
- type: Physics
bodyType: Static
- proto: GunSafeSubMachineGunDrozd
entities:
- uid: 8377
components:
- type: Transform
anchored: True
pos: -37.5,21.5
parent: 4812
- type: Physics
bodyType: Static
- proto: Handcuffs
entities:
- uid: 4865
@@ -61818,8 +61904,35 @@ entities:
- uid: 13680
components:
- type: Transform
pos: -33.539055,21.668404
pos: -33.729538,21.689896
parent: 4812
- type: GasTank
toggleActionEntity: 10945
- type: Jetpack
toggleActionEntity: 8332
- type: ActionsContainer
- type: ContainerContainer
containers:
actions: !type:Container
ents:
- 8332
- 10945
- uid: 13917
components:
- type: Transform
pos: -33.3936,21.666458
parent: 4812
- type: GasTank
toggleActionEntity: 13919
- type: Jetpack
toggleActionEntity: 13918
- type: ActionsContainer
- type: ContainerContainer
containers:
actions: !type:Container
ents:
- 13918
- 13919
- proto: KitchenKnife
entities:
- uid: 1642
@@ -62728,6 +62841,11 @@ entities:
- type: Transform
pos: -31.5,19.5
parent: 4812
- uid: 13915
components:
- type: Transform
pos: -31.5,17.5
parent: 4812
- proto: LockerFreezer
entities:
- uid: 1538
@@ -64436,11 +64554,16 @@ entities:
parent: 4812
- proto: PortableFlasher
entities:
- uid: 11923
- uid: 13914
components:
- type: Transform
pos: -33.5,20.5
anchored: False
pos: -35.5,20.5
parent: 4812
- type: TriggerOnProximity
enabled: False
- type: Physics
bodyType: Dynamic
- proto: PortableGeneratorJrPacman
entities:
- uid: 741
@@ -70911,12 +71034,50 @@ entities:
- type: Transform
pos: -33.720795,21.923859
parent: 4812
- uid: 13923
components:
- type: Transform
pos: -33.713516,21.77357
parent: 4812
- proto: RiotLaserShield
entities:
- uid: 7935
components:
- type: Transform
pos: -33.356216,21.923859
pos: -33.463516,22.047007
parent: 4812
- type: Blocking
blockingToggleActionEntity: 12052
- type: ActionsContainer
- type: ContainerContainer
containers:
actions: !type:Container
ents:
- 12052
- uid: 13924
components:
- type: Transform
pos: -33.44008,21.882944
parent: 4812
- proto: RiotShield
entities:
- uid: 13921
components:
- type: Transform
pos: -33.244766,22.062632
parent: 4812
- type: Blocking
blockingToggleActionEntity: 13922
- type: ActionsContainer
- type: ContainerContainer
containers:
actions: !type:Container
ents:
- 13922
- uid: 13925
components:
- type: Transform
pos: -33.19008,21.890757
parent: 4812
- proto: RobocopCircuitBoard
entities:
@@ -71073,10 +71234,10 @@ entities:
parent: 4812
- proto: SecurityTechFab
entities:
- uid: 10945
- uid: 11923
components:
- type: Transform
pos: -35.5,20.5
pos: -36.5,18.5
parent: 4812
- proto: SeedExtractor
entities:
@@ -74150,6 +74311,12 @@ entities:
rot: 1.5707963267948966 rad
pos: 10.5,-7.5
parent: 4812
- uid: 13927
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -36.5,9.5
parent: 4812
- proto: Stool
entities:
- uid: 1752
@@ -74506,11 +74673,6 @@ entities:
parent: 4812
- proto: SuitStorageSec
entities:
- uid: 8043
components:
- type: Transform
pos: -36.5,18.5
parent: 4812
- uid: 8045
components:
- type: Transform
@@ -87695,6 +87857,12 @@ entities:
rot: -1.5707963267948966 rad
pos: -32.5,15.5
parent: 4812
- uid: 13916
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -35.5,18.5
parent: 4812
- proto: WindoorSecureAtmosphericsLocked
entities:
- uid: 7369
@@ -87880,12 +88048,6 @@ entities:
rot: 1.5707963267948966 rad
pos: -27.5,19.5
parent: 4812
- uid: 8332
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -35.5,18.5
parent: 4812
- proto: Window
entities:
- uid: 187

File diff suppressed because it is too large Load Diff

View File

@@ -52,7 +52,7 @@
id: ServiceSmokeables
icon:
sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi
state: closed
state: icon
product: CrateServiceSmokeables
cost: 1500
category: cargoproduct-category-name-service
@@ -62,7 +62,7 @@
id: ServiceCustomSmokable
icon:
sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi
state: closed
state: icon
product: CrateServiceCustomSmokable
cost: 1000
category: cargoproduct-category-name-service

View File

@@ -56,11 +56,12 @@
- id: MagazineLightRiflePractice
amount: 4
# Magnum
- type: entity
name: box of Vector magazines
name: box of SMG .45 magnum magazines
parent: BoxMagazine
id: BoxMagazineMagnumSubMachineGun
description: A box full of Vector magazines.
description: A box full of SMG .45 magnum magazines.
components:
- type: StorageFill
contents:
@@ -68,10 +69,10 @@
amount: 3
- type: entity
name: box of Vector (practice) magazines
name: box of SMG .45 magnum (practice) magazines
parent: BoxMagazine
id: BoxMagazineMagnumSubMachineGunPractice
description: A box full of Vector (practice) magazines.
description: A box full of SMG .45 magnum (practice) magazines.
components:
- type: StorageFill
contents:

View File

@@ -188,7 +188,7 @@
- id: FoodCondimentPacketKetchup
- type: Sprite
layers:
- state: box_olive
- state: box
- state: writing
- type: entity

View File

@@ -48,6 +48,7 @@
amount: 2
- id: RemoteSignaller
amount: 2
- id: Binoculars
- type: entity
id: LockerSecurityFilled

View File

@@ -13,3 +13,5 @@
ClothingOuterSuitFire: 2
ClothingOuterWinterAtmos: 2
ClothingNeckScarfStripedLightBlue: 3
contrabandInventory:
ToyFigurineAtmosTech: 1

View File

@@ -16,4 +16,5 @@
ClothingOuterVest: 2
ClothingBeltBandolier: 2
ClothingEyesGlassesSunglasses: 2
contrabandInventory:
ToyFigurineBartender: 1

View File

@@ -46,5 +46,8 @@
DrinkSakeBottleFull: 3
DrinkBeerCan: 5
DrinkWineCan: 5
contrabandInventory:
EthanolChemistryBottle: 3
DrinkBottleOfNothingFull: 1
emaggedInventory:
DrinkPoisonWinebottleFull: 2

View File

@@ -15,3 +15,7 @@
ClothingOuterWinterMiner: 2
ClothingNeckScarfStripedBrown: 3
ClothingShoesBootsWinterCargo: 2
contrabandInventory:
ToyFigurineCargoTech: 1
ToyFigurineSalvage: 1
ToyFigurineQuartermaster: 1

View File

@@ -16,3 +16,6 @@
EncryptionKeyScience: 2
EncryptionKeySecurity: 1
EncryptionKeyService: 3
contrabandInventory:
BalloonNT: 2
LuxuryPen: 1

View File

@@ -18,3 +18,6 @@
ClothingOuterCoatExpensive: 1
ClothingNeckScarfStripedCentcom: 3
ClothingNeckCloakCentcom: 3
contrabandInventory:
ToyFigurineCaptain: 1
ToyFigurineHeadOfPersonnel: 1

View File

@@ -8,4 +8,7 @@
FoodSnackChowMein: 3
FoodSnackDanDanNoodles: 3
PairedChopsticks: 3
contrabandInventory:
FoodBakedDumplings: 2
FoodSoupMiso: 2
# rice?

View File

@@ -21,6 +21,10 @@
BoxCandleSmall: 2
Urn: 5
Bible: 1
contrabandInventory:
FoodBakedBunHotX: 2
DrinkWineBottleFull: 1
ToyFigurineChaplain: 1
emaggedInventory:
ClothingOuterArmorCult: 1
ClothingHeadHelmetCult: 1

View File

@@ -12,3 +12,5 @@
ClothingShoesColorBlack: 2
ClothingShoesChef: 2
ClothingBeltChef: 2
contrabandInventory:
ToyFigurineChef: 1

View File

@@ -20,4 +20,9 @@
FoodButter: 3
FoodCheese: 1
FoodMeat: 6
contrabandInventory:
EggBoxBroken: 1
FoodBoxDonkpocket: 1
FoodFrozenSandwich: 2
FoodFrozenSandwichStrawberry: 2

View File

@@ -14,3 +14,5 @@
ClothingHandsGlovesLatex: 2
ClothingHeadsetMedical: 2
ClothingOuterWinterChem: 2
contrabandInventory:
ToyFigurineChemist: 1

View File

@@ -22,6 +22,9 @@
JugSodium: 2
JugSugar: 3
JugSulfur: 1
contrabandInventory:
DrinkLithiumFlask: 1
StrangePill: 3
emaggedInventory:
ToxinChemistryBottle: 1
@@ -50,6 +53,9 @@
JugSugar: 3
JugSulfur: 1
JugWeldingFuel: 1
contrabandInventory:
DrinkLithiumFlask: 1
StrangePill: 3
emaggedInventory:
PaxChemistryBottle: 3
MuteToxinChemistryBottle: 3

View File

@@ -14,5 +14,9 @@
CheapLighter: 4
Lighter: 2
FlippoLighter: 2
contrabandInventory:
GroundTobacco: 3
CigarGold: 2
Igniter: 1
emaggedInventory:
CigPackSyndicate: 1

View File

@@ -96,4 +96,6 @@
ClothingMaskNeckGaiter: 2
ClothingUniformJumpsuitTacticool: 1
ClothingUniformJumpskirtTacticool: 1
ToyFigurinePassenger: 1
ToyFigurineGreytider: 1
# DO NOT ADD MORE, USE UNIFORM DYING

View File

@@ -1,4 +1,4 @@
- type: vendingMachineInventory
- type: vendingMachineInventory
id: HotDrinksMachineInventory
startingInventory:
DrinkHotCoffee: 5
@@ -6,5 +6,7 @@
DrinkTeacup: 5
DrinkGreenTea: 5
DrinkHotCoco: 5
contrabandInventory:
DrinkTeapot: 2
emaggedInventory:
DrinkNothing: 2

View File

@@ -9,6 +9,8 @@
DrinkLemonLimeCan: 2
DrinkLemonLimeCranberryCan: 2
DrinkFourteenLokoCan: 2
contrabandInventory:
DrinkColaBottleFull: 2
emaggedInventory:
DrinkNukieCan: 2
DrinkChangelingStingCan: 2

View File

@@ -3,7 +3,7 @@
startingInventory:
FoodCondimentPacketAstrotame: 5
FoodCondimentPacketBbq: 5
FoodCondimentPacketFrostoil: 5
FoodCondimentPacketColdsauce: 5
FoodCondimentPacketHorseradish: 5
FoodCondimentPacketHotsauce: 5
FoodCondimentPacketKetchup: 5
@@ -17,4 +17,9 @@
SpoonPlastic: 10
KnifePlastic: 10
FoodPlatePlastic: 10
FoodPlateSmallPlastic: 10
FoodPlateSmallPlastic: 10
contrabandInventory:
FoodShakerSalt: 1
FoodShakerPepper: 1
FoodCondimentBottleKetchup: 1
ReagentContainerMayo: 1

View File

@@ -14,4 +14,6 @@
ClothingUniformJumpskirtLibrarian: 3
ClothingShoesBootsLaceup: 2
ClothingHeadsetService: 2
contrabandInventory:
ToyFigurineLibrarian: 1

View File

@@ -15,3 +15,5 @@
ClothingHandsGlovesColorBlack: 2
ClothingHandsGlovesLatex: 2
ClothingHeadsetSecurity: 2
contrabandInventory:
ToyFigurineDetective: 1

View File

@@ -1,4 +1,4 @@
- type: vendingMachineInventory
- type: vendingMachineInventory
id: DinnerwareInventory
startingInventory:
ButchCleaver: 1
@@ -27,3 +27,7 @@
DrinkMugOne: 1
DrinkMugRainbow: 2
DrinkMugRed: 2
contrabandInventory:
CandyBowl: 1
BarSpoon: 2
DrinkShaker: 2

View File

@@ -1,4 +1,4 @@
- type: vendingMachineInventory
- type: vendingMachineInventory
id: DiscountDansInventory
startingInventory:
FoodSnackCheesie: 3
@@ -8,3 +8,6 @@
FoodSnackPopcorn: 3
FoodSnackEnergy: 3
CigPackMixed: 2
contrabandInventory:
FoodSnackDanDanNoodles: 3
FoodBakedBunHoney: 3

View File

@@ -5,5 +5,8 @@
FoodDonutApple: 3
FoodDonutPink: 3
FoodDonutBungo: 3
contrabandInventory:
FoodBagel: 2
FoodBagelPoppy: 2
emaggedInventory:
FoodDonutPoison: 1

View File

@@ -16,3 +16,6 @@
ClothingOuterWinterEngi: 2
ClothingNeckScarfStripedOrange: 3
ClothingShoesBootsWinterEngi: 2
contrabandInventory:
ToyFigurineEngineer: 1
ToyFigurineChiefEngineer: 1

View File

@@ -10,3 +10,6 @@
ClothingHandsGlovesColorYellow: 6
BoxInflatable: 2
ClothingHeadHatCone: 4
contrabandInventory:
CowToolboxFilled: 1
DrinkBeerCan: 3

View File

@@ -16,3 +16,7 @@
PaperCNCSheet: 6
MysteryFigureBox: 2
BooksBag: 3
contrabandInventory:
Basketball: 1
FoodSnackBoritos: 3
DrinkSpaceMountainWindCan: 3

View File

@@ -9,6 +9,10 @@
DrinkLemonLimeCan: 2
DrinkLemonLimeCranberryCan: 2
DrinkFourteenLokoCan: 2
contrabandInventory:
ClothingNeckStethoscope: 2
Saw: 2
Tourniquet: 3
emaggedInventory:
DrinkNukieCan: 2
DrinkChangelingStingCan: 2

View File

@@ -1,8 +1,12 @@
- type: vendingMachineInventory
- type: vendingMachineInventory
id: HappyHonkDispenserInventory
startingInventory:
HappyHonk: 10
HappyHonkMime: 4
contrabandInventory:
ToyFigurineClown: 1
ToyFigurineMime: 1
ToyFigurineNukie: 1
emaggedInventory:
HappyHonkCluwne: 1
HappyHonkNukie: 1

View File

@@ -12,4 +12,6 @@
ClothingHeadBandBotany: 3
ClothingHeadsetService: 2
ClothingOuterWinterHydro: 2
contrabandInventory:
ToyFigurineBotanist: 1

View File

@@ -10,7 +10,8 @@
ClothingHeadsetService: 2
ClothingOuterWinterJani: 2
ClothingNeckScarfStripedPurple: 3
contrabandInventory:
ToyFigurineJanitor: 1
emaggedInventory:
ClothingUniformJumpskirtJanimaid: 2
ClothingUniformJumpskirtJanimaidmini: 1

View File

@@ -23,5 +23,6 @@
ClothingHeadHatPwig: 1
# "Legally" obtained currency
SpaceCash100: 2
ToyFigurineLawyer: 1
emaggedInventory:
CyberPen: 1

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