Compare commits

..
Author SHA1 Message Date
Janet Blackquill fc2d05f548 ser/de 2026-06-20 06:10:53 -05:00
Janet Blackquill 4c7f99296c and that's a wrap 2026-06-20 06:10:53 -05:00
pre-commit-ci[bot] df1e97986a [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-06-20 06:10:53 -05:00
Janet Blackquill 88203bb6b2 and that's a wrap 2026-06-20 06:10:53 -05:00
Janet Blackquill 158a114804 nuke me harder 2026-06-20 06:10:53 -05:00
Janet Blackquill d438aec056 she rise up until i don't have a round end condition yet 2026-06-20 06:10:53 -05:00
326 changed files with 1478 additions and 3410 deletions
@@ -262,6 +262,32 @@ public sealed partial class AdminVerbSystem
Message = string.Join(": ", ntAgent, Loc.GetString("admin-verb-text-make-NTAgent")),
};
args.Verbs.Add(agent);
args.Verbs.Add(new ()
{
Text = Loc.GetString("admin-verb-make-HeadInsurgent.text"),
Category = VerbCategory.Antag,
Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/job_icons.rsi"), "HeadRevolutionary"),
Act = () =>
{
_antag.ForceMakeAntag<NTAgentRuleComponent>(targetPlayer, "UprisingRule", "HeadInsurgent");
},
Impact = LogImpact.High,
Message = Loc.GetString("admin-verb-make-HeadInsurgent.message"),
});
args.Verbs.Add(new ()
{
Text = Loc.GetString("admin-verb-make-HeadLoyalist.text"),
Category = VerbCategory.Antag,
Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/Interface/Misc/job_icons.rsi"), "Nanotrasen"),
Act = () =>
{
_antag.ForceMakeAntag<NTAgentRuleComponent>(targetPlayer, "UprisingRule", "HeadLoyalist");
},
Impact = LogImpact.High,
Message = Loc.GetString("admin-verb-make-HeadLoyalist.message"),
});
// End DeltaV Additions
// start DeltaV Additions - add hitman
var hitmanName = Loc.GetString("admin-verb-make-hitman");
@@ -23,7 +23,8 @@ public sealed partial class AntagSelectionSystem
/// </summary>
public bool TryGetNextAvailableDefinition(Entity<AntagSelectionComponent> ent,
[NotNullWhen(true)] out AntagSelectionDefinition? definition,
int? players = null)
int? players = null,
string? preferredRole = null) // DeltaV - preferrec roles
{
definition = null;
@@ -39,6 +40,11 @@ public sealed partial class AntagSelectionSystem
// It needs to track selected minds for each definition independently.
foreach (var def in ent.Comp.Definitions)
{
// Begin DeltaV - preferred roles
if (preferredRole is not null && !def.PrefRoles.Contains(preferredRole))
continue;
// End DeltaV - preferred roles
var target = GetTargetAntagCount(ent, null, def);
if (mindCount < target)
@@ -336,11 +342,11 @@ public sealed partial class AntagSelectionSystem
/// This technically is a gamerule-ent-less way to make an entity an antag.
/// You should almost never be using this.
/// </summary>
public void ForceMakeAntag<T>(ICommonSession? player, string defaultRule) where T : Component
public void ForceMakeAntag<T>(ICommonSession? player, string defaultRule, string? preferredRole = null) where T : Component // DeltaV - preferred antag roles
{
var rule = ForceGetGameRuleEnt<T>(defaultRule);
if (!TryGetNextAvailableDefinition(rule, out var def))
if (!TryGetNextAvailableDefinition(rule, out var def, preferredRole: preferredRole)) // DeltaV - preferred antag roles
def = rule.Comp.Definitions.Last();
MakeAntag(rule, player, def.Value);
}
-9
View File
@@ -588,15 +588,6 @@ public sealed class FaxSystem : EntitySystem
return;
var faxName = Loc.GetString("fax-machine-popup-source-unknown");
// BEGIN DeltaV - Refresh Fax IDs before recieving
// This will seem odd that we're doing the same if statement twice BUT if its not in the known fax machine list, the
// sending fax might not have been online when the current fax machine was refreshed/init'd. So, if its already known,
// we don't need to refresh. But if its not known, let's attempt to refresh first, then check the fromAddress in the KnownFaxes.
if (fromAddress != null && !component.KnownFaxes.TryGetValue(fromAddress, out var _))
Refresh(uid, component);
// END DeltaV
if (fromAddress != null && component.KnownFaxes.TryGetValue(fromAddress, out var fax)) // If message received from unknown fax address
faxName = fax;
+2 -2
View File
@@ -475,7 +475,7 @@ public sealed class NukeSystem : EntitySystem
/// <summary>
/// Force a nuclear bomb to start a countdown timer
/// </summary>
public void ArmBomb(EntityUid uid, NukeComponent? component = null)
public void ArmBomb(EntityUid uid, NukeComponent? component = null, string? announcementId = null) // DeltaV - custom announcements
{
if (!Resolve(uid, ref component))
return;
@@ -500,7 +500,7 @@ public sealed class NukeSystem : EntitySystem
_selectedNukeSong = _audio.ResolveSound(component.ArmMusic);
// warn a crew
var announcement = Loc.GetString("nuke-component-announcement-armed",
var announcement = Loc.GetString(announcementId ?? "nuke-component-announcement-armed", // DeltaV - custom announcements
("time", (int) component.RemainingTime),
("location", FormattedMessage.RemoveMarkupOrThrow(_navMap.GetNearestBeaconString((uid, nukeXform)))));
var sender = Loc.GetString("nuke-component-announcement-sender");
@@ -209,7 +209,7 @@ public sealed class RadioSystem : EntitySystem
}
/// <inheritdoc cref="TelecomServerComponent"/>
public bool HasActiveServer(MapId mapId, string channelId) // DeltaV - we need this
private bool HasActiveServer(MapId mapId, string channelId)
{
var servers = EntityQuery<TelecomServerComponent, EncryptionKeyHolderComponent, ApcPowerReceiverComponent, TransformComponent>();
foreach (var (_, keys, power, transform) in servers)
@@ -0,0 +1,84 @@
using Content.Server.Revolutionary.Components;
using Content.Shared._DV.Uprising;
using Content.Shared.Cuffs.Components;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Objectives.Components;
using Content.Shared.Roles;
using Content.Shared.Station;
namespace Content.Server.Uprising;
public sealed class CommandStatusObjectiveSystem : EntitySystem
{
[Dependency] private readonly SharedRoleSystem _role = default!;
[Dependency] private readonly SharedStationSystem _station = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CommandStatusObjectiveComponent, ObjectiveGetProgressEvent>(OnGetProgress);
}
private bool CheckIncapacitated(EntityUid uid)
{
if (TryComp<CuffableComponent>(uid, out var cuffed) && cuffed.CuffedHandCount > 0)
return true;
if (!TryComp<MobStateComponent>(uid, out var state))
return true;
if (state.CurrentState is MobState.Dead or MobState.Invalid)
return true;
if (_station.GetOwningStation(uid) == null)
return true;
return false;
}
private void OnGetProgress(Entity<CommandStatusObjectiveComponent> ent, ref ObjectiveGetProgressEvent args)
{
var total = 0;
var counted = 0;
var query = AllEntityQuery<MindContainerComponent, CommandStaffComponent>();
while (query.MoveNext(out var uid, out var mind, out _))
{
if (mind.Mind is not { } mindUid)
continue;
total++;
var converted = false;
foreach (var role in ent.Comp.ConvertedRoles)
{
if (!EntityManager.ComponentFactory.TryGetRegistration(role, out var roleReg))
{
Log.Error($"Role component not found for CrewConversionObjective: {role}");
continue;
}
if (!_role.MindHasRole(mindUid, roleReg.Type, out _))
continue;
converted = true;
break;
}
var incapacitated = CheckIncapacitated(uid);
if (converted && !incapacitated || !converted && ent.Comp.ShouldUnconvertedBeIncapacitated && incapacitated)
{
counted++;
}
}
if (total == 0)
return;
args.Progress = (float)counted / (float)total;
}
}
@@ -6,6 +6,12 @@ namespace Content.Server._DV.CartridgeLoader.Cartridges;
[RegisterComponent, Access(typeof(NanoChatCartridgeSystem))]
public sealed partial class NanoChatCartridgeComponent : Component
{
/// <summary>
/// Station entity to keep track of.
/// </summary>
[DataField]
public EntityUid? Station;
/// <summary>
/// The NanoChat card to keep track of.
/// </summary>
@@ -2,8 +2,9 @@ using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Server.Administration.Logs;
using Content.Server.CartridgeLoader;
using Content.Server.Power.Components;
using Content.Server.Radio;
using Content.Server.Radio.EntitySystems;
using Content.Server.Station.Systems;
using Content.Shared.Access.Components;
using Content.Shared.CartridgeLoader;
using Content.Shared.CCVar;
@@ -29,7 +30,7 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly SharedNanoChatSystem _nanoChat = default!;
[Dependency] private readonly SharedUserInterfaceSystem _ui = default!;
[Dependency] private readonly RadioSystem _radio = default!;
[Dependency] private readonly StationSystem _station = default!;
private EntityQuery<PdaComponent> _pdaQuery;
private EntityQuery<NanoChatCardComponent> _cardQuery;
@@ -455,7 +456,9 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
{
// First verify we can send from this device
var channel = _prototype.Index(sender.Comp.RadioChannel);
if (!CanSend(sender))
var sendAttemptEvent = new RadioSendAttemptEvent(channel, sender);
RaiseLocalEvent(ref sendAttemptEvent);
if (sendAttemptEvent.Cancelled)
return (true, new List<Entity<NanoChatCardComponent>>());
var foundRecipients = new List<Entity<NanoChatCardComponent>>();
@@ -484,19 +487,26 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
if (receiverCart.Card != recipient.Owner)
continue;
var receiverMapId = Transform(receiverUid).MapID;
var senderMapId = Transform(sender).MapID;
// Check if devices are on same station/map
var recipientStation = _station.GetOwningStation(receiverUid);
var senderStation = _station.GetOwningStation(sender);
// Must be on the same map unless long range is allowed.
if (!channel.LongRange && receiverMapId != senderMapId)
// Both entities must be on a station
if (recipientStation == null || senderStation == null)
continue;
// Check if telecommunications are active on both ends
if (!_radio.HasActiveServer(receiverMapId, receiverCart.RadioChannel) || !_radio.HasActiveServer(senderMapId, sender.Comp.RadioChannel))
// Must be on same map/station unless long range allowed
if (!channel.LongRange && recipientStation != senderStation)
continue;
// Needs telecomms
if (!HasActiveServer(senderStation.Value) || !HasActiveServer(recipientStation.Value))
continue;
// Check if recipient can receive
if (!CanReceive(sender, receiverUid))
var receiveAttemptEv = new RadioReceiveAttemptEvent(channel, sender, receiverUid);
RaiseLocalEvent(ref receiveAttemptEv);
if (receiveAttemptEv.Cancelled)
continue;
// Found valid cartridge that can receive
@@ -509,26 +519,21 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
}
/// <summary>
/// Tests if a NanoChat cartridge can send messages
/// Checks if there are any active telecomms servers on the given station
/// </summary>
/// <param name="sender">The NanoChat cartridge trying to send</param>
private bool CanSend(Entity<NanoChatCartridgeComponent> sender)
private bool HasActiveServer(EntityUid station)
{
var sendAttemptEvent = new RadioSendAttemptEvent(_prototype.Index(sender.Comp.RadioChannel), sender);
RaiseLocalEvent(ref sendAttemptEvent);
return !sendAttemptEvent.Cancelled;
}
// I have no idea why this isn't public in the RadioSystem
var query =
EntityQueryEnumerator<TelecomServerComponent, EncryptionKeyHolderComponent, ApcPowerReceiverComponent>();
/// <summary>
/// Tests if a receiver can receive from a given NanoChat cartridge
/// </summary>
/// <param name="sender">The NanoChat cartridge trying to send</param>
/// <param name="receiver">The receiver cartridge trying to receive</param>
private bool CanReceive(Entity<NanoChatCartridgeComponent> sender, EntityUid receiver)
{
var receiveAttemptEv = new RadioReceiveAttemptEvent(_prototype.Index(sender.Comp.RadioChannel), sender, receiver);
RaiseLocalEvent(ref receiveAttemptEv);
return !receiveAttemptEv.Cancelled;
while (query.MoveNext(out var uid, out _, out _, out var power))
{
if (_station.GetOwningStation(uid) == station && power.Powered)
return true;
}
return false;
}
/// <summary>
@@ -683,15 +688,16 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
private void UpdateUI(Entity<NanoChatCartridgeComponent> ent, EntityUid loader)
{
List<NanoChatRecipient>? contacts;
if (CanSend(ent) && _radio.HasActiveServer(Transform(ent).MapID, ent.Comp.RadioChannel))
if (_station.GetOwningStation(loader) is { } station)
{
ent.Comp.Station = station;
contacts = [];
var query = AllEntityQuery<NanoChatCardComponent, IdCardComponent>();
while (query.MoveNext(out var entityId, out var nanoChatCard, out var idCardComponent))
{
if (nanoChatCard.ListNumber && nanoChatCard.Number is uint nanoChatNumber && idCardComponent.FullName is string fullName)
if (nanoChatCard.ListNumber && nanoChatCard.Number is uint nanoChatNumber && idCardComponent.FullName is string fullName && _station.GetOwningStation(entityId) == station)
{
contacts.Add(new NanoChatRecipient(nanoChatNumber, fullName));
}
@@ -700,7 +706,7 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
var borgQuery = AllEntityQuery<NanoChatCardComponent, BorgChassisComponent>();
while (borgQuery.MoveNext(out var borgId, out var borgChatCard, out var _))
{
if (borgChatCard.ListNumber && borgChatCard.Number is uint nanoChatNumber)
if (borgChatCard.ListNumber && borgChatCard.Number is uint nanoChatNumber && _station.GetOwningStation(borgId) == station)
{
contacts.Add(new NanoChatRecipient(nanoChatNumber, MetaData(borgId).EntityName));
}
@@ -709,7 +715,7 @@ public sealed class NanoChatCartridgeSystem : EntitySystem
var aiQuery = AllEntityQuery<NanoChatCardComponent, StationAiHeldComponent>();
while (aiQuery.MoveNext(out var aiId, out var aiChatCard, out var _))
{
if (aiChatCard.ListNumber && aiChatCard.Number is uint nanoChatNumber)
if (aiChatCard.ListNumber && aiChatCard.Number is uint nanoChatNumber && _station.GetOwningStation(aiId) == station)
{
contacts.Add(new NanoChatRecipient(nanoChatNumber, MetaData(aiId).EntityName));
}
@@ -0,0 +1,8 @@
namespace Content.Server._DV.Uprising;
[RegisterComponent, Access(typeof(UprisingRuleSystem))]
public sealed partial class UprisingConsoleComponent : Component
{
[DataField]
public TimeSpan Delay = TimeSpan.FromSeconds(5);
}
@@ -0,0 +1,54 @@
using Content.Shared._DV.Roles;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server._DV.Uprising;
[RegisterComponent, Access(typeof(UprisingRuleSystem)), AutoGenerateComponentPause]
public sealed partial class UprisingRuleComponent : Component
{
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan? NukeAnnouncementAt;
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan? NukeTimeAt;
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan? FirstWarningAt;
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan? ImpendingWarningAt;
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
public TimeSpan? FinalWarningAt;
[DataField]
public TimeSpan NukeAnnouncementDelay = TimeSpan.FromMinutes(30);
[DataField]
public TimeSpan NukeTimeDelay = TimeSpan.FromMinutes(90);
[DataField]
public TimeSpan FirstWarning = TimeSpan.FromMinutes(30);
[DataField]
public TimeSpan ImpendingWarning = TimeSpan.FromMinutes(15);
[DataField]
public TimeSpan FinalWarning = TimeSpan.FromMinutes(5);
[DataField]
public float NukeDuration = 60f;
[DataField]
public (UprisingSide, TimeSpan)? SideWinsAt;
[DataField]
public UprisingSide? SideWon;
[DataField]
public Dictionary<UprisingSide, TimeSpan> SideTimes = new()
{
{ UprisingSide.Insurgent , TimeSpan.FromMinutes(3) },
{ UprisingSide.Loyalist , TimeSpan.FromMinutes(3) },
};
}
@@ -0,0 +1,341 @@
using System.Diagnostics.CodeAnalysis;
using Content.Server.Antag;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.Nuke;
using Content.Server.Pinpointer;
using Content.Server.Roles;
using Content.Shared._DV.Roles;
using Content.Shared._DV.Uprising;
using Content.Shared.Chat;
using Content.Shared.Containers.ItemSlots;
using Content.Shared.DoAfter;
using Content.Shared.GameTicking.Components;
using Content.Shared.Mind;
using Content.Shared.Objectives.Components;
using Content.Shared.Objectives.Systems;
using Content.Shared.Roles;
using Content.Shared.Verbs;
using Robust.Shared.Player;
using Robust.Shared.Utility;
namespace Content.Server._DV.Uprising;
public sealed class UprisingRuleSystem : GameRuleSystem<UprisingRuleComponent>
{
[Dependency] private readonly SharedChatSystem _chat = default!;
[Dependency] private readonly NukeSystem _nuke = default!;
[Dependency] private readonly ItemSlotsSystem _itemSlots = default!;
[Dependency] private readonly NavMapSystem _navMap = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly SharedObjectivesSystem _objectives = default!;
[Dependency] private readonly SharedRoleSystem _role = default!;
[Dependency] private readonly AntagSelectionSystem _antag = default!;
[Dependency] private readonly ISharedPlayerManager _player = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<LoyalistRoleComponent, GetBriefingEvent>(OnGetLoyalistBriefing);
SubscribeLocalEvent<InsurgentRoleComponent, GetBriefingEvent>(OnGetInsurgentBriefing);
SubscribeLocalEvent<UprisingVictoryObjectiveComponent, ObjectiveGetProgressEvent>(OnUprisingVictoryProgress);
SubscribeLocalEvent<UprisingConsoleComponent, GetVerbsEvent<AlternativeVerb>>(OnGetConsoleVerbs);
SubscribeLocalEvent<UprisingConsoleComponent, UprisingArmDoAfter>(OnArm);
SubscribeLocalEvent<UprisingConsoleComponent, UprisingDisarmDoAfter>(OnDisarm);
}
private void OnUprisingVictoryProgress(Entity<UprisingVictoryObjectiveComponent> ent, ref ObjectiveGetProgressEvent args)
{
if (GetRule() is not { } rule)
return;
if (rule.Comp1.SideWinsAt is var (side, _) && ent.Comp.Side == side)
args.Progress = 0.5f;
else if (rule.Comp1.SideWon == ent.Comp.Side)
args.Progress = 1f;
else
args.Progress = 0f;
}
protected override void Started(EntityUid uid, UprisingRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
{
base.Started(uid, component, gameRule, args);
component.NukeAnnouncementAt = Timing.CurTime + component.NukeAnnouncementDelay;
component.NukeTimeAt = Timing.CurTime + component.NukeTimeDelay;
component.FirstWarningAt = component.NukeTimeAt - component.FirstWarning;
component.ImpendingWarningAt = component.NukeTimeAt - component.ImpendingWarning;
component.FinalWarningAt = component.NukeTimeAt - component.FinalWarning;
}
protected override void ActiveTick(EntityUid uid, UprisingRuleComponent component, GameRuleComponent gameRule, float frameTime)
{
base.ActiveTick(uid, component, gameRule, frameTime);
if (component.NukeAnnouncementAt is { } nukeAnnouncement && nukeAnnouncement <= Timing.CurTime)
{
var time = component.NukeTimeAt.HasValue ? component.NukeTimeAt.Value - Timing.CurTime : component.NukeTimeDelay;
_chat.DispatchGlobalAnnouncement(Loc.GetString("uprising-announcement-nuke-announcement", ("time", (int)Math.Round(time.TotalMinutes))), colorOverride: Color.Gold);
component.NukeAnnouncementAt = null;
}
if (component.FirstWarningAt is { } firstWarning && firstWarning <= Timing.CurTime)
{
var time = component.NukeTimeAt.HasValue ? component.NukeTimeAt.Value - Timing.CurTime : component.FirstWarning;
_chat.DispatchGlobalAnnouncement(Loc.GetString("uprising-announcement-first-warning", ("time", (int)Math.Round(time.TotalMinutes))), colorOverride: Color.Gold);
component.FirstWarningAt = null;
}
if (component.ImpendingWarningAt is { } impendingWarning && impendingWarning <= Timing.CurTime)
{
var time = component.NukeTimeAt.HasValue ? component.NukeTimeAt.Value - Timing.CurTime : component.ImpendingWarning;
_chat.DispatchGlobalAnnouncement(Loc.GetString("uprising-announcement-impending-warning", ("time", (int)Math.Round(time.TotalMinutes))), colorOverride: Color.Gold);
component.ImpendingWarningAt = null;
}
if (component.FinalWarningAt is { } finalWarning && finalWarning <= Timing.CurTime)
{
var time = component.NukeTimeAt.HasValue ? component.NukeTimeAt.Value - Timing.CurTime : component.FinalWarning;
_chat.DispatchGlobalAnnouncement(Loc.GetString("uprising-announcement-final-warning", ("time", (int)Math.Round(time.TotalMinutes))), colorOverride: Color.Gold);
component.FinalWarningAt = null;
}
if (component.NukeTimeAt is { } nukeTime && nukeTime <= Timing.CurTime)
{
component.NukeTimeAt = null;
var query = EntityQueryEnumerator<NukeComponent>();
while (query.MoveNext(out var bombUid, out var bomb))
{
_nuke.SetRemainingTime(bombUid, component.NukeDuration, bomb);
_itemSlots.SetLock(bombUid, bomb.DiskSlot, false);
_itemSlots.TryEject(bombUid, bomb.DiskSlot, null, out _, true);
_itemSlots.SetLock(bombUid, bomb.DiskSlot, true);
_nuke.ArmBomb(bombUid, bomb, "uprising-announcement-nuke-armed");
}
}
if (component.SideWinsAt is var (winningSide, winningTime) && winningTime <= Timing.CurTime)
{
component.SideWinsAt = null;
var query = EntityQueryEnumerator<NukeComponent>();
while (query.MoveNext(out var bombUid, out var bomb))
{
_nuke.DisarmBomb(bombUid, bomb);
}
component.SideWon = winningSide;
_chat.DispatchGlobalAnnouncement(
Loc.GetString($"uprising-announcement-victory-announcement-{winningSide}"),
Loc.GetString($"uprising-announcement-victory-announcement-{winningSide}.sender"),
colorOverride: Color.FromXaml(Loc.GetString($"uprising-announcement-victory-announcement-{winningSide}.color")));
GameTicker.EndRound();
}
}
protected override void AppendRoundEndText(EntityUid uid,
UprisingRuleComponent component,
GameRuleComponent gameRule,
ref RoundEndTextAppendEvent args)
{
if (component.SideWinsAt is var (partialSide, _))
{
args.AddLine(Loc.GetString($"uprising-outcome-{partialSide}-partial"));
}
else if (component.SideWon is { } winningSide)
{
args.AddLine(Loc.GetString($"uprising-outcome-{winningSide}-full"));
}
else
{
args.AddLine(Loc.GetString("uprising-outcome-none"));
}
args.AddLine(Loc.GetString("uprising-leads"));
var antags = _antag.GetAntagIdentifiers(uid);
var leads = new HashSet<EntityUid>();
foreach (var (mind, sessionData, name) in antags)
{
leads.Add(mind);
if (_role.MindHasRole<UprisingRoleComponent>(mind, out var it))
args.AddLine(Loc.GetString($"uprising-leads-user.{it.Value.Comp2.Side}", ("name", name), ("user", sessionData.UserName)));
else
args.AddLine(Loc.GetString("uprising-leads-user.Unknown", ("name", name), ("user", sessionData.UserName)));
}
args.AddLine(string.Empty);
var lines = new Dictionary<UprisingSide, List<string>>();
foreach (var value in Enum.GetValues<UprisingSide>())
{
lines[value] = new();
}
var minds = EntityQueryEnumerator<MindComponent>();
while (minds.MoveNext(out var mindUid, out var mindComponent))
{
if (leads.Contains(mindUid))
continue;
if (!_role.MindHasRole<UprisingRoleComponent>((mindUid, mindComponent), out var role) || mindComponent.OriginalOwnerUserId is not { } owner)
continue;
if (!_player.TryGetPlayerData(owner, out var data))
continue;
lines[role.Value.Comp2.Side].Add(Loc.GetString($"uprising-members-user", ("name", mindComponent.CharacterName ?? string.Empty), ("user", data.UserName)));
}
foreach (var value in Enum.GetValues<UprisingSide>())
{
args.AddLine(Loc.GetString($"uprising-members.{value}"));
foreach (var line in lines[value])
{
args.AddLine(line);
}
args.AddLine(string.Empty);
}
}
private void OnGetLoyalistBriefing(Entity<LoyalistRoleComponent> ent, ref GetBriefingEvent args)
{
args.Append(Loc.GetString("antag-Loyalist.briefing"));
}
private void OnGetInsurgentBriefing(Entity<InsurgentRoleComponent> ent, ref GetBriefingEvent args)
{
args.Append(Loc.GetString("antag-Insurgent.briefing"));
}
private Entity<UprisingRuleComponent, GameRuleComponent>? GetRule()
{
var enumerator = QueryActiveRules();
while (enumerator.MoveNext(out var uid, out _, out var uprising, out var gamerule))
{
return (uid, uprising, gamerule);
}
return null;
}
private void StartWinning(UprisingSide side, EntityUid console)
{
if (GetRule() is not { } rule)
return;
var location = _navMap.GetNearestBeaconString(console);
var announcement = Loc.GetString($"uprising-announcement-start-victory-announcement-{side}",
("time", (int) Math.Round(rule.Comp1.SideTimes[side].TotalSeconds)),
("location", FormattedMessage.RemoveMarkupOrThrow(location)));
_chat.DispatchGlobalAnnouncement(
announcement,
Loc.GetString($"uprising-announcement-start-victory-announcement-{side}.sender"),
colorOverride: Color.FromXaml(Loc.GetString($"uprising-announcement-start-victory-announcement-{side}.color")));
rule.Comp1.SideWinsAt = (side, Timing.CurTime + rule.Comp1.SideTimes[side]);
}
private void StopWinning()
{
if (GetRule() is not { } rule || rule.Comp1.SideWinsAt is not var (side, time))
return;
rule.Comp1.SideTimes[side] = Timing.CurTime - time;
_chat.DispatchGlobalAnnouncement(
Loc.GetString($"uprising-announcement-interrupted-victory-announcement-{side}"),
Loc.GetString($"uprising-announcement-interrupted-victory-announcement-{side}.sender"),
colorOverride: Color.FromXaml(Loc.GetString($"uprising-announcement-interrupted-victory-announcement-{side}.color")));
rule.Comp1.SideWinsAt = null;
}
private void OnGetConsoleVerbs(Entity<UprisingConsoleComponent> ent, ref GetVerbsEvent<AlternativeVerb> args)
{
if (GetRule() is not { } rule)
return;
var user = args.User;
if (rule.Comp1.SideWinsAt is var (disarmSide, _))
{
args.Verbs.Add(new ()
{
Act = () => StartDisarming(ent, user),
Text = Loc.GetString($"uprising-disarm-verb.{disarmSide}"),
});
return;
}
if (!CheckCanArm(args.User, out var armSide))
return;
args.Verbs.Add(new()
{
Act = () => StartArming(ent, user),
Text = Loc.GetString($"uprising-arm-verb.{armSide}"),
});
}
private bool CheckCanArm(EntityUid user, [NotNullWhen(true)] out UprisingSide? side)
{
side = null;
if (_mind.GetMind(user) is not { } mind || !TryComp<MindComponent>(mind, out var mindComp))
return false;
if (!_role.MindHasRole<UprisingRoleComponent>(mind, out var uprisingRole))
return false;
foreach (var objective in mindComp.Objectives)
{
if (!HasComp<UprisingArmRequiredObjectiveComponent>(objective))
continue;
if (_objectives.GetProgress(objective, (mind, mindComp)) is not >= 1)
return false;
}
side = uprisingRole.Value.Comp2.Side;
return true;
}
private void StartDisarming(Entity<UprisingConsoleComponent> ent, EntityUid user)
{
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
user,
ent.Comp.Delay,
new UprisingDisarmDoAfter(),
ent.Owner));
}
private void StartArming(Entity<UprisingConsoleComponent> ent, EntityUid user)
{
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
user,
ent.Comp.Delay,
new UprisingArmDoAfter(),
ent.Owner));
}
private void OnArm(Entity<UprisingConsoleComponent> ent, ref UprisingArmDoAfter args)
{
if (args.Handled || args.Cancelled || !CheckCanArm(args.User, out var side))
return;
StartWinning(side.Value, ent);
}
private void OnDisarm(Entity<UprisingConsoleComponent> ent, ref UprisingDisarmDoAfter args)
{
if (args.Handled || args.Cancelled)
return;
StopWinning();
}
}
@@ -0,0 +1,14 @@
using Content.Shared.Actions;
using Content.Shared.Roles.Components;
using Robust.Shared.Prototypes;
namespace Content.Shared.Uprising;
public sealed partial class ConversionAcceptActionEvent : InstantActionEvent
{
[DataField(required: true)]
public EntProtoId MindRole;
[DataField(required: true)]
public EntProtoId<MindRoleComponent> RemoveMindRole;
}
@@ -0,0 +1,33 @@
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Roles;
using Robust.Shared.Network;
namespace Content.Shared.Uprising;
public sealed class ConversionAcceptActionSystem : EntitySystem
{
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly SharedRoleSystem _role = default!;
[Dependency] private readonly INetManager _net = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MindContainerComponent, ConversionAcceptActionEvent>(OnAcceptConversion);
}
private void OnAcceptConversion(Entity<MindContainerComponent> ent, ref ConversionAcceptActionEvent args)
{
if (_mind.GetMind(ent) is not { } mind)
return;
args.Handled = true;
if (_net.IsServer)
{
_role.MindAddRole(mind, args.MindRole);
_role.MindRemoveRole(mind, args.RemoveMindRole);
}
}
}
@@ -0,0 +1,13 @@
using Content.Shared.Actions;
using Robust.Shared.Prototypes;
namespace Content.Shared.Uprising;
public sealed partial class ConversionOfferActionEvent : EntityTargetActionEvent
{
[DataField(readOnly: true)]
public List<Type> IncompatibleMindRoleTypes;
[DataField]
public EntProtoId AcceptAction;
}
@@ -0,0 +1,35 @@
using Content.Shared.Actions;
using Content.Shared.Mind;
using Content.Shared.Roles;
using Content.Shared.Roles.Components;
namespace Content.Shared.Uprising;
public sealed class ConversionOfferActionSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly SharedRoleSystem _role = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MindRoleComponent, ConversionOfferActionEvent>(OnOffer);
}
private void OnOffer(Entity<MindRoleComponent> ent, ref ConversionOfferActionEvent args)
{
if (_mind.GetMind(args.Target) is not { } mind)
return;
foreach (var incompatible in args.IncompatibleMindRoleTypes)
{
if (_role.MindHasRole(mind, incompatible, out _))
return;
}
_actions.AddAction(args.Target, args.AcceptAction);
args.Handled = true;
}
}
@@ -0,0 +1,6 @@
using Robust.Shared.GameStates;
namespace Content.Shared._DV.Actions;
[RegisterComponent, NetworkedComponent]
public sealed partial class DeleteOnPerformedActionComponent : Component;
@@ -0,0 +1,18 @@
using Content.Shared.Actions.Events;
namespace Content.Shared._DV.Actions;
public sealed class DeleteOnPerformedActionSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DeleteOnPerformedActionComponent, ActionPerformedEvent>(OnActionPerformed);
}
private void OnActionPerformed(Entity<DeleteOnPerformedActionComponent> ent, ref ActionPerformedEvent args)
{
PredictedQueueDel(ent);
}
}
@@ -0,0 +1,36 @@
using Content.Shared.Actions;
using Content.Shared.Mind;
using Robust.Shared.Containers;
using Robust.Shared.Network;
namespace Content.Shared._DV.Roles;
public sealed class ActionGrantRoleSystem : EntitySystem
{
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ActionGrantRoleComponent, EntGotInsertedIntoContainerMessage>(OnGotInserted);
SubscribeLocalEvent<ActionGrantRoleComponent, EntGotRemovedFromContainerMessage>(OnGotRemoved);
}
private void OnGotInserted(Entity<ActionGrantRoleComponent> ent, ref EntGotInsertedIntoContainerMessage args)
{
if (_net.IsClient || !TryComp<MindComponent>(args.Container.Owner, out var mind) || mind.CurrentEntity is not { } mindContainer)
return;
_actions.GrantContainedActions(mindContainer, ent.Owner);
}
private void OnGotRemoved(Entity<ActionGrantRoleComponent> ent, ref EntGotRemovedFromContainerMessage args)
{
if (_net.IsClient || !TryComp<MindComponent>(args.Container.Owner, out var mind) || mind.CurrentEntity is not { } mindContainer)
return;
_actions.RemoveProvidedActions(mindContainer, ent.Owner);
}
}
@@ -0,0 +1,6 @@
using Robust.Shared.GameStates;
namespace Content.Shared._DV.Roles;
[RegisterComponent, NetworkedComponent]
public sealed partial class ActionGrantRoleComponent : Component;
@@ -0,0 +1,6 @@
using Content.Shared.Roles.Components;
namespace Content.Shared._DV.Roles;
[RegisterComponent]
public sealed partial class InsurgentRoleComponent : BaseMindRoleComponent;
@@ -0,0 +1,6 @@
using Content.Shared.Roles.Components;
namespace Content.Shared._DV.Roles;
[RegisterComponent]
public sealed partial class LoyalistRoleComponent : BaseMindRoleComponent;
@@ -0,0 +1,12 @@
using Content.Shared.Objectives.Components;
using Content.Shared.Roles.Components;
using Robust.Shared.Prototypes;
namespace Content.Shared._DV.Roles;
[RegisterComponent]
public sealed partial class ObjectiveRoleComponent : BaseMindRoleComponent
{
[DataField(required: true)]
public List<EntProtoId<ObjectiveComponent>> Objectives;
}
@@ -0,0 +1,6 @@
using Content.Shared.Roles.Components;
namespace Content.Shared._DV.Roles;
[RegisterComponent]
public sealed partial class UprisingInconvertibleRoleComponent : BaseMindRoleComponent;
@@ -0,0 +1,16 @@
using Content.Shared.Roles.Components;
namespace Content.Shared._DV.Roles;
[RegisterComponent]
public sealed partial class UprisingRoleComponent : BaseMindRoleComponent
{
[DataField(required: true)]
public UprisingSide Side;
}
public enum UprisingSide : byte
{
Insurgent,
Loyalist,
}
@@ -0,0 +1,60 @@
using Content.Shared.Mind;
using Robust.Shared.Containers;
using Robust.Shared.Network;
namespace Content.Shared._DV.Roles;
public sealed class ObjectiveRoleSystem : EntitySystem
{
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ObjectiveRoleComponent, EntGotInsertedIntoContainerMessage>(OnInsertedIntoMind);
SubscribeLocalEvent<ObjectiveRoleComponent, ComponentShutdown>(OnShutdown);
}
private void OnInsertedIntoMind(Entity<ObjectiveRoleComponent> ent, ref EntGotInsertedIntoContainerMessage args)
{
if (_net.IsClient)
return;
if (!TryComp<MindComponent>(args.Container.Owner, out var mind))
return;
foreach (var objective in ent.Comp.Objectives)
{
_mind.TryAddObjective(args.Container.Owner, mind, objective);
}
}
private void OnShutdown(Entity<ObjectiveRoleComponent> ent, ref ComponentShutdown args)
{
if (_net.IsClient)
return;
if (!_container.TryGetContainingContainer(ent.Owner, out var container) ||
!TryComp<MindComponent>(container.Owner, out var mind))
return;
var indices = new List<int>();
for (var i = mind.Objectives.Count; i >= 0; i--)
{
var objective = mind.Objectives[i];
if (MetaData(objective).EntityPrototype?.ID is { } id && ent.Comp.Objectives.Contains(id))
{
indices.Add(i);
}
}
foreach (var index in indices)
{
_mind.TryRemoveObjective(container.Owner, mind, index);
}
}
}
@@ -0,0 +1,14 @@
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic;
namespace Content.Shared._DV.Uprising;
[RegisterComponent]
public sealed partial class CommandStatusObjectiveComponent : Component
{
[DataField(required: true, customTypeSerializer: typeof(CustomHashSetSerializer<string, ComponentNameSerializer>))]
public HashSet<string> ConvertedRoles;
[DataField]
public bool ShouldUnconvertedBeIncapacitated;
}
@@ -0,0 +1,19 @@
using Content.Shared.NPC.Prototypes;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic;
namespace Content.Shared._DV.Uprising;
[RegisterComponent]
public sealed partial class CrewConversionObjectiveComponent : Component
{
[DataField(required: true, customTypeSerializer: typeof(CustomHashSetSerializer<string, ComponentNameSerializer>))]
public HashSet<string> ConvertedRoles;
[DataField(required: true)]
public HashSet<ProtoId<NpcFactionPrototype>> ConversionSourceFactions;
[DataField(required: true)]
public float TargetFraction;
}
@@ -0,0 +1,58 @@
using Content.Shared.Mind.Components;
using Content.Shared.NPC.Components;
using Content.Shared.NPC.Systems;
using Content.Shared.Objectives.Components;
using Content.Shared.Roles;
namespace Content.Shared._DV.Uprising;
public sealed class CrewConversionObjectiveSystem : EntitySystem
{
[Dependency] private readonly NpcFactionSystem _npcFaction = default!;
[Dependency] private readonly SharedRoleSystem _role = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CrewConversionObjectiveComponent, ObjectiveGetProgressEvent>(OnGetProgress);
}
private void OnGetProgress(Entity<CrewConversionObjectiveComponent> ent, ref ObjectiveGetProgressEvent args)
{
var total = 0;
var counted = 0;
var query = AllEntityQuery<MindContainerComponent, NpcFactionMemberComponent>();
while (query.MoveNext(out var uid, out var mind, out var faction))
{
if (mind.Mind is not { } mindUid)
continue;
if (!_npcFaction.IsMemberOfAny((uid, faction), ent.Comp.ConversionSourceFactions))
continue;
total++;
foreach (var role in ent.Comp.ConvertedRoles)
{
if (!EntityManager.ComponentFactory.TryGetRegistration(role, out var roleReg))
{
Log.Error($"Role component not found for CrewConversionObjective: {role}");
continue;
}
if (!_role.MindHasRole(mindUid, roleReg.Type, out _))
continue;
counted++;
break;
}
}
if (total == 0)
return;
args.Progress = ((float)counted / (float)total) / ent.Comp.TargetFraction;
}
}
@@ -0,0 +1,4 @@
namespace Content.Shared._DV.Uprising;
[RegisterComponent]
public sealed partial class UprisingArmRequiredObjectiveComponent : Component;
@@ -0,0 +1,10 @@
using Content.Shared.DoAfter;
using Robust.Shared.Serialization;
namespace Content.Shared._DV.Uprising;
[Serializable, NetSerializable]
public sealed partial class UprisingDisarmDoAfter : SimpleDoAfterEvent;
[Serializable, NetSerializable]
public sealed partial class UprisingArmDoAfter : SimpleDoAfterEvent;
@@ -0,0 +1,10 @@
using Content.Shared._DV.Roles;
namespace Content.Shared._DV.Uprising;
[RegisterComponent]
public sealed partial class UprisingVictoryObjectiveComponent : Component
{
[DataField(required: true)]
public UprisingSide Side;
}
+33 -31
View File
@@ -1,4 +1,37 @@
Entries:
- author: ShepardToTheStars
changes:
- message: All syndicate cyborg ghost roles now spawn with a neuroling rather than
a positronic brain.
type: Tweak
id: 1937
time: '2025-12-08T15:33:15.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/4913
- author: ShepardToTheStars
changes:
- message: Feroxi now can sense containers and puddles of blood, and people who
are bleeding, except Diona and Slime people, since they bleed sap and slime
respectively (and that's not blood!).
type: Add
id: 1938
time: '2025-12-08T15:34:22.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/4902
- author: verybigman311
changes:
- message: Plastic is now obtainable from deconstructing a reinforced tinted window.
type: Fix
id: 1939
time: '2025-12-08T19:34:23.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/4918
- author: MantasDab360
changes:
- message: Ninja visor now has Night Vision!
type: Add
- message: Ninja Hardsuit is now fully Ion resistant!
type: Tweak
id: 1940
time: '2025-12-09T16:44:47.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/4916
- author: snowywinters
changes:
- message: Station AI can now use traffic comms. Your secrets are no longer safe.
@@ -4363,35 +4396,4 @@
id: 2437
time: '2026-06-20T10:46:03.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5896
- author: einknusprigestoast
changes:
- message: Added CentCom laser turrets + controls
type: Add
id: 2438
time: '2026-06-20T14:20:04.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6069
- author: sowelipililimute
changes:
- message: NanoChat now uses the same methods as the radio system to determine reachability.
In other words, cross-grid NanoChat works now.
type: Tweak
id: 2439
time: '2026-06-20T14:24:36.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6057
- author: RoboBozu, SalDragonsNOA
changes:
- message: NanoTrasen corporate has decided to celebrate the increased productivity
of the Delta Sector with ice cream! Recipes for various frozen treats have been
added to Bartenders' handbooks to facilitate the celebration!
type: Add
id: 2440
time: '2026-06-20T15:02:14.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/5943
- author: einknusprigestoast
changes:
- message: Removed DeathSquad
type: Remove
id: 2441
time: '2026-06-20T17:14:12.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/6049
Order: 1
File diff suppressed because one or more lines are too long
@@ -97,13 +97,3 @@ flavor-base-awful = awful
candy-flavor-profile = This one is supposed to taste {$flavor}.
candy-flavor-profile-multiple = This one is supposed to taste {$flavors} and {$lastFlavor}.
candy-flavor-profile-unknown = You have no idea what this one is supposed to taste like.
flavor-complex-tart = tart
flavor-complex-icecream-apple-caramel = like apple pie
flavor-complex-icecream-caramel-fudge = like a liquid caramel brownie
flavor-complex-icecream-cobbler = a dessert with a tasty idenity crisis
flavor-complex-icecream-cookiedough = like a weekend at grandma's
flavor-complex-icecream-neapolitan = like chocolate, vanillia, and cherry
flavor-complex-icecream-rockyroad = like a bumpy highway
flavor-complex-icecream-tower = like a tower of power
flavor-complex-sherbert-rainbow = like a rainbow of flavors
@@ -41,5 +41,3 @@ guide-entry-cargo = Logistics
guide-entry-frequently-used-chemicals = Frequently Used Chemicals
guide-entry-deepfried-recipes = Deep-Fried
guide-entry-frozentreat-recipes = Frozen Treats
@@ -7,3 +7,7 @@ role-subtype-armsdealer = Arms Dealer
role-subtype-asakim = Asakim
role-subtype-ntagent = NTAgent
role-subtype-hitman = Hitman
role-subtype-head-loyalist = Head Loyalist
role-subtype-loyalist = Loyalist
role-subtype-head-insurgent = Head Insurgent
role-subtype-insurgent = Insurgent
@@ -1,83 +0,0 @@
reagent-name-caramel = caramel
reagent-desc-caramel = A sweet, smooth mixture created from heated sugar.
reagent-name-icecream-caramel = caramel ice cream
reagent-desc-icecream-caramel = Sweet, salty, and creamy!
reagent-name-chopped-nuts = chopped nuts
reagent-desc-chopped-nuts = Delicious nuts packed with protien. Much more mixable.
reagent-name-icecream-apple-caramel = apple caramel ice cream
reagent-desc-icecream-apple-caramel = Nothing goes together like caramel, apples, and ice cream.
reagent-name-icecream-caramel-fudge = caramel fudge ice cream
reagent-desc-icecream-caramel-fudge = A deep, rich flavor with caramel to lighten it up!
reagent-name-icecream-cherry = cherry ice cream
reagent-desc-icecream-cherry = Just as sweet as strawberry!
reagent-name-icecream-chocolate = chocolate ice cream
reagent-desc-icecream-chocolate = A classic staple only few can enjoy.
reagent-name-icecream-cobbler = berry cobbler ice cream
reagent-desc-icecream-cobbler = It's a cobbler that got crammed into ice cream which is crammed into a glass.
reagent-name-icecream-coffee = coffee ice cream
reagent-desc-icecream-coffee = A cold pick-me-up.
reagent-name-icecream-cookiedough = cookie dough ice cream
reagent-desc-icecream-cookiedough = A chunky ice cream covered in edible cookie dough!
reagent-name-icecream-greentea = green tea ice cream
reagent-desc-icecream-greentea = A refreshing and soothing dessert.
reagent-name-icecream-mint = mint ice cream
reagent-desc-icecream-mint = Based on the classic mint ice cream with faux chocolate.
reagent-name-icecream-neapolitan = neapolitan Ice Cream
reagent-desc-icecream-neapolitan = An ice cream so simple no one knows its true origins.
reagent-name-icecream-pistachio = pistachio ice cream
reagent-desc-icecream-pistachio = For the real ice cream nuts.
reagent-name-icecream-rockyroad = rocky road ice cream
reagent-desc-icecream-rockyroad = It's an ice cream with a rough texture and rich flavor.
reagent-name-icecream-tower = tower of ice cream
reagent-desc-icecream-tower = Babel has met its match.
reagent-name-icecream-vegan = vegan ice cream
reagent-desc-icecream-vegan = A soy-based ice cream with no animal products.
reagent-name-icecream-watermelon = watermelon ice cream
reagent-desc-icecream-watermelon = The taste of a refreshing Summer in one glass.
reagent-name-sherbet-rainbow = rainbow sherbet
reagent-desc-sherbet-rainbow = The titan of sherbets.
reagent-name-sherbet-lemon = lemon sherbet
reagent-desc-sherbet-lemon = The classic sweet, tart, and sour fruit now really cold.
reagent-name-sherbet-lime = lime sherbet
reagent-desc-sherbet-lime = Lemon sherbert's little brother.
reagent-name-sherbet-orange = orange sherbet
reagent-desc-sherbet-orange = Orange you glad its sherbet?
reagent-name-sherbet-pineapple = pineapple sherbet
reagent-desc-sherbet-pineapple = Not only does it look like a vaction, it taste like it too.
reagent-name-sherbet-raspberry = raspberry sherbert
reagent-desc-sherbet-raspberry = Give them the old razzle dazzle!
reagent-name-slush-blue-raspberry = blue raspberry slush
reagent-desc-slush-blue-raspberry = You can feel your teeth chattering.
reagent-name-slush-cherry = cherry slush
reagent-desc-slush-cherry = While it's rumored to be red, it's typically white.
reagent-name-slush-cola = cola slush
reagent-desc-slush-cola = Space cola in the form of a brain freeze.
reagent-name-tropical-sunday = tropical sunday
reagent-desc-tropical-sunday = Kick back and relax.
@@ -1,98 +0,0 @@
ert-amber-gun-name-patos = Patos bundle
ert-amber-gun-desc-patos = A one-handed submachinegun that punches above its weight. Keep your small magazine capacity in mind.
ert-amber-gun-name-aegun = Advanced energy gun
ert-amber-gun-desc-aegun = One advanced energy gun, for both lethal and non-lethal engagments.
ert-amber-gun-name-mixlaser = Mixed Laser bundle
ert-amber-gun-desc-mixlaser = A disabler SMG together with a Laser Carbine, bundled with a portable recharger.
ert-medkit-name = First aid kit
ert-medkit-desc = A simple first aid kit, dont get shoot too hard.
ert-brutekit-name = Brute kit
ert-brutekit-desc = A brute kit, dont get shot with lasers.
ert-drozdkit-name = Drozd bundle
ert-drozdkit-desc = A heavy submachinegun bundled with different ammo types, a NanoTrasen armaments classic.
ert-lecterkit-name = Lecter bundle
ert-lecterbundle-desc = A high-grade assault rifle packaged with a handful of magazines, precise and packs a punch, but quite bulky.
ert-IK30kit-name = IK-30 bundle
ert-IK30kit-desc = A magazine fed energy weapon packaged with a handful of magazines, for when recharging your energy gun is not an option.
ert-AutoInjectorLight-name = Auto Injectors
ert-AutoInjectorLight-desc = A handful of Autoinjectors and a roll of Gauze for bad days.
ert-AdvancedTopicals-name = Advanced Topicals
ert-AdvancedTopicals-desc = Sutures, Mesh and Bloodbags. A lot of Sutures, Mesh and Bloodbags.
ert-CombatMedkit-name = Combat Medkit
ert-CombatMedkit-desc = A combat medkit, should get you through a gunfight or two.
ert-LeaderRedOfficer-name = Officers Bundle
ert-LeaderRedOfficer-desc = A kit containing a Universal Handgun, a Advanced Laser Pistol and a trench whistle. AVANTI!
ert-LeaderRedColdCannon-name = I.C.E.E bundle
ert-LeaderRedColdCannon-desc = A I.C.E.E cannon bundled together with a portable recharger.
ert-LeaderRedWT-name = WT550 bundle
ert-LeaderRedWT-desc = The classic WT550 submachinegun, bundled together with a few magazines and two telescopic shields.
ert-enforcerkit-name = Enforcer bundle
ert-enforcerkit-desc = A Enforcer bundled with 3 boxes of buckshot.
ert-GammaOfficer-name = Officers Bundle
ert-GammaOfficer-desc = A kit containing a N1984 and a trench whistle. "Retreat? We just got here"
ert-GammaLeaderAntelope-name = Antelope bundle
ert-GammaLeaderAntelope-desc = A bundle containing a Antelope automatic shotgun and 5 drums to feed it with. Ration your ammo carefully.
ert-LeaderAtrides-name = Atreides Bundle
ert-LeaderAtrides-desc = A Atreides bundled together with two telescopic shields and 5 magazines.
ert-GammaPulseRifle-name = Pulse Rifle
ert-GammaPulseRifle-desc = A singular pulse rifle. Corporate asks you to not take this option.
ert-GammaSecCombatkit-name = Combat Medkit bundle
ert-GammaSecCombatkit-desc = A Combat Medkit bundled together with some additional auto-injectors.
ert-GammaSecStimkit-name = Stimulant bundle
ert-GammaSecStimkit-desc = A jetinjector bundled together with 2 bottles of Ephedrine and one bottle of Omnizine. Dont ask about the legality
ert-GammaSecliquidkit-name = Liquid medicine bundle
ert-GammaSecliquidkit-desc = A jetinjector bundled together with a box full of highly fragile medicine bottles.
ert-GammaWTkit-name = WT550 bundle
ert-GammaWTkit-desc = The classic WT550 bundled together with 5 magazines and 2 telescopic shields.
ert-enforcerkitspecial-name = Enforcer bundle
ert-enforcerkitspecial-desc = An Enforcer bundled together with buckshot, incendiary shells and uranium ammunition.
ert-Immolatorkit-name = Immolator bundle
ert-Immolatorkit-desc = The original firestarter bundled together with a portable recharger and an energy gun.
ert-IK60kit-name = IK-60 bundle
ert-IK60kit-desc = IK-60-M bundled together with 4 Laser magazines. Watch your ammo consumption.
ert-GammaC4-name = C4 box
ert-GammaC4-desc = 4 timed charges of plastic breaching explosives.
ert-GammaThermals-name = Special Forces gasmask
ert-GammaThermals-desc = A gasmask with both a thermal and a nightvision lense.
ert-GammaJets-name = Jetpack bundle
ert-GammaJets-desc = A jetpack bundle containing a handheld mass scanner, a better cell for it and a pair of pocket breathinggastanks.
ert-GammaNadesHE-name = Explosive grenades
ert-GammaNadesHE-desc = Three explosive grenades for the usage against soft targets.
ert-GammaSmokes-name = Smoke grenades
ert-GammaSmokes-desc = Three smoke grenades to obscure vision.
ert-GammaIncend-name = Incendiary grenades
ert-GammaIncend-desc = Two Incendiary grenades. Keep in mind your suit protects less against these.
ert-GammaEMP-name = Electro Magnetic Pulse Grenades
ert-GammaEMP-desc = A pair of EMP grenades, incase you have to disable Cyborgs or Lasers.
@@ -0,0 +1,41 @@
uprising-announcement-nuke-announcement = Automated risk management systems have flagged your station as posing a threat to NanoTrasen. Contracts will be terminated in {$time} minutes unless the situation resolves.
uprising-announcement-first-warning = Automated risk management systems still continue to flag your station as posing a threat to NanoTrasen. Please intervene within {$time} minutes.
uprising-announcement-impending-warning = Automated risk management systems have initiated a task in the contract termination subsystem for your station. The decision will be rendered final in {$time} minutes.
uprising-announcement-final-warning = Contract termination will begin in {$time} minutes.
uprising-announcement-nuke-armed = Attention! The threat to NanoTrasen will be eliminated using the station's self-destruct mechanism {$location}. {$time} seconds until detonation. Glory to NanoTrasen!
uprising-announcement-start-victory-announcement-Insurgent =
Viva la revolución! Station hijacking measures have been initiated {$location} and will complete in {$time} seconds. Do not resist, your liberation will come.
.sender = Insurgent Communications
.color = DarkSalmon
uprising-announcement-start-victory-announcement-Loyalist =
The station is loyal to NanoTrasen. Transmission to Central Command has been initiated {$location} and will complete in {$time} seconds. Glory to NanoTrasen!
.sender = Loyalist Communications
.color = CornflowerBlue
uprising-announcement-victory-announcement-Insurgent =
Viva viva la revolución! The station belongs to the masses now.
.sender = Insurgent Communications
.color = DarkSalmon
uprising-announcement-victory-announcement-Loyalist =
Automated risk management systems have no longer deemed your station a threat to NanoTrasen. Contracts will be retained.
.sender = Central Command
.color = Gold
uprising-announcement-interrupted-victory-announcement-Insurgent =
Station hijacking measures have been interrupted.
.sender = Insurgent Communications
.color = DarkSalmon
uprising-announcement-interrupted-victory-announcement-Loyalist =
Transmission to Central Command has been interrupted.
.sender = Loyalist Communications
.color = CornflowerBlue
@@ -0,0 +1,22 @@
antag-HeadLoyalist =
.name = Head Loyalist
.objective = Protect the interests of NanoTrasen against the insurgents.
.greeting =
You are a Head Loyalist.
Protect all of Command, get the crew on your side and declare the station's loyalty.
antag-Loyalist =
.issuer = Loyalty
.briefing = Protect all of Command, get the crew on your side and declare the station's loyalty.
antag-HeadInsurgent =
.name = Head Insurgent
.objective = Rebel against NanoTrasen. Down with the bourgeoisie!
.greeting =
You are a Head Insurgent.
Assassinate, capture or convert all of Command and take over the station.
Viva la revolución!
antag-Insurgent =
.issuer = Insurgency
.briefing = Assassinate, capture or convert all of Command and take over the station.
@@ -0,0 +1 @@
uprising-conversion-join-side = Press again to switch sides.
@@ -0,0 +1,3 @@
preset-Uprising =
.title = Uprising
.description = The crew is at odds with each other.
@@ -0,0 +1,16 @@
uprising-outcome-none = The station was scuttled by NanoTrasen, and neither side could stop it in time.
uprising-outcome-Insurgent-full = The station was taken over by the insurgents. Viva la revolución!
uprising-outcome-Insurgent-partial = The insurgents were in the middle of taking over the station, but it was too late.
uprising-outcome-Loyalist-full = The station managed to prove its loyalty to NanoTrasen. Glory to NanoTrasen!
uprising-outcome-Loyalist-partial = The loyalists were in the middle of proving the station's loyalty to NanoTrasen, but it was too late.
uprising-leads = Our leads for this round were:
uprising-leads-user =
.Insurgent = - [color=white]{$name}[/color], a [color=DarkSalmon]Head Insurgent[/color] played by {$user}
.Loyalist = - [color=white]{$name}[/color], a [color=CornflowerBlue]Head Loyalist[/color] played by {$user}
.Unknown = - [color=white]{$name}[/color], played by {$user}
uprising-members =
.Insurgent = Our [color=DarkSalmon]Insurgent[/color]s were:
.Loyalist = Our [color=CornflowerBlue]Loyalist[/color]s were:
uprising-members-user = - [color=white]{$name}[/color], played by {$user}
@@ -0,0 +1,15 @@
admin-verb-make-HeadInsurgent =
.text = Make Head Insurgent
.message = Makes the target into a Head Insurgent
admin-verb-make-HeadLoyalist =
.text = Make Head Loyalist
.message = Makes the target into a Head Loyalist
uprising-disarm-verb =
.Insurgent = Stop Hijacking
.Loyalist = Stop Transmission
uprising-arm-verb =
.Insurgent = Start Hijacking
.Loyalist = Start Transmission
@@ -14,12 +14,10 @@
ClothingUniformNightclubSuit: 2 #imp
ClothingUniformNightclubSuitSkirt: 2 #imp
ClothingUniformJumpsuitBartenderPurple: 2
ClothingUniformJumpsuitSodaJerk: 2 # DeltaV
ClothingShoesColorBlack: 2
ClothingOuterArmorDuraVest: 2 # DeltaV - ClothingOuterArmorBasicSlim replaced in favour of stabproof vest
ClothingOuterVest: 2
ClothingBeltBandolier: 2
ClothingEyesGlassesSunglasses: 2
ClothingHeadHatSodaJerkCap: 2 # DeltaV
contrabandInventory:
ToyFigurineBartender: 1
@@ -46,15 +46,11 @@
DrinkJaegermisterBottleFull: 5 # Den - Jaegerminsteeeer!
DrinkWineBottleFull: 5
DrinkChampagneBottleFull: 2 #because the premium drink
DrinkSojuBottleFull: 2 # DeltaV - Soju bottle
DrinkSakeBottleFull: 3
DrinkBeerCan: 5
DrinkWineCan: 5
# Begin DeltaV additions
DrinkSojuBottleFull: 2 # Soju bottle
DrinkAngobittersBottleFull: 3 # Angostura Bitters Bottle
DrinkCaramelBottleFull: 3 # Caramel for ice cream stuff
GlassChoppedNuts: 5 # Metaglass of chopped nuts; Here as a stop-gap until we make pistachios growable
# End DeltaV additions
DrinkAngobittersBottleFull: 3 # DeltaV - Angostura Bitters Bottle
contrabandInventory:
ChemistryBottleEthanol: 3
DrinkBottleOfNothingFull: 1
@@ -716,6 +716,7 @@
- type: GuideHelp # DeltaV guide
guides:
- AlertProcedure
- type: UprisingConsole # DeltaV - uprising
- type: entity
parent: ComputerComms
@@ -15,8 +15,6 @@
name: guide-entry-drinks
text: "/ServerInfo/Guidebook/ReferenceTables/Drinks.xml"
filterEnabled: true
children: # DeltaV - Adding section for our new ice cream catalog to make it easier to search
- FrozenTreats
- type: guideEntry
id: FoodRecipes
@@ -447,7 +447,6 @@
loadouts:
- BartenderHead
- BartenderBowler
- SodaJerkCap #DeltaV - Adding retro style outfit for ice cream connoisseurs
- type: loadoutGroup
id: BartenderJumpsuit
@@ -462,7 +461,6 @@
- ClothingUniformSeniorBartender
- ClothingUniformSeniorBartenderSkirt
# End Imp additions
- SodaJerkUniform #DeltaV - Adding retro style outfit for ice cream connoisseurs
- type: loadoutGroup
id: BartenderOuterClothing
@@ -0,0 +1,77 @@
- type: entity
abstract: true
parent: BaseAction
id: ActionUprisingOfferConversion
name: Offer Conversion
description: Offer to let someone join your side.
components:
- type: Action
useDelay: 30
itemIconStyle: NoItem
icon:
sprite: _DV/Misc/uprising.rsi
state: conversion
- type: TargetAction
- type: EntityTargetAction
whitelist:
components:
- HumanoidAppearance
- type: entity
parent: ActionUprisingOfferConversion
id: ActionLoyalistOfferConversion
components:
- type: EntityTargetAction
event: !type:ConversionOfferActionEvent
incompatibleMindRoleTypes:
- Content.Shared._DV.Roles.LoyalistRoleComponent
- Content.Shared._DV.Roles.UprisingInconvertibleRoleComponent
acceptAction: ActionLoyalistAcceptConversion
- type: entity
parent: ActionUprisingOfferConversion
id: ActionInsurgentOfferConversion
components:
- type: EntityTargetAction
event: !type:ConversionOfferActionEvent
incompatibleMindRoleTypes:
- Content.Shared._DV.Roles.InsurgentRoleComponent
- Content.Shared._DV.Roles.UprisingInconvertibleRoleComponent
acceptAction: ActionInsurgentAcceptConversion
- type: entity
abstract: true
parent: BaseAction
id: ActionUprisingAcceptConversion
name: Join Side
description: Join the side of whoever's trying to recruit you. You can only do this for 30 seconds after being offered.
components:
- type: Action
itemIconStyle: NoItem
icon:
sprite: _DV/Misc/uprising.rsi
state: conversion_question
- type: InstantAction
- type: ConfirmableAction
popup: uprising-conversion-join-side
- type: ESTimedDespawn
lifetime: 30
- type: DeleteOnPerformedAction
- type: entity
parent: ActionUprisingAcceptConversion
id: ActionInsurgentAcceptConversion
components:
- type: InstantAction
event: !type:ConversionAcceptActionEvent
mindRole: MindRoleInsurgent
removeMindRole: MindRoleLoyalist
- type: entity
parent: ActionUprisingAcceptConversion
id: ActionLoyalistAcceptConversion
components:
- type: InstantAction
event: !type:ConversionAcceptActionEvent
mindRole: MindRoleLoyalist
removeMindRole: MindRoleInsurgent
@@ -1,428 +0,0 @@
- type: thiefBackpackSet
id: ERTPatosBundle
name: ert-amber-gun-name-patos
description: ert-amber-gun-desc-patos
sprite:
sprite: _DV/Objects/Weapons/Guns/SMGs/patos.rsi
state: icon
content:
- WeaponSubMachineGunPatos
- MagazinePistolHighCapacity
- MagazinePistolHighCapacity
- MagazinePistolHighCapacity
- MagazinePistolHighCapacity
- type: thiefBackpackSet
id: ERTaegunBundle
name: ert-amber-gun-name-aegun
description: ert-amber-gun-desc-aegun
sprite:
sprite: _DV/Objects/Weapons/Guns/Battery/energygunadvanced.rsi
state: icon
content:
- WeaponEnergyGunAdvanced
- type: thiefBackpackSet
id: ERTmixlaserBundle
name: ert-amber-gun-name-mixlaser
description: ert-amber-gun-desc-mixlaser
sprite:
sprite: Objects/Weapons/Guns/Battery/laser_gun.rsi
state: icon
content:
- WeaponLaserCarbine
- WeaponDisablerSMG
- PortableRecharger
- type: thiefBackpackSet
id: ERTMedkit
name: ert-medkit-name
description: ert-medkit-desc
sprite:
sprite: Objects/Specific/Medical/firstaidkits.rsi
state: firstaid
content:
- MedkitFilled
- type: thiefBackpackSet
id: ERTBrutekit
name: ert-brutekit-name
description: ert-brutekit-desc
sprite:
sprite: Objects/Specific/Medical/firstaidkits.rsi
state: brutekit
content:
- MedkitBruteFilled
- type: thiefBackpackSet
id: ERTLecterkit
name: ert-lecterkit-name
description: ert-lecterbundle-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Rifles/lecter.rsi
state: icon
content:
- WeaponRifleLecter
- MagazineRifle
- MagazineRifle
- MagazineRifle
- MagazineRifle
- MagazineRifle
- type: thiefBackpackSet
id: ERTDrozdkit
name: ert-drozdkit-name
description: ert-drozdkit-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/SMGs/drozd.rsi
state: icon
content:
- WeaponSubMachineGunDrozd
- MagazinePistolSubMachineGun
- MagazinePistolSubMachineGun
- MagazinePistolSubMachineGunRubber
- MagazinePistolSubMachineGunRubber
- MagazinePistolSubMachineGunUranium
- MagazinePistolSubMachineGunUranium
- MagazinePistolSubMachineGunUranium
- type: thiefBackpackSet
id: ERTLaserIK30kit
name: ert-IK30kit-name
description: ert-IK30kit-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Rifles/lasercarbine.rsi
state: icon
content:
- WeaponRifleLaser
- MagazineLaser
- MagazineLaser
- MagazineLaser
- MagazineLaser
- MagazineLaser
- type: thiefBackpackSet
id: ERTEnforcerkit
name: ert-enforcerkit-name
description: ert-enforcerkit-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Shotguns/enforcer.rsi
state: icon
content:
- WeaponShotgunEnforcer
- BoxLethalshot
- BoxLethalshot
- BoxLethalshot
- type: thiefBackpackSet
id: ERTCombatMedkit
name: ert-CombatMedkit-name
description: ert-CombatMedkit-desc
sprite:
sprite: Objects/Specific/Medical/firstaidkits.rsi
state: blackkit
content:
- MedkitCombatFilled
- type: thiefBackpackSet
id: ERTAutoInjectorLight
name: ert-AutoInjectorLight-name
description: ert-AutoInjectorLight-desc
sprite:
sprite: Objects/Specific/Medical/medipen.rsi
state: punctpen
content:
- BurnAutoInjector
- BurnAutoInjector
- PunctAutoInjector
- PunctAutoInjector
- Gauze
- type: thiefBackpackSet
id: ERTAdvancedTopicals
name: ert-AdvancedTopicals-name
description: ert-AdvancedTopicals-desc
sprite:
sprite: Objects/Specific/Medical/firstaidkits.rsi
state: advkit
content:
- MedicatedSuture
- RegenerativeMesh
- MedkitAdvancedFilled
- type: thiefBackpackSet
id: ERTLeaderOfficerRed
name: ert-LeaderRedOfficer-name
description: ert-LeaderRedOfficer-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Pistols/universal.rsi
state: icon
content:
- WeaponPistolUniversal
- SyndicateWhistle
- MagazineUniversalMagnum
- MagazineUniversalMagnum
- MagazineUniversalMagnum
- WeaponAdvancedLaser
- Binoculars
- type: thiefBackpackSet
id: ERTLeaderWTRed
name: ert-LeaderRedWT-name
description: ert-LeaderRedWT-desc
sprite:
sprite: Objects/Weapons/Guns/SMGs/wt550.rsi
state: icon
content:
- WeaponSubMachineGunWt550
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- TelescopicShield
- TelescopicShield
- type: thiefBackpackSet
id: ERTLeaderColdCannonRed
name: ert-LeaderRedColdCannon-name
description: ert-LeaderRedColdCannon-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Battery/cold_cannon.rsi
state: icon
content:
- WeaponColdCannon
- PortableRecharger
- type: thiefBackpackSet
id: ERTLeaderGammaAtrides
name: ert-LeaderAtrides-name
description: ert-LeaderAtrides-desc
sprite:
sprite: Objects/Weapons/Guns/SMGs/atreides.rsi
state: icon
content:
- WeaponSubMachineGunAtreides
- MagazinePistolSubMachineGun
- MagazinePistolSubMachineGun
- MagazinePistolSubMachineGun
- MagazinePistolSubMachineGun
- MagazinePistolSubMachineGun
- TelescopicShield
- TelescopicShield
- type: thiefBackpackSet
id: ERTLeaderGammaPulseRifle
name: ert-GammaPulseRifle-name
description: ert-GammaPulseRifle-desc
sprite:
sprite: Objects/Weapons/Guns/Battery/pulse_rifle.rsi
state: icon
content:
- WeaponPulseRifle
- type: thiefBackpackSet
id: ERTLeaderGammaAntelope
name: ert-GammaLeaderAntelope-name
description: ert-GammaLeaderAntelope-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Shotguns/Antelope.rsi
state: icon
content:
- WeaponShotgunAntelope
- MagazineShotgun
- MagazineShotgun
- MagazineShotgun
- MagazineShotgun
- MagazineShotgun
- type: thiefBackpackSet
id: ERTLeaderOfficerGamma
name: ert-GammaOfficer-name
description: ert-GammaOfficer-desc
sprite:
sprite: Objects/Weapons/Guns/Pistols/N1984.rsi
state: icon
content:
- SyndicateWhistle
- WeaponPistolN1984
- MagazineMagnum
- MagazineMagnum
- MagazineMagnum
- MagazineBoxMagnum
- MagazineBoxMagnum
- Binoculars
- type: thiefBackpackSet
id: ERTGammaSecCombatkit
name: ert-GammaSecCombatkit-name
description: ert-GammaSecCombatkit-desc
sprite:
sprite: Objects/Specific/Medical/firstaidkits.rsi
state: blackkit
content:
- MedkitCombatFilled
- PunctAutoInjector
- PyraAutoInjector
- type: thiefBackpackSet
id: ERTGammaSecStimkit
name: ert-GammaSecStimkit-name
description: ert-GammaSecStimkit-desc
sprite:
sprite: Objects/Specific/Medical/advanced_jetinjector.rsi
state: jetinjector_base
content:
- AdvancedJetInjector
- ChemistryBottleEphedrine
- ChemistryBottleEphedrine
- ChemistryBottleOmnizine
- type: thiefBackpackSet
id: ERTGammaSecChemkit
name: ert-GammaSecliquidkit-name
description: ert-GammaSecliquidkit-desc
sprite:
sprite: Objects/Specific/Medical/jetinjector.rsi
state: jetinjector_base
content:
- AdvancedJetInjector
- BoxBottleMedicineBasic
- type: thiefBackpackSet
id: ERTGammaSecWT
name: ert-GammaWTkit-name
description: ert-GammaWTkit-desc
sprite:
sprite: Objects/Weapons/Guns/SMGs/wt550.rsi
state: icon
content:
- WeaponSubMachineGunWt550
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- MagazinePistolSubMachineGunTopMounted
- TelescopicShield
- TelescopicShield
- type: thiefBackpackSet
id: ERTGammaSecEnforcer
name: ert-enforcerkitspecial-name
description: ert-enforcerkitspecial-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Shotguns/enforcer.rsi
state: icon
content:
- WeaponShotgunEnforcer
- BoxLethalshot
- BoxLethalshot
- BoxShotgunUranium
- BoxShotgunUranium
- BoxShotgunIncendiary
- BoxShotgunIncendiary
- type: thiefBackpackSet
id: ERTGammaSecImmolator
name: ert-Immolatorkit-name
description: ert-Immolatorkit-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Battery/multi_lens_immolator.rsi
state: icon
content:
- WeaponImmolatorMulti
- WeaponEnergyGun
- PortableRecharger
- type: thiefBackpackSet
id: ERTGammaSecIK60
name: ert-IK60kit-name
description: ert-IK60kit-desc
sprite:
sprite: _DV/Objects/Weapons/Guns/Rifles/lasercarbineert.rsi
state: icon
content:
- WeaponRifleLaserERT
- MagazineLaser
- MagazineLaser
- MagazineLaser
- MagazineLaser
- type: thiefBackpackSet
id: ERTGammaC4
name: ert-GammaC4-name
description: ert-GammaC4-desc
sprite:
sprite: Objects/Weapons/Bombs/c4.rsi
state: icon
content:
- BoxC4
- type: thiefBackpackSet
id: ERTGammaThermals
name: ert-GammaThermals-name
description: ert-GammaThermals-desc
sprite:
sprite: _White/Clothing/Eyes/Goggles/thermal.rsi
state: icon
content:
- ClothingMaskGasDeathSquad
- type: thiefBackpackSet
id: ERTGammaJets
name: ert-GammaJets-name
description: ert-GammaJets-desc
sprite:
sprite: _DV/Objects/Tanks/Jetpacks/blue.rsi
state: icon
content:
- HandHeldMassScanner
- JetpackBlueFilled
- PowerCellMicroreactor
- DoubleEmergencyOxygenTankFilled
- DoubleEmergencyNitrogenTankFilled
- type: thiefBackpackSet
id: ERTGammaHE
name: ert-GammaNadesHE-name
description: ert-GammaNadesHE-desc
sprite:
sprite: Objects/Weapons/Grenades/grenade.rsi
state: icon
content:
- ExGrenade
- ExGrenade
- ExGrenade
- type: thiefBackpackSet
id: ERTGammaSmoke
name: ert-GammaSmokes-name
description: ert-GammaSmokes-desc
sprite:
sprite: Objects/Weapons/Grenades/smoke.rsi
state: icon
content:
- SmokeGrenade
- SmokeGrenade
- SmokeGrenade
- type: thiefBackpackSet
id: ERTGammaIncend
name: ert-GammaIncend-name
description: ert-GammaIncend-desc
sprite:
sprite: Objects/Weapons/Grenades/pyrogrenade.rsi
state: icon
content:
- GrenadeIncendiary
- GrenadeIncendiary
- type: thiefBackpackSet
id: ERTGammaEMP
name: ert-GammaEMP-name
description: ert-GammaEMP-desc
sprite:
sprite: Objects/Weapons/Grenades/empgrenade.rsi
state: icon
content:
- EmpGrenade
- EmpGrenade
@@ -1,81 +0,0 @@
- type: entity
id: ClothingBackpackDeathSquadFilledBase
parent: ClothingBackpackDeathSquad
suffix: Base
components:
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
children:
- id: WelderExperimental
- id: ToolDebug
- id: Multitool
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: HandHeldMassScanner
- id: PinpointerNuclear
- id: DoorRemoteCustom
- type: entity
id: ClothingBackpackDeathSquadFilledBlack
parent: ClothingBackpackDeathSquad
suffix: Black
components:
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
children:
- id: WelderExperimental
- id: ToolDebug
- id: Multitool
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: HandHeldMassScanner
- id: PinpointerNuclear
- id: DoorRemoteCustom
- id: WeaponPulseRifle
- id: ExGrenade
- id: ExGrenade
- id: ExGrenade
- id: ExGrenade
- id: ExGrenade
- id: BoxC4
- id: SpeedLoaderMagnumUranium
- id: SpeedLoaderMagnumUranium
- type: entity
id: ClothingBackpackDeathSquadFilledEpsilon
parent: ClothingBackpackDeathSquad
suffix: Epsilon
components:
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
children:
- id: WelderExperimental
- id: ToolDebug
- id: Multitool
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: SpeedLoaderMagnum
- id: HandHeldMassScanner
- id: PinpointerNuclear
- id: DoorRemoteCustom
- id: WeaponShotgunAntelope
- id: MagazineShotgunBeanbag
- id: MagazineShotgunBeanbag
- id: MagazineShotgunBeanbag
- id: MagazineShotgunBeanbag
- id: MagazineShotgunBeanbag
- id: MagazineShotgunBeanbag
- id: BoxHandcuff
- id: MagazineShotgun
- id: MagazineShotgun
- id: MagazineShotgun
@@ -123,24 +123,3 @@
- id: SpeedLoaderMagnum
amount: !type:RangeNumberSelector
range: 0, 2
- type: entity
id: ClothingBeltMilitaryWebbingERTMedicine
parent: ClothingBeltMilitaryWebbingERT
suffix: Filled
components:
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
children:
- id: MedkitCombatFilled
- id: AirlossAutoInjector
- id: BurnAutoInjector
- id: BruteAutoInjector
- id: PunctAutoInjector
- id: PyraAutoInjector
- id: AirlossAutoInjector
- id: BurnAutoInjector
- id: BruteAutoInjector
- id: PunctAutoInjector
- id: PyraAutoInjector
@@ -510,14 +510,3 @@
tags:
- PetWearable
- CorgiWearable
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatSodaJerkCap
name: soda jerk cap
description: I was a wimp before the soda jerk.
components:
- type: Sprite
sprite: _DV/Clothing/Head/Hats/SodaJerkCap.rsi
- type: Clothing
sprite: _DV/Clothing/Head/Hats/SodaJerkCap.rsi
@@ -772,15 +772,3 @@
sprite: _DV/Clothing/Uniforms/Jumpsuit/WrestlerCostumeBlue.rsi
- type: Clothing
sprite: _DV/Clothing/Uniforms/Jumpsuit/WrestlerCostumeBlue.rsi
- type: entity
parent: ClothingUniformBase
id: ClothingUniformJumpsuitSodaJerk
name: soda jerk jumpsuit
description: Now I'm a jerk, and now everyone loves me!
components:
- type: Sprite
sprite: _DV/Clothing/Uniforms/Jumpsuit/SodaJerk.rsi
- type: Clothing
sprite: _DV/Clothing/Uniforms/Jumpsuit/SodaJerk.rsi
@@ -15,21 +15,3 @@
- type: Sprite
sprite: _DV/Objects/Consumable/Drinks/angobitters.rsi
- type: Sealable
- type: entity
parent: [DrinkVisualsOpenable, DrinkBottlePlasticSmallBaseFull]
id: DrinkCaramelBottleFull
name: caramel bottle
description: A bottle of what is essentially molten sugar with enough water to keep it somewhat fluid.
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: Caramel
Quantity: 50
- type: Sprite
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/caramel-bottle.rsi
- type: Label
currentLabel: reagent-name-caramel
@@ -1,406 +0,0 @@
# I SCREAM, YOU SCREAM, WE ALL SCREAM FOR ICE CREAM
- type: entity
parent: DrinkGlass
id: DrinkIceCreamAppleCaramel
suffix: apple caramel ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamAppleCaramel
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-applecaramel.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamCaramel
suffix: caramel ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamCaramel
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-caramel.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamCaramelFudge
suffix: caramel fudge ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamCaramelFudge
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-caramelfudge.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamCherry
suffix: cherry ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamCherry
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-cherry.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamChocolate
suffix: chocolate ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamChocolate
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-chocolate.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamBerryCobbler
suffix: cobbler's ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamBerryCobbler
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-cobblers.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamCoffee
suffix: coffee ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamCoffee
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-coffee.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamCookieDough
suffix: cookie dough ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamCookieDough
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-cookiedough.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamGreenTea
suffix: green tea ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamGreenTea
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-greentea.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamMint
suffix: mint ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamMint
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-mint.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamNeapolitan
suffix: neapolitan ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamNeapolitan
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-neapolitan.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamPistachio
suffix: pistachio ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamPistachio
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-pistachio.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamRockyRoad
suffix: rocky road ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamRockyRoad
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-rockyroad.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamTower
suffix: tower of ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamTower
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-tower.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamVegan
suffix: vegan ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamVegan
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-vegan.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamWatermelon
suffix: watermelon ice cream
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamWatermelon
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-watermelon.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSherbetRainbow
suffix: rainbow sherbet
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSherbetRainbow
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-rainbow.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkIceCreamSherbetlemon
suffix: lemon sherbet
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSherbetLemon
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-lemon.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSherbetLime
suffix: lime sherbet
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSherbetLime
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-lime.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSherbetOrange
suffix: orange sherbet
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSherbetOrange
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-orange.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSherbetPineapple
suffix: pineapple sherbet
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSherbetPineapple
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-pineapple.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSherbetRaspberry
suffix: raspberry sherbet
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSherbetRaspberry
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-raspberry.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSlushBlueRaspberry
suffix: blue raspberry slush
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: SlushBlueRaspberry
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/slush-blueraspberry.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSlushCherry
suffix: cherry slush
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: SlushCherry
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/slush-cherry.rsi
state: icon
- type: entity
parent: DrinkGlass
id: DrinkSlushCola
suffix: cola slush
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: SlushCola
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/slush-cola.rsi
state: icon
- type: entity
parent: DrinkGlass
id: IceCreamSundaeTropical
suffix: tropical sundae
components:
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: IceCreamSundaeTropical
Quantity: 30
- type: Icon
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/tropicalsunday.rsi
state: icon
# Stop-gap for making chopped nuts available; In a later edition, going to make pistachios growable and grindable
# to get chopped nuts (including grinding Sweeties packs)
- type: entity
id: GlassChoppedNuts
parent: DrinkGlass
suffix: chopped nuts
components:
- type: Label
currentLabel: reagent-name-chopped-nuts
- type: SolutionContainerManager
solutions:
drink:
reagents:
- ReagentId: ChoppedNuts
Quantity: 30
@@ -1,10 +0,0 @@
- type: entity
parent: WeaponEnergyTurretStationMachineCircuitboardBase
id: WeaponEnergyTurretCentralCommandTurretboard
suffix: CentComm
components:
- type: Sprite
sprite: Objects/Misc/module.rsi
state: command
- type: MachineBoard
prototype: WeaponEnergyTurretCentralCommand
@@ -1,10 +0,0 @@
- type: entity
parent: WeaponEnergyTurretStationControlPanelElectronicsBase
id: WeaponEnergyTurretCentralCommandControlPanelElectronics
suffix: CentComm
components:
- type: Sprite
sprite: Objects/Misc/module.rsi
state: command
- type: ElectronicsBoard
prototype: WeaponEnergyTurretCentralCommandControlPanel
@@ -1,158 +0,0 @@
- type: entity
parent: ToolboxThief
id: ERTGearSelectorGunAmberSec
name: ERT Equipment Selector
suffix: Amber, Sec, Guns
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTPatosBundle
- ERTaegunBundle
- ERTmixlaserBundle
- type: entity
parent: ToolboxThief
id: ERTGearSelectorMedsAmber
name: ERT Equipment Selector
suffix: Amber, Sec, Meds
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTMedkit
- ERTBrutekit
- type: entity
parent: ToolboxThief
id: ERTGearSelectorGunRedSec
name: ERT Equipment Selector
suffix: Red, Sec, Guns
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTLaserIK30kit
- ERTDrozdkit
- ERTLecterkit
- ERTEnforcerkit
- type: entity
parent: ToolboxThief
id: ERTGearSelectorMedsRed
name: ERT Equipment Selector
suffix: Red, Sec, Meds
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTAutoInjectorLight
- ERTAdvancedTopicals
- ERTCombatMedkit
- type: entity
parent: ToolboxThief
id: ERTGearSelectorLeaderRed
name: ERT Equipment Selector
suffix: Red, Leader
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTLeaderOfficerRed
- ERTLeaderWTRed
- ERTLeaderColdCannonRed
- type: entity
parent: ToolboxThief
id: ERTGearSelectorGunGammaSec
name: ERT Equipment Selector
suffix: Gamma, Gun, Sec
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTGammaSecEnforcer
- ERTGammaSecWT
- ERTGammaSecImmolator
- ERTGammaSecIK60
- type: entity
parent: ToolboxThief
id: ERTGearSelectorMedsGammaSec
name: ERT Equipment Selector
suffix: Gamma, Meds, Sec
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTGammaSecCombatkit
- ERTGammaSecStimkit
- ERTGammaSecChemkit
- type: entity
parent: ToolboxThief
id: ERTGearSelectorLeaderGamma
name: ERT Equipment Selector
suffix: Gamma, Leader
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTLeaderOfficerGamma
- ERTLeaderGammaAntelope
- ERTLeaderGammaAtrides
- ERTLeaderGammaPulseRifle
- type: entity
parent: ToolboxThief
id: ERTGearSelectorGammaSecUtility
name: ERT Equipment Selector
suffix: Gamma, Sec, Utility
description: "A small item teleporting a pre-determined set of equipment into the ERT members hands"
components:
- type: Sprite
sprite: _Goobstation/Objects/Devices/unique_teleporters.rsi
state: standard
- type: ThiefUndeterminedBackpack
maxSelectedSets: 1
possibleSets:
- ERTGammaC4
- ERTGammaThermals
- ERTGammaJets
- ERTGammaHE
- ERTGammaSmoke
- ERTGammaIncend
- ERTGammaEMP
@@ -15,23 +15,3 @@
- SmallMobMask # same as mouse, lets it go under doors but not phase through walls
layer:
- SmallMobLayer
- type: entity
parent: WeaponEnergyTurretStationBase
id: WeaponEnergyTurretCentralCommand
suffix: CentComm
components:
- type: AccessReader
access: [["CentralCommand"]]
- type: StationAiTurret
- type: TurretTargetSettings
exemptAccessLevels:
- CentralCommand
- ERT
- type: Machine
board: WeaponEnergyTurretCentralCommandTurretboard
- type: DeviceNetwork
receiveFrequencyId: TurretControl
transmitFrequencyId: Turret
- type: StationAiVision
range: 0
@@ -1,23 +0,0 @@
- type: entity
parent: WeaponEnergyTurretStationControlPanelBase
id: WeaponEnergyTurretCentralCommandControlPanel
suffix: CentComm
components:
- type: AccessReader
access: [["CentralCommand"]]
- type: ContainerFill
containers:
board:
- WeaponEnergyTurretCentralCommandControlPanelElectronics
- type: StationAiVision #DeltaV
range: 0
- type: TurretTargetSettings
exemptAccessLevels:
- CentralCommand
- ERT
- type: DeployableTurretController
accessGroups:
- General
accessLevels:
- CentralCommand
- ERT
@@ -1,44 +0,0 @@
- type: flavor
id: tart
flavorType: Complex
description: flavor-complex-tart
- type: flavor
id: IceCreamAppleCaramel
flavorType: Complex
description: flavor-complex-icecream-apple-caramel
- type: flavor
id: IceCreamCaramelFudge
flavorType: Complex
description: flavor-complex-icecream-caramel-fudge
- type: flavor
id: IceCreamCobbler
flavorType: Complex
description: flavor-complex-icecream-cobbler
- type: flavor
id: IceCreamCookieDough
flavorType: Complex
description: flavor-complex-icecream-cookiedough
- type: flavor
id: IceCreamNeapolitan
flavorType: Complex
description: flavor-complex-icecream-neapolitan
- type: flavor
id: IceCreamRockyRoad
flavorType: Complex
description: flavor-complex-icecream-rockyroad
- type: flavor
id: IceCreamTower
flavorType: Complex
description: flavor-complex-icecream-tower
- type: flavor
id: IceCreamRainbow
flavorType: Complex
description: flavor-complex-icecream-rainbow
@@ -0,0 +1,26 @@
- type: entity
parent: BaseGameRule
id: UprisingRule
components:
- type: GameRule
minPlayers: 10
- type: UprisingRule
- type: AntagSelection
selectionTime: IntraPlayerSpawn
definitions:
- prefRoles: [ HeadLoyalist ]
max: 2
playerRatio: 30
mindRoles:
- MindRoleHeadLoyalist
briefing:
text: antag-HeadLoyalist.greeting
color: CornflowerBlue
- prefRoles: [ HeadInsurgent ]
max: 2
playerRatio: 30
mindRoles:
- MindRoleHeadInsurgent
briefing:
text: antag-HeadInsurgent.greeting
color: DarkSalmon
@@ -1,6 +0,0 @@
# Adding group for frozen treats since we kinda added a LOT of those
- type: guideEntry
id: FrozenTreats
name: guide-entry-frozentreat-recipes
text: "/ServerInfo/Guidebook/_DV/Service/FrozenTreats.xml"
filterEnabled: True
@@ -14,14 +14,3 @@
id: BartenderGlasses
equipment:
eyes: ClothingEyesHudBeer
# Soda Jerk and Cap
- type: loadout
id: SodaJerkUniform
equipment:
jumpsuit: ClothingUniformJumpsuitSodaJerk
- type: loadout
id: SodaJerkCap
equipment:
head: ClothingHeadHatSodaJerkCap
@@ -0,0 +1,105 @@
- type: entity
abstract: true
parent: BaseObjective
id: BaseLoyalistObjective
components:
- type: Objective
issuer: antag-Loyalist.issuer
difficulty: 0
- type: RoleRequirement
roles: [ LoyalistRole ]
- type: entity
abstract: true
parent: BaseObjective
id: BaseInsurgentObjective
components:
- type: Objective
issuer: antag-Insurgent.issuer
difficulty: 0
- type: RoleRequirement
roles: [ InsurgentRole ]
- type: entity
parent: BaseLoyalistObjective
id: LoyalistObjectiveCrewMajority
name: Rally Crew
description: Rally the crew to NanoTrasen's side.
components:
- type: CrewConversionObjective
convertedRoles: [ LoyalistRole ]
conversionSourceFactions: [ NanoTrasen ]
targetFraction: 0.5
- type: Objective
icon:
sprite: /Textures/_DV/Misc/uprising.rsi
state: loyalist_conversion
- type: entity
parent: BaseLoyalistObjective
id: LoyalistObjectiveProtectCommand
name: Protect Command
description: Keep NanoTrasen's rightfully-appointed Command in their place, and get them on your side.
components:
- type: Objective
icon:
sprite: /Textures/_DV/Misc/uprising.rsi
state: protect
- type: CommandStatusObjective
convertedRoles: [ LoyalistRole ]
shouldUnconvertedBeIncapacitated: false
- type: entity
parent: BaseLoyalistObjective
id: LoyalistObjectiveDeclareLoyalty
name: Declare Loyalty
description: After rallying the majority of the crew, get to a communications computer and affirm the station's loyalty to NanoTrasen.
components:
- type: Objective
icon:
sprite: /Textures/_DV/Misc/uprising.rsi
state: loyalty
- type: UprisingVictoryObjective
side: Loyalist
- type: entity
parent: BaseInsurgentObjective
id: InsurgentObjectiveCrewMajority
name: Rally Crew
description: Rally the crew to your side.
components:
- type: CrewConversionObjective
convertedRoles: [ InsurgentRole ]
conversionSourceFactions: [ NanoTrasen ]
targetFraction: 0.5
- type: Objective
icon:
sprite: /Textures/_DV/Misc/uprising.rsi
state: insurgent_conversion
- type: entity
parent: BaseInsurgentObjective
id: InsurgentObjectiveIncapacitateCommand
name: Incapacitate Command
description: Assassinate, handcuff, or convert all of Command.
components:
- type: Objective
icon:
sprite: /Textures/_DV/Misc/uprising.rsi
state: overthrow
- type: CommandStatusObjective
convertedRoles: [ InsurgentRole ]
shouldUnconvertedBeIncapacitated: true
- type: entity
parent: BaseInsurgentObjective
id: InsurgentObjectiveTakeOver
name: Take Over
description: After getting all of Command out of the way, get to a communications computer and declare the station's liberation.
components:
- type: Objective
icon:
sprite: /Textures/_DV/Misc/uprising.rsi
state: take_over
- type: UprisingVictoryObjective
side: Insurgent
@@ -1,518 +0,0 @@
- type: reagent
abstract: true
parent: BaseDrink
id: BaseDrinkFrozenTreat
group: FrozenTreats
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
footstepSound:
collection: FootstepSlime
- type: reagent
parent: BaseDrink
id: Caramel
name: reagent-name-caramel
desc: reagent-desc-caramel
physicalDesc: reagent-physical-desc-syrupy
flavor: sweet
color: "#F39E33"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 1
- type: reagent
parent: BaseDrink
id: ChoppedNuts
name: reagent-name-chopped-nuts
desc: reagent-desc-chopped-nuts
physicalDesc: reagent-physical-desc-aromatic
flavor: nutty
color: "#F1BB24"
recognizable: true
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
metabolisms:
Drink:
effects:
- !type:SatiateHunger
factor: 1
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/chopped-nuts.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamAppleCaramel
name: reagent-name-icecream-apple-caramel
desc: reagent-desc-icecream-apple-caramel
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamAppleCaramel
color: "#F9CD85"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamAppleCaramel
min: 20
damage:
types:
Cold: .25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-applecaramel.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamCaramel
name: reagent-name-icecream-caramel
desc: reagent-desc-icecream-caramel
physicalDesc: reagent-physical-desc-creamy
flavor: sweet
color: "#F9CD85"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-caramel.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamCaramelFudge
name: reagent-name-icecream-caramel-fudge
desc: reagent-desc-icecream-caramel-fudge
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamCaramelFudge
color: "#C06B20"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamCaramelFudge
min: 20
damage:
types:
Cold: .25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-caramelfudge.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamCherry
name: reagent-name-icecream-cherry
desc: reagent-desc-icecream-cherry
physicalDesc: reagent-physical-desc-creamy
flavor: cherry
color: "#FF8888"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-cherry.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamChocolate
name: reagent-name-icecream-chocolate
desc: reagent-desc-icecream-chocolate
physicalDesc: reagent-physical-desc-creamy
flavor: chocolate
color: "#664300"
recognizable: true
metabolisms:
Drink:
effects:
- !type:AdjustReagent
reagent: Theobromine
amount: 0.05
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-chocolate.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamBerryCobbler
name: reagent-name-icecream-cobbler
desc: reagent-desc-icecream-cobbler
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamCobbler
color: "#FF8888"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-cobblers.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamCoffee
name: reagent-name-icecream-coffee
desc: reagent-desc-icecream-coffee
physicalDesc: reagent-physical-desc-creamy
flavor: coffee
color: "#664300"
recognizable: true
metabolisms:
Drink:
effects:
- !type:ModifyStatusEffect
effectProto: StatusEffectDrowsiness
time: 2
type: Remove
- !type:AdjustReagent
reagent: Theobromine
amount: 0.05
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-coffee.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamCookieDough
name: reagent-name-icecream-cookiedough
desc: reagent-desc-icecream-cookiedough
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamCookieDough
color: "#FFFBD6"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamCookieDough
min: 20
damage:
types:
Cold: .25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-cookiedough.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamGreenTea
name: reagent-name-icecream-greentea
desc: reagent-desc-icecream-greentea
physicalDesc: reagent-physical-desc-creamy
flavor: tea
color: "#7EB626"
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamGreenTea
min: 20
damage:
types:
Cold: .25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-greentea.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamMint
name: reagent-name-icecream-mint
desc: reagent-desc-icecream-mint
physicalDesc: reagent-physical-desc-creamy
flavor: minty
color: "#A3F979"
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-mint.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamNeapolitan
name: reagent-name-icecream-neapolitan
desc: reagent-desc-icecream-neapolitan
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamNeapolitan
color: "#FFFBD6"
recognizable: true
metabolisms:
Drink:
effects:
- !type:AdjustReagent
reagent: Theobromine
amount: 0.05
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-neapolitan.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamPistachio
name: reagent-name-icecream-pistachio
desc: reagent-desc-icecream-pistachio
physicalDesc: reagent-physical-desc-creamy
flavor: nutty
color: "#99B334"
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-pistachio.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamRockyRoad
name: reagent-name-icecream-rockyroad
desc: reagent-desc-icecream-rockyroad
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamRockyRoad
color: "#664300"
recognizable: true
metabolisms:
Drink:
effects:
- !type:AdjustReagent
reagent: Theobromine
amount: 0.05
- !type:SatiateThirst
factor: 2
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamRockyRoad
min: 20
damage:
types:
Cold: .25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-rockyroad.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamTower
name: reagent-name-icecream-tower
desc: reagent-desc-icecream-tower
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamTower
color: "#EDC392"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 3
- !type:SatiateHunger
factor: 2
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamTower
min: 20
damage:
types:
Cold: .5
- !type:AdjustReagent
reagent: Theobromine
amount: 0.05
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-tower.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamVegan
name: reagent-name-icecream-vegan
desc: reagent-desc-icecream-vegan
physicalDesc: reagent-physical-desc-creamy
flavor: icecream
color: "#FFFBD6"
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-vegan.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamWatermelon
name: reagent-name-icecream-watermelon
desc: reagent-desc-icecream-watermelon
physicalDesc: reagent-physical-desc-creamy
flavor: watermelon
color: "#EFBE6C"
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/icecream-watermelon.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSherbetRainbow
name: reagent-name-sherbet-rainbow
desc: reagent-desc-sherbet-rainbow
physicalDesc: reagent-physical-desc-creamy
flavor: IceCreamRainbow
color: "#D6CE58"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
- !type:SatiateHunger
factor: 1
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamSherbetRainbow
min: 20
damage:
types:
Cold: .25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-rainbow.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSherbetLemon
name: reagent-name-sherbet-lemon
desc: reagent-desc-sherbet-lemon
physicalDesc: reagent-physical-desc-creamy
flavor: ginfizz
color: "#FFE93F"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-lemon.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSherbetLime
name: reagent-name-sherbet-lime
desc: reagent-desc-sherbet-lime
physicalDesc: reagent-physical-desc-creamy
flavor: tart
color: "#ABFF24"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-lime.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSherbetOrange
name: reagent-name-sherbet-orange
desc: reagent-desc-sherbet-orange
physicalDesc: reagent-physical-desc-creamy
flavor: orange
color: "#FEAF54"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-orange.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSherbetPineapple
name: reagent-name-sherbet-pineapple
desc: reagent-desc-sherbet-pineapple
physicalDesc: reagent-physical-desc-creamy
flavor: bluehawaiian
color: "#FFED69"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-pineapple.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSherbetRaspberry
name: reagent-name-sherbet-raspberry
desc: reagent-desc-sherbet-raspberry
physicalDesc: reagent-physical-desc-creamy
flavor: berry
color: "#F398CB"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/sherbet-raspberry.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: SlushBlueRaspberry
name: reagent-name-slush-blue-raspberry
desc: reagent-desc-slush-blue-raspberry
physicalDesc: reagent-physical-desc-frosty
flavor: berry
color: "#2FF0FE"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/slush-blueraspberry.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: SlushCherry
name: reagent-name-slush-cherry
desc: reagent-desc-slush-cherry
physicalDesc: reagent-physical-desc-frosty
flavor: cherry
color: "#FFE7E7"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/slush-cherry.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: SlushCola
name: reagent-name-slush-cola
desc: reagent-desc-slush-cola
physicalDesc: reagent-physical-desc-frosty
flavor: cola
color: "#FFE7E7"
recognizable: true
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/slush-cola.rsi
state: icon_empty
- type: reagent
parent: BaseDrinkFrozenTreat
id: IceCreamSundaeTropical
name: reagent-name-tropical-sunday
desc: reagent-desc-tropical-sunday
physicalDesc: reagent-physical-desc-creamy
flavor: painkiller
color: "#FFD376"
recognizable: true
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
- !type:SatiateHunger
factor: 1
- !type:HealthChange
conditions:
- !type:ReagentCondition
reagent: IceCreamSundaeTropical
min: 20
damage:
types:
Cold: 0.25
metamorphicSprite:
sprite: _DV/Objects/Consumable/Drinks/frozen_treats/tropicalsunday.rsi
state: icon_empty
@@ -1,290 +0,0 @@
- type: reaction
id: Caramel
minTemp: 350
reactants:
Saline:
amount: 1
Sugar:
amount: 2
products:
Caramel: 1
- type: reaction
id: IceCreamAppleCaramel
reactants:
IceCreamCaramel:
amount: 3
JuiceApple:
amount: 1
products:
IceCreamAppleCaramel: 4
- type: reaction
id: IceCreamCaramel
reactants:
IceCream:
amount: 1
Caramel:
amount: 1
products:
IceCreamCaramel: 2
- type: reaction
id: IceCreamCaramelFudge
reactants:
IceCreamChocolate:
amount: 2
Caramel:
amount: 1
products:
IceCreamCaramelFudge: 3
- type: reaction
id: IceCreamBerryCobbler
reactants:
IceCream:
amount: 2
Oats:
amount: 1
JuiceBerry:
amount: 1
products:
IceCreamBerryCobbler: 4
- type: reaction
id: IceCreamCherry
reactants:
IceCream:
amount: 1
JuiceCherry:
amount: 1
products:
IceCreamCherry: 2
- type: reaction
id: IceCreamChocolate
reactants:
IceCream:
amount: 1
CocoaPowder:
amount: 1
products:
IceCreamChocolate: 2
- type: reaction
id: IceCreamCoffee
reactants:
IceCream:
amount: 1
Coffee:
amount: 1
products:
IceCreamCoffee: 2
- type: reaction
id: IceCreamCookieDough
reactants:
IceCream:
amount: 1
IceCreamChocolate:
amount: 1
Flour:
amount: 1
products:
IceCreamCookieDough: 2
- type: reaction
id: IceCreamGreenTea
reactants:
IceCream:
amount: 1
GreenTea:
amount: 1
products:
IceCreamGreenTea: 2
- type: reaction
id: IceCreamNeapolitan
reactants:
IceCream:
amount: 1
IceCreamCherry:
amount: 1
IceCreamChocolate:
amount: 1
products:
IceCreamNeapolitan: 3
- type: reaction
id: IceCreamMint
reactants:
IceCream:
amount: 1
Angobitters:
amount: 1
products:
IceCreamMint: 2
- type: reaction
id: IceCreamTower
reactants:
IceCreamNeapolitan:
amount: 1
IceCreamSherbetRainbow:
amount: 1
products:
IceCreamTower: 2
- type: reaction
id: IceCreamVegan
reactants:
Sugar:
amount: 1
Ice:
amount: 1
MilkSoy:
amount: 1
products:
IceCreamVegan: 3
- type: reaction
id: IceCreamWatermelon
reactants:
IceCream:
amount: 1
JuiceWatermelon:
amount: 1
products:
IceCreamWatermelon: 2
- type: reaction
id: IceCreamSherbetLemon
reactants:
IceCream:
amount: 1
JuiceLemon:
amount: 1
products:
IceCreamSherbetLemon: 2
- type: reaction
id: IceCreamSherbetLime
reactants:
IceCream:
amount: 1
JuiceLime:
amount: 1
products:
IceCreamSherbetLime: 2
- type: reaction
id: IceCreamSherbetPineapple
reactants:
IceCream:
amount: 1
JuicePineapple:
amount: 1
products:
IceCreamSherbetPineapple: 2
- type: reaction
id: IceCreamSherbetOrange
reactants:
IceCream:
amount: 1
JuiceOrange:
amount: 1
products:
IceCreamSherbetOrange: 2
- type: reaction
id: IceCreamSherbetRaspberry
reactants:
IceCream:
amount: 1
JuiceBerry:
amount: 1
products:
IceCreamSherbetRaspberry: 2
- type: reaction
id: IceCreamSherbetRainbow
reactants:
IceCreamSherbetOrange:
amount: 1
IceCreamSherbetLime:
amount: 1
IceCreamSherbetRaspberry:
amount: 1
products:
IceCreamSherbetRainbow: 3
- type: reaction
id: SlushCherry
reactants:
JuiceCherry:
amount: 1
Ice:
amount: 2
Sugar:
amount: 1
products:
SlushCherry: 4
- type: reaction
id: SlushCola
reactants:
Cola:
amount: 1
Ice:
amount: 2
Sugar:
amount: 1
products:
SlushCola: 4
- type: reaction
id: SlushBlueRaspberry
reactants:
JuiceBerry:
amount: 1
Ice:
amount: 2
Sugar:
amount: 1
products:
SlushBlueRaspberry: 4
- type: reaction
id: IceCreamSundaeTropical
reactants:
IceCream:
amount: 3
JuiceBanana:
amount: 1
CoconutWater:
amount: 1
JuiceBungo:
amount: 1
products:
IceCreamSundaeTropical: 6
- type: reaction
id: IceCreamPistachio
reactants:
IceCream:
amount: 1
ChoppedNuts:
amount: 1
products:
IceCreamPistachio: 2
- type: reaction
id: IceCreamRockyRoad
reactants:
IceCreamChocolate:
amount: 2
ChoppedNuts:
amount: 1
products:
IceCreamRockyRoad: 3
@@ -0,0 +1,19 @@
- type: antag
id: HeadLoyalist
name: antag-HeadLoyalist.name
antagonist: true
setPreference: true
objective: antag-HeadLoyalist.objective
requirements:
- !type:OverallPlaytimeRequirement
time: 24h
- type: antag
id: HeadInsurgent
name: antag-HeadInsurgent.name
antagonist: true
setPreference: true
objective: antag-HeadInsurgent.objective
requirements:
- !type:OverallPlaytimeRequirement
time: 24h
@@ -11,7 +11,7 @@
outerClothing: ClothingOuterArmorBasicSlim
id: ERTLeaderPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltMilitaryWebbingERT
belt: WeaponEnergyGun
pocket1: CrowbarRed
pocket2: FlashlightSeclite
storage:
@@ -19,12 +19,7 @@
- PinpointerNuclear
- Zipties
- Zipties
- DoorRemoteCustom
- ERTGearSelectorMedsAmber
- WeaponPistolUniversal
- MagazineUniversalMagnum
- MagazineUniversalMagnum
- MagazineUniversalMagnum
- DoorRemoteOmni
- type: startingGear
parent: ERTLeaderGearAmber
@@ -33,13 +28,16 @@
shoes: ClothingShoesBootsERTMagboots
mask: ClothingMaskGasERT
outerClothing: ClothingOuterHardsuitERTLeaderBase
belt: ClothingBeltSecurityFilled
pocket1: WeaponEnergyGunPistol
storage:
back:
- CrowbarRed
- DoorRemoteCustom
- DoorRemoteOmni
- PinpointerNuclear
- ERTGearSelectorLeaderRed
- ERTGearSelectorMedsRed
- MagazineUniversalMagnum
- MagazineUniversalMagnum
- WeaponPistolUniversal
belt:
- Zipties
- Zipties
@@ -49,13 +47,20 @@
id: ERTLeaderGearGamma
equipment:
outerClothing: ClothingOuterHardsuitERTLeaderElite
pocket2: WeaponPistolUniversal
inhand:
- WeaponRifleLaserERT
storage:
back:
- MagazineLaser
- MagazineLaser
- MagazineLaser
- MagazineUniversalMagnum
- MagazineUniversalMagnum
- CrowbarRed
- PinpointerNuclear
- DoorRemoteCustom
- ERTGearSelectorLeaderGamma
- ERTGearSelectorMedsGammaSec
- ToolDebug
- DoorRemoteOmni
- FlashlightSeclite
# Chaplain
@@ -121,7 +126,7 @@
id: ERTEngineerPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltChiefEngineerFilled
pocket1: WeaponAdvancedLaser
pocket1: WeaponEnergyGunMini
pocket2: FlashlightSeclite
storage:
back:
@@ -139,7 +144,7 @@
equipment:
shoes: ClothingShoesBootsERTMagboots
mask: ClothingMaskGasERT
pocket1: WeaponAdvancedLaser
pocket1: WeaponEnergyGunPistol
inhand:
- JetpackVoid
storage:
@@ -163,7 +168,7 @@
- CableApcStack
- SheetPlasteel
- SheetSteel
- WeaponAdvancedLaser
- WeaponBeamCannon
belt:
- RCDCombat
@@ -187,8 +192,8 @@
storage:
back:
- CrowbarRed
- ERTGearSelectorGunAmberSec
- ERTGearSelectorMedsAmber
- BoxFlashbang
- WeaponLaserCannon
belt:
- Zipties
- Zipties
@@ -203,25 +208,25 @@
pocket1: WeaponEnergyGunPistol
storage:
back:
- ToolDebug
- ERTGearSelectorGunRedSec
- ERTGearSelectorMedsRed
- CrowbarRed
- MagazineLaser
- MagazineLaser
- MagazineLaser
- WeaponRifleLaserERT
- type: startingGear
parent: ERTSecurityGearRed
id: ERTSecurityGearGamma
equipment:
outerClothing: ClothingOuterHardsuitERTSecurityElite
pocket1: WeaponAdvancedLaser
pocket1: CrowbarRed
inhand:
- WeaponImmolatorMulti
- PortableRecharger
storage:
back:
- DoorRemoteCustom
- ERTGearSelectorGunGammaSec
- ERTGearSelectorMedsGammaSec
- ERTGearSelectorGammaSecUtility
- ToolDebug
- Multitool
- WelderIndustrialAdvanced
- WeaponEnergyGunAdvanced
- BoxC4
# Medical
@@ -242,7 +247,7 @@
pocket2: FlashlightSeclite
storage:
back:
- WeaponAdvancedLaser
- WeaponEnergyGunMini
- MedkitCombatFilled
- CrowbarRed
- ChemistryBottleEpinephrine
@@ -258,7 +263,7 @@
mask: ClothingMaskGasERT
outerClothing: ClothingOuterHardsuitERTMedicalBase
inhand:
- WeaponAdvancedLaser
- WeaponEnergyGun
storage:
back:
- MedkitCombatFilled
@@ -276,7 +281,7 @@
equipment:
outerClothing: ClothingOuterHardsuitERTMedicalElite
inhand:
- WeaponAdvancedLaser
- WeaponEnergyGunPistol
storage:
back:
- MedkitCombatFilled
@@ -320,7 +325,7 @@
shoes: ClothingShoesBootsERTMagboots
mask: ClothingMaskGasERT
outerClothing: ClothingOuterHardsuitERTJanitorBase
pocket1: WeaponAdvancedLaser
pocket1: WeaponEnergyGunMini
pocket2: FlashlightSeclite
inhand:
- AdvMopItem
@@ -337,36 +342,4 @@
id: ERTJanitorGearGamma
equipment:
outerClothing: ClothingOuterHardsuitERTJanitorElite
pocket1: WeaponAdvancedLaser
# SRT
- type: startingGear
id: SRTOfficerBase
equipment:
jumpsuit: ClothingUniformJumpsuitDeathSquad
back: ClothingBackpackDeathSquadFilledBase
shoes: ClothingShoesBootsERTMagboots
head: ClothingHeadHatBeretCommand
eyes: ClothingEyesERTInformationHud
gloves: ClothingHandsGlovesCombat
mask: ClothingMaskGasDeathSquad
outerClothing: ClothingOuterHardsuitSRT
suitstorage: JetpackBlackFilled
id: DeathsquadPDA
ears: ClothingHeadsetAltCentCom
belt: ClothingBeltMilitaryWebbingERTMedicine
pocket1: DoubleEmergencyOxygenTankFilled
pocket2: WeaponRevolverMateba
- type: startingGear
id: SRTOfficerBlack
parent: SRTOfficerBase
equipment:
back: ClothingBackpackDeathSquadFilledBlack
- type: startingGear
id: SRTOfficerEpsilon
parent: SRTOfficerBase
equipment:
back: ClothingBackpackDeathSquadFilledEpsilon
pocket1: WeaponEnergyGunPistol
@@ -141,3 +141,71 @@
- type: HitmanRole
- type: RoleBriefing
briefing: hitman-briefing
- type: entity
parent: BaseMindRoleAntag
id: MindRoleLoyalist
name: Loyalist Role
components:
- type: MindRole
antagPrototype: HeadLoyalist
exclusiveAntag: true
roleType: TeamAntagonist
subtype: role-subtype-loyalist
- type: LoyalistRole
- type: RoleBriefing
briefing: antag-Loyalist.briefing
- type: ObjectiveRole
objectives:
- LoyalistObjectiveCrewMajority
- LoyalistObjectiveProtectCommand
- LoyalistObjectiveDeclareLoyalty
- type: ActionGrant
actions:
- ActionLoyalistOfferConversion
- type: ActionGrantRole
- type: UprisingRole
side: Loyalist
- type: entity
parent: MindRoleLoyalist
id: MindRoleHeadLoyalist
name: Head Loyalist Role
components:
- type: MindRole
subtype: role-subtype-head-loyalist
- type: UprisingInconvertibleRole
- type: entity
parent: BaseMindRoleAntag
id: MindRoleInsurgent
name: Insurgent Role
components:
- type: MindRole
antagPrototype: HeadInsurgent
exclusiveAntag: true
roleType: TeamAntagonist
subtype: role-subtype-insurgent
- type: InsurgentRole
- type: RoleBriefing
briefing: antag-Insurgent.briefing
- type: ObjectiveRole
objectives:
- InsurgentObjectiveCrewMajority
- InsurgentObjectiveIncapacitateCommand
- InsurgentObjectiveTakeOver
- type: ActionGrant
actions:
- ActionInsurgentOfferConversion
- type: ActionGrantRole
- type: UprisingRole
side: Insurgent
- type: entity
parent: MindRoleInsurgent
id: MindRoleHeadInsurgent
name: Head Insurgent Role
components:
- type: MindRole
subtype: role-subtype-head-insurgent
- type: UprisingInconvertibleRole
+16
View File
@@ -0,0 +1,16 @@
- type: gamePreset
id: Uprising
alias:
- uprising
name: preset-Uprising.title
description: preset-Uprising.description
showInVote: false
cooldown: 1
rules:
- UprisingRule
- SubGamemodesRule
- MeteorSwarmScheduler
- SpaceTrafficControlEventScheduler
- BasicRoundstartVariation
- BasicStationEventScheduler
- GlimmerEventScheduler
+2 -1
View File
@@ -1,9 +1,10 @@
- type: weightedRandom
id: SecretDeltaV
weights:
Survival: 0.30
Survival: 0.20
Nukeops: 0.15
Zombie: 0.10
Traitor: 0.35
Uprising: 0.10
CosmicCult: 0.10 # my cult so cosmic!
#Pirates: 0.15 #ahoy me bucko
@@ -1,6 +0,0 @@
<Document>
# Frozen Treats
Alcohol isn't for everyone; An icy treat can be a great way to relax, especially during a hot day!
<GuideReagentGroupEmbed Group="FrozenTreats"/>
</Document>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

@@ -1,30 +0,0 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Made by Sal_DragonsNOA for SS14.",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
},
{
"name": "equipped-HELMET-vox",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1002 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

@@ -1,34 +0,0 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Edited from bartender jumpsuit from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039, monkey made by brainfood1183 (github), monkey made by brainfood1183 (github) for ss14, default suit edit by Skarletto (github) | Folded version taken from tgstation (https://github.com/tgstation/tgstation/blob/5ed5566dbf09507cb99768faa696f8c3f8f65660/icons/mob/uniform.dmi) and edited by Pinkbat5 (github). Soda jerk edit by Sal_DragonsNOA for SS14.",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-INNERCLOTHING",
"directions": 4
},
{
"name": "folded-equipped-INNERCLOTHING",
"directions": 4
},
{
"name": "equipped-INNERCLOTHING-monkey",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

@@ -0,0 +1,35 @@
{
"version": 1,
"license": "CC0-1.0",
"copyright": "made by sowelipililimute (GitHub)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "loyalist_conversion"
},
{
"name": "insurgent_conversion"
},
{
"name": "protect"
},
{
"name": "overthrow"
},
{
"name": "take_over"
},
{
"name": "loyalty"
},
{
"name": "conversion"
},
{
"name": "conversion_question"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 B

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