diff --git a/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml b/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml
new file mode 100644
index 00000000000..67e39233f71
--- /dev/null
+++ b/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml.cs b/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml.cs
new file mode 100644
index 00000000000..18e89bb15c5
--- /dev/null
+++ b/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml.cs
@@ -0,0 +1,91 @@
+using Content.Client.UserInterface.Controls;
+using Content.Shared.DeltaV.CCVars;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Configuration;
+using Robust.Shared.Timing;
+using Robust.Shared.Utility;
+
+namespace Content.Client.DeltaV.RoundEnd;
+
+[GenerateTypedNameReferences]
+public sealed partial class NoEorgPopup : FancyWindow
+{
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
+
+ private float _remainingTime;
+ private bool _initialSkipState;
+
+ public NoEorgPopup()
+ {
+ IoCManager.InjectDependencies(this);
+ RobustXamlLoader.Load(this);
+
+ InitializeUI();
+ InitializeEvents();
+ ResetTimer();
+ }
+
+ private void InitializeUI()
+ {
+ TitleLabel.Text = Loc.GetString("no-eorg-popup-label");
+ MessageLabel.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("no-eorg-popup-message")));
+ RuleLabel.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("no-eorg-popup-rule")));
+ RuleTextLabel.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("no-eorg-popup-rule-text")));
+
+ _initialSkipState =
+ _cfg.GetCVar(DCCVars.SkipRoundEndNoEorgPopup); // Store the initial CVar value to compare against
+ SkipCheckBox.Pressed = _initialSkipState;
+ NoEorgCloseButton.Disabled = true;
+
+ UpdateCloseButtonText();
+ }
+
+ private void InitializeEvents()
+ {
+ OnClose += SaveSkipState; // Only change the CVar once the close button is pressed
+ NoEorgCloseButton.OnPressed += OnClosePressed;
+ }
+
+ private void ResetTimer()
+ {
+ _remainingTime = _cfg.GetCVar(DCCVars.RoundEndNoEorgPopupTime); // Set how long to show the popup for
+ UpdateCloseButtonText();
+ }
+
+ private void SaveSkipState()
+ {
+ if (SkipCheckBox.Pressed == _initialSkipState)
+ return;
+
+ _cfg.SetCVar(DCCVars.SkipRoundEndNoEorgPopup, SkipCheckBox.Pressed);
+ _cfg.SaveToFile();
+ }
+
+ private void OnClosePressed(BaseButton.ButtonEventArgs args)
+ {
+ Close();
+ }
+
+ private void UpdateCloseButtonText()
+ {
+ var isWaiting = _remainingTime > 0f;
+ NoEorgCloseButton.Text = isWaiting
+ ? Loc.GetString("no-eorg-popup-close-button-wait", ("time", (int)MathF.Ceiling(_remainingTime)))
+ : Loc.GetString("no-eorg-popup-close-button");
+ NoEorgCloseButton.Disabled = isWaiting;
+ }
+
+ protected override void FrameUpdate(FrameEventArgs args)
+ {
+ base.FrameUpdate(args);
+
+ if (!NoEorgCloseButton.Disabled)
+ return;
+
+ _remainingTime = MathF.Max(0f, _remainingTime - args.DeltaSeconds);
+ UpdateCloseButtonText();
+ }
+}
+
diff --git a/Content.Client/DeltaV/RoundEnd/NoEorgPopupSystem.cs b/Content.Client/DeltaV/RoundEnd/NoEorgPopupSystem.cs
new file mode 100644
index 00000000000..40341b9ae89
--- /dev/null
+++ b/Content.Client/DeltaV/RoundEnd/NoEorgPopupSystem.cs
@@ -0,0 +1,36 @@
+using Content.Shared.GameTicking;
+using Content.Shared.DeltaV.CCVars;
+using Robust.Shared.Configuration;
+
+namespace Content.Client.DeltaV.RoundEnd;
+
+public sealed class NoEorgPopupSystem : EntitySystem
+{
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
+
+ private NoEorgPopup? _window;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeNetworkEvent(OnRoundEnd);
+ }
+
+ private void OnRoundEnd(RoundEndMessageEvent ev)
+ {
+ if (_cfg.GetCVar(DCCVars.SkipRoundEndNoEorgPopup) || _cfg.GetCVar(DCCVars.RoundEndNoEorgPopup) == false)
+ return;
+
+ OpenNoEorgPopup();
+ }
+
+ private void OpenNoEorgPopup()
+ {
+ if (_window != null)
+ return;
+
+ _window = new NoEorgPopup();
+ _window.OpenCentered();
+ _window.OnClose += () => _window = null;
+ }
+}
diff --git a/Content.IntegrationTests/Tests/MachineBoardTest.cs b/Content.IntegrationTests/Tests/MachineBoardTest.cs
index 01a4d324382..90828e7234d 100644
--- a/Content.IntegrationTests/Tests/MachineBoardTest.cs
+++ b/Content.IntegrationTests/Tests/MachineBoardTest.cs
@@ -93,11 +93,6 @@ await server.WaitAssertion(() =>
continue;
var cId = cbc.Prototype;
- // Frontier: we accept null as board prototypes, but this will fail the assertions.
- if (cId == "Null")
- continue;
- // End Frontier
-
Assert.Multiple(() =>
{
Assert.That(cId, Is.Not.Null, $"Computer board \"{p.ID}\" does not have a corresponding computer.");
diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
index 30256e1cac5..a50b75cef09 100644
--- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
+++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
@@ -563,6 +563,8 @@ private void AddSmiteVerbs(GetVerbsEvent args)
};
args.Verbs.Add(cluwne);
+ // Frontier: remove maid smite due to weird ID perms
+ /*
Verb maiden = new()
{
Text = "admin-smite-remove-gravity-name",
@@ -581,6 +583,7 @@ private void AddSmiteVerbs(GetVerbsEvent args)
Message = Loc.GetString("admin-smite-maid-description")
};
args.Verbs.Add(maiden);
+ */
}
Verb angerPointingArrows = new()
diff --git a/Content.Server/Administration/Systems/BwoinkSystem.cs b/Content.Server/Administration/Systems/BwoinkSystem.cs
index 258cb2d8901..707f93f6e34 100644
--- a/Content.Server/Administration/Systems/BwoinkSystem.cs
+++ b/Content.Server/Administration/Systems/BwoinkSystem.cs
@@ -859,7 +859,7 @@ public async void DiscordAhelpSendMessage(BwoinkTextMessage message, EntitySessi
var nonAfkAdmins = GetNonAfkAdmins();
var messageParams = new AHelpMessageParams(
- senderSession.Name,
+ adminNickname,
str,
!personalChannel,
_gameTicker.RoundDuration().ToString("hh\\:mm\\:ss"),
diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs
index 8114604ee3c..68cd86ad687 100644
--- a/Content.Server/Cloning/CloningSystem.cs
+++ b/Content.Server/Cloning/CloningSystem.cs
@@ -95,20 +95,22 @@ private void OnComponentInit(EntityUid uid, CloningPodComponent clonePod, Compon
_signalSystem.EnsureSinkPorts(uid, CloningPodComponent.PodPort);
}
+ // Frontier: machine parts upgrades
private void OnPartsRefreshed(EntityUid uid, CloningPodComponent component, RefreshPartsEvent args)
{
var materialRating = args.PartRatings[component.MachinePartMaterialUse];
var speedRating = args.PartRatings[component.MachinePartCloningSpeed];
- component.BiomassRequirementMultiplier = MathF.Pow(component.PartRatingMaterialMultiplier, materialRating - 1);
+ component.BiomassRequirementMultiplier = component.BaseBiomassRequirementMultiplier * MathF.Pow(component.PartRatingMaterialMultiplier, materialRating - 1);
component.CloningTime = component.BaseCloningTime * MathF.Pow(component.PartRatingSpeedMultiplier, speedRating - 1);
}
private void OnUpgradeExamine(EntityUid uid, CloningPodComponent component, UpgradeExamineEvent args)
{
args.AddPercentageUpgrade("cloning-pod-component-upgrade-speed", component.BaseCloningTime / component.CloningTime);
- args.AddPercentageUpgrade("cloning-pod-component-upgrade-biomass-requirement", component.BiomassRequirementMultiplier);
+ args.AddPercentageUpgrade("cloning-pod-component-upgrade-biomass-requirement", component.BiomassRequirementMultiplier / component.BaseBiomassRequirementMultiplier);
}
+ // End Frontier
internal void TransferMindToClone(EntityUid mindId, MindComponent mind)
{
diff --git a/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs b/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs
index 3e73ffde3e1..1631f846049 100644
--- a/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs
+++ b/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs
@@ -1,4 +1,4 @@
-using Content.Server.Construction.Components;
+using Content.Server._NF.Construction.Components; // Frontier
using Content.Shared.Construction;
using Content.Shared.Construction.Components;
using JetBrains.Annotations;
@@ -15,6 +15,7 @@ namespace Content.Server.Construction.NodeEntities;
public sealed partial class BoardNodeEntity : IGraphNodeEntity
{
[DataField("container")] public string Container { get; private set; } = string.Empty;
+ [DataField] public ComputerType Computer { get; private set; } = ComputerType.Default; // Frontier
public string? GetId(EntityUid? uid, EntityUid? userUid, GraphNodeEntityArgs args)
{
@@ -29,13 +30,22 @@ public sealed partial class BoardNodeEntity : IGraphNodeEntity
var board = container.ContainedEntities[0];
- // Frontier - adds tabletop variants
- if (args.EntityManager.TryGetComponent(container.Owner, out ConstructionComponent? constructionComponent)
- && constructionComponent.Graph == "ComputerTabletop"
- && args.EntityManager.TryGetComponent(board, out ComputerTabletopBoardComponent? tabletopComputer))
+ // Frontier - alternative computer variants
+ switch (Computer)
{
- return tabletopComputer.Prototype;
+ case ComputerType.Tabletop:
+ if (args.EntityManager.TryGetComponent(board, out ComputerTabletopBoardComponent? tabletopComputer))
+ return tabletopComputer.Prototype;
+ break;
+ case ComputerType.Wallmount:
+ if (args.EntityManager.TryGetComponent(board, out ComputerWallmountBoardComponent? wallmountComputer))
+ return wallmountComputer.Prototype;
+ break;
+ case ComputerType.Default:
+ default:
+ break;
}
+ // End Frontier
// There should not be a case where both of these components exist on the same entity...
if (args.EntityManager.TryGetComponent(board, out MachineBoardComponent? machine))
@@ -46,4 +56,13 @@ public sealed partial class BoardNodeEntity : IGraphNodeEntity
return null;
}
+
+ // Frontier: support for multiple computer types
+ public enum ComputerType : byte
+ {
+ Default, // Default machines
+ Tabletop,
+ Wallmount
+ }
+ // End Frontier
}
diff --git a/Content.Server/DeltaV/RoundEnd/RoundEndSystem.Pacified.cs b/Content.Server/DeltaV/RoundEnd/RoundEndSystem.Pacified.cs
new file mode 100644
index 00000000000..e73caa7591e
--- /dev/null
+++ b/Content.Server/DeltaV/RoundEnd/RoundEndSystem.Pacified.cs
@@ -0,0 +1,61 @@
+using Content.Server.Explosion.Components;
+using Content.Server.GameTicking;
+using Content.Shared.CombatMode;
+using Content.Shared.CombatMode.Pacification;
+using Content.Shared.DeltaV.CCVars;
+using Content.Shared.Explosion.Components;
+using Content.Shared.Flash.Components;
+using Content.Shared.Store.Components;
+using Robust.Shared.Configuration;
+
+namespace Content.Server.DeltaV.RoundEnd;
+
+public sealed class PacifiedRoundEnd : EntitySystem
+{
+ [Dependency] private readonly IConfigurationManager _configurationManager = default!;
+
+ private bool _enabled;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ _configurationManager.OnValueChanged(DCCVars.RoundEndPacifist, v => _enabled = v, true);
+ SubscribeLocalEvent(OnRoundEnded);
+ }
+
+ private void OnRoundEnded(RoundEndTextAppendEvent ev)
+ {
+ if (!_enabled)
+ return;
+
+ var harmQuery = EntityQueryEnumerator();
+ while (harmQuery.MoveNext(out var uid, out _))
+ {
+ EnsureComp(uid);
+ }
+
+ var explosiveQuery = EntityQueryEnumerator();
+ while (explosiveQuery.MoveNext(out var uid, out _))
+ {
+ RemComp(uid);
+ }
+
+ var grenadeQuery = EntityQueryEnumerator();
+ while (grenadeQuery.MoveNext(out var uid, out _))
+ {
+ RemComp(uid);
+ }
+
+ var flashQuery = EntityQueryEnumerator();
+ while (flashQuery.MoveNext(out var uid, out _))
+ {
+ RemComp(uid);
+ }
+
+ var uplinkQuery = EntityQueryEnumerator();
+ while (uplinkQuery.MoveNext(out var uid, out _))
+ {
+ RemComp(uid);
+ }
+ }
+}
diff --git a/Content.Server/EntityEffects/Effects/PlantMutateGases.cs b/Content.Server/EntityEffects/Effects/PlantMutateGases.cs
index 92889a926d0..7b81a5078fc 100644
--- a/Content.Server/EntityEffects/Effects/PlantMutateGases.cs
+++ b/Content.Server/EntityEffects/Effects/PlantMutateGases.cs
@@ -25,12 +25,28 @@ public override void Effect(EntityEffectBaseArgs args)
if (plantholder.Seed == null)
return;
+ // Frontier: List of gasses
+ Gas[] gasList =
+ {
+ Gas.Oxygen,
+ Gas.Nitrogen,
+ Gas.CarbonDioxide,
+ Gas.NitrousOxide,
+ Gas.Ammonia,
+ Gas.Plasma,
+ Gas.WaterVapor,
+ //Gas.Tritium,
+ //Gas.Frezon,
+ };
+ // End Frontier: List of gasses
+
var random = IoCManager.Resolve();
var gasses = plantholder.Seed.ExudeGasses;
// Add a random amount of a random gas to this gas dictionary
float amount = random.NextFloat(MinValue, MaxValue);
- Gas gas = random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList());
+ //Gas gas = random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); // Frontier
+ Gas gas = random.Pick(gasList); // Frontier
if (gasses.ContainsKey(gas))
{
gasses[gas] += amount;
@@ -65,7 +81,7 @@ public override void Effect(EntityEffectBaseArgs args)
return;
// Frontier: List of gasses
- Gas[] GassesList =
+ Gas[] gasList =
{
Gas.Oxygen,
Gas.Nitrogen,
@@ -77,7 +93,7 @@ public override void Effect(EntityEffectBaseArgs args)
//Gas.Tritium,
//Gas.Frezon,
};
- // Frontier: List of gasses
+ // End Frontier: List of gasses
var random = IoCManager.Resolve();
var gasses = plantholder.Seed.ConsumeGasses;
@@ -85,7 +101,7 @@ public override void Effect(EntityEffectBaseArgs args)
// Add a random amount of a random gas to this gas dictionary
float amount = random.NextFloat(MinValue, MaxValue);
//Gas gas = random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); // Frontier
- Gas gas = random.Pick(GassesList); // Frontier
+ Gas gas = random.Pick(gasList); // Frontier
if (gasses.ContainsKey(gas))
{
gasses[gas] += amount;
diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs
index 6102bcbfa1a..1bfa0809b63 100644
--- a/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs
@@ -1,12 +1,11 @@
-namespace Content.Server.Abilities.Felinid
+namespace Content.Server.Abilities.Felinid;
+
+[RegisterComponent]
+public sealed partial class CoughingUpHairballComponent : Component
{
- [RegisterComponent]
- public sealed partial class CoughingUpHairballComponent : Component
- {
- [DataField("accumulator")]
- public float Accumulator = 0f;
+ [DataField("accumulator")]
+ public float Accumulator = 0f;
- [DataField("coughUpTime")]
- public TimeSpan CoughUpTime = TimeSpan.FromSeconds(2.15); // length of hairball.ogg
- }
+ [DataField("coughUpTime")]
+ public TimeSpan CoughUpTime = TimeSpan.FromSeconds(2.15); // length of hairball.ogg
}
diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs
index 775f267ce90..9165b90de05 100644
--- a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs
@@ -3,22 +3,34 @@
using Content.Shared.Actions;
using Robust.Shared.Utility;
-namespace Content.Server.Abilities.Felinid
+namespace Content.Server.Abilities.Felinid;
+
+[RegisterComponent]
+public sealed partial class FelinidComponent : Component
{
- [RegisterComponent]
- public sealed partial class FelinidComponent : Component
- {
- ///
- /// The hairball prototype to use.
- ///
- [DataField("hairballPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))]
- public string HairballPrototype = "Hairball";
-
- [DataField("hairballActionPrototype")]
- public string HairballActionPrototype = "ActionHairBall";
-
- public EntityUid? HairballAction = null;
- public EntityUid? EatMouseAction = null;
- public EntityUid? PotentialTarget = null;
- }
+ ///
+ /// The hairball prototype to use.
+ ///
+ [DataField("hairballPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string HairballPrototype = "Hairball";
+
+ //[DataField("hairballAction", customTypeSerializer: typeof(PrototypeIdSerializer))]
+ //public string HairballAction = "ActionHairball";
+
+ [DataField("hairballActionId",
+ customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string? HairballActionId = "ActionHairball";
+
+ [DataField("hairballAction")]
+ public EntityUid? HairballAction;
+
+ [DataField("eatActionId",
+ customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string? EatActionId = "ActionEatMouse";
+
+ [DataField("eatAction")]
+ public EntityUid? EatAction;
+
+ [DataField("eatActionTarget")]
+ public EntityUid? EatActionTarget = null;
}
diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs
index 559e70e629c..93804eeb5a0 100644
--- a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs
@@ -1,6 +1,5 @@
-namespace Content.Server.Abilities.Felinid
-{
- [RegisterComponent]
- public sealed partial class FelinidFoodComponent : Component
- {}
-}
+namespace Content.Server.Abilities.Felinid;
+
+[RegisterComponent]
+public sealed partial class FelinidFoodComponent : Component
+{ }
diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs
index 28213f71350..6e06a570f6b 100644
--- a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs
@@ -1,4 +1,5 @@
using Content.Shared.Actions;
+using Content.Shared.Actions.Events;
using Content.Shared.Audio;
using Content.Shared.StatusEffect;
using Content.Shared.Throwing;
@@ -6,198 +7,196 @@
using Content.Shared.Inventory;
using Content.Shared.Hands;
using Content.Shared.IdentityManagement;
+using Content.Shared.Nutrition.Components;
+using Content.Shared.Nutrition.EntitySystems;
using Content.Server.Body.Components;
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Server.Medical;
-using Content.Server.Nutrition.Components;
using Content.Server.Nutrition.EntitySystems;
-using Content.Shared.Nutrition.Components;
+using Content.Server.Nutrition.Components;
+using Content.Server.Chemistry.EntitySystems;
using Content.Server.Popups;
-using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
+using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Player;
using Robust.Shared.Random;
using Robust.Shared.Prototypes;
-using Content.Shared.Nutrition.EntitySystems;
-using Content.Shared.Nyanotrasen.Abilities;
using Content.Shared.CombatMode.Pacification; // Frontier
-namespace Content.Server.Abilities.Felinid
+namespace Content.Server.Abilities.Felinid;
+
+public sealed partial class FelinidSystem : EntitySystem
{
- public sealed class FelinidSystem : EntitySystem
+
+ [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
+ [Dependency] private readonly HungerSystem _hungerSystem = default!;
+ [Dependency] private readonly VomitSystem _vomitSystem = default!;
+ [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!;
+ [Dependency] private readonly IRobustRandom _robustRandom = default!;
+ [Dependency] private readonly PopupSystem _popupSystem = default!;
+ [Dependency] private readonly InventorySystem _inventorySystem = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+
+ public override void Initialize()
{
+ base.Initialize();
+ SubscribeLocalEvent(OnInit);
+ SubscribeLocalEvent(OnHairball);
+ SubscribeLocalEvent(OnEatMouse);
+ SubscribeLocalEvent(OnEquipped);
+ SubscribeLocalEvent(OnUnequipped);
+ SubscribeLocalEvent(OnHairballHit);
+ SubscribeLocalEvent(OnHairballPickupAttempt);
+ SubscribeLocalEvent(OnHairballAttemptPacifiedThrow); // Frontier - Block hairball abuse
+ }
- [Dependency] private readonly SharedAudioSystem _audio = default!;
- [Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
- [Dependency] private readonly VomitSystem _vomitSystem = default!;
- [Dependency] private readonly HungerSystem _hunger = default!;
- [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!;
- [Dependency] private readonly IRobustRandom _robustRandom = default!;
- [Dependency] private readonly PopupSystem _popupSystem = default!;
- [Dependency] private readonly InventorySystem _inventorySystem = default!;
- [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
-
- public override void Initialize()
+ private Queue RemQueue = new();
+
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+ foreach (var cat in RemQueue)
{
- base.Initialize();
- SubscribeLocalEvent(OnInit);
- SubscribeLocalEvent(OnHairball);
- SubscribeLocalEvent(OnEatMouse);
- SubscribeLocalEvent(OnEquipped);
- SubscribeLocalEvent(OnUnequipped);
- SubscribeLocalEvent(OnHairballHit);
- SubscribeLocalEvent(OnHairballPickupAttempt);
-
- SubscribeLocalEvent(OnHairballAttemptPacifiedThrow); // Frontier - Block hairball abuse
+ RemComp(cat);
}
+ RemQueue.Clear();
- private Queue RemQueue = new();
-
- public override void Update(float frameTime)
+ foreach (var (hairballComp, catComp) in EntityQuery())
{
- base.Update(frameTime);
- foreach (var cat in RemQueue)
- {
- RemComp(cat);
- }
- RemQueue.Clear();
-
- foreach (var (hairballComp, catComp) in EntityQuery())
- {
- hairballComp.Accumulator += frameTime;
- if (hairballComp.Accumulator < hairballComp.CoughUpTime.TotalSeconds)
- continue;
+ hairballComp.Accumulator += frameTime;
+ if (hairballComp.Accumulator < hairballComp.CoughUpTime.TotalSeconds)
+ continue;
- hairballComp.Accumulator = 0;
- SpawnHairball(hairballComp.Owner, catComp);
- RemQueue.Enqueue(hairballComp.Owner);
- }
+ hairballComp.Accumulator = 0;
+ SpawnHairball(hairballComp.Owner, catComp);
+ RemQueue.Enqueue(hairballComp.Owner);
}
+ }
- private void OnInit(EntityUid uid, FelinidComponent component, ComponentInit args)
- {
- if (!_prototypeManager.TryIndex("ActionHairball", out var hairball))
- return;
- _actionsSystem.AddAction(uid, hairball.ID);
- }
+ private void OnInit(EntityUid uid, FelinidComponent component, ComponentInit args)
+ {
+ if (component.HairballAction != null)
+ return;
- private void OnEquipped(EntityUid uid, FelinidComponent component, DidEquipHandEvent args)
- {
- if (!HasComp(args.Equipped))
- return;
+ //component.HairballAction = Spawn("ActionHairball");
+ _actionsSystem.AddAction(uid, ref component.HairballAction, component.HairballActionId);
+ }
- component.PotentialTarget = args.Equipped;
+ private void OnEquipped(EntityUid uid, FelinidComponent component, DidEquipHandEvent args)
+ {
+ if (!HasComp(args.Equipped))
+ return;
- if (!_prototypeManager.TryIndex("ActionEatMouse", out var eatMouse))
- return;
- component.EatMouseAction = _actionsSystem.AddAction(uid, eatMouse.ID);
- }
+ component.EatActionTarget = args.Equipped;
- private void OnUnequipped(EntityUid uid, FelinidComponent component, DidUnequipHandEvent args)
- {
- if (args.Unequipped == component.PotentialTarget)
- {
- component.PotentialTarget = null;
- if (component.EatMouseAction != null)
- _actionsSystem.RemoveAction(component.EatMouseAction);
- }
- }
+ //component.EatAction = Spawn("ActionEatMouse");
+ _actionsSystem.AddAction(uid, ref component.EatAction, component.EatActionId);
+ }
- private void OnHairball(EntityUid uid, FelinidComponent component, HairballActionEvent args)
+ private void OnUnequipped(EntityUid uid, FelinidComponent component, DidUnequipHandEvent args)
+ {
+ if (args.Unequipped == component.EatActionTarget)
{
- if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) &&
- EntityManager.TryGetComponent(maskUid, out var blocker) &&
- blocker.Enabled)
- {
- _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid);
- return;
- }
-
- _popupSystem.PopupEntity(Loc.GetString("hairball-cough", ("name", Identity.Entity(uid, EntityManager))), uid);
- _audio.PlayPvs("/Audio/Nyanotrasen/Voice/Felinid/hairball.ogg", uid, AudioHelpers.WithVariation(0.15f));
-
- EnsureComp(uid);
- args.Handled = true;
+ component.EatActionTarget = null;
+ if (component.EatAction != null)
+ _actionsSystem.RemoveAction(uid, component.EatAction.Value);
}
+ }
- private void OnEatMouse(EntityUid uid, FelinidComponent component, EatMouseActionEvent args)
+ private void OnHairball(EntityUid uid, FelinidComponent component, HairballActionEvent args)
+ {
+ if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) &&
+ EntityManager.TryGetComponent(maskUid, out var blocker) &&
+ blocker.Enabled)
{
- if (component.PotentialTarget == null)
- return;
-
- if (!TryComp(uid, out var hunger))
- return;
+ _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid);
+ return;
+ }
- if (hunger.CurrentThreshold == Shared.Nutrition.Components.HungerThreshold.Overfed)
- {
- _popupSystem.PopupEntity(Loc.GetString("food-system-you-cannot-eat-any-more"), uid, uid, Shared.Popups.PopupType.SmallCaution);
- return;
- }
+ _popupSystem.PopupEntity(Loc.GetString("hairball-cough", ("name", Identity.Entity(uid, EntityManager))), uid);
+ _audio.PlayPvs("/Audio/Nyanotrasen/Effects/Species/hairball.ogg", uid, AudioHelpers.WithVariation(0.15f));
- if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) &&
- EntityManager.TryGetComponent(maskUid, out var blocker) &&
- blocker.Enabled)
- {
- _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid, Shared.Popups.PopupType.SmallCaution);
- return;
- }
+ EnsureComp(uid);
+ args.Handled = true;
+ }
- if (component.HairballAction != null
- && _actionsSystem.TryGetActionData(component.HairballAction, out var actionData))
- {
- _actionsSystem.SetCharges(component.HairballAction, actionData!.Charges + 1);
- _actionsSystem.SetEnabled(component.HairballAction, true);
- }
- Del(component.PotentialTarget.Value);
- component.PotentialTarget = null;
+ private void OnEatMouse(EntityUid uid, FelinidComponent component, EatMouseActionEvent args)
+ {
+ if (component.EatActionTarget == null)
+ return;
- _audio.PlayPvs("/Audio/Items/eatfood.ogg", uid, AudioHelpers.WithVariation(0.15f));
+ if (!TryComp(uid, out var hunger))
+ return;
- _hunger.ModifyHunger(uid, 70f, hunger);
- _actionsSystem.RemoveAction(uid, component.EatMouseAction);
+ if (hunger.CurrentThreshold == Shared.Nutrition.Components.HungerThreshold.Overfed)
+ {
+ _popupSystem.PopupEntity(Loc.GetString("food-system-you-cannot-eat-any-more"), uid, uid, Shared.Popups.PopupType.SmallCaution);
+ return;
}
- private void SpawnHairball(EntityUid uid, FelinidComponent component)
+ if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) &&
+ EntityManager.TryGetComponent(maskUid, out var blocker) &&
+ blocker.Enabled)
{
- var hairball = EntityManager.SpawnEntity(component.HairballPrototype, Transform(uid).Coordinates);
- var hairballComp = Comp(hairball);
-
- if (TryComp(uid, out var bloodstream) && bloodstream.ChemicalSolution is Entity bloodSol)
- {
- var tempSol = _solutionSystem.SplitSolution(bloodSol, 20);
-
- if (_solutionSystem.TryGetSolution(hairball, hairballComp.SolutionName, out var hairballSolution)
- && hairballSolution is Entity solution)
- {
- _solutionSystem.TryAddSolution(solution, tempSol);
- }
- }
+ _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid, Shared.Popups.PopupType.SmallCaution);
+ return;
}
- private void OnHairballHit(EntityUid uid, HairballComponent component, ThrowDoHitEvent args)
+
+ if (component.HairballAction != null)
{
- if (HasComp(args.Target) || !HasComp(args.Target))
- return;
- if (_robustRandom.Prob(0.2f))
- _vomitSystem.Vomit(args.Target);
+ _actionsSystem.SetCharges(component.HairballAction, 1); // You get the charge back and that's it. Tough.
+ _actionsSystem.SetEnabled(component.HairballAction, true);
}
+ Del(component.EatActionTarget.Value);
+ component.EatActionTarget = null;
+
+ _audio.PlayPvs("/Audio/DeltaV/Items/eatfood.ogg", uid, AudioHelpers.WithVariation(0.15f));
+
+ _hungerSystem.ModifyHunger(uid, 50f, hunger);
+
+ if (component.EatAction != null)
+ _actionsSystem.RemoveAction(uid, component.EatAction.Value);
+ }
+
+ private void SpawnHairball(EntityUid uid, FelinidComponent component)
+ {
+ var hairball = EntityManager.SpawnEntity(component.HairballPrototype, Transform(uid).Coordinates);
+ var hairballComp = Comp(hairball);
- private void OnHairballPickupAttempt(EntityUid uid, HairballComponent component, GettingPickedUpAttemptEvent args)
+ if (TryComp(uid, out var bloodstream) && bloodstream.ChemicalSolution.HasValue)
{
- if (HasComp(args.User) || !HasComp(args.User))
- return;
+ var temp = _solutionSystem.SplitSolution(bloodstream.ChemicalSolution.Value, 20);
- if (_robustRandom.Prob(0.2f))
+ if (_solutionSystem.TryGetSolution(hairball, hairballComp.SolutionName, out var hairballSolution))
{
- _vomitSystem.Vomit(args.User);
- args.Cancel();
+ _solutionSystem.TryAddSolution(hairballSolution.Value, temp);
}
}
+ }
+ private void OnHairballHit(EntityUid uid, HairballComponent component, ThrowDoHitEvent args)
+ {
+ if (HasComp(args.Target) || !HasComp(args.Target))
+ return;
+ if (_robustRandom.Prob(0.2f))
+ _vomitSystem.Vomit(args.Target);
+ }
- private void OnHairballAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) // Frontier - Block hairball abuse
+ private void OnHairballPickupAttempt(EntityUid uid, HairballComponent component, GettingPickedUpAttemptEvent args)
+ {
+ if (HasComp(args.User) || !HasComp(args.User))
+ return;
+
+ if (_robustRandom.Prob(0.2f))
{
- args.Cancel("pacified-cannot-throw-hairball");
+ _vomitSystem.Vomit(args.User);
+ args.Cancel();
}
}
+ private void OnHairballAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) // Frontier - Block hairball abuse
+ {
+ args.Cancel("pacified-cannot-throw-hairball");
+ }
}
diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs
index d358926c20d..01c01dbc2e5 100644
--- a/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs
+++ b/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs
@@ -1,8 +1,7 @@
-namespace Content.Server.Abilities.Felinid
+namespace Content.Server.Abilities.Felinid;
+
+[RegisterComponent]
+public sealed partial class HairballComponent : Component
{
- [RegisterComponent]
- public sealed partial class HairballComponent : Component
- {
- public string SolutionName = "hairball";
- }
+ public string SolutionName = "hairball";
}
diff --git a/Content.Server/Station/Systems/StationRenameWarpsSystems.cs b/Content.Server/Station/Systems/StationRenameWarpsSystems.cs
index cc717e1b64e..5e131baedd6 100644
--- a/Content.Server/Station/Systems/StationRenameWarpsSystems.cs
+++ b/Content.Server/Station/Systems/StationRenameWarpsSystems.cs
@@ -1,3 +1,4 @@
+using System.Linq;
using Content.Server.Station.Components;
using Content.Server.Station.Events;
using Content.Server.Warps;
@@ -17,18 +18,19 @@ public override void Initialize()
private void OnPostInit(EntityUid uid, StationRenameWarpsComponent component, ref StationPostInitEvent args)
{
- SyncWarpPoints(uid);
+ SyncWarpPointsToStation(uid);
}
private void OnRenamed(EntityUid uid, StationRenameWarpsComponent component, StationRenamedEvent args)
{
- SyncWarpPoints(uid);
+ SyncWarpPointsToStation(uid);
}
- private void SyncWarpPoints(EntityUid stationUid)
+ public List> SyncWarpPointsToStation(EntityUid stationUid)
{
+ List> ret = new();
// update all warp points that belong to this station grid
- var query = EntityQueryEnumerator();
+ var query = AllEntityQuery();
while (query.MoveNext(out var uid, out var warp))
{
if (!warp.UseStationName)
@@ -40,6 +42,74 @@ private void SyncWarpPoints(EntityUid stationUid)
var stationName = Name(warpStationUid.Value);
warp.Location = stationName;
+ ret.Add((uid, warp));
}
+ return ret;
+ }
+
+ public List> SyncWarpPointsToStations(IEnumerable stationUids)
+ {
+ List> ret = new();
+ // update all warp points that belong to this station grid
+ var query = AllEntityQuery();
+ while (query.MoveNext(out var uid, out var warp))
+ {
+ if (!warp.UseStationName)
+ continue;
+
+ var warpStationUid = _stationSystem.GetOwningStation(uid) ?? EntityUid.Invalid;
+ if (!warpStationUid.Valid || !stationUids.Contains(warpStationUid))
+ continue;
+
+ var stationName = Name(warpStationUid);
+ warp.Location = stationName;
+ ret.Add((uid, warp));
+ }
+ return ret;
+ }
+
+ // Grid name functions
+ public List> SyncWarpPointsToGrid(EntityUid gridUid)
+ {
+ List> ret = new();
+ // update all warp points that belong to this station grid
+ var query = AllEntityQuery();
+ while (query.MoveNext(out var uid, out var warp, out var xform))
+ {
+ if (!warp.UseStationName)
+ continue;
+
+ var warpGridUid = xform.GridUid ?? EntityUid.Invalid;
+
+ if (!warpGridUid.Valid || gridUid != warpGridUid)
+ continue;
+
+ var gridName = Name(warpGridUid);
+ warp.Location = gridName;
+ ret.Add((uid, warp));
+ }
+ return ret;
+ }
+
+ public List> SyncWarpPointsToGrids(IEnumerable gridUids)
+ {
+ List> ret = new();
+ // update all warp points that belong to this station grid
+ var query = AllEntityQuery();
+ while (query.MoveNext(out var uid, out var warp, out var xform))
+ {
+ if (!warp.UseStationName)
+ continue;
+
+ var warpGridUid = xform.GridUid ?? EntityUid.Invalid;
+
+ if (!warpGridUid.Valid || !gridUids.Contains(warpGridUid))
+ continue;
+
+ var gridName = Name(warpGridUid);
+ warp.Location = gridName;
+ ret.Add((uid, warp));
+ }
+ return ret;
}
}
diff --git a/Content.Server/Warps/WarpPointComponent.cs b/Content.Server/Warps/WarpPointComponent.cs
index 4876a55a7ab..c9be28f1646 100644
--- a/Content.Server/Warps/WarpPointComponent.cs
+++ b/Content.Server/Warps/WarpPointComponent.cs
@@ -16,7 +16,7 @@ public sealed partial class WarpPointComponent : Component
public bool Follow;
///
- /// Frontier - If true, will sync warp point name with a station name.
+ /// Frontier - If true, will sync warp point name with a station/grid name.
///
[ViewVariables(VVAccess.ReadWrite)]
[DataField("useStationName")]
@@ -29,5 +29,19 @@ public sealed partial class WarpPointComponent : Component
[DataField("adminOnly")]
public bool AdminOnly;
// End Frontier
+
+ ///
+ /// Frontier - If true, will set its own name to the station's on creation.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("queryStationName")]
+ public bool QueryStationName;
+
+ ///
+ /// Frontier - If true, will set its own name to the grid's on creation.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("queryGridName")]
+ public bool QueryGridName;
}
}
diff --git a/Content.Server/Warps/WarpPointSystem.cs b/Content.Server/Warps/WarpPointSystem.cs
index d3b978a147d..2eb0ccf9273 100644
--- a/Content.Server/Warps/WarpPointSystem.cs
+++ b/Content.Server/Warps/WarpPointSystem.cs
@@ -1,14 +1,17 @@
using Content.Shared.Examine;
using Content.Shared.Ghost;
+using Content.Server.Station.Systems; // Frontier
namespace Content.Server.Warps;
public sealed class WarpPointSystem : EntitySystem
{
+ [Dependency] private readonly StationSystem _station = default!; // Frontier
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnWarpPointExamine);
+ SubscribeLocalEvent(OnStartup); // Frontier
}
private void OnWarpPointExamine(EntityUid uid, WarpPointComponent component, ExaminedEvent args)
@@ -19,4 +22,23 @@ private void OnWarpPointExamine(EntityUid uid, WarpPointComponent component, Exa
var loc = component.Location == null ? "" : $"'{component.Location}'";
args.PushText(Loc.GetString("warp-point-component-on-examine-success", ("location", loc)));
}
+
+ // Frontier
+ private void OnStartup(EntityUid uid, WarpPointComponent component, ComponentStartup args)
+ {
+ if (component.QueryStationName
+ && _station.GetOwningStation(uid) is { Valid: true } station
+ && TryComp(station, out MetaDataComponent? stationMetadata))
+ {
+ component.Location = stationMetadata.EntityName;
+ }
+ else if (component.QueryGridName
+ && TryComp(uid, out TransformComponent? xform)
+ && xform.GridUid is { Valid: true } grid
+ && TryComp(grid, out MetaDataComponent? gridMetadata))
+ {
+ component.Location = gridMetadata.EntityName;
+ }
+ }
+ // End Frontier
}
diff --git a/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs b/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs
index 028325db0c1..b796f9f281a 100644
--- a/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs
+++ b/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs
@@ -18,6 +18,7 @@
using Robust.Shared.Random;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
+using Content.Shared.Stacks;
namespace Content.Server.Cargo.Systems; // Needs to collide with base namespace
@@ -413,7 +414,7 @@ private void OnRedeemBounty(EntityUid uid, PirateBountyRedemptionConsoleComponen
foreach (var (palletUid, _) in GetContrabandPallets(gridUid))
{
foreach (var ent in _lookup.GetEntitiesIntersecting(palletUid,
- LookupFlags.Dynamic | LookupFlags.Sundries | LookupFlags.Approximate))
+ LookupFlags.Dynamic | LookupFlags.Sundries | LookupFlags.Approximate | LookupFlags.Sensors))
{
// Dont match:
// - anything anchored (e.g. light fixtures)
@@ -489,7 +490,6 @@ private void OnRedeemBounty(EntityUid uid, PirateBountyRedemptionConsoleComponen
if (amount > 0)
{
- // TODO: play a sound here, ideally the "deposit money" chime used on ATMs
_stack.SpawnMultiple("Doubloon", amount, Transform(uid).Coordinates);
_audio.PlayPvs(component.AcceptSound, uid);
_popup.PopupEntity(Loc.GetString("pirate-bounty-redemption-success", ("bounties", redeemedBounties), ("amount", amount)), args.Actor);
@@ -560,26 +560,7 @@ private void CheckEntityForPirateCrateBounty(EntityUid uid, ref PirateBountyEnti
}
else
{
- // Check entry against bounties
- foreach (var entry in bounty.Prototype.Entries)
- {
- // Should add an assertion here, entry.Name should exist.
- // Entry already fulfilled, skip this entity.
- if (bounty.Entries[entry.Name] >= entry.Amount)
- {
- continue;
- }
-
- // Check whitelists for the pirate bounty.
- if (_whitelistSys.IsWhitelistPassOrNull(entry.Whitelist, ent) &&
- _entProtoIdWhitelist.IsWhitelistPassOrNull(entry.IdWhitelist, ent) &&
- _whitelistSys.IsBlacklistFailOrNull(entry.Blacklist, ent))
- {
- bounty.Entries[entry.Name]++;
- bounty.Entities.Add(ent);
- break;
- }
- }
+ AdjustBountyForEntity(ent, bounty);
state.HandledEntities.Add(ent);
}
}
@@ -601,30 +582,40 @@ private void CheckEntityForPirateBounties(EntityUid uid, ref PirateBountyEntityS
else
{
// 3b. If not tagged as labelled, check contents against non-create bounties. If it satisfies any of them, increase the quantity.
- foreach (var (id, bounty) in state.LooseObjectBounties)
+ foreach (var (_, bounty) in state.LooseObjectBounties)
{
- foreach (var entry in bounty.Prototype.Entries)
- {
- // Should add an assertion here, entry.Name should exist.
- // Entry already fulfilled, skip this entity.
- if (bounty.Entries[entry.Name] >= entry.Amount)
- {
- continue;
- }
-
- // Check whitelists for the pirate bounty.
- if ((_whitelistSys.IsWhitelistPass(entry.Whitelist, uid) ||
- _entProtoIdWhitelist.IsWhitelistPass(entry.IdWhitelist, uid)) &&
- _whitelistSys.IsBlacklistFailOrNull(entry.Blacklist, uid))
- {
- bounty.Entries[entry.Name]++;
- bounty.Entities.Add(uid);
- state.HandledEntities.Add(uid);
- return;
- }
- }
+ if (AdjustBountyForEntity(uid, bounty))
+ break;
}
}
state.HandledEntities.Add(uid);
}
+
+ // Checks an object against a bounty, adjusts the bounty's state and returns true if it matches.
+ private bool AdjustBountyForEntity(EntityUid target, PirateBountyState bounty)
+ {
+ foreach (var entry in bounty.Prototype.Entries)
+ {
+ // Should add an assertion here, entry.Name should exist.
+ // Entry already fulfilled, skip this entity.
+ if (bounty.Entries[entry.Name] >= entry.Amount)
+ {
+ continue;
+ }
+
+ // Check whitelists for the pirate bounty.
+ if ((_whitelistSys.IsWhitelistPass(entry.Whitelist, target) ||
+ _entProtoIdWhitelist.IsWhitelistPass(entry.IdWhitelist, target)) &&
+ _whitelistSys.IsBlacklistFailOrNull(entry.Blacklist, target))
+ {
+ if (TryComp(target, out var stack))
+ bounty.Entries[entry.Name] += stack.Count;
+ else
+ bounty.Entries[entry.Name]++;
+ bounty.Entities.Add(target);
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/Content.Server/Construction/Components/ComputerTabletopBoardComponent.cs b/Content.Server/_NF/Construction/Components/ComputerTabletopBoardComponent.cs
similarity index 90%
rename from Content.Server/Construction/Components/ComputerTabletopBoardComponent.cs
rename to Content.Server/_NF/Construction/Components/ComputerTabletopBoardComponent.cs
index 78e892cd947..680ccdb9819 100644
--- a/Content.Server/Construction/Components/ComputerTabletopBoardComponent.cs
+++ b/Content.Server/_NF/Construction/Components/ComputerTabletopBoardComponent.cs
@@ -1,7 +1,7 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
-namespace Content.Server.Construction.Components
+namespace Content.Server._NF.Construction.Components
{
///
/// Used for construction graphs in building tabletop computers.
diff --git a/Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs b/Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs
new file mode 100644
index 00000000000..3d8eba5ad03
--- /dev/null
+++ b/Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs
@@ -0,0 +1,15 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Server._NF.Construction.Components
+{
+ ///
+ /// Used for construction graphs in building wallmount computers.
+ ///
+ [RegisterComponent]
+ public sealed partial class ComputerWallmountBoardComponent : Component
+ {
+ [DataField("prototype", customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string? Prototype { get; private set; }
+ }
+}
diff --git a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs
index 58f2754e36b..10a82ccf864 100644
--- a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs
+++ b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs
@@ -8,7 +8,6 @@
using Content.Shared._NF.GameRule;
using Content.Server.Procedural;
using Content.Server._NF.GameTicking.Events;
-using Content.Shared.Procedural;
using Robust.Server.GameObjects;
using Robust.Server.Maps;
using Robust.Shared.Console;
@@ -16,7 +15,6 @@
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
-using Robust.Shared.Map.Components;
using Content.Shared.Shuttles.Components;
using Content.Server.Shuttles.Systems;
using Content.Server.Cargo.Components;
@@ -24,7 +22,6 @@
using Content.Server.GameTicking.Rules;
using Content.Server.Maps;
using Content.Server.Station.Systems;
-using Content.Shared.CCVar;
using Content.Shared._NF.CCVar; // Frontier
using Robust.Shared.Configuration;
using Robust.Shared.Physics.Components;
@@ -39,6 +36,7 @@
using Content.Shared.GameTicking;
using Robust.Shared.Enums;
using Robust.Server.Player;
+using Content.Server.Warps;
namespace Content.Server._NF.GameRule;
@@ -53,12 +51,11 @@ public sealed class NfAdventureRuleSystem : GameRuleSystem(proto.ID, out var stationProto))
{
- _station.InitializeNewStation(stationProto.Stations[proto.ID], mapUids, stationName);
+ stationUid = _station.InitializeNewStation(stationProto.Stations[proto.ID], mapUids, stationName);
}
// Cache our damping strength
@@ -460,6 +458,23 @@ private bool TrySpawnPoiGrid(PointOfInterestPrototype proto, Vector2 offset, out
prot.PreventArtifactTriggers = true;
}
}
+
+ // Rename warp points after set up if needed
+ if (proto.NameWarp)
+ {
+ List> warpEnts;
+ if (stationUid != null)
+ warpEnts = _renameWarps.SyncWarpPointsToStation(stationUid.Value);
+ else
+ warpEnts = _renameWarps.SyncWarpPointsToGrids(mapUids);
+
+ foreach (var warp in warpEnts)
+ {
+ if (proto.HideWarp)
+ warp.Comp.AdminOnly = true;
+ }
+ }
+
gridUid = mapUids[0];
return true;
}
diff --git a/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs b/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs
index 6696db5bdd8..70be597d3a3 100644
--- a/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs
+++ b/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs
@@ -10,9 +10,15 @@ namespace Content.Server._NF.PublicTransit.Components;
[RegisterComponent, Access(typeof(PublicTransitSystem))]
public sealed partial class TransitShuttleComponent : Component
{
- [DataField("nextStation")]
+ ///
+ /// The name for the bus
+ ///
+ [DataField]
+ public LocId Name = "public-transit-shuttle-name";
+
+ [DataField]
public EntityUid NextStation;
- [DataField("nextTransfer", customTypeSerializer:typeof(TimeOffsetSerializer))]
+ [DataField(customTypeSerializer:typeof(TimeOffsetSerializer))]
public TimeSpan NextTransfer;
}
diff --git a/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs b/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs
index 2e33cd49750..21eb4d17d00 100644
--- a/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs
+++ b/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs
@@ -13,6 +13,8 @@
using Robust.Shared.Map;
using Robust.Shared.Timing;
using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent;
+using Content.Server.Warps;
+using Content.Server.Station.Systems;
namespace Content.Server._NF.PublicTransit;
@@ -28,6 +30,8 @@ public sealed class PublicTransitSystem : EntitySystem
[Dependency] private readonly MapLoaderSystem _loader = default!;
[Dependency] private readonly ShuttleSystem _shuttles = default!;
[Dependency] private readonly ChatSystem _chat = default!;
+ [Dependency] private readonly MetaDataSystem _meta = default!;
+ [Dependency] private readonly StationRenameWarpsSystems _renameWarps = default!;
///
/// If enabled then spawns the bus and sets up the bus line.
@@ -121,6 +125,13 @@ private void OnShuttleStartup(EntityUid uid, TransitShuttleComponent component,
prot.PreventFloorPlacement = true;
prot.PreventFloorRemoval = true;
prot.PreventRCDUse = true;
+
+ var stationName = Loc.GetString(component.Name);
+
+ var meta = EnsureComp(uid);
+ _meta.SetEntityName(uid, stationName, meta);
+
+ _renameWarps.SyncWarpPointsToGrid(uid);
}
///
diff --git a/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs b/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs
index ab3a1e72f98..3bb39c05c05 100644
--- a/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs
+++ b/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs
@@ -1,3 +1,5 @@
+using Robust.Shared.Prototypes;
+
namespace Content.Server._NF.Salvage;
///
@@ -19,4 +21,28 @@ public sealed partial class NFSalvageMobRestrictionsComponent : Component
///
[DataField]
public bool DespawnIfOffLinkedGrid = true;
+
+ ///
+ /// Components to be added on death.
+ ///
+ [DataField]
+ public ComponentRegistry AddComponentsOnDeath { get; set; } = new();
+
+ ///
+ /// Components to be removed on death.
+ ///
+ [DataField]
+ public ComponentRegistry RemoveComponentsOnDeath { get; set; } = new();
+
+ ///
+ /// Components to be added on revivel.
+ ///
+ [DataField]
+ public ComponentRegistry AddComponentsOnRevival { get; set; } = new();
+
+ ///
+ /// Components to be removed on revival.
+ ///
+ [DataField]
+ public ComponentRegistry RemoveComponentsOnRevival { get; set; } = new();
}
diff --git a/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs b/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs
index be6efb31c9b..fd5faf385e6 100644
--- a/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs
+++ b/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs
@@ -2,6 +2,8 @@
using Content.Shared.Body.Components;
using Content.Server.Body.Systems;
using Content.Server.Explosion.EntitySystems;
+using Content.Shared.Mobs;
+using Robust.Shared.Prototypes;
namespace Content.Server._NF.Salvage;
@@ -10,6 +12,7 @@ public sealed class SalvageMobRestrictionsSystem : EntitySystem
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
[Dependency] private readonly BodySystem _body = default!;
[Dependency] private readonly ExplosionSystem _explosion = default!;
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public override void Initialize()
{
@@ -18,6 +21,7 @@ public override void Initialize()
SubscribeLocalEvent(OnInit);
SubscribeLocalEvent(OnRemove);
SubscribeLocalEvent(OnRemoveGrid);
+ SubscribeLocalEvent(OnMobState);
}
private void OnInit(EntityUid uid, NFSalvageMobRestrictionsComponent component, ComponentInit args)
@@ -67,11 +71,20 @@ private void OnRemoveGrid(EntityUid uid, SalvageMobRestrictionsGridComponent com
_explosion.QueueExplosion(target, ExplosionSystem.DefaultExplosionPrototypeId, 5, 10, 5);
Del(target);
}
- // Old implementation
- //else if (TryComp(target, out DamageableComponent? dc))
- //{
- // _damageableSystem.SetAllDamage(target, dc, 200);
- //}
+ }
+ }
+
+ private void OnMobState(EntityUid uid, NFSalvageMobRestrictionsComponent component, MobStateChangedEvent args)
+ {
+ if (args.NewMobState == MobState.Dead)
+ {
+ EntityManager.AddComponents(uid, component.AddComponentsOnDeath);
+ EntityManager.RemoveComponents(uid, component.RemoveComponentsOnDeath);
+ }
+ else if (args.OldMobState == MobState.Dead)
+ {
+ EntityManager.AddComponents(uid, component.AddComponentsOnRevival);
+ EntityManager.RemoveComponents(uid, component.RemoveComponentsOnRevival);
}
}
}
diff --git a/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs b/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs
index ba2fdbca7cd..2c88d94b739 100644
--- a/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs
+++ b/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs
@@ -10,6 +10,12 @@ namespace Content.Server._NF.Smuggling.Components;
[Access(typeof(DeadDropSystem))]
public sealed partial class DeadDropComponent : Component
{
+ ///
+ /// The name for the deaddrop pod
+ ///
+ [DataField]
+ public LocId Name = "deaddrop-shuttle-name";
+
///
/// When the next drop will occur. Used internally.
///
diff --git a/Content.Server/_NF/Smuggling/DeadDropSystem.cs b/Content.Server/_NF/Smuggling/DeadDropSystem.cs
index 5ec919c1b18..a7eb2573577 100644
--- a/Content.Server/_NF/Smuggling/DeadDropSystem.cs
+++ b/Content.Server/_NF/Smuggling/DeadDropSystem.cs
@@ -11,6 +11,7 @@
using Content.Server.Station.Components;
using Content.Server.Station.Systems;
using Content.Server.StationEvents.Events;
+using Content.Server.Warps;
using Content.Shared._NF.CCVar;
using Content.Shared._NF.Smuggling.Prototypes;
using Content.Shared.Database;
@@ -49,6 +50,7 @@ public sealed class DeadDropSystem : EntitySystem
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly SharedGameTicker _ticker = default!;
[Dependency] private readonly LinkedLifecycleGridSystem _linkedLifecycleGrid = default!;
+ [Dependency] private readonly StationRenameWarpsSystems _stationRenameWarps = default!;
private ISawmill _sawmill = default!;
private readonly Queue _drops = [];
@@ -468,6 +470,13 @@ private void SendDeadDrop(EntityUid uid, DeadDropComponent component, EntityUid
return;
}
+ var stationName = Loc.GetString(component.Name);
+
+ var meta = EnsureComp(gridUids[0]);
+ _meta.SetEntityName(gridUids[0], stationName, meta);
+
+ _stationRenameWarps.SyncWarpPointsToGrids(gridUids);
+
// Get sector info (with sane defaults if it doesn't exist)
int maxSimultaneousPods = 5;
int deadDropsThisHour = 0;
diff --git a/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs b/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs
index 18a56579eae..fd1348caaef 100644
--- a/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs
+++ b/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs
@@ -80,6 +80,16 @@ public interface IBluespaceSpawnGroup
/// Should we set the metadata name of a grid. Useful for admin purposes.
///
public bool NameGrid { get; set; }
+
+ ///
+ /// Should we set the warppoint name based on the grid name.
+ ///
+ public bool NameWarp { get; set; }
+
+ ///
+ /// Should we set the warppoint to be seen only by admins.
+ ///
+ public bool HideWarp { get; set; }
}
[DataRecord]
@@ -112,6 +122,12 @@ public sealed class BluespaceDungeonSpawnGroup : IBluespaceSpawnGroup
///
public bool NameGrid { get; set; } = false;
+
+ ///
+ public bool NameWarp { get; set; } = false; // Loads in too late, cannot name warps, use WarpPointDungeon instead.
+
+ ///
+ public bool HideWarp { get; set; } = false;
}
[DataRecord]
@@ -130,4 +146,6 @@ public sealed class BluespaceGridSpawnGroup : IBluespaceSpawnGroup
public int MaxCount { get; set; } = 1;
public ComponentRegistry AddComponents { get; set; } = new();
public bool NameGrid { get; set; } = true;
+ public bool NameWarp { get; set; } = true;
+ public bool HideWarp { get; set; } = false;
}
diff --git a/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs b/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs
index 3451a0951f7..592442252ca 100644
--- a/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs
+++ b/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs
@@ -15,6 +15,8 @@
using Content.Server.Procedural;
using Robust.Shared.Prototypes;
using Content.Shared.Salvage;
+using Content.Server.Warps;
+using Content.Server.Station.Systems;
namespace Content.Server.StationEvents.Events;
@@ -32,6 +34,8 @@ public sealed class BluespaceErrorRule : StationEventSystem 0)
{
_metadata.SetEntityName(spawned, Loc.GetString(_random.Pick(group.NameLoc)));
+
}
if (_protoManager.TryIndex(group.NameDataset, out var dataset))
@@ -89,6 +94,16 @@ protected override void Started(EntityUid uid, BluespaceErrorRuleComponent compo
_metadata.SetEntityName(spawned, SharedSalvageSystem.GetFTLName(dataset, _random.Next()));
}
+ if (group.NameWarp)
+ {
+ var warps = _renameWarps.SyncWarpPointsToGrid(spawned);
+ foreach (var warp in warps)
+ {
+ if (group.HideWarp)
+ warp.Comp.AdminOnly = true;
+ }
+ }
+
EntityManager.AddComponents(spawned, group.AddComponents);
component.GridsUid.Add(spawned);
@@ -241,7 +256,8 @@ protected override void Ended(EntityUid uid, BluespaceErrorRuleComponent compone
foreach (MapId mapId in component.MapsUid)
{
- _mapManager.DeleteMap(mapId);
+ if (_mapManager.MapExists(mapId))
+ _mapManager.DeleteMap(mapId);
}
}
}
diff --git a/Content.Server/_NF/Storage/AnchorableStorageComponent.cs b/Content.Server/_NF/Storage/AnchorableStorageComponent.cs
new file mode 100644
index 00000000000..13a987bc568
--- /dev/null
+++ b/Content.Server/_NF/Storage/AnchorableStorageComponent.cs
@@ -0,0 +1,8 @@
+namespace Content.Server._NF.Storage;
+
+///
+/// This is used for restricting anchor operations on storage (one bag max per tile)
+/// and ejecting sapient contents on anchor.
+///
+[RegisterComponent]
+public sealed partial class AnchorableStorageComponent : Component;
diff --git a/Content.Server/_NF/Storage/AnchorableStorageSystem.cs b/Content.Server/_NF/Storage/AnchorableStorageSystem.cs
new file mode 100644
index 00000000000..aae7868bdbf
--- /dev/null
+++ b/Content.Server/_NF/Storage/AnchorableStorageSystem.cs
@@ -0,0 +1,115 @@
+using System.Linq;
+using Content.Server.Popups;
+using Content.Shared.Construction.Components;
+using Content.Shared.Mind.Components;
+using Content.Shared.Nyanotrasen.Item.PseudoItem;
+using Content.Shared.Storage;
+using JetBrains.Annotations;
+using Robust.Server.GameObjects;
+using Robust.Shared.Containers;
+using Robust.Shared.Map.Components;
+
+namespace Content.Server._NF.Storage;
+
+///
+/// This is used for restricting anchor operations on storage (one bag max per tile)
+/// and ejecting living contents on anchor.
+///
+public sealed class AnchorableStorageSystem : EntitySystem
+{
+ [Dependency] private readonly MapSystem _map = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly TransformSystem _xform = default!;
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnAnchorStateChanged);
+ SubscribeLocalEvent(OnAnchorAttempt);
+ SubscribeLocalEvent(OnInsertAttempt);
+ }
+
+ private void OnAnchorStateChanged(Entity ent, ref AnchorStateChangedEvent args)
+ {
+ if (!args.Anchored)
+ return;
+
+ if (CheckOverlap((ent, ent.Comp, Transform(ent))))
+ {
+ _popup.PopupEntity(Loc.GetString("anchored-storage-already-present"), ent);
+ _xform.Unanchor(ent, Transform(ent));
+ return;
+ }
+
+ // Eject any sapient creatures inside the storage.
+ // Does not recurse down into bags in bags - player characters are the largest concern, and they'll only fit in duffelbags.
+ if (!TryComp(ent.Owner, out StorageComponent? storage))
+ return;
+
+ var entsToRemove = storage.StoredItems.Keys.Where(storedItem =>
+ HasComp(storedItem)
+ || HasComp(storedItem)
+ ).ToList();
+
+ foreach (var removeUid in entsToRemove)
+ _container.RemoveEntity(ent.Owner, removeUid);
+ }
+
+ private void OnAnchorAttempt(Entity ent, ref AnchorAttemptEvent args)
+ {
+ if (args.Cancelled)
+ return;
+
+ // Nothing around? We can anchor without issue.
+ if (!CheckOverlap((ent, ent.Comp, Transform(ent))))
+ return;
+
+ _popup.PopupEntity(Loc.GetString("anchored-storage-already-present"), ent, args.User);
+ args.Cancel();
+ }
+
+ private void OnInsertAttempt(Entity ent, ref ContainerIsInsertingAttemptEvent args)
+ {
+ if (args.Cancelled)
+ return;
+
+ // Check for living things, they should not insert when anchored.
+ if (!HasComp(args.EntityUid) && !HasComp(args.EntityUid))
+ return;
+
+ if (Transform(ent.Owner).Anchored)
+ args.Cancel();
+ }
+
+ [PublicAPI]
+ public bool CheckOverlap(EntityUid uid)
+ {
+ if (!TryComp(uid, out AnchorableStorageComponent? comp))
+ return false;
+
+ return CheckOverlap((uid, comp, Transform(uid)));
+ }
+
+ public bool CheckOverlap(Entity ent)
+ {
+ if (ent.Comp2.GridUid is not { } grid || !TryComp(grid, out var gridComp))
+ return false;
+
+ var indices = _map.TileIndicesFor(grid, gridComp, ent.Comp2.Coordinates);
+ var enumerator = _map.GetAnchoredEntitiesEnumerator(grid, gridComp, indices);
+
+ while (enumerator.MoveNext(out var otherEnt))
+ {
+ // Don't match yourself.
+ if (otherEnt == ent.Owner)
+ continue;
+
+ // Is another storage entity is already anchored here?
+ if (HasComp(otherEnt))
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/Content.Shared/Cloning/CloningPodComponent.cs b/Content.Shared/Cloning/CloningPodComponent.cs
index 60d4c1e64e5..e783d7dcc1d 100644
--- a/Content.Shared/Cloning/CloningPodComponent.cs
+++ b/Content.Shared/Cloning/CloningPodComponent.cs
@@ -88,11 +88,20 @@ public sealed partial class CloningPodComponent : Component
[DataField("partRatingMaterialMultiplier")]
public float PartRatingMaterialMultiplier = 0.85f;
+ // Frontier: machine part upgrades
+ ///
+ /// The base multiplier on the body weight, which determines the
+ /// amount of biomass needed to clone, and is affected by part upgrades.
+ ///
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
+ public float BaseBiomassRequirementMultiplier = 1;
+
+ // Frontier: machine part upgrades
///
/// The current multiplier on the body weight, which determines the
/// amount of biomass needed to clone.
///
- [ViewVariables(VVAccess.ReadWrite)]
+ [DataField, ViewVariables(VVAccess.ReadWrite)]
public float BiomassRequirementMultiplier = 1;
///
diff --git a/Content.Shared/DeltaV/CCVars/DCCVars.cs b/Content.Shared/DeltaV/CCVars/DCCVars.cs
index d76fcd882ce..fe9a3edec9d 100644
--- a/Content.Shared/DeltaV/CCVars/DCCVars.cs
+++ b/Content.Shared/DeltaV/CCVars/DCCVars.cs
@@ -13,12 +13,36 @@ public sealed class DCCVars
/// Anti-EORG measure. Will add pacified to all players upon round end.
/// Its not perfect, but gets the job done.
///
- //public static readonly CVarDef RoundEndPacifist =
- // CVarDef.Create("game.round_end_pacifist", false, CVar.SERVERONLY);
+ public static readonly CVarDef RoundEndPacifist =
+ CVarDef.Create("game.round_end_pacifist", false, CVar.REPLICATED);
+
+ ///
+ /// Whether the no EORG popup is enabled.
+ ///
+ public static readonly CVarDef RoundEndNoEorgPopup =
+ CVarDef.Create("game.round_end_eorg_popup_enabled", true, CVar.SERVER | CVar.REPLICATED);
+
+ ///
+ /// Skip the no EORG popup.
+ ///
+ public static readonly CVarDef SkipRoundEndNoEorgPopup =
+ CVarDef.Create("game.skip_round_end_eorg_popup", false, CVar.CLIENTONLY | CVar.ARCHIVE);
+
+ ///
+ /// How long to display the EORG popup for.
+ ///
+ public static readonly CVarDef RoundEndNoEorgPopupTime =
+ CVarDef.Create("game.round_end_eorg_popup_time", 5f, CVar.SERVER | CVar.REPLICATED);
///
/// Disables all vision filters for species like Vulpkanin or Harpies. There are good reasons someone might want to disable these.
///
public static readonly CVarDef NoVisionFilters =
- CVarDef.Create("accessibility.no_vision_filters", false, CVar.CLIENTONLY | CVar.ARCHIVE);
+ CVarDef.Create("accessibility.no_vision_filters", true, CVar.CLIENTONLY | CVar.ARCHIVE);
+
+ ///
+ /// Whether the Shipyard is enabled.
+ ///
+ //public static readonly CVarDef Shipyard =
+ // CVarDef.Create("shuttle.shipyard", true, CVar.SERVERONLY);
}
diff --git a/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs b/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs
index f75fcee8d42..cfe44016444 100644
--- a/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs
+++ b/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs
@@ -1,6 +1,7 @@
using Content.Shared.Inventory.Events;
using Content.Shared.Tag;
using Content.Shared.Humanoid;
+using Content.Shared._NF.Clothing.Components; // Frontier
namespace Content.Shared.DeltaV.Harpy;
@@ -9,8 +10,8 @@ public sealed class HarpyVisualsSystem : EntitySystem
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly SharedHumanoidAppearanceSystem _humanoidSystem = default!;
- [ValidatePrototypeId]
- private const string HarpyWingsTag = "HidesHarpyWings";
+ // [ValidatePrototypeId] // Frontier
+ // private const string HarpyWingsTag = "HidesHarpyWings"; // Frontier
public override void Initialize()
{
@@ -22,7 +23,7 @@ public override void Initialize()
private void OnDidEquipEvent(EntityUid uid, HarpySingerComponent component, DidEquipEvent args)
{
- if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag))
+ if (args.Slot == "outerClothing" && HasComp(args.Equipment)) // Frontier: Swap tag to comp
{
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, false);
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, false);
@@ -31,7 +32,7 @@ private void OnDidEquipEvent(EntityUid uid, HarpySingerComponent component, DidE
private void OnDidUnequipEvent(EntityUid uid, HarpySingerComponent component, DidUnequipEvent args)
{
- if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag))
+ if (args.Slot == "outerClothing" && HasComp(args.Equipment)) // Frontier: Swap tag to comp
{
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, true);
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, true);
diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs
index 762561ed322..9d49ee8bce2 100644
--- a/Content.Shared/Inventory/InventorySystem.Equip.cs
+++ b/Content.Shared/Inventory/InventorySystem.Equip.cs
@@ -6,6 +6,7 @@
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction;
+using Content.Shared.Interaction.Events;
using Content.Shared.Inventory.Events;
using Content.Shared.Item;
using Content.Shared.Movement.Systems;
@@ -319,9 +320,10 @@ public bool TryUnequip(
InventoryComponent? inventory = null,
ClothingComponent? clothing = null,
bool reparent = true,
- bool checkDoafter = false)
+ bool checkDoafter = false,
+ bool child = false) // Frontier: raise DroppedEvent on all children
{
- return TryUnequip(uid, uid, slot, silent, force, predicted, inventory, clothing, reparent, checkDoafter);
+ return TryUnequip(uid, uid, slot, silent, force, predicted, inventory, clothing, reparent, checkDoafter, child); // Frontier: add child
}
public bool TryUnequip(
@@ -334,9 +336,10 @@ public bool TryUnequip(
InventoryComponent? inventory = null,
ClothingComponent? clothing = null,
bool reparent = true,
- bool checkDoafter = false)
+ bool checkDoafter = false,
+ bool child = false) // Frontier: raise DroppedEvent on all children
{
- return TryUnequip(actor, target, slot, out _, silent, force, predicted, inventory, clothing, reparent, checkDoafter);
+ return TryUnequip(actor, target, slot, out _, silent, force, predicted, inventory, clothing, reparent, checkDoafter, child); // Frontier: add child
}
public bool TryUnequip(
@@ -349,9 +352,10 @@ public bool TryUnequip(
InventoryComponent? inventory = null,
ClothingComponent? clothing = null,
bool reparent = true,
- bool checkDoafter = false)
+ bool checkDoafter = false,
+ bool child = false) // Frontier: raise DroppedEvent on all children
{
- return TryUnequip(uid, uid, slot, out removedItem, silent, force, predicted, inventory, clothing, reparent, checkDoafter);
+ return TryUnequip(uid, uid, slot, out removedItem, silent, force, predicted, inventory, clothing, reparent, checkDoafter, child); // Frontier: add child
}
public bool TryUnequip(
@@ -365,7 +369,8 @@ public bool TryUnequip(
InventoryComponent? inventory = null,
ClothingComponent? clothing = null,
bool reparent = true,
- bool checkDoafter = false)
+ bool checkDoafter = false,
+ bool child = false) // Frontier: raise DroppedEvent on all children
{
removedItem = null;
@@ -429,13 +434,18 @@ public bool TryUnequip(
if (slotDef != slotDefinition && slotDef.DependsOn == slotDefinition.Name)
{
//this recursive call might be risky
- TryUnequip(actor, target, slotDef.Name, true, true, predicted, inventory, reparent: reparent);
+ TryUnequip(actor, target, slotDef.Name, true, true, predicted, inventory, reparent: reparent, child: true); // Frontier: add child
}
}
if (!_containerSystem.Remove(removedItem.Value, slotContainer, force: force, reparent: reparent))
return false;
+ // Frontier: spawn dropped events for children
+ if (child)
+ RaiseLocalEvent(removedItem.Value, new DroppedEvent(actor), true);
+ // End Frontier
+
// TODO: Inventory needs a hot cleanup hoo boy
// Check if something else (AKA toggleable) dumped it into a container.
if (!_containerSystem.IsEntityInContainer(removedItem.Value))
diff --git a/Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs b/Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs
deleted file mode 100644
index b8d0e0c4c7d..00000000000
--- a/Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using Content.Shared.Actions;
-
-namespace Content.Shared.Nyanotrasen.Abilities;
-
-public sealed partial class HairballActionEvent : InstantActionEvent
-{
-
-}
-
-public sealed partial class EatMouseActionEvent : InstantActionEvent
-{
-
-}
diff --git a/Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs b/Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs
new file mode 100644
index 00000000000..63573febb5c
--- /dev/null
+++ b/Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs
@@ -0,0 +1,3 @@
+namespace Content.Shared.Actions.Events;
+
+public sealed partial class EatMouseActionEvent : InstantActionEvent {}
diff --git a/Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs b/Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs
new file mode 100644
index 00000000000..1c05611b865
--- /dev/null
+++ b/Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs
@@ -0,0 +1,3 @@
+namespace Content.Shared.Actions.Events;
+
+public sealed partial class HairballActionEvent : InstantActionEvent { }
diff --git a/Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs b/Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs
new file mode 100644
index 00000000000..474c4e86009
--- /dev/null
+++ b/Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs
@@ -0,0 +1,11 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared._NF.Clothing.Components;
+///
+/// To be used with Harpy to replace the tag
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class HarpyHideWingsComponent : Component
+{
+
+}
diff --git a/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs b/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs
index 4a77068470c..d99e5839400 100644
--- a/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs
+++ b/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs
@@ -19,9 +19,21 @@ public sealed partial class PointOfInterestPrototype : IPrototype
///
/// The name of this point of interest
///
- [DataField]
+ [DataField(required: true)]
public string Name { get; private set; } = "";
+ ///
+ /// Should we set the warppoint name based on the grid name.
+ ///
+ [DataField]
+ public bool NameWarp { get; set; } = true;
+
+ ///
+ /// Should we set the warppoint name based on the grid name.
+ ///
+ [DataField]
+ public bool HideWarp { get; set; } = false;
+
///
/// Minimum range to spawn this POI at
///
diff --git a/Content.Shared/_NF/Pirate/SharedPirateSystem.cs b/Content.Shared/_NF/Pirate/SharedPirateSystem.cs
index bf665b25283..fa2f65747b7 100644
--- a/Content.Shared/_NF/Pirate/SharedPirateSystem.cs
+++ b/Content.Shared/_NF/Pirate/SharedPirateSystem.cs
@@ -16,18 +16,3 @@ public enum PiratePalletConsoleUiKey : byte
}
public abstract class SharedPirateSystem : EntitySystem {}
-
-// TODO: remove these.
-// [Serializable, NetSerializable]
-// public enum PirateTelepadState : byte
-// {
-// Unpowered,
-// Idle,
-// Teleporting,
-// };
-
-// [Serializable, NetSerializable]
-// public enum PirateTelepadVisuals : byte
-// {
-// State,
-// };
diff --git a/Resources/Audio/DeltaV/Items/eatfood.ogg b/Resources/Audio/DeltaV/Items/eatfood.ogg
new file mode 100644
index 00000000000..69fd5374933
Binary files /dev/null and b/Resources/Audio/DeltaV/Items/eatfood.ogg differ
diff --git a/Resources/Audio/Nyanotrasen/Animals/moth_chitter.ogg b/Resources/Audio/Nyanotrasen/Animals/moth_chitter.ogg
deleted file mode 100644
index efeafa555ad..00000000000
Binary files a/Resources/Audio/Nyanotrasen/Animals/moth_chitter.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/Voice/Felinid/hairball.ogg b/Resources/Audio/Nyanotrasen/Effects/Species/hairball.ogg
similarity index 100%
rename from Resources/Audio/Nyanotrasen/Voice/Felinid/hairball.ogg
rename to Resources/Audio/Nyanotrasen/Effects/Species/hairball.ogg
diff --git a/Resources/Audio/Nyanotrasen/Effects/Species/license.txt b/Resources/Audio/Nyanotrasen/Effects/Species/license.txt
new file mode 100644
index 00000000000..0370cf25c61
--- /dev/null
+++ b/Resources/Audio/Nyanotrasen/Effects/Species/license.txt
@@ -0,0 +1 @@
+hairball.ogg taken from https://en.wikipedia.org/wiki/File:Common_house_cat_coughing_hairball.ogv CC-BY-SA-3.0
diff --git a/Resources/Audio/Nyanotrasen/Voice/Felinid/attributions.yml b/Resources/Audio/Nyanotrasen/Voice/Felinid/attributions.yml
index bca921c51df..8bf0c857032 100644
--- a/Resources/Audio/Nyanotrasen/Voice/Felinid/attributions.yml
+++ b/Resources/Audio/Nyanotrasen/Voice/Felinid/attributions.yml
@@ -21,4 +21,4 @@
- files: ["cat_growl1.ogg"]
license: "CC0-1.0"
copyright: "Original sound by https://freesound.org/people/Zabuhailo/ - fade in and out, converted to ogg."
- source: "https://freesound.org/people/Zabuhailo/sounds/146968/"
+ source: "https://freesound.org/people/Zabuhailo/sounds/146968/"
\ No newline at end of file
diff --git a/Resources/Audio/Nyanotrasen/Voice/Felinid/license.txt b/Resources/Audio/Nyanotrasen/Voice/Felinid/license.txt
index 5c2880930c9..82be1055af2 100644
--- a/Resources/Audio/Nyanotrasen/Voice/Felinid/license.txt
+++ b/Resources/Audio/Nyanotrasen/Voice/Felinid/license.txt
@@ -1,5 +1,4 @@
cat_scream1.ogg licensed under CC0 1.0 taken from Queen_Westeros at https://freesound.org/people/queen_westeros/sounds/222590/
cat_scream2.ogg licensed under CC4.0 taken from InspectorJ at https://freesound.org/people/InspectorJ/sounds/415209/
cat_scream3.ogg licensed under CC sampling plus 1.0 taken from Hamface at https://freesound.org/people/Hamface/sounds/98669/
-cat_wilhelm.ogg used with apologies to type moon
-hairball.ogg taken from https://en.wikipedia.org/wiki/File:Common_house_cat_coughing_hairball.ogv CC-BY-SA-3.0
\ No newline at end of file
+cat_wilhelm.ogg used with apologies to type moon
\ No newline at end of file
diff --git a/Resources/Audio/Nyanotrasen/blowout1.ogg b/Resources/Audio/Nyanotrasen/blowout1.ogg
deleted file mode 100644
index edac38f0d51..00000000000
Binary files a/Resources/Audio/Nyanotrasen/blowout1.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/fireball1.ogg b/Resources/Audio/Nyanotrasen/fireball1.ogg
deleted file mode 100644
index 68de2342b15..00000000000
Binary files a/Resources/Audio/Nyanotrasen/fireball1.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/flamethrower1.ogg b/Resources/Audio/Nyanotrasen/flamethrower1.ogg
deleted file mode 100644
index 1939bd21625..00000000000
Binary files a/Resources/Audio/Nyanotrasen/flamethrower1.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/flamethrower2.ogg b/Resources/Audio/Nyanotrasen/flamethrower2.ogg
deleted file mode 100644
index 2ec5e4f0247..00000000000
Binary files a/Resources/Audio/Nyanotrasen/flamethrower2.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/flamethrower3.ogg b/Resources/Audio/Nyanotrasen/flamethrower3.ogg
deleted file mode 100644
index 34082376cf2..00000000000
Binary files a/Resources/Audio/Nyanotrasen/flamethrower3.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/heartbeat_fast.ogg b/Resources/Audio/Nyanotrasen/heartbeat_fast.ogg
deleted file mode 100644
index 85a034d9bd0..00000000000
Binary files a/Resources/Audio/Nyanotrasen/heartbeat_fast.ogg and /dev/null differ
diff --git a/Resources/Audio/Nyanotrasen/license.txt b/Resources/Audio/Nyanotrasen/license.txt
deleted file mode 100644
index c7d32e7e2f1..00000000000
--- a/Resources/Audio/Nyanotrasen/license.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-heartbeat_fast.ogg is modified from https://freesound.org/people/greyseraphim/sounds/21409/ which is licensed under the Creative Commons 0 License. This modified file follows the same license.
-fireball1.ogg is modified from https://freesound.org/people/wjl/sounds/267887/ which is licensed under the Creative Commons 0 License. This modified file follows the same license.
-flamethrower1.ogg is modified from https://freesound.org/people/pugaeme/sounds/396890/ which is licensed under the Creative Commons Attribution 3.0 License. This modified file follows the same license.
-flamethrower2.ogg is modified from https://freesound.org/people/pugaeme/sounds/396890/ which is licensed under the Creative Commons Attribution 3.0 License. This modified file follows the same license.
-flamethrower3.ogg is modified from https://freesound.org/people/pugaeme/sounds/396890/ which is licensed under the Creative Commons Attribution 3.0 License. This modified file follows the same license.
-blowout1.ogg is licensed under the Creative Commons Attribution-ShareAlike 4.0 License by the author @Vordenburg.
diff --git a/Resources/Audio/Nyanotrasen/shogi_piece_clack.ogg b/Resources/Audio/Nyanotrasen/shogi_piece_clack.ogg
deleted file mode 100644
index e4ba5088f90..00000000000
Binary files a/Resources/Audio/Nyanotrasen/shogi_piece_clack.ogg and /dev/null differ
diff --git a/Resources/Audio/_NF/Animals/attributions.yml b/Resources/Audio/_NF/Animals/attributions.yml
index 3a107de838b..69845298141 100644
--- a/Resources/Audio/_NF/Animals/attributions.yml
+++ b/Resources/Audio/_NF/Animals/attributions.yml
@@ -22,3 +22,8 @@
license: "CC-BY-4.0"
copyright: "Audio is recorded/created by 'salvantrix' for Frontier"
source: "https://github.com/new-frontiers-14/frontier-station-14/"
+
+- files: ["dragon_hatch.ogg"]
+ license: "CC-BY-4.0"
+ copyright: "Edited from tgstation by whatston3 (GitHub)"
+ source: "https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0"
diff --git a/Resources/Audio/_NF/Animals/dragon_hatch.ogg b/Resources/Audio/_NF/Animals/dragon_hatch.ogg
new file mode 100644
index 00000000000..ced13462805
Binary files /dev/null and b/Resources/Audio/_NF/Animals/dragon_hatch.ogg differ
diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml
index 11aff536b4b..ddf1c1e6377 100644
--- a/Resources/Changelog/Frontier.yml
+++ b/Resources/Changelog/Frontier.yml
@@ -5109,13 +5109,12 @@ Entries:
changes:
- type: Add
message: >-
- New massive dungeon asteroids were added, keep an eye out for them on
- radar and be informed about them on supply radio, be prepared for a
- fight.
+ Added new massive dungeon asteroids - they last 30 minutes, spawn every
+ 35-40 minutes, and are announced on Supply radio.
- type: Tweak
message: >-
- The cooldown on expedition FTL has been extended, you will now need to
- wait longer to depart on another mission.
+ The cooldown on expedition FTL has been extended to 20 minutes, you will
+ now need to wait a bit longer to depart on another mission.
- type: Remove
message: Space dungeons (the big orange platforms) no longer spawn.
id: 5478
@@ -5188,3 +5187,153 @@ Entries:
message: The golden mask is no longer cursed.
id: 5487
time: '2024-11-09T01:33:02.0000000+00:00'
+- author: dvir001
+ changes:
+ - type: Remove
+ message: Removed Tritium and Frezon gas exude and consume mutations from botany.
+ id: 5488
+ time: '2024-11-09T16:03:37.0000000+00:00'
+- author: whatston3
+ changes:
+ - type: Fix
+ message: Pirate bounties should now all be redeemable.
+ id: 5489
+ time: '2024-11-09T22:30:07.0000000+00:00'
+- author: erhardsteinhauer
+ changes:
+ - type: Tweak
+ message: >-
+ Expanded the list of items that can be recycled to such an extent that
+ salvaging may become a competitive alternative to mining for obtaining
+ raw materials.
+ id: 5490
+ time: '2024-11-10T01:56:02.0000000+00:00'
+- author: erhardsteinhauer
+ changes:
+ - type: Tweak
+ message: >-
+ Added more recipes to biogenerator including various animal cubes,
+ bioplastic, biowood, biopapersheet and soil crate.
+ - type: Tweak
+ message: Biogenerator replaced biocube fabricator in research tree.
+ - type: Tweak
+ message: >-
+ Increased biomass requirements for printing animal/critter cubes and for
+ cloning.
+ - type: Tweak
+ message: >-
+ Soil beds can now be printed from the biogenerator and assembled with a
+ shovel.
+ id: 5491
+ time: '2024-11-10T02:04:45.0000000+00:00'
+- author: erhardsteinhauer
+ changes:
+ - type: Add
+ message: >-
+ Bags (backpacks, duffels, etc.) can be anchored to floor plating under
+ floor tiles to create a hidden stash. T-Ray scanners can be used to find
+ hidden stashes.
+ - type: Tweak
+ message: Added T-Ray scanner to DetDrobe.
+ id: 5492
+ time: '2024-11-10T02:14:40.0000000+00:00'
+- author: dustylens
+ changes:
+ - type: Tweak
+ message: Adjusted condenser power draw from 10k to 3k.
+ id: 5493
+ time: '2024-11-10T12:20:24.0000000+00:00'
+- author: KieueCaprie
+ changes:
+ - type: Fix
+ message: The cutter machine now accepts gold and silver ingots.
+ id: 5494
+ time: '2024-11-10T20:50:24.0000000+00:00'
+- author: Tych0theSynth
+ changes:
+ - type: Add
+ message: Added wallmount mass scanner and radar telescreens.
+ id: 5495
+ time: '2024-11-11T19:01:01.0000000+00:00'
+- author: whatston3
+ changes:
+ - type: Fix
+ message: Fixed access for round start Janitors.
+ id: 5496
+ time: '2024-11-11T20:24:28.0000000+00:00'
+- author: whatston3
+ changes:
+ - type: Remove
+ message: Pills no longer give biomass on recycling.
+ id: 5497
+ time: '2024-11-12T04:56:35.0000000+00:00'
+- author: dvir001
+ changes:
+ - type: Tweak
+ message: >-
+ Material requirements for printing EVA suits were increased, material
+ yield from recycling was decreased.
+ - type: Tweak
+ message: >-
+ Glaive re-balance buffed and removed from vending, can be found in
+ salvage and tech
+ - type: Tweak
+ message: Changed some vending machines items overall price
+ id: 5498
+ time: '2024-11-12T11:25:06.0000000+00:00'
+- author: GreaseMonk
+ changes:
+ - type: Remove
+ message: removed textiles crate from trade station
+ id: 5499
+ time: '2024-11-12T15:31:39.0000000+00:00'
+- author: dvir001
+ changes:
+ - type: Tweak
+ message: >-
+ The PTK-800 Range and damage lowered, mining ability stay the same with
+ the PTK-800 able to mine without self destructing itself on reflects.
+ id: 5500
+ time: '2024-11-14T16:10:49.0000000+00:00'
+- author: MisterMecky
+ changes:
+ - type: Remove
+ message: >-
+ The salvage weapons rack (Found on the prospector) no longer contains a
+ crusher glaive.
+ id: 5501
+ time: '2024-11-15T06:11:49.0000000+00:00'
+- author: dustylens
+ changes:
+ - type: Tweak
+ message: Replaced locked airlocks in Bison with unlocked variants.
+ id: 5502
+ time: '2024-11-15T13:02:39.0000000+00:00'
+- author: erhardsteinhauer
+ changes:
+ - type: Add
+ message: Added craftable shrapnel crossbow bolt.
+ - type: Tweak
+ message: Explosive and EMP crossbow bolts are once again craftable.
+ id: 5503
+ time: '2024-11-15T14:07:02.0000000+00:00'
+- author: dvir001
+ changes:
+ - type: Tweak
+ message: >-
+ Species vision filters are now disabled by default. You can re-enable
+ them in the settings!
+ id: 5504
+ time: '2024-11-15T19:00:06.0000000+00:00'
+- author: erhardsteinhauer
+ changes:
+ - type: Fix
+ message: Fixed Gestio and SVT mags visial bug.
+ id: 5505
+ time: '2024-11-15T19:44:45.0000000+00:00'
+- author: dvir001
+ changes:
+ - type: Tweak
+ message: Most mobs can only be stripped of items after they have been killed.
+ id: 5506
+ time: '2024-11-15T22:28:27.0000000+00:00'
diff --git a/Resources/Locale/en-US/_NF/adventure/adventure.ftl b/Resources/Locale/en-US/_NF/adventure/adventure.ftl
index 72305911954..b0e638d3e18 100644
--- a/Resources/Locale/en-US/_NF/adventure/adventure.ftl
+++ b/Resources/Locale/en-US/_NF/adventure/adventure.ftl
@@ -29,7 +29,7 @@ shuttle-ftl-too-many = Too many shuttles already on expedition!
changelog-tab-title-Upstream = Upstream Changelog
multiauth-already-connected = Already connected to Frontier Official servers.
+public-transit-shuttle-name = Public Transport Shuttle
public-transit-departure = Now departing for {$destination}. Estimated travel time: {$flytime} seconds.
public-transit-arrival = Thank you for choosing NT Public Transit. Next transfer to {$destination} departs in {$waittime} seconds.
-adventure-space-dungeon-name = Space Dungeon: {$dungeonPrototype}
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_NF/bluespace-events/events.ftl b/Resources/Locale/en-US/_NF/bluespace-events/events.ftl
index c1e46ffd405..33a3e1ac606 100644
--- a/Resources/Locale/en-US/_NF/bluespace-events/events.ftl
+++ b/Resources/Locale/en-US/_NF/bluespace-events/events.ftl
@@ -1,14 +1,15 @@
+
station-event-bluespace-dungeon-start-announcement = Signatures of a large inbound object have been detected. Investigate with caution, NanoTrasen is not liable for damages sustained or loss of life.
station-event-bluespace-dungeon-warning-announcement = Bluespace instability detected on foreign object, five minutes until estimated departure.
station-event-bluespace-dungeon-end-announcement = Critical bluespace instability detected, the foreign object has exited the sector.
-station-event-bluespace-vault-start-announcement = A NanoTrasen autonomous armored vault transport has made an FTL error and will soon arrive nearby. Your sector will be rewarded for it's safe return.
+station-event-bluespace-vault-start-announcement = A NanoTrasen armored vault is inbound to the sector. The NFSD may declare the vault a No Fly Zone. Station accounts will be rewarded for its safe return.
station-event-bluespace-vault-warning-announcement = Remote FTL procedures initialized, five minutes until vault extraction.
-station-event-bluespace-vault-end-announcement = We have successfully retrieved the vault from your sector and have reimbursed your nearby Frontier Outpost accordingly.
+station-event-bluespace-vault-end-announcement = We have retrieved the vault from your sector. Station accounts have been paid.
-station-event-bluespace-cache-start-announcement = A Syndicate transport has been intercepted from FTL and will soon arrive nearby. Guard the armored weapons cache until NanoTrasen can retrieve it for a reward.
+station-event-bluespace-cache-start-announcement = A Syndicate weapons cache is inbound to the sector. The NFSD may declare the cache a No Fly Zone. Station accounts will be rewarded for guarding the cache.
station-event-bluespace-cache-warning-announcement = Remote FTL procedures initialized, five minutes until weapons cache extraction.
-station-event-bluespace-cache-end-announcement = We have successfully retrieved the Syndicate weapons cache from your sector and have reimbursed your nearby Frontier Outpost accordingly.
+station-event-bluespace-cache-end-announcement = We have retrieved the Syndicate weapons cache from your sector. Station accounts have been paid.
station-event-bluespace-asteroid-start-announcement = Long range scans indicate an unusually large asteroid entering the sector. NanoTrasen advises prospectors to divert operations for maximum profit potential.
station-event-bluespace-asteroid-warning-announcement = Bluespace instability detected on asteroid, five minutes until estimated departure.
@@ -18,15 +19,15 @@ station-event-bluespace-ship-start-announcement = We have detected an unusual FT
station-event-bluespace-ship-warning-announcement = Remote FTL procedures initialized, five minutes until ship dissipation.
station-event-bluespace-ship-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the unknown ship has been dissipated to ensure non-collision.
-station-event-bluespace-syndicate-ftl-interception-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command disrupted the FTL-jump of Syndicate Vessel, according to our deepspace scanners the vessel either already entered the real space in your sector or is about to enter. Code: Intercept, Expunge, Decimate, Cauterise. Expect armed opposition, use of lethal force against enemy agents is authorized. Do note: any loss of NT-affiliated personnel lives will not be compensated. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department to ensure safe transportation of Syndicate technology to CentCom for study. Should there be any prisoners, security personnel is required to prepare them for transportation to CentCom for interrogation through the NT-patented Contraband Exchange System (tm).
-station-event-bluespace-syndicate-ftl-interception-warning-announcement = Remote FTL procedures initialized, five minutes until Syndicate ship dissipation.
-station-event-bluespace-syndicate-ftl-interception-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Syndicate Vessel has been dissipated to ensure non-collision.
+station-event-bluespace-syndicate-ftl-interception-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command disrupted the FTL-jump of Syndicate vessel, according to our deepspace scanners the vessel either already entered the real space in your sector or is about to enter. Code: Intercept, Expunge, Decimate, Cauterise. Expect armed opposition, use of lethal force against enemy agents is authorized. Do note: any loss of NT-affiliated personnel lives will not be compensated. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department to ensure safe transportation of Syndicate technology to CentCom for study. Should there be any prisoners, security personnel is required to prepare them for transportation to CentCom for interrogation through the NT-patented Contraband Exchange System (tm).
+station-event-bluespace-syndicate-ftl-interception-warning-announcement = Remote FTL procedures initialized, five minutes until Syndicate vessel dissipation.
+station-event-bluespace-syndicate-ftl-interception-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Syndicate vessel has been dissipated to ensure non-collision.
-station-event-bluespace-wizardfederation-scout-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a Wizard Federation small vessel. Code: Intercept, Detain, Incarcerate. Arrest the intruders and prepare them for transportation to CentCom for interrogation through NT patented Contraband Exchange System (tm).
+station-event-bluespace-wizardfederation-scout-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a small Wizard Federation vessel. Code: Intercept, Detain, Incarcerate. Arrest the intruders and prepare them for transportation to CentCom for interrogation through NT patented Contraband Exchange System (tm).
station-event-bluespace-wizardfederation-scout-warning-announcement = Remote FTL procedures initialized, five minutes until Wizard Federation vessel dissipation.
station-event-bluespace-wizardfederation-scout-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Wizard Federation vessel has been dissipated to ensure non-collision.
-station-event-bluespace-bloodmoon-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a Blood Cult's Vessel. Code: Intercept, Expunge, Exterminate, Cauterise. Expect armed opposition, use of lethal force against enemy combatants is mandatory, take no prisoners. Warning! Materials on the Blood Cult's Vessel possess Level 3 Cognitohazard! Local security force is advised to take steps to limit NT personnel's exposure to hazardous materials. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department for containment and undergo a medical examination afterward.
+station-event-bluespace-bloodmoon-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a Blood Cult vessel. Code: Intercept, Expunge, Exterminate, Cauterise. Expect armed opposition, use of lethal force against enemy combatants is mandatory, take no prisoners. Warning! Materials on the Blood Cult vessel possess Level 3 Cognitohazard! Local security force is advised to take steps to limit NT personnel's exposure to hazardous materials. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department for containment and undergo a medical examination afterward.
station-event-bluespace-bloodmoon-warning-announcement = Remote FTL procedures initialized, five minutes until Blood Cult vessel dissipation.
station-event-bluespace-bloodmoon-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Blood Cult vessel has been dissipated to ensure non-collision.
diff --git a/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl b/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl
index 3d5cf75d304..c569a8104ec 100644
--- a/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl
+++ b/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl
@@ -4,7 +4,7 @@ pirate-bounty-item-extinguisher = Fire Extinguisher
pirate-bounty-item-captainGloves = Captain Gloves
pirate-bounty-item-gyro = Gyroscope (any)
pirate-bounty-item-defib = Defibrillator
-pirate-bounty-item-researchDisk = Research Disk
+pirate-bounty-item-researchDisk = Technology Disk
pirate-bounty-item-alcohol = Booze Dispenser
pirate-bounty-item-thruster = Thruster
pirate-bounty-item-gravGen = Gravity Generator
@@ -12,7 +12,7 @@ pirate-bounty-item-chemVend = ChemVend
pirate-bounty-item-vendingmachine = Vending Machine (any)
pirate-bounty-item-mercSuit = Mercenary Hardsuit
pirate-bounty-item-cappy = Cappy
-pirate-bounty-item-cultistNeck = Cultist Necklace
+pirate-bounty-item-cultistNeck = Cultist Amulet
pirate-bounty-item-nfsdCampaign = NFSD Campaign Hat (any)
pirate-bounty-item-scafsuit = SCAF Suit
pirate-bounty-item-rtg = RTG
@@ -27,6 +27,7 @@ pirate-bounty-item-medicalfabboard = Medical Tech Fab Board
pirate-bounty-item-orebox = Ore Box
pirate-bounty-item-autolathe = Autolathe
pirate-bounty-item-gold = Gold
+pirate-bounty-item-diamond = Diamond
pirate-bounty-item-plasmacanister = Plasma Canister
pirate-bounty-item-contracrate = Contraband Crate
pirate-bounty-item-hydrotray = Hydroponics Tray
diff --git a/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl b/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl
index 984e91b8395..1edcfb71f7a 100644
--- a/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl
+++ b/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl
@@ -3,5 +3,4 @@ lathe-category-armor-nf = Armor
lathe-category-storage-nf = Storage
lathe-category-kitchen-nf = Kitchen
lathe-category-clothes-nf = Clothes
-lathe-category-medical-nf = Medical
-lathe-category-materials-nf = Materials
\ No newline at end of file
+lathe-category-medical-nf = Medical
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl b/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl
index ede822e9539..9dd11135356 100644
--- a/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl
+++ b/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl
@@ -1,3 +1,4 @@
+deaddrop-shuttle-name = Syndicate Supply Drop
deaddrop-search-text = Search closer
deaddrop-hint-pretext = A Syndicate drop pod will be dispatched to the following coordinates:
deaddrop-hint-posttext = Our agents on the inside will pay anyone willing to smuggle these goods into NT territory.
diff --git a/Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl b/Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl
new file mode 100644
index 00000000000..799d15cf649
--- /dev/null
+++ b/Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl
@@ -0,0 +1 @@
+anchored-storage-already-present = There's already a bag anchored here!
diff --git a/Resources/Locale/en-US/deltav/markings/felinid.ftl b/Resources/Locale/en-US/deltav/markings/felinid.ftl
index d1b372d567e..b49bdae1b92 100644
--- a/Resources/Locale/en-US/deltav/markings/felinid.ftl
+++ b/Resources/Locale/en-US/deltav/markings/felinid.ftl
@@ -1,3 +1,4 @@
+# Frontier: all entries capitalized, remove mention of "colour"
marking-FelinidFluffyTail-Felinid_fluffy_tail_full = Fluffy Tail
marking-FelinidFluffyTailRings-Felinid_fluffy_tail_full = Fluffy Tail
marking-FelinidFluffyTailRings-felinid_fluffy_tail_rings = Fluffy Tail Rings
diff --git a/Resources/Locale/en-US/deltav/markings/rodentia.ftl b/Resources/Locale/en-US/deltav/markings/rodentia.ftl
index f569aa208eb..7b5c621604c 100644
--- a/Resources/Locale/en-US/deltav/markings/rodentia.ftl
+++ b/Resources/Locale/en-US/deltav/markings/rodentia.ftl
@@ -1,3 +1,4 @@
+# Frontier: all entries capitalized
# head markings
## patterns
@@ -16,33 +17,33 @@ marking-RodentiaHeadTopEarBat = Ears - Bat
marking-RodentiaHeadTopEarBat-bat = Outer ear
marking-RodentiaHeadTopEarBatLarge = Ears - Bat (Large)
-marking-RodentiaHeadTopEarBatLarge-bat_large = Outer ear
+marking-RodentiaHeadTopEarBatLarge-bat_large = Outer Ear
marking-RodentiaHeadTopEarHamster = Ears - Hamster
-marking-RodentiaHeadTopEarHamster-hamster = Outer ear
-marking-RodentiaHeadTopEarHamster-hamster_overlay = Inner ear
+marking-RodentiaHeadTopEarHamster-hamster = Outer Ear
+marking-RodentiaHeadTopEarHamster-hamster_overlay = Inner Ear
marking-RodentiaHeadTopEarLong = Ears - Long
-marking-RodentiaHeadTopEarLong-long = Outer ear
-marking-RodentiaHeadTopEarLong-long_overlay = Inner ear
+marking-RodentiaHeadTopEarLong-long = Outer Ear
+marking-RodentiaHeadTopEarLong-long_overlay = Inner Ear
marking-RodentiaHeadTopEarMouse = Ears - Mouse
-marking-RodentiaHeadTopEarMouse-mouse = Outer ear
-marking-RodentiaHeadTopEarMouse-mouse_overlay = Inner ear
+marking-RodentiaHeadTopEarMouse-mouse = Outer Ear
+marking-RodentiaHeadTopEarMouse-mouse_overlay = Inner Ear
marking-RodentiaHeadTopEarMouseLarge = Ears - Mouse (Large)
-marking-RodentiaHeadTopEarMouseLarge-mouse_large = Outer
-marking-RodentiaHeadTopEarMouseLarge-mouse_large_overlay = Inner ear
+marking-RodentiaHeadTopEarMouseLarge-mouse_large = Outer
+marking-RodentiaHeadTopEarMouseLarge-mouse_large_overlay = Inner Ear
marking-RodentiaHeadTopEarNone = Ears - Hidden
marking-RodentiaHeadTopEarNone-none = None
marking-RodentiaHeadTopEarPointy = Ears - Pointy
-marking-RodentiaHeadTopEarPointy-pointy = Outer ear
+marking-RodentiaHeadTopEarPointy-pointy = Outer Ear
marking-RodentiaHeadTopEarRabbit = Ears - Rabbit
-marking-RodentiaHeadTopEarRabbit-rabbit = Outer ear
-marking-RodentiaHeadTopEarRabbit-rabbit_overlay = Inner ear
+marking-RodentiaHeadTopEarRabbit-rabbit = Outer Ear
+marking-RodentiaHeadTopEarRabbit-rabbit_overlay = Inner Ear
marking-RodentiaHeadTopEarSmall = Ears - Small
marking-RodentiaHeadTopEarSmall-small = Outer Ear
diff --git a/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl b/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl
new file mode 100644
index 00000000000..cb5d7262d3a
--- /dev/null
+++ b/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl
@@ -0,0 +1,9 @@
+# Frontier: edits to title and messages
+no-eorg-popup-title = Frontier Station
+no-eorg-popup-label = Welcome to the End of Round!
+no-eorg-popup-message = [bold]End-of-round griefing (EORG)[/bold] is [color=#DD0000]not allowed[/color]. Please stay in character until the lobby screen appears to maintain an immersive environment for everyone. Thank you for respecting the community rules!
+no-eorg-popup-rule = [bold][color=#a4885c]Significant end-of-round griefing (EORG) is not allowed.[/color][/bold]
+no-eorg-popup-rule-text = This includes attacking, destroying, polluting, and severely injuring players or property without reason. Remember that you are playing a character throughout the round.
+no-eorg-popup-close-button = Sounds good!
+no-eorg-popup-close-button-wait = The close button will be enabled after {$time} seconds.
+no-eorg-popup-skip-checkbox = Don't show this again.
diff --git a/Resources/Locale/en-US/markings/felinid.ftl b/Resources/Locale/en-US/markings/felinid.ftl
index d2e7abae4f7..08618b64823 100644
--- a/Resources/Locale/en-US/markings/felinid.ftl
+++ b/Resources/Locale/en-US/markings/felinid.ftl
@@ -1,56 +1,57 @@
+# Frontier: all entries capitalized
marking-FelinidEarsBasic = Basic Ears
-marking-FelinidEarsBasic-basic_outer = Outer ear
-marking-FelinidEarsBasic-basic_inner = Inner ear
+marking-FelinidEarsBasic-basic_outer = Outer Ear
+marking-FelinidEarsBasic-basic_inner = Inner Ear
marking-FelinidEarsCurled = Curled Ears
-marking-FelinidEarsCurled-curled_outer = Outer ear
-marking-FelinidEarsCurled-curled_inner = Inner ear
+marking-FelinidEarsCurled-curled_outer = Outer Ear
+marking-FelinidEarsCurled-curled_inner = Inner Ear
marking-FelinidEarsDroopy = Droopy Ears
-marking-FelinidEarsDroopy-droopy_outer = Outer ear
-marking-FelinidEarsDroopy-droopy_inner = Inner ear
+marking-FelinidEarsDroopy-droopy_outer = Outer Ear
+marking-FelinidEarsDroopy-droopy_inner = Inner Ear
marking-FelinidEarsFuzzy = Fuzzy Ears
-marking-FelinidEarsFuzzy-basic_outer = Outer ear
-marking-FelinidEarsFuzzy-fuzzy_inner = Ear fuzz
+marking-FelinidEarsFuzzy-basic_outer = Outer Ear
+marking-FelinidEarsFuzzy-fuzzy_inner = Ear Fuzz
marking-FelinidEarsStubby = Stubby Ears
-marking-FelinidEarsStubby-stubby_outer = Outer ear
-marking-FelinidEarsStubby-stubby_inner = Inner ear
+marking-FelinidEarsStubby-stubby_outer = Outer Ear
+marking-FelinidEarsStubby-stubby_inner = Inner Ear
marking-FelinidEarsTall = Tall Ears
-marking-FelinidEarsTall-tall_outer = Outer ear
-marking-FelinidEarsTall-tall_inner = Inner ear
-marking-FelinidEarsTall-tall_fuzz = Ear fuzz
+marking-FelinidEarsTall-tall_outer = Outer Ear
+marking-FelinidEarsTall-tall_inner = Inner Ear
+marking-FelinidEarsTall-tall_fuzz = Ear Fuzz
marking-FelinidEarsTorn = Torn Ears
-marking-FelinidEarsTorn-torn_outer = Outer ear
-marking-FelinidEarsTorn-torn_inner = Inner ear
+marking-FelinidEarsTorn-torn_outer = Outer Ear
+marking-FelinidEarsTorn-torn_inner = Inner Ear
marking-FelinidEarsWide = Wide Ears
-marking-FelinidEarsWide-wide_outer = Outer ear
-marking-FelinidEarsWide-wide_inner = Inner ear
+marking-FelinidEarsWide-wide_outer = Outer Ear
+marking-FelinidEarsWide-wide_inner = Inner Ear
marking-FelinidTailBasic = Basic Tail
-marking-FelinidTailBasic-basic_tail_tip = Tail tip
-marking-FelinidTailBasic-basic_tail_stripes_even = Tail stripes, even
-marking-FelinidTailBasic-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasic-basic_tail_tip = Tail Tip
+marking-FelinidTailBasic-basic_tail_stripes_even = Tail Stripes, Even
+marking-FelinidTailBasic-basic_tail_stripes_odd = Tail Stripes, Odd
marking-FelinidTailBasicWithBow = Basic Tail with Bow
-marking-FelinidTailBasicWithBow-basic_tail_tip = Tail tip
-marking-FelinidTailBasicWithBow-basic_tail_stripes_even = Tail stripes, even
-marking-FelinidTailBasicWithBow-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasicWithBow-basic_tail_tip = Tail Tip
+marking-FelinidTailBasicWithBow-basic_tail_stripes_even = Tail Stripes, Even
+marking-FelinidTailBasicWithBow-basic_tail_stripes_odd = Tail Stripes, Odd
marking-FelinidTailBasicWithBow-basic_bow = Bow
marking-FelinidTailBasicWithBell = Basic Tail with Bell
-marking-FelinidTailBasicWithBell-basic_tail_tip = Tail tip
-marking-FelinidTailBasicWithBell-basic_tail_stripes_even = Tail stripes, even
-marking-FelinidTailBasicWithBell-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasicWithBell-basic_tail_tip = Tail Tip
+marking-FelinidTailBasicWithBell-basic_tail_stripes_even = Tail Stripes, Even
+marking-FelinidTailBasicWithBell-basic_tail_stripes_odd = Tail Stripes, Odd
marking-FelinidTailBasicWithBell-basic_bell = Bell
marking-FelinidTailBasicWithBowAndBell = Basic Tail with Bow & Bell
-marking-FelinidTailBasicWithBowAndBell-basic_tail_tip = Tail tip
-marking-FelinidTailBasicWithBowAndBell-basic_tail_stripes_even = Tail stripes, even
-marking-FelinidTailBasicWithBowAndBell-basic_tail_stripes_odd = Tail stripes, odd
+marking-FelinidTailBasicWithBowAndBell-basic_tail_tip = Tail Tip
+marking-FelinidTailBasicWithBowAndBell-basic_tail_stripes_even = Tail Stripes, Even
+marking-FelinidTailBasicWithBowAndBell-basic_tail_stripes_odd = Tail Stripes, Odd
marking-FelinidTailBasicWithBowAndBell-basic_bow = Bow
marking-FelinidTailBasicWithBowAndBell-basic_bell = Bell
diff --git a/Resources/Locale/en-US/markings/gauze.ftl b/Resources/Locale/en-US/markings/gauze.ftl
index 7ed35a90ba1..7526b01eec3 100644
--- a/Resources/Locale/en-US/markings/gauze.ftl
+++ b/Resources/Locale/en-US/markings/gauze.ftl
@@ -1,14 +1,15 @@
-marking-GauzeLefteyePatch-gauze_lefteye_2 = Gauze eyepatch (Left)
-marking-GauzeLefteyePatch = Gauze eyepatch (Left)
+# Frontier: all entries capitalized
+marking-GauzeLefteyePatch-gauze_lefteye_2 = Gauze Eyepatch (Left)
+marking-GauzeLefteyePatch = Gauze Eyepatch (Left)
-marking-GauzeLefteyePad-gauze_lefteye_1 = Gauze eyepad (Left)
-marking-GauzeLefteyePad = Gauze eyepad (Left)
+marking-GauzeLefteyePad-gauze_lefteye_1 = Gauze Eyepad (Left)
+marking-GauzeLefteyePad = Gauze Eyepad (Left)
-marking-GauzeRighteyePatch-gauze_righteye_2 = Gauze eyepatch (Right)
-marking-GauzeRighteyePatch = Gauze eyepatch (Right)
+marking-GauzeRighteyePatch-gauze_righteye_2 = Gauze Eyepatch (Right)
+marking-GauzeRighteyePatch = Gauze Eyepatch (Right)
-marking-GauzeRighteyePad-gauze_righteye_1 = Gauze eyepad (Right)
-marking-GauzeRighteyePad = Gauze eyepad (Right)
+marking-GauzeRighteyePad-gauze_righteye_1 = Gauze Eyepad (Right)
+marking-GauzeRighteyePad = Gauze Eyepad (Right)
marking-GauzeShoulder-gauze_shoulder = Gauze Shoulder Sling
marking-GauzeShoulder = Gauze Shoulder Sling
diff --git a/Resources/Locale/en-US/markings/reptilian.ftl b/Resources/Locale/en-US/markings/reptilian.ftl
index d66d3cb9e64..8a9f6947dd8 100644
--- a/Resources/Locale/en-US/markings/reptilian.ftl
+++ b/Resources/Locale/en-US/markings/reptilian.ftl
@@ -1,3 +1,4 @@
+# Frontier: all entries capitalized
marking-LizardFrillsShort-frills_short = Lizard Frills (Short)
marking-LizardFrillsShort = Lizard Frills (Short)
@@ -105,8 +106,8 @@ marking-LizardHornsFloppyKoboldEars = Lizard Ears (Floppy Kobold)
marking-LizardChestUnderbelly-body_underbelly = Lizard Chest (Underbelly)
marking-LizardChestUnderbelly = Lizard Chest (Underbelly)
-marking-LizardChestBackspikes-body_backspikes = Lizard Back spikes (Four)
-marking-LizardChestBackspikes = Lizard Back spikes (Four)
+marking-LizardChestBackspikes-body_backspikes = Lizard Back Spikes (Four)
+marking-LizardChestBackspikes = Lizard Back Spikes (Four)
marking-LizardSnoutSplotch = Lizard Snout (Splotch)
marking-LizardSnoutSplotch-snout_splotch_primary = Muzzle
diff --git a/Resources/Locale/en-US/markings/tattoos.ftl b/Resources/Locale/en-US/markings/tattoos.ftl
index a3d1d1ef686..b483eb97c3d 100644
--- a/Resources/Locale/en-US/markings/tattoos.ftl
+++ b/Resources/Locale/en-US/markings/tattoos.ftl
@@ -1,7 +1,8 @@
+# Frontier: all entries capitalized
marking-TattooHiveChest-tattoo_hive_chest = Back Tattoo (Hive)
marking-TattooHiveChest = Back Tattoo (Hive)
-marking-TattooNightlingChest-tattoo_nightling = Chest Tattoo (nightling)
+marking-TattooNightlingChest-tattoo_nightling = Chest Tattoo (Nightling)
marking-TattooNightlingChest = Chest Tattoo (Nightling)
marking-TattooSilverburghLeftLeg-tattoo_silverburgh_l_leg = Left Leg Tattoo (Silverburg)
diff --git a/Resources/Locale/en-US/markings/vox_tattoos.ftl b/Resources/Locale/en-US/markings/vox_tattoos.ftl
index f7f3c7292c7..c0b12eceda5 100644
--- a/Resources/Locale/en-US/markings/vox_tattoos.ftl
+++ b/Resources/Locale/en-US/markings/vox_tattoos.ftl
@@ -1,11 +1,12 @@
+# Frontier: all entries capitalized
marking-TattooVoxHeartLeftArm-heart_l_arm = Vox Left Arm Tattoo (Heart)
marking-TattooVoxHeartLeftArm = Vox Left Arm Tattoo (Heart)
marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart)
marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart)
-marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (hive)
-marking-TattooVoxHiveChest = Vox Chest Tattoo (hive)
+marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (Hive)
+marking-TattooVoxHiveChest = Vox Chest Tattoo (Hive)
-marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (nightling)
-marking-TattooVoxNightlingChest = Vox Chest Tattoo (nightling)
+marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (Nightling)
+marking-TattooVoxNightlingChest = Vox Chest Tattoo (Nightling)
diff --git a/Resources/Locale/en-US/markings/vulpkanin.ftl b/Resources/Locale/en-US/markings/vulpkanin.ftl
index 8244b5f86bd..23d627074a2 100644
--- a/Resources/Locale/en-US/markings/vulpkanin.ftl
+++ b/Resources/Locale/en-US/markings/vulpkanin.ftl
@@ -1,49 +1,50 @@
-marking-VulpEar-vulp = Vulpkanin ears (base)
-marking-VulpEar-vulp-inner = Vulpkanin ears (inner)
+# Frontier: all entries capitalized
+marking-VulpEar-vulp = Vulpkanin Ears (Base)
+marking-VulpEar-vulp-inner = Vulpkanin Ears (Inner)
marking-VulpEar = Vulpkanin
-marking-VulpEarFade-vulp = Vulpkanin ears (base)
-marking-VulpEarFade-vulp-fade = Vulpkanin ears (fade)
-marking-VulpEarFade = Vulpkanin (fade)
+marking-VulpEarFade-vulp = Vulpkanin Ears (Base)
+marking-VulpEarFade-vulp-fade = Vulpkanin Ears (Fade)
+marking-VulpEarFade = Vulpkanin (Fade)
-marking-VulpEarSharp-vulp = Vulpkanin ears (base)
-marking-VulpEarSharp-vulp-sharp = Vulpkanin ears (sharp)
-marking-VulpEarSharp = Vulpkanin (sharp)
+marking-VulpEarSharp-vulp = Vulpkanin Ears (Base)
+marking-VulpEarSharp-vulp-sharp = Vulpkanin Ears (Sharp)
+marking-VulpEarSharp = Vulpkanin (Sharp)
-marking-VulpEarJackal-jackal = Jackal ears (base)
-marking-VulpEarJackal-jackal-inner = Jackal ears (inner)
+marking-VulpEarJackal-jackal = Jackal Ears (Base)
+marking-VulpEarJackal-jackal-inner = Jackal Ears (Inner)
marking-VulpEarJackal = Vulpkanin Jackal
-marking-VulpEarTerrier-terrier = Terrier ears (base)
-marking-VulpEarTerrier-terrier-inner = Terrier ears (inner)
+marking-VulpEarTerrier-terrier = Terrier Ears (Base)
+marking-VulpEarTerrier-terrier-inner = Terrier Ears (Inner)
marking-VulpEarTerrier = Vulpkanin Terrier
-marking-VulpEarWolf-wolf = Wolf ears (base)
-marking-VulpEarWolf-wolf-inner = Wolf ears (inner)
+marking-VulpEarWolf-wolf = Wolf Ears (Base)
+marking-VulpEarWolf-wolf-inner = Wolf Ears (Inner)
marking-VulpEarWolf = Vulpkanin Wolf
-marking-VulpEarFennec-fennec = Fennec ears (base)
-marking-VulpEarFennec-fennec-inner = Fennec ears (inner)
+marking-VulpEarFennec-fennec = Fennec Ears (Base)
+marking-VulpEarFennec-fennec-inner = Fennec Ears (Inner)
marking-VulpEarFennec = Vulpkanin Fennec
-marking-VulpEarFox-fox = Fox ears
+marking-VulpEarFox-fox = Fox Ears
marking-VulpEarFox = Vulpkanin Fox
-marking-VulpEarOtie-otie = Otie ears (base)
-marking-VulpEarOtie-otie-inner = Otie ears (inner)
+marking-VulpEarOtie-otie = Otie Ears (Base)
+marking-VulpEarOtie-otie-inner = Otie Ears (Inner)
marking-VulpEarOtie = Vulpkanin Otie
-marking-VulpEarTajaran-msai = Tajaran ears (base)
-marking-VulpEarTajaran-msai-inner = Tajaran ears (inner)
+marking-VulpEarTajaran-msai = Tajaran Ears (Base)
+marking-VulpEarTajaran-msai-inner = Tajaran Ears (Inner)
marking-VulpEarTajaran = Vulpkanin Tajaran
-marking-VulpEarShock-shock = Shock ears
+marking-VulpEarShock-shock = Shock Ears
marking-VulpEarShock = Vulpkanin Shock
-marking-VulpEarCoyote-coyote = Coyote ears
+marking-VulpEarCoyote-coyote = Coyote Ears
marking-VulpEarCoyote = Vulpkanin Coyote
-marking-VulpEarDalmatian-dalmatian = Dalmatian ears
+marking-VulpEarDalmatian-dalmatian = Dalmatian Ears
marking-VulpEarDalmatian = Vulpkanin Dalmatian
@@ -57,11 +58,11 @@ marking-VulpSnout = Vulpkanin Muzzle
marking-VulpSnoutSharp-muzzle_sharp = Muzzle
marking-VulpSnoutSharp-nose = Nose
-marking-VulpSnoutSharp = Vulpkanin Muzzle (sharp)
+marking-VulpSnoutSharp = Vulpkanin Muzzle (Sharp)
marking-VulpSnoutFade-muzzle_fade = Muzzle
marking-VulpSnoutFade-nose = Nose
-marking-VulpSnoutFade = Vulpkanin Muzzle (fade)
+marking-VulpSnoutFade = Vulpkanin Muzzle (Fade)
marking-VulpSnoutNose-nose = Nose
marking-VulpSnoutNose = Vulpkanin Nose
@@ -70,8 +71,8 @@ marking-VulpSnoutMask-mask = Mask
marking-VulpSnoutMask-nose = Nose
marking-VulpSnoutMask = Vulpkanin Mask
-marking-VulpSnoutVulpine-vulpine = Vulpine (base)
-marking-VulpSnoutVulpine-vulpine-lines = Vulpine (lines)
+marking-VulpSnoutVulpine-vulpine = Vulpine (Base)
+marking-VulpSnoutVulpine-vulpine-lines = Vulpine (Lines)
marking-VulpSnoutVulpine = Vulpkanin Vulpine
marking-VulpSnoutSwift-vulpine-lines = Swift
@@ -84,100 +85,100 @@ marking-VulpSnoutPatch-patch = Patch
marking-VulpSnoutPatch = Vulpkanin Patch
-marking-VulpHeadTiger-tiger_head = Tiger stripes
-marking-VulpHeadTiger = Vulpkanin Tiger stripes (head)
+marking-VulpHeadTiger-tiger_head = Tiger Stripes
+marking-VulpHeadTiger = Vulpkanin Tiger Stripes (Head)
-marking-VulpHeadTigerFace-tiger_face = Tiger stripes
-marking-VulpHeadTigerFace = Vulpkanin Tiger stripes (face)
+marking-VulpHeadTigerFace-tiger_face = Tiger Stripes
+marking-VulpHeadTigerFace = Vulpkanin Tiger Stripes (Face)
marking-VulpHeadSlash-slash = Slash
marking-VulpHeadSlash = Vulpkanin Slash
-marking-VulpTail-vulp = Vulpkanin tail (base)
-marking-VulpTail-vulp-fade = Vulpkanin tail (fade)
+marking-VulpTail-vulp = Vulpkanin Tail (Base)
+marking-VulpTail-vulp-fade = Vulpkanin Tail (Fade)
marking-VulpTail = Vulpkanin
-marking-VulpTailTip-vulp = Vulpkanin tail (base)
-marking-VulpTailTip-vulp-tip = Vulpkanin tail (tip)
-marking-VulpTailTip = Vulpkanin (tip)
+marking-VulpTailTip-vulp = Vulpkanin Tail (Base)
+marking-VulpTailTip-vulp-tip = Vulpkanin tail (Tip)
+marking-VulpTailTip = Vulpkanin (Tip)
-marking-VulpTailWag-vulp_wag = Vulpkanin tail (base)
-marking-VulpTailWag-vulp_wag-fade = Vulpkanin tail (fade)
-marking-VulpTailWag = Vulpkanin (wag)
+marking-VulpTailWag-vulp_wag = Vulpkanin Tail (Base)
+marking-VulpTailWag-vulp_wag-fade = Vulpkanin Tail (Fade)
+marking-VulpTailWag = Vulpkanin (Wag)
-marking-VulpTailWagTip-vulp_wag = Vulpkanin tail (base)
-marking-VulpTailWagTip-vulp_wag-tip = Vulpkanin tail (tip)
-marking-VulpTailWagTip = Vulpkanin (wag, tip)
+marking-VulpTailWagTip-vulp_wag = Vulpkanin Tail (Base)
+marking-VulpTailWagTip-vulp_wag-tip = Vulpkanin Tail (Tip)
+marking-VulpTailWagTip = Vulpkanin (Wag, Tip)
-marking-VulpTailAlt-vulp_alt = Vulpkanin tail (base)
-marking-VulpTailAlt-vulp_alt-fade = Vulpkanin tail (fade)
-marking-VulpTailAlt = Vulpkanin (alt)
+marking-VulpTailAlt-vulp_alt = Vulpkanin Tail (Base)
+marking-VulpTailAlt-vulp_alt-fade = Vulpkanin Tail (Fade)
+marking-VulpTailAlt = Vulpkanin (Alt)
-marking-VulpTailAltTip-vulp_alt = Vulpkanin tail (base)
-marking-VulpTailAltTip-vulp_alt-tip = Vulpkanin tail (tip)
-marking-VulpTailAltTip = Vulpkanin (alt, tip)
+marking-VulpTailAltTip-vulp_alt = Vulpkanin Tail (Base)
+marking-VulpTailAltTip-vulp_alt-tip = Vulpkanin Tail (Tip)
+marking-VulpTailAltTip = Vulpkanin (Alt, Tip)
-marking-VulpTailLong-long = Long tail (base)
-marking-VulpTailLong-long-tip = Long tail (tip)
+marking-VulpTailLong-long = Long Tail (Base)
+marking-VulpTailLong-long-tip = Long Tail (Tip)
marking-VulpTailLong = Vulpkanin Long
-marking-VulpTailFox-fox = Fox tail (base)
-marking-VulpTailFox-fox-fade = Fox tail (fade)
+marking-VulpTailFox-fox = Fox Tail (Base)
+marking-VulpTailFox-fox-fade = Fox Tail (Fade)
marking-VulpTailFox = Vulpkanin Fox
-marking-VulpTailFoxTip-fox = Fox tail (base)
-marking-VulpTailFoxTip-fox-tip = Fox tail (fade)
-marking-VulpTailFoxTip = Vulpkanin Fox (tip)
+marking-VulpTailFoxTip-fox = Fox Tail (Base)
+marking-VulpTailFoxTip-fox-tip = Fox Tail (Fade)
+marking-VulpTailFoxTip = Vulpkanin Fox (Tip)
-marking-VulpTailFoxWag-fox_wag = Fox tail (base)
-marking-VulpTailFoxWag-fox_wag-fade = Fox tail (fade)
-marking-VulpTailFoxWag = Vulpkanin Fox (wag)
+marking-VulpTailFoxWag-fox_wag = Fox Tail (Base)
+marking-VulpTailFoxWag-fox_wag-fade = Fox Tail (Fade)
+marking-VulpTailFoxWag = Vulpkanin Fox (Wag)
-marking-VulpTailFoxWagTip-fox_wag = Fox tail (base)
-marking-VulpTailFoxWagTip-fox_wag-tip = Fox tail (tip)
-marking-VulpTailFoxWagTip = Vulpkanin Fox (wag, tip)
+marking-VulpTailFoxWagTip-fox_wag = Fox Tail (Base)
+marking-VulpTailFoxWagTip-fox_wag-tip = Fox Tail (Tip)
+marking-VulpTailFoxWagTip = Vulpkanin Fox (Wag, Tip)
-marking-VulpTailBushy-bushfluff = Bush tail
+marking-VulpTailBushy-bushfluff = Bush Tail
marking-VulpTailBushy = Vulpkanin Bush
-marking-VulpTailBushyWag-bushfluff_wag = Bush tail
-marking-VulpTailBushyWag = Vulpkanin Bush (wag)
+marking-VulpTailBushyWag-bushfluff_wag = Bush Tail
+marking-VulpTailBushyWag = Vulpkanin Bush (Wag)
-marking-VulpTailCoyote-coyote = Coyote tail
+marking-VulpTailCoyote-coyote = Coyote Tail
marking-VulpTailCoyote = Vulpkanin Coyote
-marking-VulpTailCoyoteWag-coyote_wag = Coyote tail
-marking-VulpTailCoyoteWag = Vulpkanin Coyote (wag)
+marking-VulpTailCoyoteWag-coyote_wag = Coyote Tail
+marking-VulpTailCoyoteWag = Vulpkanin Coyote (Wag)
-marking-VulpTailCorgiWag-corgi_wag = Crogi tail
-marking-VulpTailCorgiWag = Vulpkanin Corgi (wag)
+marking-VulpTailCorgiWag-corgi_wag = Corgi Tail
+marking-VulpTailCorgiWag = Vulpkanin Corgi (Wag)
-marking-VulpTailHusky-husky-inner = Husky tail (inner)
-marking-VulpTailHusky-husky-outer = Husky tail (outer)
+marking-VulpTailHusky-husky-inner = Husky Tail (Inner)
+marking-VulpTailHusky-husky-outer = Husky Tail (Outer)
marking-VulpTailHusky = Vulpkanin Husky
-marking-VulpTailHuskyAlt-husky = Husky tail
-marking-VulpTailHuskyAlt = Vulpkanin Husky (alt)
+marking-VulpTailHuskyAlt-husky = Husky Tail
+marking-VulpTailHuskyAlt = Vulpkanin Husky (Alt)
-marking-VulpTailFox2-fox2 = Fox tail
+marking-VulpTailFox2-fox2 = Fox Tail
marking-VulpTailFox2 = Vulpkanin Fox 2
-marking-VulpTailFox3-fox3 = Fox tail (base)
-marking-VulpTailFox3-fox3-tip = Fox tail (tip)
+marking-VulpTailFox3-fox3 = Fox Tail (Base)
+marking-VulpTailFox3-fox3-tip = Fox Tail (Tip)
marking-VulpTailFox3 = Vulpkanin Fox 3
-marking-VulpTailFennec-fennec = Fennec tail
+marking-VulpTailFennec-fennec = Fennec Tail
marking-VulpTailFennec = Vulpkanin Fennec
-marking-VulpTailOtie-otie = Otie tail
+marking-VulpTailOtie-otie = Otie Tail
marking-VulpTailOtie = Vulpkanin Otie
-marking-VulpTailFluffy-fluffy = Fluffy tail
+marking-VulpTailFluffy-fluffy = Fluffy Tail
marking-VulpTailFluffy = Vulpkanin Fluffy
-marking-VulpTailDalmatianWag-dalmatian_wag = Dalmatian tail
-marking-VulpTailDalmatianWag = Vulpkanin Dalmatian (wag)
+marking-VulpTailDalmatianWag-dalmatian_wag = Dalmatian Tail
+marking-VulpTailDalmatianWag = Vulpkanin Dalmatian (Wag)
marking-VulpBellyCrest-belly_crest = Belly
@@ -190,40 +191,40 @@ marking-VulpBellyFox-belly_fox = Belly
marking-VulpBellyFox = Vulpkanin Belly 2
-marking-VulpBodyPointsCrest-points_crest = Points (crest)
-marking-VulpBodyPointsCrest = Vulpkanin Points (crest)
+marking-VulpBodyPointsCrest-points_crest = Points (Crest)
+marking-VulpBodyPointsCrest = Vulpkanin Points (Crest)
-marking-VulpBodyPointsFade-points_fade = Vulpkanin Points (fade)
-marking-VulpBodyPointsFade = Vulpkanin Points (fade)
+marking-VulpBodyPointsFade-points_fade = Vulpkanin Points (Fade)
+marking-VulpBodyPointsFade = Vulpkanin Points (Fade)
-marking-VulpBodyPointsSharp-points_sharp = Vulpkanin Points (sharp)
-marking-VulpBodyPointsSharp = Vulpkanin Points (sharp)
+marking-VulpBodyPointsSharp-points_sharp = Vulpkanin Points (Sharp)
+marking-VulpBodyPointsSharp = Vulpkanin Points (Sharp)
marking-VulpPointsFeet-points_feet = Points Feet
marking-VulpPointsFeet = Vulpkanin Points Feet
-marking-VulpPointsCrestLegs-points_crest-legs = Points (crest)
-marking-VulpPointsCrestLegs = Vulpkanin Points Legs (crest)
+marking-VulpPointsCrestLegs-points_crest-legs = Points (Crest)
+marking-VulpPointsCrestLegs = Vulpkanin Points Legs (Crest)
-marking-VulpPointsFadeLegs-points_fade-legs = Points (fade)
-marking-VulpPointsFadeLegs = Vulpkanin Points Legs (fade)
+marking-VulpPointsFadeLegs-points_fade-legs = Points (Fade)
+marking-VulpPointsFadeLegs = Vulpkanin Points Legs (Fade)
-marking-VulpPointsSharpLegs-points_sharp-legs = Points (sharp)
-marking-VulpPointsSharpLegs = Vulpkanin Points Legs (sharp)
+marking-VulpPointsSharpLegs-points_sharp-legs = Points (Sharp)
+marking-VulpPointsSharpLegs = Vulpkanin Points Legs (Sharp)
marking-VulpPointsHands-points_hands = Points Hands
marking-VulpPointsHands = Vulpkanin Points Hands
-marking-VulpPointsCrestArms-points_crest-arms = Points (crest)
-marking-VulpPointsCrestArms = Vulpkanin Points Arms (crest)
+marking-VulpPointsCrestArms-points_crest-arms = Points (Crest)
+marking-VulpPointsCrestArms = Vulpkanin Points Arms (Crest)
-marking-VulpPointsFadeArms-points_fade-arms = Points (fade)
-marking-VulpPointsFadeArms = Vulpkanin Points Arms (fade)
+marking-VulpPointsFadeArms-points_fade-arms = Points (Fade)
+marking-VulpPointsFadeArms = Vulpkanin Points Arms (Fade)
-marking-VulpPointsSharpArms-points_sharp-arms = Points (sharp)
-marking-VulpPointsSharpArms = Vulpkanin Points Arms (sharp)
+marking-VulpPointsSharpArms-points_sharp-arms = Points (Sharp)
+marking-VulpPointsSharpArms = Vulpkanin Points Arms (Sharp)
marking-VulpHairAdhara = Adhara
@@ -251,4 +252,4 @@ marking-VulpHairSpike = Spike
marking-VulpFacialHairRuff = Ruff
marking-VulpFacialHairElder = Elder
marking-VulpFacialHairElderChin = Elder Chin
-marking-VulpFacialHairKita = Kita
\ No newline at end of file
+marking-VulpFacialHairKita = Kita
diff --git a/Resources/Locale/en-US/nyanotrasen/abilities/felinid.ftl b/Resources/Locale/en-US/nyanotrasen/abilities/felinid.ftl
index 92181194167..dfeb57a3d6b 100644
--- a/Resources/Locale/en-US/nyanotrasen/abilities/felinid.ftl
+++ b/Resources/Locale/en-US/nyanotrasen/abilities/felinid.ftl
@@ -5,4 +5,4 @@ hairball-mask = Take off your {$mask} first.
hairball-cough = {CAPITALIZE(THE($name))} starts coughing up a hairball!
action-name-eat-mouse = Eat Mouse
-action-description-eat-mouse = Eat the mouse in your hand, gaining nutriment and a hairball charge.
+action-description-eat-mouse = Eat the mouse in your hand, gaining nutriment and a hairball charge.
\ No newline at end of file
diff --git a/Resources/Maps/_NF/Bluespace/bloodmoon.yml b/Resources/Maps/_NF/Bluespace/bloodmoon.yml
index 07f0a1b2eb2..c7c93ca0579 100644
--- a/Resources/Maps/_NF/Bluespace/bloodmoon.yml
+++ b/Resources/Maps/_NF/Bluespace/bloodmoon.yml
@@ -21,10 +21,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Unidentified Vessel
- type: Transform
- pos: -0.5156249,-0.5312496
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -7726,12 +7723,10 @@ entities:
rot: 1.5707963267948966 rad
pos: 11.5,-4.5
parent: 1
-- proto: WarpPointShip
+- proto: WarpPoint
entities:
- uid: 468
components:
- - type: MetaData
- name: Blood Moon
- type: Transform
pos: 4.5,-17.5
parent: 1
diff --git a/Resources/Maps/_NF/Bluespace/cache.yml b/Resources/Maps/_NF/Bluespace/cache.yml
index eebf3db4101..e45e0efd69b 100644
--- a/Resources/Maps/_NF/Bluespace/cache.yml
+++ b/Resources/Maps/_NF/Bluespace/cache.yml
@@ -17,10 +17,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Syndicate Weapons Cache
- type: Transform
- pos: 0.055290222,-0.28995132
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -5121,6 +5118,4 @@ entities:
- type: Transform
pos: 0.5,8.5
parent: 1
- - type: WarpPoint
- location: Syndicate Weapons Cache
...
diff --git a/Resources/Maps/_NF/Bluespace/cave.yml b/Resources/Maps/_NF/Bluespace/cave.yml
index be83bb2e938..04ff8108855 100644
--- a/Resources/Maps/_NF/Bluespace/cave.yml
+++ b/Resources/Maps/_NF/Bluespace/cave.yml
@@ -13,10 +13,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Cave
- type: Transform
- pos: -0.453125,-0.52345467
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -3124,12 +3121,11 @@ entities:
- type: Transform
pos: -7.5,8.5
parent: 1
-- proto: WarpPointNFCave
+- proto: WarpPoint
entities:
- uid: 136
components:
- type: Transform
- rot: 1.5707963267948966 rad
pos: -0.5,4.5
parent: 1
...
diff --git a/Resources/Maps/_NF/Bluespace/mcevent.yml b/Resources/Maps/_NF/Bluespace/mcevent.yml
index 5e6457a4004..14c6e7ae67d 100644
--- a/Resources/Maps/_NF/Bluespace/mcevent.yml
+++ b/Resources/Maps/_NF/Bluespace/mcevent.yml
@@ -15,10 +15,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: McDelivery
- type: Transform
- pos: -0.48958334,-0.5208333
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -740,7 +737,7 @@ entities:
rot: -1.5707963267948966 rad
pos: 2.5,2.5
parent: 1
-- proto: WarpPointNFMcDelivery
+- proto: WarpPoint
entities:
- uid: 98
components:
diff --git a/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml b/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml
index df09a61efd0..43d1b96b252 100644
--- a/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml
+++ b/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml
@@ -22,10 +22,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Unidentified Vessel
- type: Transform
- pos: -0.484375,-0.49998474
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -5988,12 +5985,10 @@ entities:
rot: 3.141592653589793 rad
pos: 2.5,-7.5
parent: 1
-- proto: WarpPointShip
+- proto: WarpPoint
entities:
- uid: 894
components:
- - type: MetaData
- name: Intercepted Syndicate Ship
- type: Transform
pos: -0.5,0.5
parent: 1
diff --git a/Resources/Maps/_NF/Bluespace/vault.yml b/Resources/Maps/_NF/Bluespace/vault.yml
index 0ef678d0d02..4f8c9c79821 100644
--- a/Resources/Maps/_NF/Bluespace/vault.yml
+++ b/Resources/Maps/_NF/Bluespace/vault.yml
@@ -24,10 +24,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Secure NT Vault
- type: Transform
- pos: 0.07584572,0.026101112
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -8940,11 +8937,8 @@ entities:
- uid: 4
components:
- type: Transform
- rot: 1.5707963267948966 rad
pos: 4.5,12.5
parent: 1
- - type: WarpPoint
- location: The Vault
- proto: WeaponTurretHostile
entities:
- uid: 104
diff --git a/Resources/Maps/_NF/Bluespace/vaultsmall.yml b/Resources/Maps/_NF/Bluespace/vaultsmall.yml
index 65846a342f5..3ef61047be0 100644
--- a/Resources/Maps/_NF/Bluespace/vaultsmall.yml
+++ b/Resources/Maps/_NF/Bluespace/vaultsmall.yml
@@ -15,10 +15,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: NT Secure Vault
- type: Transform
- pos: 0.12484646,0.026101112
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -2491,8 +2488,6 @@ entities:
- type: Transform
pos: 0.5,0.5
parent: 1
- - type: WarpPoint
- location: The Vault
- proto: WeaponTurretHostile
entities:
- uid: 3
diff --git a/Resources/Maps/_NF/Bluespace/wizardprobealt.yml b/Resources/Maps/_NF/Bluespace/wizardprobealt.yml
index 010882ed53b..1fa048c9a6c 100644
--- a/Resources/Maps/_NF/Bluespace/wizardprobealt.yml
+++ b/Resources/Maps/_NF/Bluespace/wizardprobealt.yml
@@ -13,10 +13,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Unidentified Vessel
- type: Transform
- pos: -0.5,-0.50708264
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -6255,12 +6252,10 @@ entities:
rot: 3.141592653589793 rad
pos: 2.5,-26.5
parent: 1
-- proto: WarpPointShip
+- proto: WarpPoint
entities:
- uid: 903
components:
- - type: MetaData
- name: Wizard Federation Probe
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-2.5
diff --git a/Resources/Maps/_NF/DeadDrop/deaddrop.yml b/Resources/Maps/_NF/DeadDrop/deaddrop.yml
index fa5b351cc95..2e215b9c89e 100644
--- a/Resources/Maps/_NF/DeadDrop/deaddrop.yml
+++ b/Resources/Maps/_NF/DeadDrop/deaddrop.yml
@@ -15,10 +15,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Syndicate Supply Drop
- type: Transform
- pos: -0.38888836,-0.59260035
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -962,7 +959,7 @@ entities:
rot: 3.141592653589793 rad
pos: 2.5,0.5
parent: 1
-- proto: WarpPointNFSyndicateSupplyDrop
+- proto: WarpPoint
entities:
- uid: 116
components:
diff --git a/Resources/Maps/_NF/Dungeon/virology_lab.yml b/Resources/Maps/_NF/Dungeon/virology_lab.yml
index d71a1d8ccd3..7d4b57834cd 100644
--- a/Resources/Maps/_NF/Dungeon/virology_lab.yml
+++ b/Resources/Maps/_NF/Dungeon/virology_lab.yml
@@ -2998,7 +2998,7 @@ entities:
- type: Transform
pos: 8.500196,21.585516
parent: 1653
-- proto: Biofabricator
+- proto: Biogenerator
entities:
- uid: 1376
components:
diff --git a/Resources/Maps/_NF/Outpost/frontier.yml b/Resources/Maps/_NF/Outpost/frontier.yml
index 9ed07b9c57d..0bf1167d31b 100644
--- a/Resources/Maps/_NF/Outpost/frontier.yml
+++ b/Resources/Maps/_NF/Outpost/frontier.yml
@@ -37,7 +37,6 @@ entities:
- type: MetaData
name: Frontier Outpost
- type: Transform
- pos: 0.121950805,-0.15609694
parent: 5691
- type: MapGrid
chunks:
@@ -36773,12 +36772,11 @@ entities:
- type: Transform
pos: 46.5,16.5
parent: 2173
-- proto: WarpPointNFFrontier
+- proto: WarpPointShip
entities:
- uid: 5714
components:
- type: Transform
- rot: 3.141592653589793 rad
pos: -0.5,11.5
parent: 2173
- proto: WaterCooler
diff --git a/Resources/Maps/_NF/POI/anomalousgeode.yml b/Resources/Maps/_NF/POI/anomalousgeode.yml
index 7724b31c0dc..e9a0c066f19 100644
--- a/Resources/Maps/_NF/POI/anomalousgeode.yml
+++ b/Resources/Maps/_NF/POI/anomalousgeode.yml
@@ -20,10 +20,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Anomalous Geode
- type: Transform
- pos: 0.14351851,0.09722221
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -4772,8 +4769,6 @@ entities:
- type: Transform
pos: 0.5,-1.5
parent: 1
- - type: WarpPoint
- location: Anomalous Geode
- proto: Wrench
entities:
- uid: 667
diff --git a/Resources/Maps/_NF/POI/anomalouslab.yml b/Resources/Maps/_NF/POI/anomalouslab.yml
index e275e6b82f1..d8f298b5177 100644
--- a/Resources/Maps/_NF/POI/anomalouslab.yml
+++ b/Resources/Maps/_NF/POI/anomalouslab.yml
@@ -17,10 +17,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Anomalous Laboratory
- type: Transform
- pos: -0.5664107,-0.53686523
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -11482,7 +11479,7 @@ entities:
- type: Transform
pos: -2.5,12.5
parent: 1
-- proto: WarpPointNFLab
+- proto: WarpPoint
entities:
- uid: 1481
components:
diff --git a/Resources/Maps/_NF/POI/arena.yml b/Resources/Maps/_NF/POI/arena.yml
index 276f7332864..b97fa674af6 100644
--- a/Resources/Maps/_NF/POI/arena.yml
+++ b/Resources/Maps/_NF/POI/arena.yml
@@ -26,10 +26,7 @@ entities:
- uid: 2
components:
- type: MetaData
- name: Arena
- type: Transform
- pos: 0.10035038,0.17291927
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -20842,7 +20839,7 @@ entities:
showEnts: False
occludes: True
ent: null
-- proto: WarpPointNFArena
+- proto: WarpPoint
entities:
- uid: 2346
components:
diff --git a/Resources/Maps/_NF/POI/bahama.yml b/Resources/Maps/_NF/POI/bahama.yml
index ac75bf48e8f..fa4eba05593 100644
--- a/Resources/Maps/_NF/POI/bahama.yml
+++ b/Resources/Maps/_NF/POI/bahama.yml
@@ -29,10 +29,7 @@ entities:
- uid: 2
components:
- type: MetaData
- name: Bahama Mama's
- type: Transform
- pos: -0.53125,-0.5
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -20260,7 +20257,7 @@ entities:
- type: Transform
pos: -7.5,2.5
parent: 2
-- proto: WarpPointNFBahama
+- proto: WarpPoint
entities:
- uid: 3365
components:
diff --git a/Resources/Maps/_NF/POI/beacon.yml b/Resources/Maps/_NF/POI/beacon.yml
index eab096447d2..53001d18354 100644
--- a/Resources/Maps/_NF/POI/beacon.yml
+++ b/Resources/Maps/_NF/POI/beacon.yml
@@ -26,10 +26,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Beacon
- type: Transform
- pos: -0.51562405,-0.4921837
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -8920,7 +8917,7 @@ entities:
- type: Transform
pos: -9.5,7.5
parent: 1
-- proto: WarpPointNFBeacon
+- proto: WarpPoint
entities:
- uid: 1334
components:
diff --git a/Resources/Maps/_NF/POI/cargodepot.yml b/Resources/Maps/_NF/POI/cargodepot.yml
index b01542eabc9..28b181ff68e 100644
--- a/Resources/Maps/_NF/POI/cargodepot.yml
+++ b/Resources/Maps/_NF/POI/cargodepot.yml
@@ -18,10 +18,7 @@ entities:
- uid: 10
components:
- type: MetaData
- name: CargoDepot
- type: Transform
- pos: -0.5,-0.5208335
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -7345,12 +7342,11 @@ entities:
- type: Transform
pos: 3.5,-2.5
parent: 10
-- proto: WarpPointNFCargo
+- proto: WarpPoint
entities:
- uid: 292
components:
- type: Transform
- rot: 3.141592653589793 rad
pos: 0.5,0.5
parent: 10
...
diff --git a/Resources/Maps/_NF/POI/cargodepotalt.yml b/Resources/Maps/_NF/POI/cargodepotalt.yml
index ee61a255e90..3b938b034f8 100644
--- a/Resources/Maps/_NF/POI/cargodepotalt.yml
+++ b/Resources/Maps/_NF/POI/cargodepotalt.yml
@@ -18,10 +18,7 @@ entities:
- uid: 10
components:
- type: MetaData
- name: CargoDepotAlt
- type: Transform
- pos: -0.5,-0.5208335
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -7402,12 +7399,11 @@ entities:
- type: Transform
pos: -2.5,3.5
parent: 10
-- proto: WarpPointNFCargo
+- proto: WarpPoint
entities:
- uid: 292
components:
- type: Transform
- rot: 3.141592653589793 rad
pos: 0.5,0.5
parent: 10
...
diff --git a/Resources/Maps/_NF/POI/caseyscasino.yml b/Resources/Maps/_NF/POI/caseyscasino.yml
index 607cab12525..8efc51cda0b 100644
--- a/Resources/Maps/_NF/POI/caseyscasino.yml
+++ b/Resources/Maps/_NF/POI/caseyscasino.yml
@@ -19,10 +19,7 @@ entities:
- uid: 2
components:
- type: MetaData
- name: CaseysCasino
- type: Transform
- pos: -0.5187805,-0.50625
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -8253,7 +8250,7 @@ entities:
- type: Transform
pos: 4.5,-8.5
parent: 2
-- proto: WarpPointNFCasino
+- proto: WarpPoint
entities:
- uid: 1147
components:
diff --git a/Resources/Maps/_NF/POI/courthouse.yml b/Resources/Maps/_NF/POI/courthouse.yml
index fd69c73fe08..7020d0e8226 100644
--- a/Resources/Maps/_NF/POI/courthouse.yml
+++ b/Resources/Maps/_NF/POI/courthouse.yml
@@ -19,10 +19,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Courthouse
- type: Transform
- pos: -0.5,-0.53515625
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -11670,7 +11667,7 @@ entities:
rot: 3.141592653589793 rad
pos: 6.5,-13.5
parent: 1
-- proto: WarpPointNFCourthouse
+- proto: WarpPoint
entities:
- uid: 1318
components:
diff --git a/Resources/Maps/_NF/POI/cove.yml b/Resources/Maps/_NF/POI/cove.yml
index 649e5e1f194..1e942244192 100644
--- a/Resources/Maps/_NF/POI/cove.yml
+++ b/Resources/Maps/_NF/POI/cove.yml
@@ -24,10 +24,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Cove
- type: Transform
- pos: -0.5,-0.6875
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -12840,7 +12837,7 @@ entities:
rot: 3.141592653589793 rad
pos: -5.5,37.5
parent: 1
-- proto: WarpPointNFCove
+- proto: WarpPoint
entities:
- uid: 327
components:
diff --git a/Resources/Maps/_NF/POI/edison.yml b/Resources/Maps/_NF/POI/edison.yml
index 2fb95d7976a..cc6f528a2df 100644
--- a/Resources/Maps/_NF/POI/edison.yml
+++ b/Resources/Maps/_NF/POI/edison.yml
@@ -26,10 +26,7 @@ entities:
- uid: 2
components:
- type: MetaData
- name: grid
- type: Transform
- pos: -0.5,-0.5
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -26989,12 +26986,11 @@ entities:
rot: 3.141592653589793 rad
pos: -20.5,31.5
parent: 2
-- proto: WarpPointNFEdison
+- proto: WarpPoint
entities:
- uid: 3925
components:
- type: Transform
- rot: 1.5707963267948966 rad
pos: 0.5,14.5
parent: 2
- proto: WaterCooler
diff --git a/Resources/Maps/_NF/POI/grifty.yml b/Resources/Maps/_NF/POI/grifty.yml
index a78fb9b252d..038cb1d263e 100644
--- a/Resources/Maps/_NF/POI/grifty.yml
+++ b/Resources/Maps/_NF/POI/grifty.yml
@@ -16,10 +16,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Grifty
- type: Transform
- pos: -0.484375,-0.47654724
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -6000,7 +5997,7 @@ entities:
rot: 3.141592653589793 rad
pos: -0.5,-0.5
parent: 1
-- proto: WarpPointNFGrifty
+- proto: WarpPoint
entities:
- uid: 742
components:
diff --git a/Resources/Maps/_NF/POI/lodge.yml b/Resources/Maps/_NF/POI/lodge.yml
index a30e9ff9775..c495652bbe9 100644
--- a/Resources/Maps/_NF/POI/lodge.yml
+++ b/Resources/Maps/_NF/POI/lodge.yml
@@ -24,10 +24,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Expeditionary Lodge
- type: Transform
- pos: -0.421875,-0.421875
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -18012,7 +18009,7 @@ entities:
- type: Transform
pos: -8.5,14.5
parent: 1
-- proto: WarpPointNFLodge
+- proto: WarpPoint
entities:
- uid: 3
components:
diff --git a/Resources/Maps/_NF/POI/lpbravo.yml b/Resources/Maps/_NF/POI/lpbravo.yml
index 3975d16834f..d557c5dfd7e 100644
--- a/Resources/Maps/_NF/POI/lpbravo.yml
+++ b/Resources/Maps/_NF/POI/lpbravo.yml
@@ -16,10 +16,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Listening Point Bravo
- type: Transform
- pos: 0.10000038,0.09999943
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -4530,12 +4527,11 @@ entities:
rot: 3.141592653589793 rad
pos: -7.5,-5.5
parent: 1
-- proto: WarpPointNFLPBravo
+- proto: WarpPoint
entities:
- uid: 189
components:
- type: Transform
- rot: 3.141592653589793 rad
pos: -0.5,-1.5
parent: 1
...
diff --git a/Resources/Maps/_NF/POI/mchobo.yml b/Resources/Maps/_NF/POI/mchobo.yml
index c8cbcff22f5..65b0d594fed 100644
--- a/Resources/Maps/_NF/POI/mchobo.yml
+++ b/Resources/Maps/_NF/POI/mchobo.yml
@@ -22,10 +22,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: McHobo
- type: Transform
- pos: -0.5,-0.6875
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -6689,7 +6686,7 @@ entities:
- type: Transform
pos: -2.5,7.5
parent: 1
-- proto: WarpPointNFMcHobo
+- proto: WarpPoint
entities:
- uid: 5
components:
diff --git a/Resources/Maps/_NF/POI/nfsd.yml b/Resources/Maps/_NF/POI/nfsd.yml
index 7165780941c..beefaf9e4ce 100644
--- a/Resources/Maps/_NF/POI/nfsd.yml
+++ b/Resources/Maps/_NF/POI/nfsd.yml
@@ -26,10 +26,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Nfsd
- type: Transform
- pos: -0.5322278,-0.49355125
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -18065,7 +18062,7 @@ entities:
- type: Transform
pos: -6.5,17.5
parent: 1
-- proto: WarpPointNFNfsd
+- proto: WarpPoint
entities:
- uid: 2222
components:
diff --git a/Resources/Maps/_NF/POI/northpole.yml b/Resources/Maps/_NF/POI/northpole.yml
index cedc235edbc..d40ade8cd22 100644
--- a/Resources/Maps/_NF/POI/northpole.yml
+++ b/Resources/Maps/_NF/POI/northpole.yml
@@ -22,10 +22,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: The North Pole
- type: Transform
- pos: -0.16666698,-0.35185194
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -9428,7 +9425,7 @@ entities:
rot: 3.141592653589793 rad
pos: 0.5,26.5
parent: 1
-- proto: WarpPointNFPole
+- proto: WarpPoint
entities:
- uid: 1288
components:
diff --git a/Resources/Maps/_NF/POI/tinnia.yml b/Resources/Maps/_NF/POI/tinnia.yml
index d9162a666ae..7602765409a 100644
--- a/Resources/Maps/_NF/POI/tinnia.yml
+++ b/Resources/Maps/_NF/POI/tinnia.yml
@@ -22,10 +22,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Tinnia
- type: Transform
- pos: -0.4250002,-0.625
- parent: invalid
- type: MapGrid
chunks:
0,0:
@@ -13761,7 +13758,7 @@ entities:
- type: Transform
pos: 6.5,9.5
parent: 1
-- proto: WarpPointNFTinnia
+- proto: WarpPoint
entities:
- uid: 2000
components:
diff --git a/Resources/Maps/_NF/POI/trade.yml b/Resources/Maps/_NF/POI/trade.yml
index 18f98ecf171..fdf954c679a 100644
--- a/Resources/Maps/_NF/POI/trade.yml
+++ b/Resources/Maps/_NF/POI/trade.yml
@@ -31,10 +31,7 @@ entities:
- uid: 1
components:
- type: MetaData
- name: Trade
- type: Transform
- pos: -0.4687497,-0.4947884
- parent: invalid
- type: MapGrid
chunks:
0,1:
@@ -39682,7 +39679,7 @@ entities:
- type: Transform
pos: -1.5,3.5
parent: 1
-- proto: WarpPointNFTrade
+- proto: WarpPoint
entities:
- uid: 2939
components:
diff --git a/Resources/Maps/_NF/Shuttles/Bus/publicts.yml b/Resources/Maps/_NF/Shuttles/Bus/publicts.yml
index e0b667be1c1..55c09041aa6 100644
--- a/Resources/Maps/_NF/Shuttles/Bus/publicts.yml
+++ b/Resources/Maps/_NF/Shuttles/Bus/publicts.yml
@@ -17,9 +17,7 @@ entities:
- uid: 8756
components:
- type: MetaData
- name: Public Transport Shuttle
- type: Transform
- parent: invalid
- type: MapGrid
chunks:
-1,-1:
@@ -963,6 +961,4 @@ entities:
- type: Transform
pos: -0.5,-1.5
parent: 8756
- - type: WarpPoint
- location: Public Transport Shuttle
...
diff --git a/Resources/Maps/_NF/Shuttles/Scrap/bison.yml b/Resources/Maps/_NF/Shuttles/Scrap/bison.yml
index 8fb1606b206..853422e4845 100644
--- a/Resources/Maps/_NF/Shuttles/Scrap/bison.yml
+++ b/Resources/Maps/_NF/Shuttles/Scrap/bison.yml
@@ -1499,20 +1499,20 @@ entities:
- type: Transform
pos: -4.5,-33.5
parent: 1
-- proto: AirlockAtmosphericsGlass
+- proto: AirlockAtmospherics
entities:
- - uid: 9
+ - uid: 67
components:
- type: Transform
- rot: -1.5707963267948966 rad
- pos: -3.5,-21.5
+ pos: 4.5,-28.5
parent: 1
-- proto: AirlockAtmosphericsLocked
+- proto: AirlockAtmosphericsGlass
entities:
- - uid: 2091
+ - uid: 9
components:
- type: Transform
- pos: 4.5,-28.5
+ rot: -1.5707963267948966 rad
+ pos: -3.5,-21.5
parent: 1
- proto: AirlockCargo
entities:
@@ -1586,9 +1586,7 @@ entities:
rot: -1.5707963267948966 rad
pos: -10.5,-24.5
parent: 1
-- proto: AirlockEngineeringLocked
- entities:
- - uid: 67
+ - uid: 955
components:
- type: Transform
pos: 3.5,-28.5
@@ -2088,7 +2086,6 @@ entities:
parent: 1
- type: Physics
canCollide: False
- bodyType: Static
- type: Fixtures
fixtures: {}
- proto: BenchSofaLeft
@@ -2099,15 +2096,11 @@ entities:
rot: 1.5707963267948966 rad
pos: -9.5,-11.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 711
components:
- type: Transform
pos: -7.5,-8.5
parent: 1
- - type: Physics
- bodyType: Static
- proto: BenchSofaMiddle
entities:
- uid: 705
@@ -2116,8 +2109,6 @@ entities:
rot: 1.5707963267948966 rad
pos: -9.5,-12.5
parent: 1
- - type: Physics
- bodyType: Static
- proto: BenchSofaRight
entities:
- uid: 701
@@ -2126,16 +2117,12 @@ entities:
rot: 1.5707963267948966 rad
pos: -9.5,-13.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 710
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -8.5,-9.5
parent: 1
- - type: Physics
- bodyType: Static
- proto: BenchSteelWhiteLeft
entities:
- uid: 778
@@ -2143,31 +2130,23 @@ entities:
- type: Transform
pos: 3.5,-17.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 781
components:
- type: Transform
pos: 3.5,-21.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 1933
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-19.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 1934
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-23.5
parent: 1
- - type: Physics
- bodyType: Static
- proto: BenchSteelWhiteRight
entities:
- uid: 783
@@ -2176,30 +2155,22 @@ entities:
rot: 3.141592653589793 rad
pos: 3.5,-19.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 784
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-23.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 1935
components:
- type: Transform
pos: 4.5,-21.5
parent: 1
- - type: Physics
- bodyType: Static
- uid: 1936
components:
- type: Transform
pos: 4.5,-17.5
parent: 1
- - type: Physics
- bodyType: Static
- proto: BlastDoor
entities:
- uid: 361
@@ -6897,6 +6868,7 @@ entities:
pos: 6.5,-22.5
parent: 1
- type: ItemPlacer
+ lastPlaceable: False
placedEntities:
- 2021
- type: PlaceableSurface
@@ -7688,19 +7660,6 @@ entities:
rot: -1.5707963267948966 rad
pos: 6.5,-17.5
parent: 1
- - type: ContainerContainer
- containers:
- board: !type:Container
- showEnts: False
- occludes: True
- ents: []
- bank-ATM-cashSlot: !type:ContainerSlot
- showEnts: False
- occludes: True
- ent: null
- - type: Physics
- canCollide: False
- - type: ItemSlots
- proto: CrateEmergencyO2Kit
entities:
- uid: 2636
@@ -11958,6 +11917,8 @@ entities:
rot: -1.5707963267948966 rad
pos: 8.5,-8.5
parent: 1
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
- uid: 2813
components:
- type: Transform
@@ -12669,6 +12630,8 @@ entities:
rot: -1.5707963267948966 rad
pos: -5.5,-35.5
parent: 1
+ - type: AtmosPipeColor
+ color: '#0055CCFF'
- uid: 1640
components:
- type: Transform
@@ -13268,6 +13231,14 @@ entities:
- type: Transform
pos: 2.5,-4.5
parent: 1
+- proto: LockerWallMaterialsFuelPlasmaFilled2
+ entities:
+ - uid: 1609
+ components:
+ - type: Transform
+ rot: -1.5707963267948966 rad
+ pos: 5.5,-29.5
+ parent: 1
- proto: LockerWallMedical
entities:
- uid: 677
@@ -17861,7 +17832,7 @@ entities:
rot: 3.141592653589793 rad
pos: 4.5,-38.5
parent: 1
-- proto: WarpPointShip
+- proto: WarpPoint
entities:
- uid: 2025
components:
diff --git a/Resources/Maps/_NF/Test/dev_map.yml b/Resources/Maps/_NF/Test/dev_map.yml
index 13357aa9c9f..f9ef5541737 100644
--- a/Resources/Maps/_NF/Test/dev_map.yml
+++ b/Resources/Maps/_NF/Test/dev_map.yml
@@ -9513,8 +9513,6 @@ entities:
- type: Transform
pos: -4.5,3.5
parent: 179
- - type: WarpPoint
- location: Frontier Debug
- proto: WaterTankFull
entities:
- uid: 115
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml b/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml
index d9e295a4480..ce9a87e910e 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml
@@ -55,6 +55,7 @@
- type: cargoProduct
id: MaterialTextiles
+ abstract: true # Frontier
icon:
sprite: Objects/Materials/materials.rsi
state: cloth_3
diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml
index 28242033e79..0e1e9b1a106 100644
--- a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml
+++ b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml
@@ -1,6 +1,6 @@
- type: entity
name: cardboard box
- parent: BoxBase
+ parent: [BoxBase, RecyclableItemCardboard] # Frontier: added RecyclableItemCardboard
id: BoxCardboard
description: A cardboard box for storing things.
components:
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml
index 3e455b84676..2d29e8b48a8 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml
@@ -15,3 +15,4 @@
ClothingHandsGlovesColorBlack: 2
ClothingHandsGlovesLatex: 2
ClothingHeadsetSecurityCommon: 2 # Ask SR or Sheriff for keys
+ trayScanner: 2 # Frontier
diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml
index 4255950bade..9d1af4678a2 100644
--- a/Resources/Prototypes/DeltaV/tags.yml
+++ b/Resources/Prototypes/DeltaV/tags.yml
@@ -21,8 +21,8 @@
- type: Tag
id: HandLabeler
-- type: Tag
- id: HidesHarpyWings
+#- type: Tag # Frontier - This was replaced with HarpyHideWings comp
+# id: HidesHarpyWings # Frontier - This was replaced with HarpyHideWings comp
- type: Tag
id: MagazinePistolSpecial # For the .38 special ammo and pistol
@@ -30,8 +30,8 @@
- type: Tag
id: SecDogWearable # allows Laika to wear meson goggles (and more later?)
-#- type: Tag # Frontier - This was replaced with HarpyClothing
-# id: Skirt # Frontier - This was replaced with HarpyClothing
+#- type: Tag # Frontier - This was replaced with HarpyClothing comp
+# id: Skirt # Frontier - This was replaced with HarpyClothing comp
- type: Tag
id: SpeedLoaderSpecial
diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
index ec1a82dcd14..953a0c6a4bc 100644
--- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
+++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
@@ -1,8 +1,9 @@
- type: entity
- parent: [Clothing, ContentsExplosionResistanceBase]
+ parent: [Clothing, ContentsExplosionResistanceBase, RecyclableItemClothBasic] # Frontier: added RecyclableItemClothBasic
id: ClothingBackpack
name: backpack
description: You wear this on your back and put items into it.
+ categories: [ HideSpawnMenu ] # Frontier
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/backpack.rsi
@@ -193,7 +194,7 @@
#ERT
- type: entity
- parent: [ ClothingBackpack, BaseCentcommContraband ]
+ parent: [ NFClothingBackpack, BaseCentcommContraband ] # Frontier: ClothingBackpack
-
+
## Notifications
diff --git a/Resources/Textures/Objects/Specific/Species/felinid.rsi/icon.png b/Resources/Textures/Nyanotrasen/Objects/Specific/Species/felinid.rsi/icon.png
similarity index 100%
rename from Resources/Textures/Objects/Specific/Species/felinid.rsi/icon.png
rename to Resources/Textures/Nyanotrasen/Objects/Specific/Species/felinid.rsi/icon.png
diff --git a/Resources/Textures/Objects/Specific/Species/felinid.rsi/meta.json b/Resources/Textures/Nyanotrasen/Objects/Specific/Species/felinid.rsi/meta.json
similarity index 98%
rename from Resources/Textures/Objects/Specific/Species/felinid.rsi/meta.json
rename to Resources/Textures/Nyanotrasen/Objects/Specific/Species/felinid.rsi/meta.json
index aaad7ca5b98..4b146e0c93e 100644
--- a/Resources/Textures/Objects/Specific/Species/felinid.rsi/meta.json
+++ b/Resources/Textures/Nyanotrasen/Objects/Specific/Species/felinid.rsi/meta.json
@@ -11,4 +11,4 @@
"name": "icon"
}
]
-}
+}
\ No newline at end of file
diff --git a/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/meta.json b/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/meta.json
index d161dc6857e..f19ad0797f0 100644
--- a/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/meta.json
+++ b/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Resprited for Frontir by erhardsteinhauer, based on sprites created by EmoGarbage404 (github) for SS14, solar-assembly-part taken from tgstation and modified at https://tgstation13.org/wiki/Guide_to_construction#Solar_Panels_and_Trackers, ame-part taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1b7952787c06c21ef1623e494dcfe7cb1f46e041",
+ "copyright": "Resprited for Frontier by erhardsteinhauer, based on sprites created by EmoGarbage404 (github) for SS14, solar-assembly-part taken from tgstation and modified at https://tgstation13.org/wiki/Guide_to_construction#Solar_Panels_and_Trackers, ame-part taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1b7952787c06c21ef1623e494dcfe7cb1f46e041",
"size": {
"x": 32,
"y": 32
@@ -81,6 +81,9 @@
},
{
"name": "mercenary"
+ },
+ {
+ "name": "soil"
}
]
}
diff --git a/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/soil.png b/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/soil.png
new file mode 100644
index 00000000000..fe49905964d
Binary files /dev/null and b/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/soil.png differ
diff --git a/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/icon-bolt-shell.png b/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/icon-bolt-shell.png
new file mode 100644
index 00000000000..064b65a5083
Binary files /dev/null and b/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/icon-bolt-shell.png differ
diff --git a/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/meta.json b/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/meta.json
index 17581961b7a..fdd489afc4d 100644
--- a/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/meta.json
+++ b/Resources/Textures/_NF/Objects/Weapons/Guns/Projectiles/crossbow_bolts.rsi/meta.json
@@ -43,6 +43,9 @@
{
"name": "icon-bolt-plunger"
},
+ {
+ "name": "icon-bolt-shell"
+ },
{
"name": "icon-bolt-baguette"
},
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/broken_wallmount.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/broken_wallmount.png
new file mode 100644
index 00000000000..e6faf190db9
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/broken_wallmount.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_board_exposed.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_board_exposed.png
new file mode 100644
index 00000000000..2b46b31ac8c
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_board_exposed.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_monitor_unscrewed.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_monitor_unscrewed.png
new file mode 100644
index 00000000000..550e97bed10
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_monitor_unscrewed.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_needs_wires.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_needs_wires.png
new file mode 100644
index 00000000000..cc7b7f0cee1
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_needs_wires.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_no_monitor.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_no_monitor.png
new file mode 100644
index 00000000000..813f00e67d0
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_no_monitor.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount.png
new file mode 100644
index 00000000000..b96cd3ca6df
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount_frame.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount_frame.png
new file mode 100644
index 00000000000..505c0bfaeb9
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount_frame.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/meta.json b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/meta.json
new file mode 100644
index 00000000000..7ac097aa545
--- /dev/null
+++ b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/meta.json
@@ -0,0 +1,48 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bd6873fd4dd6a61d7e46f1d75cd4d90f64c40894, resprited by whatston3 (GitHub)",
+ "copyright": "screen_mass, screen_radar by Tych0thesynth (GitHub)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "broken_wallmount",
+ "directions": 4
+ },
+ {
+ "name": "computer_board_exposed",
+ "directions": 4
+ },
+ {
+ "name": "computer_monitor_unscrewed",
+ "directions": 4
+ },
+ {
+ "name": "computer_needs_wires",
+ "directions": 4
+ },
+ {
+ "name": "computer_no_monitor",
+ "directions": 4
+ },
+ {
+ "name": "computer_wallmount",
+ "directions": 4
+ },
+ {
+ "name": "computer_wallmount_frame",
+ "directions": 4
+ },
+ {
+ "name": "screen_mass",
+ "directions": 4
+ },
+ {
+ "name": "screen_radar",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_mass.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_mass.png
new file mode 100644
index 00000000000..f0d5fddb6cb
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_mass.png differ
diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_radar.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_radar.png
new file mode 100644
index 00000000000..4071a7c28cb
Binary files /dev/null and b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_radar.png differ
diff --git a/Resources/_NF/migration.yml b/Resources/_NF/migration.yml
index 52d43f8a374..5c3d2ac9690 100644
--- a/Resources/_NF/migration.yml
+++ b/Resources/_NF/migration.yml
@@ -89,4 +89,13 @@ WeaponRackPistolBaseSecurity: StructurePistolRackNfsd
WeaponRackPistolWallmountedSecurity: StructurePistolRackWallmountedNfsd
# 2024-10-09 Frontier: Fixups
-SpawnPointDetectiveNF: NFSpawnPointDetective
\ No newline at end of file
+SpawnPointDetectiveNF: NFSpawnPointDetective
+
+# 2024-11-09
+WarpPointShip: WarpPoint
+
+# 2024-11-11 Xeno
+XenoAISpawnerEasy: SpawnMobXenoT1
+XenoAISpawnerMedium: SpawnMobXenoT2
+XenoAISpawnerHard: SpawnMobXenoT3
+XenoAISpawnerQueen: SpawnMobXenoQueenDungeon
\ No newline at end of file