Merge remote-tracking branch 'refs/remotes/wizards/master'

# Conflicts:
#	Content.Server/GameTicking/GameTicker.StatusShell.cs
#	Content.Server/Implants/SubdermalImplantSystem.cs
#	Content.Server/Silicons/Borgs/BorgSystem.cs
#	Content.Shared/Preferences/HumanoidCharacterProfile.cs
#	Resources/Locale/en-US/_strings/advertisements/vending/smite.ftl
#	Resources/Maps/_Sunrise/Shuttles/wrecklaimer.yml
#	Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml
#	Resources/Prototypes/Entities/Stations/base.yml
#	Resources/Prototypes/Roles/Jobs/CentComm/emergencyresponseteam.yml
This commit is contained in:
Vigers Ray 2025-01-16 20:00:41 +03:00
commit 1b61551b4d
71 changed files with 192269 additions and 8012 deletions

View file

@ -6,8 +6,7 @@
xmlns:tabs="clr-namespace:Content.Client.Administration.UI.Tabs"
xmlns:playerTab="clr-namespace:Content.Client.Administration.UI.Tabs.PlayerTab"
xmlns:objectsTab="clr-namespace:Content.Client.Administration.UI.Tabs.ObjectsTab"
xmlns:panic="clr-namespace:Content.Client.Administration.UI.Tabs.PanicBunkerTab"
xmlns:baby="clr-namespace:Content.Client.Administration.UI.Tabs.BabyJailTab">
xmlns:panic="clr-namespace:Content.Client.Administration.UI.Tabs.PanicBunkerTab">
<TabContainer Name="MasterTabContainer">
<adminTab:AdminTab />
<adminbusTab:AdminbusTab />
@ -15,7 +14,6 @@
<tabs:RoundTab />
<tabs:ServerTab />
<panic:PanicBunkerTab Name="PanicBunkerControl" Access="Public" />
<baby:BabyJailTab Name="BabyJailControl" Access="Public" />
<playerTab:PlayerTab Name="PlayerTabControl" Access="Public" />
<objectsTab:ObjectsTab Name="ObjectsTabControl" Access="Public" />
</TabContainer>

View file

@ -21,10 +21,6 @@ public sealed partial class AdminMenuWindow : DefaultWindow
MasterTabContainer.SetTabTitle((int) TabIndex.Round, Loc.GetString("admin-menu-round-tab"));
MasterTabContainer.SetTabTitle((int) TabIndex.Server, Loc.GetString("admin-menu-server-tab"));
MasterTabContainer.SetTabTitle((int) TabIndex.PanicBunker, Loc.GetString("admin-menu-panic-bunker-tab"));
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
MasterTabContainer.SetTabTitle((int) TabIndex.BabyJail, Loc.GetString("admin-menu-baby-jail-tab"));
MasterTabContainer.SetTabTitle((int) TabIndex.Players, Loc.GetString("admin-menu-players-tab"));
MasterTabContainer.SetTabTitle((int) TabIndex.Objects, Loc.GetString("admin-menu-objects-tab"));
MasterTabContainer.OnTabChanged += OnTabChanged;
@ -52,7 +48,6 @@ public sealed partial class AdminMenuWindow : DefaultWindow
Round,
Server,
PanicBunker,
BabyJail,
Players,
Objects,
}

View file

@ -1,6 +0,0 @@
<controls:BabyJailStatusWindow
xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.Administration.UI.Tabs.BabyJailTab"
Title="{Loc admin-ui-baby-jail-window-title}">
<RichTextLabel Name="MessageLabel" Access="Public" />
</controls:BabyJailStatusWindow>

View file

@ -1,21 +0,0 @@
using Content.Client.Message;
using Content.Client.UserInterface.Controls;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
namespace Content.Client.Administration.UI.Tabs.BabyJailTab;
/*
* TODO: Remove me once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
[GenerateTypedNameReferences]
public sealed partial class BabyJailStatusWindow : FancyWindow
{
public BabyJailStatusWindow()
{
RobustXamlLoader.Load(this);
MessageLabel.SetMarkup(Loc.GetString("admin-ui-baby-jail-is-enabled"));
}
}

View file

@ -1,26 +0,0 @@
<controls:BabyJailTab
xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.Administration.UI.Tabs.BabyJailTab"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
Margin="4">
<BoxContainer Orientation="Vertical">
<cc:CommandButton Name="EnabledButton" Command="babyjail" ToggleMode="True"
Text="{Loc admin-ui-baby-jail-disabled}"
ToolTip="{Loc admin-ui-baby-jail-tooltip}" />
<cc:CommandButton Name="ShowReasonButton" Command="babyjail_show_reason"
ToggleMode="True" Text="{Loc admin-ui-baby-jail-show-reason}"
ToolTip="{Loc admin-ui-baby-jail-show-reason-tooltip}" />
<BoxContainer Orientation="Vertical" Margin="0 10 0 0">
<BoxContainer Orientation="Horizontal" Margin="2">
<Label Text="{Loc admin-ui-baby-jail-max-account-age}" MinWidth="175" />
<LineEdit Name="MaxAccountAge" MinWidth="50" Margin="0 0 5 0" />
<Label Text="{Loc generic-minutes}" />
</BoxContainer>
<BoxContainer Orientation="Horizontal" Margin="2">
<Label Text="{Loc admin-ui-baby-jail-max-overall-minutes}" MinWidth="175" />
<LineEdit Name="MaxOverallMinutes" MinWidth="50" Margin="0 0 5 0" />
<Label Text="{Loc generic-minutes}" />
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:BabyJailTab>

View file

@ -1,75 +0,0 @@
using Content.Shared.Administration.Events;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Console;
/*
* TODO: Remove me once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
namespace Content.Client.Administration.UI.Tabs.BabyJailTab;
[GenerateTypedNameReferences]
public sealed partial class BabyJailTab : Control
{
[Dependency] private readonly IConsoleHost _console = default!;
private string _maxAccountAge;
private string _maxOverallMinutes;
public BabyJailTab()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
MaxAccountAge.OnTextEntered += args => SendMaxAccountAge(args.Text);
MaxAccountAge.OnFocusExit += args => SendMaxAccountAge(args.Text);
_maxAccountAge = MaxAccountAge.Text;
MaxOverallMinutes.OnTextEntered += args => SendMaxOverallMinutes(args.Text);
MaxOverallMinutes.OnFocusExit += args => SendMaxOverallMinutes(args.Text);
_maxOverallMinutes = MaxOverallMinutes.Text;
}
private void SendMaxAccountAge(string text)
{
if (string.IsNullOrWhiteSpace(text) ||
text == _maxAccountAge ||
!int.TryParse(text, out var minutes))
{
return;
}
_console.ExecuteCommand($"babyjail_max_account_age {minutes}");
}
private void SendMaxOverallMinutes(string text)
{
if (string.IsNullOrWhiteSpace(text) ||
text == _maxOverallMinutes ||
!int.TryParse(text, out var minutes))
{
return;
}
_console.ExecuteCommand($"babyjail_max_overall_minutes {minutes}");
}
public void UpdateStatus(BabyJailStatus status)
{
EnabledButton.Pressed = status.Enabled;
EnabledButton.Text = Loc.GetString(status.Enabled
? "admin-ui-baby-jail-enabled"
: "admin-ui-baby-jail-disabled"
);
EnabledButton.ModulateSelfOverride = status.Enabled ? Color.Red : null;
ShowReasonButton.Pressed = status.ShowReason;
MaxAccountAge.Text = status.MaxAccountAgeMinutes.ToString();
_maxAccountAge = MaxAccountAge.Text;
MaxOverallMinutes.Text = status.MaxOverallMinutes.ToString();
_maxOverallMinutes = MaxOverallMinutes.Text;
}
}

View file

@ -3,7 +3,6 @@ using Content.Client.Administration.Systems;
using Content.Client.Administration.UI;
using Content.Client.Administration.UI.Tabs.ObjectsTab;
using Content.Client.Administration.UI.Tabs.PanicBunkerTab;
using Content.Client.Administration.UI.Tabs.BabyJailTab;
using Content.Client.Administration.UI.Tabs.PlayerTab;
using Content.Client.Gameplay;
using Content.Client.Lobby;
@ -38,13 +37,11 @@ public sealed class AdminUIController : UIController,
private AdminMenuWindow? _window;
private MenuButton? AdminButton => UIManager.GetActiveUIWidgetOrNull<MenuBar.Widgets.GameTopMenuBar>()?.AdminButton;
private PanicBunkerStatus? _panicBunker;
private BabyJailStatus? _babyJail;
public override void Initialize()
{
base.Initialize();
SubscribeNetworkEvent<PanicBunkerChangedEvent>(OnPanicBunkerUpdated);
SubscribeNetworkEvent<BabyJailChangedEvent>(OnBabyJailUpdated);
}
private void OnPanicBunkerUpdated(PanicBunkerChangedEvent msg, EntitySessionEventArgs args)
@ -59,18 +56,6 @@ public sealed class AdminUIController : UIController,
}
}
private void OnBabyJailUpdated(BabyJailChangedEvent msg, EntitySessionEventArgs args)
{
var showDialog = _babyJail == null && msg.Status.Enabled;
_babyJail = msg.Status;
_window?.BabyJailControl.UpdateStatus(msg.Status);
if (showDialog)
{
UIManager.CreateWindow<BabyJailStatusWindow>().OpenCentered();
}
}
public void OnStateEntered(GameplayState state)
{
EnsureWindow();
@ -116,13 +101,6 @@ public sealed class AdminUIController : UIController,
if (_panicBunker != null)
_window.PanicBunkerControl.UpdateStatus(_panicBunker);
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
if (_babyJail != null)
_window.BabyJailControl.UpdateStatus(_babyJail);
_window.PlayerTabControl.OnEntryKeyBindDown += PlayerTabEntryKeyBindDown;
_window.ObjectsTabControl.OnEntryKeyBindDown += ObjectsTabEntryKeyBindDown;
_window.OnOpen += OnWindowOpen;

View file

@ -64,9 +64,8 @@ namespace Content.IntegrationTests.Tests
"Gate",
"Amber",
"Loop",
"Plasma",
"Elkridge"
};
// Sunrise-Start

View file

@ -974,10 +974,10 @@ namespace Content.Server.Database
Full = 2,
Panic = 3,
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*
* If baby jail is removed, please reserve this value for as long as can reasonably be done to prevent causing ambiguity in connection denial reasons.
* Reservation by commenting out the value is likely sufficient for this purpose, but may impact projects which depend on SS14 like SS14.Admin.
*
* Edit: It has
*/
BabyJail = 4,
/// Results from rejected connections with external API checking tools

View file

@ -1,139 +0,0 @@
using Content.Shared.Administration;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
using Robust.Shared.Console;
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
namespace Content.Server.Administration.Commands;
[AdminCommand(AdminFlags.Server)]
public sealed class BabyJailCommand : LocalizedCommands
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
public override string Command => "babyjail";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var toggle = Toggle(CCVars.BabyJailEnabled, shell, args, _cfg);
if (toggle == null)
return;
shell.WriteLine(Loc.GetString(toggle.Value ? "babyjail-command-enabled" : "babyjail-command-disabled"));
}
public static bool? Toggle(CVarDef<bool> cvar, IConsoleShell shell, string[] args, IConfigurationManager config)
{
if (args.Length > 1)
{
shell.WriteError(Loc.GetString("shell-need-between-arguments",("lower", 0), ("upper", 1)));
return null;
}
var enabled = config.GetCVar(cvar);
switch (args.Length)
{
case 0:
enabled = !enabled;
break;
case 1 when !bool.TryParse(args[0], out enabled):
shell.WriteError(Loc.GetString("shell-argument-must-be-boolean"));
return null;
}
config.SetCVar(cvar, enabled);
return enabled;
}
}
[AdminCommand(AdminFlags.Server)]
public sealed class BabyJailShowReasonCommand : LocalizedCommands
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
public override string Command => "babyjail_show_reason";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var toggle = BabyJailCommand.Toggle(CCVars.BabyJailShowReason, shell, args, _cfg);
if (toggle == null)
return;
shell.WriteLine(Loc.GetString(toggle.Value
? "babyjail-command-show-reason-enabled"
: "babyjail-command-show-reason-disabled"
));
}
}
[AdminCommand(AdminFlags.Server)]
public sealed class BabyJailMinAccountAgeCommand : LocalizedCommands
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
public override string Command => "babyjail_max_account_age";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
switch (args.Length)
{
case 0:
{
var current = _cfg.GetCVar(CCVars.BabyJailMaxAccountAge);
shell.WriteLine(Loc.GetString("babyjail-command-max-account-age-is", ("minutes", current)));
break;
}
case > 1:
shell.WriteError(Loc.GetString("shell-need-between-arguments",("lower", 0), ("upper", 1)));
return;
}
if (!int.TryParse(args[0], out var minutes))
{
shell.WriteError(Loc.GetString("shell-argument-must-be-number"));
return;
}
_cfg.SetCVar(CCVars.BabyJailMaxAccountAge, minutes);
shell.WriteLine(Loc.GetString("babyjail-command-max-account-age-set", ("minutes", minutes)));
}
}
[AdminCommand(AdminFlags.Server)]
public sealed class BabyJailMinOverallHoursCommand : LocalizedCommands
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
public override string Command => "babyjail_max_overall_minutes";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
switch (args.Length)
{
case 0:
{
var current = _cfg.GetCVar(CCVars.BabyJailMaxOverallMinutes);
shell.WriteLine(Loc.GetString("babyjail-command-max-overall-minutes-is", ("minutes", current)));
break;
}
case > 1:
shell.WriteError(Loc.GetString("shell-need-between-arguments",("lower", 0), ("upper", 1)));
return;
}
if (!int.TryParse(args[0], out var hours))
{
shell.WriteError(Loc.GetString("shell-argument-must-be-number"));
return;
}
_cfg.SetCVar(CCVars.BabyJailMaxOverallMinutes, hours);
shell.WriteLine(Loc.GetString("babyjail-command-overall-minutes-set", ("hours", hours)));
}
}

View file

@ -65,7 +65,6 @@ public sealed class AdminSystem : EntitySystem
private readonly HashSet<NetUserId> _roundActivePlayers = new();
public readonly PanicBunkerStatus PanicBunker = new();
public readonly BabyJailStatus BabyJail = new();
private ISharedSponsorsManager? _sponsorsManager; // Sunrise-Sponsors
@ -86,16 +85,6 @@ public sealed class AdminSystem : EntitySystem
Subs.CVar(_config, CCVars.PanicBunkerMinAccountAge, OnPanicBunkerMinAccountAgeChanged, true);
Subs.CVar(_config, CCVars.PanicBunkerMinOverallMinutes, OnPanicBunkerMinOverallMinutesChanged, true);
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
// Baby Jail Settings
Subs.CVar(_config, CCVars.BabyJailEnabled, OnBabyJailChanged, true);
Subs.CVar(_config, CCVars.BabyJailShowReason, OnBabyJailShowReasonChanged, true);
Subs.CVar(_config, CCVars.BabyJailMaxAccountAge, OnBabyJailMaxAccountAgeChanged, true);
Subs.CVar(_config, CCVars.BabyJailMaxOverallMinutes, OnBabyJailMaxOverallMinutesChanged, true);
SubscribeLocalEvent<IdentityChangedEvent>(OnIdentityChanged);
SubscribeLocalEvent<PlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<PlayerDetachedEvent>(OnPlayerDetached);
@ -294,17 +283,6 @@ public sealed class AdminSystem : EntitySystem
SendPanicBunkerStatusAll();
}
private void OnBabyJailChanged(bool enabled)
{
BabyJail.Enabled = enabled;
_chat.SendAdminAlert(Loc.GetString(enabled
? "admin-ui-baby-jail-enabled-admin-alert"
: "admin-ui-baby-jail-disabled-admin-alert"
));
SendBabyJailStatusAll();
}
private void OnPanicBunkerDisableWithAdminsChanged(bool enabled)
{
PanicBunker.DisableWithAdmins = enabled;
@ -329,36 +307,18 @@ public sealed class AdminSystem : EntitySystem
SendPanicBunkerStatusAll();
}
private void OnBabyJailShowReasonChanged(bool enabled)
{
BabyJail.ShowReason = enabled;
SendBabyJailStatusAll();
}
private void OnPanicBunkerMinAccountAgeChanged(int minutes)
{
PanicBunker.MinAccountAgeMinutes = minutes;
SendPanicBunkerStatusAll();
}
private void OnBabyJailMaxAccountAgeChanged(int minutes)
{
BabyJail.MaxAccountAgeMinutes = minutes;
SendBabyJailStatusAll();
}
private void OnPanicBunkerMinOverallMinutesChanged(int minutes)
{
PanicBunker.MinOverallMinutes = minutes;
SendPanicBunkerStatusAll();
}
private void OnBabyJailMaxOverallMinutesChanged(int minutes)
{
BabyJail.MaxOverallMinutes = minutes;
SendBabyJailStatusAll();
}
private void UpdatePanicBunker()
{
var hasAdmins = false;
@ -405,15 +365,6 @@ public sealed class AdminSystem : EntitySystem
}
}
private void SendBabyJailStatusAll()
{
var ev = new BabyJailChangedEvent(BabyJail);
foreach (var admin in _adminManager.AllAdmins)
{
RaiseNetworkEvent(ev, admin);
}
}
/// <summary>
/// Erases a player from the round.
/// This removes them and any trace of them from the round, deleting their

View file

@ -291,14 +291,6 @@ namespace Content.Server.Connection
}
}
if (_cfg.GetCVar(CCVars.BabyJailEnabled) && adminData == null)
{
var result = await IsInvalidConnectionDueToBabyJail(userId, e);
if (result.IsInvalid)
return (ConnectionDenyReason.BabyJail, result.Reason, null);
}
var wasInGame = EntitySystem.TryGet<GameTicker>(out var ticker) &&
ticker.PlayerGameStatuses.TryGetValue(userId, out var status) &&
status == PlayerGameStatus.JoinedGame;
@ -358,72 +350,6 @@ namespace Content.Server.Connection
return null;
}
private async Task<(bool IsInvalid, string Reason)> IsInvalidConnectionDueToBabyJail(NetUserId userId, NetConnectingArgs e)
{
// If you're whitelisted then bypass this whole thing
if (await _db.GetWhitelistStatusAsync(userId))
return (false, "");
// Initial cvar retrieval
var showReason = _cfg.GetCVar(CCVars.BabyJailShowReason);
var reason = _cfg.GetCVar(CCVars.BabyJailCustomReason);
var maxAccountAgeMinutes = _cfg.GetCVar(CCVars.BabyJailMaxAccountAge);
var maxPlaytimeMinutes = _cfg.GetCVar(CCVars.BabyJailMaxOverallMinutes);
// Wait some time to lookup data
var record = await _db.GetPlayerRecordByUserId(userId);
// No player record = new account or the DB is having a skill issue
if (record == null)
return (false, "");
var isAccountAgeInvalid = record.FirstSeenTime.CompareTo(DateTimeOffset.UtcNow - TimeSpan.FromMinutes(maxAccountAgeMinutes)) <= 0;
if (isAccountAgeInvalid)
{
_sawmill.Debug($"Baby jail will deny {userId} for account age {record.FirstSeenTime}"); // Remove on or after 2024-09
}
if (isAccountAgeInvalid && showReason)
{
var locAccountReason = reason != string.Empty
? reason
: Loc.GetString("baby-jail-account-denied-reason",
("reason",
Loc.GetString(
"baby-jail-account-reason-account",
("minutes", maxAccountAgeMinutes))));
return (true, locAccountReason);
}
var overallTime = ( await _db.GetPlayTimes(e.UserId)).Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall);
var isTotalPlaytimeInvalid = overallTime != null && overallTime.TimeSpent.TotalMinutes >= maxPlaytimeMinutes;
if (isTotalPlaytimeInvalid)
{
_sawmill.Debug($"Baby jail will deny {userId} for playtime {overallTime!.TimeSpent}"); // Remove on or after 2024-09
}
if (isTotalPlaytimeInvalid && showReason)
{
var locPlaytimeReason = reason != string.Empty
? reason
: Loc.GetString("baby-jail-account-denied-reason",
("reason",
Loc.GetString(
"baby-jail-account-reason-overall",
("minutes", maxPlaytimeMinutes))));
return (true, locPlaytimeReason);
}
if (!showReason && isTotalPlaytimeInvalid || isAccountAgeInvalid)
return (true, Loc.GetString("baby-jail-account-denied"));
return (false, "");
}
private bool HasTemporaryBypass(NetUserId user)
{
return _temporaryBypasses.TryGetValue(user, out var time) && time > _gameTiming.RealTime;

View file

@ -55,6 +55,8 @@ public sealed partial class PuddleSystem
Spawn("PuddleSparkle", xformQuery.GetComponent(uid).Coordinates);
QueueDel(uid);
}
_solutionContainerSystem.UpdateChemicals(puddle.Solution.Value);
}
}
}

View file

@ -1,3 +1,4 @@
using System.Linq;
using System.Text.Json.Nodes;
using Content.Shared._Sunrise.SunriseCCVars;
using Content.Shared.CCVar;
@ -48,6 +49,11 @@ namespace Content.Server.GameTicking
: _playerManager.PlayerCount;
// Sunrise-End
if (_cfg.GetCVar(CCVars.AdminsCountInReportedPlayerCount))
{
players -= _adminManager.ActiveAdmins.Count();
}
jObject["name"] = _baseServer.ServerName;
jObject["map"] = _gameMapManager.GetSelectedMap()?.MapName;
jObject["round_id"] = _gameTicker.RoundId;

View file

@ -24,6 +24,7 @@ using Content.Server.Body.Components;
using Content.Shared.Maps;
using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Movement.Pulling.Systems;
using Content.Server.IdentityManagement;
using Content.Shared.Store.Components;
using Robust.Server.Containers;
using Robust.Shared.Collections;
@ -45,6 +46,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
[Dependency] private readonly PullingSystem _pullingSystem = default!;
[Dependency] private readonly EntityLookupSystem _lookupSystem = default!;
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
[Dependency] private readonly IdentitySystem _identity = default!;
[Dependency] private readonly ContainerSystem _container = default!;
private EntityQuery<PhysicsComponent> _physicsQuery;
@ -258,7 +260,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
{
var newProfile = HumanoidCharacterProfile.RandomWithSpecies(humanoid.Species);
_humanoidAppearance.LoadProfile(ent, newProfile, humanoid);
_metaData.SetEntityName(ent, newProfile.Name);
_metaData.SetEntityName(ent, newProfile.Name, raiseEvents: false); // raising events would update ID card, station record, etc.
if (TryComp<DnaComponent>(ent, out var dna))
{
dna.DNA = _forensicsSystem.GenerateDNA();
@ -270,6 +272,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
{
fingerprint.Fingerprint = _forensicsSystem.GenerateFingerprint();
}
_identity.QueueIdentityUpdate(ent); // manually queue identity update since we don't raise the event
_popup.PopupEntity(Loc.GetString("scramble-implant-activated-popup"), ent, ent);
}

View file

@ -154,39 +154,21 @@ public sealed partial class BorgSystem : SharedBorgSystem
{
base.OnInserted(uid, component, args);
//Sunrise-start: Fix borgs minds
if (HasComp<BorgBrainComponent>(args.Entity) && _mind.TryGetMind(args.Entity, out var mindId, out var mind))
{
if (TryComp<ContainerManagerComponent>(uid, out var containerManager) &&
containerManager.TryGetContainer("borg_brain", out var borgBrainContainer))
{
if (borgBrainContainer.Contains(args.Entity))
if (HasComp<BorgBrainComponent>(args.Entity) && _mind.TryGetMind(args.Entity, out var mindId, out var mind) && args.Container == component.BrainContainer)
{
_mind.TransferTo(mindId, uid, mind: mind);
}
}
}
//Sunrise-end
}
protected override void OnRemoved(EntityUid uid, BorgChassisComponent component, EntRemovedFromContainerMessage args)
{
base.OnRemoved(uid, component, args);
//Sunrise-start: Fix borgs minds
if (HasComp<BorgBrainComponent>(args.Entity) && _mind.TryGetMind(uid, out var mindId, out var mind))
{
if (TryComp<ContainerManagerComponent>(uid, out var containerManager) &&
containerManager.TryGetContainer("borg_brain", out var borgBrainContainer))
{
if (borgBrainContainer.ContainedEntities.Count == 0)
if (HasComp<BorgBrainComponent>(args.Entity) && _mind.TryGetMind(uid, out var mindId, out var mind) && args.Container == component.BrainContainer)
{
_mind.TransferTo(mindId, args.Entity, mind: mind);
}
}
}
//Sunrise-end
}
private void OnMindAdded(EntityUid uid, BorgChassisComponent component, MindAddedMessage args)
{
@ -310,8 +292,11 @@ public sealed partial class BorgSystem : SharedBorgSystem
public void BorgActivate(EntityUid uid, BorgChassisComponent component)
{
Popup.PopupEntity(Loc.GetString("borg-mind-added", ("name", Identity.Name(uid, EntityManager))), uid);
if (_powerCell.HasDrawCharge(uid))
{
Toggle.TryActivate(uid);
_powerCell.SetDrawEnabled(uid, _mobState.IsAlive(uid));
}
_appearance.SetData(uid, BorgVisuals.HasPlayer, true);
}

View file

@ -1,22 +0,0 @@
using Robust.Shared.Serialization;
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
namespace Content.Shared.Administration.Events;
[Serializable, NetSerializable]
public sealed class BabyJailStatus
{
public bool Enabled;
public bool ShowReason;
public int MaxAccountAgeMinutes;
public int MaxOverallMinutes;
}
[Serializable, NetSerializable]
public sealed class BabyJailChangedEvent(BabyJailStatus status) : EntityEventArgs
{
public BabyJailStatus Status = status;
}

View file

@ -164,6 +164,13 @@ public sealed partial class CCVars
public static readonly CVarDef<bool> AdminsCountForMaxPlayers =
CVarDef.Create("admin.admins_count_for_max_players", false, CVar.SERVERONLY);
/// <summary>
/// Should admins be hidden from the player count reported to the launcher/via api?
/// This is hub advert safe, in case that's a worry.
/// </summary>
public static readonly CVarDef<bool> AdminsCountInReportedPlayerCount =
CVarDef.Create("admin.admins_count_in_playercount", false, CVar.SERVERONLY);
/// <summary>
/// Determine if custom rank names are used.
/// If it is false, it'd use the actual rank name regardless of the individual's title.

View file

@ -198,48 +198,6 @@ public sealed partial class CCVars
public static readonly CVarDef<bool> BypassBunkerWhitelist =
CVarDef.Create("game.panic_bunker.whitelisted_can_bypass", true, CVar.SERVERONLY);
/*
* TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future.
*/
/// <summary>
/// Whether the baby jail is currently enabled.
/// </summary>
public static readonly CVarDef<bool> BabyJailEnabled =
CVarDef.Create("game.baby_jail.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER);
/// <summary>
/// Show reason of disconnect for user or not.
/// </summary>
public static readonly CVarDef<bool> BabyJailShowReason =
CVarDef.Create("game.baby_jail.show_reason", false, CVar.SERVERONLY);
/// <summary>
/// Maximum age of the account (from server's PoV, so from first-seen date) in minutes that can access baby
/// jailed servers.
/// </summary>
public static readonly CVarDef<int> BabyJailMaxAccountAge =
CVarDef.Create("game.baby_jail.max_account_age", 1440, CVar.SERVERONLY);
/// <summary>
/// Maximum overall played time allowed to access baby jailed servers.
/// </summary>
public static readonly CVarDef<int> BabyJailMaxOverallMinutes =
CVarDef.Create("game.baby_jail.max_overall_minutes", 120, CVar.SERVERONLY);
/// <summary>
/// A custom message that will be used for connections denied due to the baby jail.
/// If not empty, then will overwrite <see cref="BabyJailShowReason"/>
/// </summary>
public static readonly CVarDef<string> BabyJailCustomReason =
CVarDef.Create("game.baby_jail.custom_reason", string.Empty, CVar.SERVERONLY);
/// <summary>
/// Allow bypassing the baby jail if the user is whitelisted.
/// </summary>
public static readonly CVarDef<bool> BypassBabyJailWhitelist =
CVarDef.Create("game.baby_jail.whitelisted_can_bypass", true, CVar.SERVERONLY);
/// <summary>
/// Enable IPIntel for blocking VPN connections from new players.
/// </summary>

View file

@ -75,10 +75,10 @@ namespace Content.Shared.Containers.ItemSlots
public EntityWhitelist? Blacklist;
[DataField]
public SoundSpecifier InsertSound = new SoundPathSpecifier("/Audio/Weapons/Guns/MagIn/revolver_magin.ogg");
public SoundSpecifier? InsertSound = new SoundPathSpecifier("/Audio/Weapons/Guns/MagIn/revolver_magin.ogg");
[DataField]
public SoundSpecifier EjectSound = new SoundPathSpecifier("/Audio/Weapons/Guns/MagOut/revolver_magout.ogg");
public SoundSpecifier? EjectSound = new SoundPathSpecifier("/Audio/Weapons/Guns/MagOut/revolver_magout.ogg");
/// <summary>
/// The name of this item slot. This will be shown to the user in the verb menu.

View file

@ -1,4 +1,5 @@
using Content.Shared.Item.ItemToggle.Components;
using Content.Shared.Light.Components;
using Content.Shared.Toggleable;
using ItemTogglePointLightComponent = Content.Shared.Light.Components.ItemTogglePointLightComponent;
@ -11,6 +12,7 @@ public sealed class ItemTogglePointLightSystem : EntitySystem
{
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedPointLightSystem _light = default!;
[Dependency] private readonly SharedHandheldLightSystem _handheldLight = default!;
public override void Initialize()
{
@ -25,5 +27,9 @@ public sealed class ItemTogglePointLightSystem : EntitySystem
_appearance.SetData(ent, ToggleableLightVisuals.Enabled, args.Activated);
_light.SetEnabled(ent.Owner, args.Activated, comp: light);
if (TryComp<HandheldLightComponent>(ent.Owner, out var handheldLight))
{
_handheldLight.SetActivated(ent.Owner, args.Activated, handheldLight);
}
}
}

View file

@ -713,5 +713,13 @@ Entries:
id: 88
time: '2025-01-15T00:32:24.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33483
- author: Myra
changes:
- message: Admins are by default now hidden from the reported player count on the
launcher.
type: Add
id: 89
time: '2025-01-15T21:10:54.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34406
Name: Admin
Order: 1

View file

@ -1,100 +1,4 @@
Entries:
- author: LucasTheDrgn
changes:
- message: Restored functionality to the Industrial Reagent Grinder
type: Fix
id: 7310
time: '2024-09-07T23:47:02.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31903
- author: EmoGarbage404
changes:
- message: Added the biogenerator! Botany can use this machine to create various
materials, chemicals, and food items out of the
type: Add
id: 7311
time: '2024-09-08T05:34:22.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/30694
- author: TheShuEd
changes:
- message: Returned Taco microwave recipes (people were sad)
type: Add
- message: added an alternative method of crafting some burgers, through the correct
assembly sequence of modular food.
type: Add
- message: severely cut back on the number of items you can put on burgers, tacos,
or kebabs. This had poor design, and things need to be separately resprited
by adding them on modular food.
type: Tweak
id: 7312
time: '2024-09-08T06:22:27.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31012
- author: metalgearsloth
changes:
- message: Fix the FTL bubbles sometimes persisting.
type: Fix
- message: Fix AI eye being able to FTL.
type: Fix
- message: Fix the AI eye being able to be FTL smashed.
type: Fix
id: 7313
time: '2024-09-08T08:12:24.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31952
- author: PopGamer46
changes:
- message: Fixed being able to craft the justice helmet with a justice helmet
type: Fix
id: 7314
time: '2024-09-08T10:21:55.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31957
- author: Killerqu00
changes:
- message: Seclite is now restricted to security.
type: Tweak
- message: Handcuffs are now restricted to security and command.
type: Tweak
- message: Trench whistle is now minor contraband.
type: Tweak
id: 7315
time: '2024-09-08T12:06:01.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31956
- author: Psychpsyo
changes:
- message: The random sentience event should now actually happen again.
type: Fix
id: 7316
time: '2024-09-08T12:10:50.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31953
- author: Beck Thompson
changes:
- message: Gold and silver rings now give a small amount of materials when scrapped.
type: Tweak
id: 7317
time: '2024-09-08T16:10:05.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31847
- author: K-Dynamic
changes:
- message: added missing missing resistance values for directional plasma and uranium
windows
type: Fix
id: 7318
time: '2024-09-08T18:08:06.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31975
- author: qwerltaz
changes:
- message: Power cables on the ground are now offset and do not obscure each other
or pipes beneath.
type: Tweak
id: 7319
time: '2024-09-09T10:00:18.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/32000
- author: ArtisticRoomba
changes:
- message: Budget insulated gloves now leave behind yellow frayed insulative fibers
instead of yellow insulative fibers. Detectives, rejoice!
type: Tweak
id: 7320
time: '2024-09-09T10:30:25.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/31886
- author: slarticodefast
changes:
- message: Revenants or other mobs without hands can no longer spill jugs.
@ -3937,3 +3841,84 @@
id: 7809
time: '2025-01-15T00:10:39.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34419
- author: ArtisticRoomba
changes:
- message: The station anchor machine board can no longer be printed at the circuit
imprinter.
type: Remove
id: 7810
time: '2025-01-15T16:26:19.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34358
- author: ArtisticRoomba
changes:
- message: Mime PDA item interactions (insertions/ejections of IDs, pens, etc.)
are now silent.
type: Tweak
id: 7811
time: '2025-01-15T18:03:49.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34426
- author: Alpaccalypse
changes:
- message: Smite soda vending machines have been added to the game.
type: Add
id: 7812
time: '2025-01-15T18:20:01.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34420
- author: kosticia
changes:
- message: Bedsheets now can be printed on uniform printer
type: Add
id: 7813
time: '2025-01-15T19:35:59.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34034
- author: TheShuEd
changes:
- message: Christmas anomaly removed
type: Remove
id: 7814
time: '2025-01-15T20:22:32.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34053
- author: Kickguy223
changes:
- message: Puddles will now correctly evaporate
type: Fix
id: 7815
time: '2025-01-15T21:21:20.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34303
- author: themias
changes:
- message: The DNA scrambler implant no longer updates your ID card or station record
type: Fix
id: 7816
time: '2025-01-15T22:49:51.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34091
- author: jbox144
changes:
- message: Added Plasma Station
type: Add
id: 7817
time: '2025-01-16T07:02:14.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33991
- author: jbox144
changes:
- message: Reduced Plasma's minimum population to 20, maximum population to 60
type: Tweak
- message: Reduced Plasma's clown jobs from 2 to 1
type: Tweak
id: 7818
time: '2025-01-16T08:51:17.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34462
- author: pcaessayrs
changes:
- message: Uranium, Cak, and BreadDog are no longer space garbage.
type: Fix
id: 7819
time: '2025-01-16T11:40:22.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/34192
- author: GansuLalan
changes:
- message: Pianos will no longer push players off when climbing them
type: Fix
id: 7820
time: '2025-01-16T12:25:08.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/33690

View file

@ -12,6 +12,10 @@ panic_bunker.enable_without_admins = true
panic_bunker.show_reason = true
panic_bunker.custom_reason = "You have not played on a Wizard's Den server long enough to connect to this server. Please play on Wizard's Den Lizard until you have more playtime."
# IPIntel stuff
ipintel_enabled = true
ipintel_contact_email = "telecommunications@spacestation14.com"
[infolinks]
bug_report = "https://github.com/space-wizards/space-station-14/issues/new/choose"
discord = "https://discord.spacestation14.io"
@ -44,6 +48,6 @@ alert.min_players_sharing_connection = 2
max_explosion_range = 5
[status]
privacy_policy_link = "https://account.spacestation14.com/Home/Privacy"
privacy_policy_link = "https://spacestation14.com/about/privacy/#game-server-privacy-policy"
privacy_policy_identifier = "wizden"
privacy_policy_version = "2024-12-22"
privacy_policy_version = "2025-01-19"

View file

@ -11,12 +11,6 @@ panic_bunker.enabled = false
panic_bunker.disable_with_admins = false
panic_bunker.enable_without_admins = false
panic_bunker.custom_reason = ""
baby_jail.enabled = true
baby_jail.show_reason = true
baby_jail.max_account_age = 5256000 # 10 years. Disabling this check specifically isn't currently supported
baby_jail.max_overall_minutes = 3000 # 50 hours
baby_jail.custom_reason = "Sorry! Only new and whitelisted players can join this server. Apply to be whitelisted in our Discord server (discord.ss14.io) or try joining another server instead!"
baby_jail.whitelisted_can_bypass = true
[hub]
tags = "lang:en,region:am_n_e,rp:low"

View file

@ -0,0 +1,12 @@
advertisement-smite-1 = SMITE! Ban your thirst!
advertisement-smite-2 = An eldritch blast of lemon and lime!
advertisement-smite-3 = Over 1 million drinks sold!
advertisement-smite-4 = SMITE! Roll 2d8 for FLAVOR.
advertisement-smite-5 = SMITE! Let's get that paperwork done!
advertisement-smite-6 = The janitor has it in for you!
advertisement-smite-7 = SMITE! It won't get you hammered.
advertisement-smite-8 = It's lemon-lime time!
thankyou-smite-1 = Smite makes right!
thankyou-smite-2 = You DEFINITELY wanted lemon-lime!
thankyou-smite-3 = The office won't know what hit them.
thankyou-smite-4 = Banish your thirst.

File diff suppressed because it is too large Load diff

View file

@ -18,7 +18,7 @@ entities:
name: NT Evac Log
- type: Transform
pos: -0.42093527,-0.86894274
parent: invalid
parent: 637
- type: MapGrid
chunks:
0,0:
@ -804,6 +804,18 @@ entities:
chunkSize: 4
- type: GasTileOverlay
- type: RadiationGridResistance
- uid: 637
components:
- type: MetaData
name: Map Entity
- type: Transform
- type: Map
mapPaused: True
- type: PhysicsMap
- type: GridTree
- type: MovedGrids
- type: Broadphase
- type: OccluderTree
- proto: AirAlarm
entities:
- uid: 577
@ -1130,6 +1142,56 @@ entities:
- type: Transform
pos: 1.5,-6.5
parent: 1
- proto: AtmosDeviceFanDirectional
entities:
- uid: 638
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,5.5
parent: 1
- uid: 639
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,3.5
parent: 1
- uid: 640
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-2.5
parent: 1
- uid: 641
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-4.5
parent: 1
- uid: 642
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,-4.5
parent: 1
- uid: 643
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,-2.5
parent: 1
- uid: 644
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,3.5
parent: 1
- uid: 645
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,5.5
parent: 1
- proto: AtmosFixBlockerMarker
entities:
- uid: 615

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

167820
Resources/Maps/plasma.yml Normal file

File diff suppressed because it is too large Load diff

View file

@ -150,7 +150,7 @@
- type: entity
id: CrateAirlockKit
parent: CrateGenericSteel
parent: CrateEngineering
name: airlock kit
description: A kit for building 6 airlocks, doesn't include tools.
components:
@ -215,3 +215,31 @@
- type: StorageFill
contents:
- id: SpaceHeaterFlatpack
- type: entityTable
id: RandomTechBoardTable
table: !type:GroupSelector
children:
- id: AirAlarmElectronics
- id: FireAlarmElectronics
- id: DoorElectronics
- id: FirelockElectronics
- id: APCElectronics
- id: SignalTimerElectronics
- id: SMESMachineCircuitboard
- id: SubstationMachineCircuitboard
- id: SpaceVillainArcadeComputerCircuitboard
- id: BlockGameArcadeComputerCircuitboard
- type: entity
id: CrateTechBoardRandom
parent: CrateEngineering
name: surplus boards
description: Surplus boards from somewhere.
components:
- type: EntityTableContainerFill
containers:
entity_storage: !type:NestedSelector
tableId: RandomTechBoardTable
rolls: !type:RangeNumberSelector
range: 3, 7

View file

@ -107,6 +107,52 @@
- id: SheetPaper
amount: 3
- type: entityTable
id: RandomMaterialCrateTable
table: !type:GroupSelector
children:
- !type:GroupSelector # regular materials, 10
weight: 35
children:
- id: SheetGlass10
- id: SheetSteel10
- id: SheetPlastic10
- !type:GroupSelector # regular materials, stack
weight: 30
children:
- id: SheetGlass
- id: SheetSteel
- id: SheetPlastic
- !type:GroupSelector # secondary materials, stack
weight: 30
children:
- id: MaterialCloth
- id: SheetPlasteel
- id: MaterialWoodPlank
- id: PartRodMetal
- !type:GroupSelector # tertiary materials, singles
weight: 5
children:
- id: SheetPlasma1
- id: SheetUranium1
- id: IngotGold1
- id: IngotSilver1
- type: entity
id: CrateMaterialRandom
parent: CrateGenericSteel
name: surplus materials
description: Surplus materials from somewhere.
components:
- type: EntityTableContainerFill
containers:
entity_storage: !type:NestedSelector
tableId: RandomMaterialCrateTable
rolls: !type:RangeNumberSelector
range: 1, 3
# for some reason, the selector here adds 1 to whatever value it generates,
# so this is actually 2-4
#- type: entity
# id: CrateMaterialHFuelTank
# name: fueltank crate

View file

@ -187,6 +187,9 @@
- !type:NestedSelector
tableId: SyndieMaintLoot
prob: 0.05
# Recursive
- id: ClosetMaintenanceFilledRandom
prob: 0.01
- type: entity
id: ClosetMaintenanceFilledRandom

View file

@ -0,0 +1,13 @@
- type: vendingMachineInventory
id: SmiteInventory
startingInventory:
DrinkLemonLimeCan: 4
DrinkLemonLimeCranberryCan: 2
DrinkColaCan: 2
DrinkSolDryCan: 2
contrabandInventory:
ToyHammer: 1
DrinkStarkistCan: 2
emaggedInventory:
DrinkNukieCan: 2
DrinkChangelingStingCan: 2

View file

@ -88,6 +88,12 @@
prefix: advertisement-gibb-
count: 8
- type: localizedDataset
id: SmiteAds
values:
prefix: advertisement-smite-
count: 8
- type: localizedDataset
id: CondimentVendAds
values:

View file

@ -46,6 +46,12 @@
prefix: thankyou-gibb-
count: 4
- type: localizedDataset
id: SmiteGoodbyes
values:
prefix: thankyou-smite-
count: 4
- type: localizedDataset
id: DiscountDansGoodbyes
values:

View file

@ -46,7 +46,7 @@
parent: [ClothingNeckBase, BaseCommandContraband]
id: ClothingNeckMantleHOS
name: head of security's mantle
description: Shootouts with nukies are just another Tuesday for this HoS. This mantle is a symbol of commitment to the station.
description: Shootouts with syndicate agents are just another Tuesday for this HoS. This mantle is a symbol of commitment to the station.
components:
- type: Sprite
sprite: Clothing/Neck/mantles/hosmantle.rsi

View file

@ -22,7 +22,7 @@
- AnomalyFlora
- AnomalyShadow
- AnomalyTech
- AnomalySanta #Remove in 2025
#- AnomalySanta
rareChance: 0.3
rarePrototypes:
- RandomAnomalyInjectorSpawner
@ -67,6 +67,6 @@
- AnomalyTrapGravity
- AnomalyTrapTech
- AnomalyTrapRock
- AnomalyTrapSanta # Remove in 2025
#- AnomalyTrapSanta
chance: 1

View file

@ -45,17 +45,20 @@
- CrateMaterialPlastic
- CrateMaterialWood
- CrateMaterialPlasteel
- CrateFunSprayPaints # Sunrise-edit
- CrateMaterialRandom
- CrateFunArtSupplies
- CrateEngineeringCableLV
- CrateEngineeringCableMV
- CrateEngineeringCableHV
- CrateEngineeringCableBulk
- CrateTechBoardRandom
- CrateEmergencyFire
- CrateEmergencyInternals
- CrateEmergencyInflatablewall
- CrateHydroponicsTools
- CrateHydroponicsSeeds
- PetCarrier
- CrateFunSprayPaints # Sunrise-edit
chance: 0.7
rarePrototypes:
- CrateMaterialPlasma

View file

@ -11,24 +11,54 @@
state: any
- type: RandomSpawner
prototypes:
- VendingMachineChang
- VendingMachineCigs
- VendingMachineCoffee
- VendingMachineCola
- VendingMachineColaRed
- VendingMachineColaBlack
- VendingMachineCola #Robust Sofdrinks
- VendingMachineColaBlack #Robust Sofdrinks [Black]
- VendingMachineColaRed #Space Cola
- VendingMachineDiscount
- VendingMachineDonut
- VendingMachineDrGibb
- VendingMachinePwrGame
- VendingMachineShamblersJuice
- VendingMachineSmite
- VendingMachineSnack
- VendingMachineSnackBlue
- VendingMachineSnackGreen
- VendingMachineSnackOrange
- VendingMachineSnackTeal
- VendingMachineSovietSoda
- VendingMachineChang
- VendingMachineDonut
- VendingMachineShamblersJuice
- VendingMachinePwrGame
- VendingMachineDrGibb
- VendingMachineSoda
- VendingMachineStarkist
- VendingMachineSoda #Robust Sofdrinks [Soda]
- VendingMachineSovietSoda #Boda
- VendingMachineSpaceUp
- VendingMachineStarkist
chance: 1
- type: entityTable
id: ClothingVendorTable
table: !type:GroupSelector
children:
- id: VendingMachineClothing
weight: 40
- id: VendingMachineWinter
weight: 40
- id: VendingMachinePride
weight: 10
- id: VendingMachineTheater
weight: 10
- type: entity
id: RandomVendingClothing
name: random vending machine spawner
suffix: Clothing
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Structures/Machines/VendingMachines/random.rsi
state: clothing
- type: EntityTableSpawner
table: !type:NestedSelector
tableId: ClothingVendorTable

View file

@ -12,14 +12,15 @@
- type: RandomSpawner
prototypes:
- VendingMachineCoffee
- VendingMachineCola
- VendingMachineColaRed
- VendingMachineColaBlack
- VendingMachineSovietSoda
- VendingMachineShamblersJuice
- VendingMachinePwrGame
- VendingMachineCola #Robust Sofdrinks
- VendingMachineColaBlack #Robust Sofdrinks [Black]
- VendingMachineColaRed #Space Cola
- VendingMachineDrGibb
- VendingMachineSoda
- VendingMachineStarkist
- VendingMachinePwrGame
- VendingMachineShamblersJuice
- VendingMachineSmite
- VendingMachineSoda #Robust Sofdrinks [Soda]
- VendingMachineSovietSoda #Boda
- VendingMachineSpaceUp
- VendingMachineStarkist
chance: 1

View file

@ -937,9 +937,26 @@
- type: entity
name: bread dog
id: MobBreadDog
parent: FoodBreadSausage
parent: EdibleBase
description: It's a bread. It's a dog. It's a... breaddog?
components:
- type: FlavorProfile
flavors:
- meaty
- bread
- type: SliceableFood
slice: FoodBreadSausageSlice
- type: SolutionContainerManager
solutions:
food:
maxVol: 45
reagents:
- ReagentId: Nutriment
Quantity: 10
- ReagentId: Vitamin
Quantity: 5
- ReagentId: Protein
Quantity: 5
- type: Sprite
noRot: true
drawdepth: Mobs
@ -984,6 +1001,7 @@
- VimPilot
- DoorBumpOpener
- Bread
- Meat
- type: CanEscapeInventory
baseResistTime: 2
- type: Puller

View file

@ -696,9 +696,25 @@
- type: entity
name: cak
id: MobCatCake
parent: FoodCakeBase
parent: EdibleBase
description: It's a cake. It's a cat. It's a cak.
components:
- type: FlavorProfile
flavors:
- sweet
- type: InjectableSolution
solution: food
- type: RefillableSolution
solution: food
- type: SolutionContainerManager
solutions:
food:
maxVol: 30
reagents:
- ReagentId: Nutriment
Quantity: 20
- ReagentId: Vitamin
Quantity: 5
- type: Sprite
noRot: true
drawdepth: Mobs

View file

@ -1,20 +1,30 @@
#
# Base component for consumable food
# Base component for edible food-like items
#
- type: entity
parent: BaseItem
id: FoodBase
id: EdibleBase
abstract: true
components:
- type: FlavorProfile
flavors:
- food
- type: Food
- type: SpaceGarbage
- type: Sprite
- type: StaticPrice
price: 0
#
# Base component for consumable food
# that should be cleaned up in space
#
- type: entity
parent: EdibleBase
id: FoodBase
abstract: true
components:
- type: SpaceGarbage
# This base type is used to cover all of the "obvious" things that should be doable to open-package food.
# Practically this means injection.
# But it might in future also mean drawing with a syringe, so this is a base prototype just in case.

View file

@ -363,11 +363,35 @@
components:
- type: Pda
id: MimeIDCard
idSlot: # rewrite without sound because mime
name: ID Card
paiSlot:
priority: -2
ejectSound: null
insertSound: null
whitelist:
components:
- PAI
idSlot:
name: access-id-card-component-default
ejectSound: null # mime is silent
insertSound: null
whitelist:
components:
- IdCard
penSlot:
startingItem: Pen
priority: -1
whitelist:
tags:
- Write
ejectSound: null
insertSound: null
- type: CartridgeLoader
cartridgeSlot:
ejectSound: null
insertSound: null
whitelist:
components:
- Cartridge
- type: Appearance
appearanceDataInit:
enum.PdaVisuals.PdaType:

View file

@ -62,11 +62,9 @@
density: 80
mask:
- Impassable
- HighImpassable
- MidImpassable
layer:
- Opaque
- HighImpassable
- MidImpassable
- BulletImpassable
- type: StaticPrice

View file

@ -199,7 +199,7 @@
count: 1
- type: entity
parent: [SheetOtherBase, FoodBase]
parent: [SheetOtherBase, EdibleBase]
id: SheetUranium
name: uranium
suffix: Full

View file

@ -39,50 +39,52 @@
components:
- type: GatewayGenerator
# Sunrise-Start
#- type: entity
# id: BaseStationShuttles
# abstract: true
# components:
- type: entity
id: BaseStationShuttles
abstract: true
components:
# Sunrise-Edit
# - type: StationCargoShuttle
# path: /Maps/Shuttles/cargo.yml
# - type: GridSpawn
# groups:
- type: GridSpawn
groups:
# Sunrise-Edit
# trade: !type:GridSpawnGroup
# addComponents:
# - type: ProtectedGrid
# - type: TradeStation
# paths:
# - /Maps/Shuttles/trading_outpost.yml
# ruins: !type:GridSpawnGroup
# hide: true
# nameGrid: true
# minCount: 2
# maxCount: 2
# stationGrid: false
# paths:
# - /Maps/Ruins/abandoned_outpost.yml
# - /Maps/Ruins/chunked_tcomms.yml
# - /Maps/Ruins/biodome_satellite.yml
# - /Maps/Ruins/derelict.yml
# - /Maps/Ruins/djstation.yml
# - /Maps/Ruins/empty_flagship.yml
# - /Maps/Ruins/old_ai_sat.yml
# - /Maps/Ruins/syndicate_dropship.yml
# - /Maps/Ruins/whiteship_ancient.yml
# - /Maps/Ruins/whiteship_bluespacejumper.yml
# vgroid: !type:DungeonSpawnGroup
# minimumDistance: 300
# maximumDistance: 350
# nameDataset: NamesBorer
# stationGrid: false
# addComponents:
# - type: Gravity
# enabled: true
# inherent: true
# protos:
# - VGRoid
#Sunrise-End
# Spawn last
ruins: !type:GridSpawnGroup
hide: true
nameGrid: true
minCount: 6
maxCount: 10
stationGrid: false
paths:
- /Maps/Ruins/abandoned_outpost.yml
- /Maps/Ruins/chunked_tcomms.yml
- /Maps/Ruins/biodome_satellite.yml
- /Maps/Ruins/derelict.yml
- /Maps/Ruins/djstation.yml
- /Maps/Ruins/empty_flagship.yml
- /Maps/Ruins/old_ai_sat.yml
- /Maps/Ruins/syndicate_dropship.yml
- /Maps/Ruins/whiteship_ancient.yml
- /Maps/Ruins/whiteship_bluespacejumper.yml
- /Maps/Ruins/wrecklaimer.yml
vgroid: !type:DungeonSpawnGroup
minimumDistance: 300
maximumDistance: 350
nameDataset: NamesBorer
stationGrid: false
addComponents:
- type: Gravity
enabled: true
inherent: true
protos:
- VGRoid
# Sunrise-Edit: Вынесено в _Sunrise
#- type: entity

View file

@ -510,7 +510,6 @@
- SodaDispenserMachineCircuitboard
- SpaceHeaterMachineCircuitBoard
- CutterMachineCircuitboard
- StationAnchorCircuitboard
- SalvageMagnetMachineCircuitboard
dynamicRecipes:
- ThermomachineFreezerMachineCircuitBoard
@ -1295,8 +1294,28 @@
- CarpetPurple
- CarpetCyan
- CarpetWhite
# Bedsheets
- BedsheetBlack
- BedsheetBlue
- BedsheetBrown
- BedsheetGreen
- BedsheetGrey
- BedsheetOrange
- BedsheetPurple
- BedsheetRed
- BedsheetWhite
- BedsheetYellow
- BedsheetClown
- BedsheetCosmos
- BedsheetIan
- BedsheetMedical
- BedsheetMime
- BedsheetNT
- BedsheetRainbow
- BedsheetBrigmedic
- type: EmagLatheRecipes
emagStaticRecipes:
# Clothing
- ClothingHeadHatCentcomcap
- ClothingHeadHatCentcom
- ClothingUniformJumpsuitCentcomAgent
@ -1319,6 +1338,8 @@
- ClothingOuterWinterCentcom
- ClothingOuterWinterSyndie
- ClothingOuterWinterSyndieCap
# Bedsheets
- BedsheetSyndie
- type: MaterialStorage
whitelist:
tags:

View file

@ -137,7 +137,6 @@
pack: CondimentVendAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Transform
noRot: false
- type: PlayerCountDependentStock # Sunrise-vend
@ -157,7 +156,6 @@
pack: AmmoVendAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: _Sunrise/Structures/Machines/VendingMachines/ammo.rsi
layers:
@ -186,7 +184,6 @@
pack: BoozeOMatAds
- type: SpeakOnUIClosed
pack: BoozeOMatGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/boozeomat.rsi
layers:
@ -221,7 +218,6 @@
pack: BruiseOMatAds
- type: SpeakOnUIClosed
pack: BruiseOMatGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/bruiseomat.rsi
layers:
@ -321,7 +317,6 @@
pack: CigaretteMachineAds
- type: SpeakOnUIClosed
pack: CigaretteMachineGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/cigs.rsi
layers:
@ -350,7 +345,6 @@
pack: ClothesMateAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/clothing.rsi
layers:
@ -382,7 +376,6 @@
pack: ClothesMateAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/winterdrobe.rsi
layers:
@ -421,7 +414,6 @@
pack: HotDrinksMachineAds
- type: SpeakOnUIClosed
pack: HotDrinksMachineGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/coffee.rsi
layers:
@ -462,7 +454,6 @@
pack: RobustSoftdrinksAds
- type: SpeakOnUIClosed
pack: RobustSoftdrinksGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/cola.rsi
layers:
@ -607,7 +598,6 @@
initialStockQuality: 0.33
- type: Advertise
pack: RobustSoftdrinksAds
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/shamblersjuice.rsi
layers:
@ -645,7 +635,6 @@
pack: RobustSoftdrinksAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/pwrgame.rsi
layers:
@ -683,7 +672,6 @@
pack: DrGibbAds
- type: SpeakOnUIClosed
pack: DrGibbGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/gib.rsi
layers:
@ -700,6 +688,42 @@
color: "#D82929"
- type: PlayerCountDependentStock # Sunrise-vend
- type: entity
parent: VendingMachine
id: VendingMachineSmite
name: Smite Vendor
description: Popular with the administration.
components:
- type: Sprite
sprite: Structures/Machines/VendingMachines/smite.rsi
layers:
- state: "off"
map: [ "enum.VendingMachineVisualLayers.Base" ]
- state: "off"
map: [ "enum.VendingMachineVisualLayers.BaseUnshaded" ]
shader: unshaded
- state: panel
map: [ "enum.WiresVisualLayers.MaintenancePanel" ]
- type: VendingMachine
pack: SmiteInventory
dispenseOnHitChance: 0.25
dispenseOnHitThreshold: 2
offState: off
brokenState: broken
normalState: normal-unshaded
ejectState: eject-unshaded
denyState: deny-unshaded
ejectDelay: 1.9
initialStockQuality: 0.33
- type: Advertise
pack: SmiteAds
- type: SpeakOnUIClosed
pack: SmiteGoodbyes
- type: PointLight
radius: 1.5
energy: 1.6
color: "#00E645"
- type: entity
parent: VendingMachine
id: VendingMachineDinnerware
@ -781,7 +805,6 @@
pack: DiscountDansAds
- type: SpeakOnUIClosed
pack: DiscountDansGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/discount.rsi
layers:
@ -1005,7 +1028,6 @@
pack: GetmoreChocolateCorpAds
- type: SpeakOnUIClosed
pack: GetmoreChocolateCorpGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/snack.rsi
layers:
@ -1153,7 +1175,6 @@
pack: BodaAds
- type: SpeakOnUIClosed
pack: BodaGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/sovietsoda.rsi
layers:
@ -1188,7 +1209,6 @@
pack: AutoDrobeAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/theater.rsi
layers:
@ -1224,7 +1244,6 @@
pack: VendomatAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/vendomat.rsi
layers:
@ -1257,7 +1276,6 @@
pack: VendomatAds
- type: SpeakOnUIClosed
pack: GenericVendGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/robotics.rsi
layers:
@ -1356,7 +1374,6 @@
pack: ChangAds
- type: SpeakOnUIClosed
pack: ChangGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/changs.rsi
layers:
@ -1423,7 +1440,6 @@
pack: DonutAds
- type: SpeakOnUIClosed
pack: DonutGoodbyes
- type: Speech
- type: Sprite
sprite: Structures/Machines/VendingMachines/donut.rsi
layers:

View file

@ -15,5 +15,6 @@
- Oasis
- Omega
- Packed
- Plasma
- Reach
#- Train

View file

@ -0,0 +1,66 @@
- type: gameMap
id: Plasma
mapName: 'Plasma'
mapPath: /Maps/plasma.yml
minPlayers: 20
maxPlayers: 60
stations:
Plasma:
stationProto: StandardNanotrasenStation
components:
- type: StationNameSetup
mapNameTemplate: '{0} Plasma {1}'
nameGenerator:
!type:NanotrasenNameGenerator
prefixCreator: '14'
- type: StationEmergencyShuttle
emergencyShuttlePath: /Maps/Shuttles/emergency_plasma.yml
- type: StationCargoShuttle
path: /Maps/Shuttles/cargo_plasma.yml
- type: StationJobs
availableJobs:
#service
Captain: [ 1, 1 ]
HeadOfPersonnel: [ 1, 1 ]
Bartender: [ 2, 2 ]
Botanist: [ 2, 3 ]
Chef: [ 2, 2 ]
Janitor: [ 3, 3 ]
Chaplain: [ 1, 1 ]
Librarian: [ 1, 1 ]
ServiceWorker: [ 2, 2 ]
Reporter: [ 2, 3 ]
#engineering
ChiefEngineer: [ 1, 1 ]
AtmosphericTechnician: [ 4, 4 ]
StationEngineer: [ 4, 4 ]
TechnicalAssistant: [ 4, 4 ]
#medical
ChiefMedicalOfficer: [ 1, 1 ]
Chemist: [ 2, 2 ]
MedicalDoctor: [ 4, 4 ]
Paramedic: [ 2, 2 ]
MedicalIntern: [ 4, 4 ]
Psychologist: [ 1, 1 ]
#science
ResearchDirector: [ 1, 1 ]
Scientist: [ 4, 4 ]
ResearchAssistant: [ 4, 4 ]
StationAi: [ 1, 1 ]
Borg: [ 2, 4 ]
#security
HeadOfSecurity: [ 1, 1 ]
Warden: [ 1, 1 ]
SecurityOfficer: [ 6, 8 ]
Detective: [ 1, 2 ]
SecurityCadet: [ 4, 4 ]
Lawyer: [ 1, 2 ]
#supply
Quartermaster: [ 1, 1 ]
SalvageSpecialist: [ 4, 4 ]
CargoTechnician: [ 4, 6 ]
#civilian
Passenger: [ -1, -1 ]
Clown: [ 1, 1 ]
Mime: [ 1, 1 ]
Musician: [ 1, 1 ]

View file

@ -0,0 +1,113 @@
- type: latheRecipe
abstract: true
id: BaseBedsheetRecipe
completetime: 2
materials:
Cloth: 150
- type: latheRecipe
abstract: true
parent: BaseBedsheetRecipe
id: BaseSpecifiedBedsheetRecipe
materials:
Cloth: 150
Durathread: 50
#Base bedsheets
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetBlack
result: BedsheetBlack
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetBlue
result: BedsheetBlue
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetBrown
result: BedsheetBrown
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetGreen
result: BedsheetGreen
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetGrey
result: BedsheetGrey
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetOrange
result: BedsheetOrange
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetPurple
result: BedsheetPurple
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetRed
result: BedsheetRed
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetWhite
result: BedsheetWhite
- type: latheRecipe
parent: BaseBedsheetRecipe
id: BedsheetYellow
result: BedsheetYellow
#Specified bedsheets
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetClown
result: BedsheetClown
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetCosmos
result: BedsheetCosmos
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetIan #I'm not sure that that should be here
result: BedsheetIan
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetMedical
result: BedsheetMedical
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetMime
result: BedsheetMime
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetNT
result: BedsheetNT
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetRainbow
result: BedsheetRainbow
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetBrigmedic
result: BedsheetBrigmedic
- type: latheRecipe
parent: BaseSpecifiedBedsheetRecipe
id: BedsheetSyndie
result: BedsheetSyndie

View file

@ -0,0 +1,51 @@
- type: latheRecipe
abstract: true
id: BaseCarpetRecipe
completetime: 1
materials:
Cloth: 100
- type: latheRecipe
parent: BaseCarpetRecipe
id: Carpet
result: FloorCarpetItemRed
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetBlack
result: FloorCarpetItemBlack
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetPink
result: FloorCarpetItemPink
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetBlue
result: FloorCarpetItemBlue
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetGreen
result: FloorCarpetItemGreen
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetOrange
result: FloorCarpetItemOrange
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetPurple
result: FloorCarpetItemPurple
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetCyan
result: FloorCarpetItemCyan
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetWhite
result: FloorCarpetItemWhite

View file

@ -38,13 +38,6 @@
materials:
Cloth: 100
- type: latheRecipe
abstract: true
id: BaseCarpetRecipe
completetime: 1
materials:
Cloth: 100
- type: latheRecipe
abstract: true
parent: BaseHatRecipe
@ -916,49 +909,3 @@
parent: BaseNeckClothingRecipe
id: ClothingNeckScarfStripedPurple
result: ClothingNeckScarfStripedPurple
# Carpets
- type: latheRecipe
parent: BaseCarpetRecipe
id: Carpet
result: FloorCarpetItemRed
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetBlack
result: FloorCarpetItemBlack
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetPink
result: FloorCarpetItemPink
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetBlue
result: FloorCarpetItemBlue
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetGreen
result: FloorCarpetItemGreen
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetOrange
result: FloorCarpetItemOrange
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetPurple
result: FloorCarpetItemPurple
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetCyan
result: FloorCarpetItemCyan
- type: latheRecipe
parent: BaseCarpetRecipe
id: CarpetWhite
result: FloorCarpetItemWhite

View file

@ -639,12 +639,6 @@
result: ShuttleGunDusterCircuitboard
completetime: 12
- type: latheRecipe
parent: BaseGoldCircuitboardRecipe
id: StationAnchorCircuitboard
result: StationAnchorCircuitboard
completetime: 8
- type: latheRecipe
parent: BaseGoldCircuitboardRecipe
id: ReagentGrinderIndustrialMachineCircuitboard

View file

@ -19,33 +19,31 @@
equipment:
jumpsuit: ClothingUniformJumpsuitERTLeader
back: ClothingBackpackERTLeader
shoes: ClothingShoesBootsMagSec # Sunrise-edit
head: ClothingHeadEVAHelmetERTLeader # Sunrise-edit
shoes: ClothingShoesBootsCombatFilled
head: ClothingHeadHelmetERTLeader
eyes: ClothingEyesGlassesSecurity
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterArmorAmberCom # Sunrise-edit
outerClothing: ClothingOuterArmorBasicSlim
id: ERTLeaderPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltSecurityFilled
pocket1: WeaponPistolN1984
pocket2: HandheldCriminalRecordsMonitorUnpowered # Sunrise-edit
pocket2: FlashlightSeclite
storage:
back:
- WeaponEnergyGunPistolSecurity # Sunrise-edit
- PortableSurveillanceCameraMonitorUnpowered # Sunrise-edit
- WeaponDisabler
- MedicatedSuture
- RegenerativeMesh
#- BoxZiptie # Sunrise-edit
- BoxZiptie
- CrowbarRed
- MagazineMagnum
- ERTDirectivesCircuitBoard # Sunrise-edit
- type: startingGear
id: ERTLeaderGearEVA
equipment:
jumpsuit: ClothingUniformJumpsuitERTLeader
back: ClothingBackpackERTLeader
shoes: ClothingShoesBootsMagCombat # Sunrise-edit
shoes: ClothingShoesBootsMagAdv
mask: ClothingMaskGasERT
eyes: ClothingEyesGlassesSecurity
gloves: ClothingHandsGlovesCombat
@ -54,17 +52,15 @@
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltSecurityFilled
pocket1: WeaponPistolN1984
pocket2: HandheldCriminalRecordsMonitorUnpowered # Sunrise-edit
pocket2: FlashlightSeclite
storage:
back:
- WeaponEnergyGunPistolSecurity # Sunrise-edit
- WeaponDisabler
- MedicatedSuture
- RegenerativeMesh
#- BoxZiptie # Sunrise-edit
- BoxZiptie
- CrowbarRed
- PortableSurveillanceCameraMonitorUnpowered # Sunrise-edit
- MagazineMagnum
- ERTDirectivesCircuitBoard # Sunrise-edit
- type: startingGear
id: ERTLeaderGearEVALecter
@ -88,10 +84,9 @@
- WeaponDisabler
- MedicatedSuture
- RegenerativeMesh
#- BoxZiptie # Sunrise-edit
- BoxZiptie
- CrowbarRed
- MagazineMagnum
- ERTDirectivesCircuitBoard # Sunrise-edit
# Chaplain
- type: job
@ -118,25 +113,27 @@
equipment:
jumpsuit: ClothingUniformJumpsuitERTChaplain
back: ClothingBackpackERTChaplain
shoes: ClothingShoesBootsMagSec # Sunrise-edit
head: ClothingHeadEVAHelmetERTChaplain # Sunrise-edit
eyes: ClothingEyesHudMedSec # Sunrise-edit
shoes: ClothingShoesLeather
head: ClothingHeadHatFez
eyes: ClothingEyesGlasses
neck: ClothingNeckStoleChaplain
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterArmorAmberChap # Sunrise-edit
outerClothing: ClothingOuterArmorBasicSlim
id: ERTChaplainPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltStorageWaistbag
pocket1: CrowbarRed # Sunrise-edit
pocket1: Flare
pocket2: DrinkWaterBottleFull
storage:
back:
- BoxCandle
#-BoxBodyBag # Sunrise-edit
- BoxBodyBag
- DrinkWaterMelonJuiceJug
- Lantern
- Lantern
- Bible
- MegaSprayBottle # Sunrise-edit
- CrowbarRed
- FoodBakedBunHotX
- FoodBakedBunHotX
- FoodBakedBunHotX
- FoodBakedBunHotX
@ -149,23 +146,25 @@
back: ClothingBackpackERTChaplain
shoes: ClothingShoesBootsMagAdv
mask: ClothingMaskGasERT
eyes: ClothingEyesHudMedSec # Sunrise-edit
eyes: ClothingEyesGlasses
neck: ClothingNeckStoleChaplain
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitERTChaplain
id: ERTChaplainPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltStorageWaistbag
pocket1: CrowbarRed # Sunrise-edit
pocket1: Flare
pocket2: DrinkWaterBottleFull
storage:
back:
- BoxCandle
#-BoxBodyBag # Sunrise-edit
- BoxBodyBag
- DrinkWaterMelonJuiceJug
- Lantern
- Lantern
- Bible
- MegaSprayBottle # Sunrise-edit
- CrowbarRed
- FoodBakedBunHotX
- FoodBakedBunHotX
- FoodBakedBunHotX
- FoodBakedBunHotX
@ -192,25 +191,25 @@
equipment:
jumpsuit: ClothingUniformJumpsuitERTEngineer
back: ClothingBackpackERTEngineer
shoes: ClothingShoesBootsMagCombat # Sunrise-edit
head: ClothingHeadEVAHelmetERTEngineer # Sunrise-edit
eyes: ClothingEyesHudDiagnosticERT # Sunrise-edit
shoes: ClothingShoesBootsWork
head: ClothingHeadHelmetERTEngineer
eyes: ClothingEyesGlassesMeson
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterArmorAmberEng
outerClothing: ClothingOuterArmorBasicSlim
id: ERTEngineerPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltChiefEngineerFilled
pocket1: WeaponEnergyGunPistolSecurity # Sunrise-edit
pocket2: AtmosAlertsMonitorUnpowered # Sunrise-edit
pocket1: Flare
pocket2: GasAnalyzer
storage:
back:
# - trayScanner # Sunrise-edit
- RCDRecharging
#- RCDAmmo # Sunrise-edit
#- RCDAmmo # Sunrise-edit
#- CableMVStack # Sunrise-edit
#- CableHVStack # Sunrise-edit
#- CableApcStack # Sunrise-edit
- trayScanner
- RCD
- RCDAmmo
- RCDAmmo
- CableMVStack
- CableHVStack
- CableApcStack
- SheetPlasteel
- SheetSteel
- SheetGlass
@ -222,23 +221,23 @@
back: ClothingBackpackERTEngineer
shoes: ClothingShoesBootsMagAdv
mask: ClothingMaskGasERT
eyes: ClothingEyesHudDiagnosticERT # Sunrise-edit
eyes: ClothingEyesGlassesMeson
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitERTEngineer
id: ERTEngineerPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltChiefEngineerFilled
pocket1: WeaponEnergyGunPistolSecurity # Sunrise-edit
pocket2: AtmosAlertsMonitorUnpowered # Sunrise-edit
pocket1: Flare
pocket2: GasAnalyzer
storage:
back:
# - trayScanner # Sunrise-edit
- RCDRecharging
#- RCDAmmo # Sunrise-edit
#- RCDAmmo # Sunrise-edit
#- CableMVStack # Sunrise-edit
#- CableHVStack # Sunrise-edit
#- CableApcStack # Sunrise-edit
- trayScanner
- RCD
- RCDAmmo
- RCDAmmo
- CableMVStack
- CableHVStack
- CableApcStack
- SheetPlasteel
- SheetSteel
- SheetGlass
@ -264,31 +263,31 @@
equipment:
jumpsuit: ClothingUniformJumpsuitERTSecurity
back: ClothingBackpackERTSecurity
shoes: ClothingShoesBootsMagSec # Sunrise-edit
head: ClothingHeadEVAHelmetERTSecurity # Sunrise-edit
shoes: ClothingShoesBootsCombatFilled
head: ClothingHeadHelmetERTSecurity
eyes: ClothingEyesGlassesSecurity
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterArmorAmberSec
outerClothing: ClothingOuterArmorBasicSlim
id: ERTSecurityPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltSecurityFilled
pocket1: WeaponPistolN1984 # Sunrise-edit
pocket2: MagazineMagnum # Sunrise-edit
pocket1: WeaponPistolMk58
pocket2: FlashlightSeclite
storage:
back:
- WeaponEnergyGunPistolSecurity # Sunrise-edit
- WeaponDisabler
- MedicatedSuture
- RegenerativeMesh
#- BoxZiptie # Sunrise-edit
- BoxZiptie
- CrowbarRed
- MagazineMagnum # Sunrise-edit
- MagazinePistol
- type: startingGear
id: ERTSecurityGearEVA
equipment:
jumpsuit: ClothingUniformJumpsuitERTSecurity
back: ClothingBackpackERTSecurity
shoes: ClothingShoesBootsMagCombat
shoes: ClothingShoesBootsMag
mask: ClothingMaskGasERT
eyes: ClothingEyesGlassesSecurity
gloves: ClothingHandsGlovesCombat
@ -296,23 +295,23 @@
id: ERTSecurityPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltSecurityFilled
pocket1: WeaponPistolN1984 # Sunrise-edit
pocket2: MagazineMagnum # Sunrise-edit
pocket1: WeaponPistolMk58
pocket2: FlashlightSeclite
storage:
back:
- WeaponEnergyGunPistolSecurity # Sunrise-edit
- WeaponDisabler
- MedicatedSuture
- RegenerativeMesh
#- BoxZiptie # Sunrise-edit
- BoxZiptie
- CrowbarRed
- MagazineMagnum # Sunrise-edit
- MagazinePistol
- type: startingGear
id: ERTSecurityGearEVALecter
equipment:
jumpsuit: ClothingUniformJumpsuitERTSecurity
back: ClothingBackpackERTSecurity
shoes: ClothingShoesBootsMagCombat
shoes: ClothingShoesBootsMag
mask: ClothingMaskGasERT
eyes: ClothingEyesGlassesSecurity
gloves: ClothingHandsGlovesCombat
@ -329,7 +328,7 @@
- WeaponDisabler
- MedicatedSuture
- RegenerativeMesh
#- BoxZiptie # Sunrise-edit
- BoxZiptie
- CrowbarRed
- MagazinePistol
@ -354,55 +353,48 @@
equipment:
jumpsuit: ClothingUniformJumpsuitERTMedic
back: ClothingBackpackERTMedical
shoes: ClothingShoesBootsMagSec # Sunrise-edit
head: ClothingHeadEVAHelmetERTMedic # Sunrise-edit
eyes: ClothingEyesHudMedSec # Sunrise-edit
gloves: ClothingHandsGlovesCombat # Sunrise-edit
outerClothing: ClothingOuterArmorAmberMed # Sunrise-edit
shoes: ClothingShoesBootsCombatFilled
head: ClothingHeadHelmetERTMedic
eyes: ClothingEyesHudMedical
gloves: ClothingHandsGlovesNitrile
outerClothing: ClothingOuterArmorBasicSlim
id: ERTMedicPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltMedicalFilled
pocket1: WeaponEnergyGunPistolSecurity # Sunrise-edit
pocket2: HandheldCrewMonitor # Sunrise-edit
pocket1: Flare
storage:
back:
- Hypospray
#- MedkitAdvancedFilled # Sunrise-edit
- MedkitCombatFilled
- MedkitCombatFilled
- CrowbarRed
- LauncherSyringePistol
- OmnizineChemistryBottle
- EpinephrineChemistryBottle
- EpinephrineChemistryBottle
- DefibrillatorCompact # Sunrise-edit
- MedkitCombatFilled # Sunrise-edit
- MedkitCombatFilled # Sunrise-edit
- type: startingGear
id: ERTMedicalGearEVA
equipment:
jumpsuit: ClothingUniformJumpsuitERTMedic
back: ClothingBackpackERTMedical
shoes: ClothingShoesBootsMagCombat
shoes: ClothingShoesBootsMag
mask: ClothingMaskGasERT
eyes: ClothingEyesHudMedSec # Sunrise-edit
gloves: ClothingHandsGlovesCombat # Sunrise-edit
eyes: ClothingEyesHudMedical
gloves: ClothingHandsGlovesNitrile
outerClothing: ClothingOuterHardsuitERTMedical
id: ERTMedicPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltMedicalFilled
pocket1: WeaponEnergyGunPistolSecurity # Sunrise-edit
pocket2: HandheldCrewMonitor # Sunrise-edit
pocket1: Flare
storage:
back:
- Hypospray
#- MedkitAdvancedFilled # Sunrise-edit
- MedkitCombatFilled
- MedkitCombatFilled
- CrowbarRed
- OmnizineChemistryBottle
- EpinephrineChemistryBottle
- EpinephrineChemistryBottle
- DefibrillatorCompact # Sunrise-edit
- MedkitCombatFilled # Sunrise-edit
- MedkitCombatFilled # Sunrise-edit
# Janitor
- type: job
@ -426,22 +418,20 @@
jumpsuit: ClothingUniformJumpsuitERTJanitor
back: ClothingBackpackERTJanitor
shoes: ClothingShoesGaloshes
head: ClothingHeadEVAHelmetERTJanitor # Sunrise-edit
eyes: ClothingEyesGlassesSecurity # Sunrise-edit
gloves: ClothingHandsGlovesCombat # Sunrise-edit
outerClothing: ClothingOuterArmorAmberJan
head: ClothingHeadHelmetERTJanitor
gloves: ClothingHandsGlovesColorPurple
outerClothing: ClothingOuterArmorBasicSlim
id: ERTJanitorPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltJanitorFilled
pocket1: WeaponEnergyGunPistolSecurity # Sunrise-edit
pocket2: CrowbarRed # Sunrise-edit
pocket1: Flare
storage:
back:
- LightReplacer
- BoxLightMixed
#- BoxLightMixed # Sunrise-edit
#- Soap # Sunrise-edit
#- CrowbarRed # Sunrise-edit
- BoxLightMixed
- Soap
- CrowbarRed
- AdvMopItem
- type: startingGear
@ -449,22 +439,19 @@
equipment:
jumpsuit: ClothingUniformJumpsuitERTJanitor
back: ClothingBackpackERTJanitor
shoes: ClothingShoesBootsMagCombat
shoes: ClothingShoesBootsMag
mask: ClothingMaskGasERT
eyes: ClothingEyesGlassesSecurity # Sunrise-edit
gloves: ClothingHandsGlovesCombat # Sunrise-edit
gloves: ClothingHandsGlovesColorPurple
outerClothing: ClothingOuterHardsuitERTJanitor
id: ERTJanitorPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltJanitorFilled
pocket1: WeaponEnergyGunPistolSecurity # Sunrise-edit
pocket2: CrowbarRed # Sunrise-edit
pocket1: Flare
storage:
back:
- LightReplacer
- BoxLightMixed
#- BoxLightMixed # Sunrise-edit
#- Soap # Sunrise-edit
#- CrowbarRed # Sunrise-edit
- BoxLightMixed
- Soap
- CrowbarRed
- AdvMopItem

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/a879151ef04192ae2a791278ee882c1bce7c5062, cola and any sprite modified by potato1234x (github) for ss14",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/a879151ef04192ae2a791278ee882c1bce7c5062, cola and any sprite modified by potato1234x (github) for ss14, clothing by Southbridge_fur (github) for SS14",
"size": {
"x": 32,
"y": 32
@ -15,6 +15,9 @@
},
{
"name": "any"
},
{
"name": "clothing"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

View file

@ -0,0 +1,56 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Created by Alpaccalypse for SS14",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "normal-unshaded",
"delays": [
[
2.5,
0.1,
3.4,
0.1
]
]
},
{
"name": "broken"
},
{
"name": "normal"
},
{
"name": "deny-unshaded",
"delays": [
[
0.1,
0.1,
0.1
]
]
},
{
"name": "eject-unshaded",
"delays": [
[
0.5,
0.1,
1.0,
0.1,
0.1
]
]
},
{
"name": "off"
},
{
"name": "panel"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

@ -1 +1 @@
Subproject commit e4190f4f2900634e332208a77cd6df9cef75c29a
Subproject commit bcc4cd77cf16deb9b05f29b090d865f836a733ab