Staging To Master (#43264)

* Revert "Remove salv stuff from mothership (#43007)"

This reverts commit eea773ffee.

* remove changelog

* Fix changelog for #43049 (#43248)

Changelogs gotta go on staging in the changelog thing

* Revert "Xenoborg extractor (#42796)"

This reverts commit 7f15e77954.

* revert CL

* Fix floating point tilefire nonsense (#43263)

* Change method call and epsilon

* holy guacamole

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
This commit is contained in:
Princess Cheeseballs
2026-03-16 19:41:19 -07:00
committed by GitHub
46 changed files with 340 additions and 689 deletions
@@ -204,7 +204,7 @@ public sealed partial class AtmosphereSystem
if (!IsMixtureOxidizer(tile.Air))
return;
var isFlammable = IsMixtureIgnitable(tile.Air);
var isFlammable = IsMixtureFuel(tile.Air);
if (tile.Hotspot.Valid)
{
@@ -1,7 +0,0 @@
namespace Content.Server.Power.Components;
/// <summary>
/// Charges the battery from a entity with <see cref="PowerConsumerComponent"/>
/// </summary>
[RegisterComponent]
public sealed partial class PowerConsumerBatteryChargerComponent : Component;
@@ -1,23 +0,0 @@
using Robust.Shared.Prototypes;
namespace Content.Server.Power.Components;
/// <summary>
/// Spawns a entity when the battery reaches a certain percentage or amount of power.
/// It also consumes that much power when spawning the entity.
/// </summary>
[RegisterComponent]
public sealed partial class SpawnOnBatteryLevelComponent : Component
{
/// <summary>
/// Entity prototype to spawn.
/// </summary>
[DataField(required: true)]
public EntProtoId Prototype = string.Empty;
/// <summary>
/// Amount of power in the battery (in joules) to spawn entity
/// </summary>
[DataField]
public float Charge;
}
@@ -1,46 +0,0 @@
using Robust.Shared.GameStates;
using Content.Shared.Power;
namespace Content.Server.Power.Components;
/// <summary>
/// Changes the voltage of a device with <see cref="PowerConsumerComponent"/>
/// </summary>
[RegisterComponent]
public sealed partial class VoltageTogglerComponent : Component
{
/// <summary>
/// List of all voltage settings.
/// </summary>
[DataField(required: true), ViewVariables(VVAccess.ReadOnly)]
public VoltageSetting[] Settings = [];
/// <summary>
/// Index of the currently selected setting.
/// </summary>
[DataField]
[AutoNetworkedField]
public int SelectedVoltageLevel;
}
[DataDefinition]
public partial struct VoltageSetting
{
/// <summary>
/// Voltage.
/// </summary>
[DataField(required: true)]
public Voltage Voltage;
/// <summary>
/// Power usage in that voltage.
/// </summary>
[DataField(required: true)]
public float Wattage;
/// <summary>
/// Name of the setting.
/// </summary>
[DataField(required: true)]
public LocId Name;
}
@@ -1,22 +0,0 @@
using Content.Server.Power.Components;
using Content.Shared.Power.Components;
namespace Content.Server.Power.EntitySystems;
public sealed class PowerConsumerBatteryChargerSystem : EntitySystem
{
[Dependency] private readonly BatterySystem _battery = default!;
public override void Update(float frameTime)
{
var query = EntityQueryEnumerator<PowerConsumerBatteryChargerComponent, PowerConsumerComponent, BatteryComponent, TransformComponent>();
while (query.MoveNext(out var entity, out _, out var powerConsumerComp, out var battery, out var transform))
{
if (!transform.Anchored)
continue;
_battery.ChangeCharge((entity, battery), powerConsumerComp.NetworkLoad.ReceivingPower * frameTime);
}
}
}
@@ -57,7 +57,6 @@ namespace Content.Server.Power.EntitySystems
SubscribeLocalEvent<PowerNetworkBatteryComponent, EntityPausedEvent>(BatteryPaused);
SubscribeLocalEvent<PowerNetworkBatteryComponent, EntityUnpausedEvent>(BatteryUnpaused);
SubscribeLocalEvent<PowerConsumerComponent, MapInitEvent>(PowerConsumerMapInit);
SubscribeLocalEvent<PowerConsumerComponent, ComponentInit>(PowerConsumerInit);
SubscribeLocalEvent<PowerConsumerComponent, ComponentShutdown>(PowerConsumerShutdown);
SubscribeLocalEvent<PowerConsumerComponent, EntityPausedEvent>(PowerConsumerPaused);
@@ -133,11 +132,6 @@ namespace Content.Server.Power.EntitySystems
component.NetworkBattery.Paused = false;
}
private void PowerConsumerMapInit(EntityUid uid, PowerConsumerComponent component, ref MapInitEvent args)
{
_appearance.SetData(uid, PowerDeviceVisuals.Powered, component.ReceivedPower > 0);
}
private void PowerConsumerInit(EntityUid uid, PowerConsumerComponent component, ComponentInit args)
{
_powerNetConnector.BaseNetConnectorInit(component);
@@ -420,8 +414,6 @@ namespace Content.Server.Power.EntitySystems
lastRecv = newRecv;
var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate);
RaiseLocalEvent(uid, ref msg);
_appearance.SetData(uid, PowerDeviceVisuals.Powered, newRecv > 0);
}
}
@@ -1,34 +0,0 @@
using Content.Server.Power.Components;
using Content.Shared.Power;
using Content.Shared.Power.Components;
namespace Content.Server.Power.EntitySystems;
public sealed class SpawnOnBatteryLevelSystem : EntitySystem
{
[Dependency] private readonly BatterySystem _battery = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SpawnOnBatteryLevelComponent, ChargeChangedEvent>(OnBatteryChargeChange);
}
private void OnBatteryChargeChange(Entity<SpawnOnBatteryLevelComponent> entity, ref ChargeChangedEvent args)
{
if (!TryComp<BatteryComponent>(entity, out var battery))
return;
if (!TryComp(entity, out TransformComponent? xform))
return;
if (battery.LastCharge >= entity.Comp.Charge)
{
Spawn(entity.Comp.Prototype, xform.Coordinates);
_battery.ChangeCharge((entity, battery), -entity.Comp.Charge);
}
}
}
@@ -1,74 +0,0 @@
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.Power.Components;
using Content.Shared.NodeContainer;
using Content.Shared.NodeContainer.NodeGroups;
using Content.Shared.Power;
using Content.Shared.Verbs;
namespace Content.Server.Power.EntitySystems;
public sealed class VoltageTogglerSystem : EntitySystem
{
[Dependency] private readonly NodeGroupSystem _nodeGroupSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<VoltageTogglerComponent, GetVerbsEvent<Verb>>(OnGetVerb);
}
private void OnGetVerb(Entity<VoltageTogglerComponent> entity, ref GetVerbsEvent<Verb> args)
{
if (!args.CanAccess || !args.CanInteract)
return;
var index = 0;
foreach (var setting in entity.Comp.Settings)
{
// This is because Act wont work with index.
// Needs it to be saved in the loop.
var currIndex = index;
var verb = new Verb
{
Priority = currIndex,
Category = VerbCategory.VoltageLevel,
Disabled = entity.Comp.SelectedVoltageLevel == currIndex,
Text = Loc.GetString(setting.Name),
Act = () =>
{
entity.Comp.SelectedVoltageLevel = currIndex;
Dirty(entity);
ChangeVoltage(entity, setting);
}
};
args.Verbs.Add(verb);
index++;
}
}
private void ChangeVoltage(Entity<VoltageTogglerComponent> entity, VoltageSetting setting)
{
if (TryComp<NodeContainerComponent>(entity, out var nodeContainerComp))
{
var newNodeGroupId = setting.Voltage switch
{
Voltage.Apc => NodeGroupID.Apc,
Voltage.Medium => NodeGroupID.MVPower,
Voltage.High => NodeGroupID.HVPower,
_ => NodeGroupID.Default,
};
var inputNode = nodeContainerComp.Nodes["input"];
_nodeGroupSystem.QueueNodeRemove(inputNode);
inputNode.SetNodeGroupId(newNodeGroupId);
_nodeGroupSystem.QueueReflood(inputNode);
}
if (TryComp<PowerConsumerComponent>(entity, out var powerConsumerComp))
{
powerConsumerComp.Voltage = setting.Voltage;
powerConsumerComp.DrawRate = setting.Wattage;
}
}
}
+1 -1
View File
@@ -22,7 +22,7 @@ namespace Content.Shared.Atmos
/// <summary>
/// Global Atmospherics epsilon. Used for all general floating-point comparisons.
/// </summary>
public const float Epsilon = 0.001f;
public const float Epsilon = 0.5f;
/// <summary>
/// Maximum external pressure (in kPA) a gas miner will, by default, output to.
@@ -115,7 +115,7 @@ public abstract partial class SharedAtmosphereSystem
/// considered ignitable, for both oxidizer and fuel.</param>
/// <returns>True if the <see cref="GasMixture"/> is ignitable, otherwise, false.</returns>
[PublicAPI]
public bool IsMixtureIgnitable(GasMixture mixture, float epsilon = 0.001f)
public bool IsMixtureIgnitable(GasMixture mixture, float epsilon = Atmospherics.Epsilon)
{
return IsMixtureFuel(mixture, epsilon) && IsMixtureOxidizer(mixture, epsilon);
}
@@ -128,7 +128,7 @@ public abstract partial class SharedAtmosphereSystem
/// is considered fuel.</param>
/// <returns>True if the <see cref="GasMixture"/> is fuel, otherwise, false.</returns>
[PublicAPI]
public abstract bool IsMixtureFuel(GasMixture mixture, float epsilon = 0.001f);
public abstract bool IsMixtureFuel(GasMixture mixture, float epsilon = Atmospherics.Epsilon);
/// <summary>
/// Determines if a <see cref="GasMixture"/> has oxidizer gases in it or not.
@@ -138,7 +138,7 @@ public abstract partial class SharedAtmosphereSystem
/// is considered an oxidizer.</param>
/// <returns>True if the <see cref="GasMixture"/> is an oxidizer, otherwise, false.</returns>
[PublicAPI]
public abstract bool IsMixtureOxidizer(GasMixture mixture, float epsilon = 0.001f);
public abstract bool IsMixtureOxidizer(GasMixture mixture, float epsilon = Atmospherics.Epsilon);
/// <summary>
/// Calculates the heat capacity for a <see cref="GasMixture"/>.
@@ -1,14 +0,0 @@
namespace Content.Shared.Construction.Components;
/// <summary>
/// If a entity has this component it can only be anchored to the station
/// </summary>
[RegisterComponent]
public sealed partial class AnchorOnlyOnStationComponent : Component
{
/// <summary>
/// Pop up message when you try to anchor the entity on any grid that isn't the station grid
/// </summary>
[DataField]
public LocId PopupMessageAnchorFail = "anchorable-fail-not-on-station";
}
@@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Shared.Administration.Logs;
using Content.Shared.Examine;
using Content.Shared.Construction.Components;
@@ -11,8 +10,6 @@ using Content.Shared.Interaction;
using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Movement.Pulling.Systems;
using Content.Shared.Popups;
using Content.Shared.Station;
using Content.Shared.Station.Components;
using Content.Shared.Tools.Components;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
@@ -32,7 +29,6 @@ public sealed partial class AnchorableSystem : EntitySystem
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly PullingSystem _pulling = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly SharedStationSystem _stationSystem = default!;
[Dependency] private readonly SharedToolSystem _tool = default!;
[Dependency] private readonly SharedTransformSystem _transformSystem = default!;
[Dependency] private readonly TagSystem _tagSystem = default!;
@@ -55,8 +51,6 @@ public sealed partial class AnchorableSystem : EntitySystem
SubscribeLocalEvent<AnchorableComponent, ExaminedEvent>(OnAnchoredExamine);
SubscribeLocalEvent<AnchorableComponent, ComponentStartup>(OnAnchorStartup);
SubscribeLocalEvent<AnchorableComponent, AnchorStateChangedEvent>(OnAnchorStateChange);
SubscribeLocalEvent<AnchorOnlyOnStationComponent, AnchorAttemptEvent>(OnAnchorOnStation);
}
private void OnAnchorStartup(EntityUid uid, AnchorableComponent comp, ComponentStartup args)
@@ -64,21 +58,6 @@ public sealed partial class AnchorableSystem : EntitySystem
_appearance.SetData(uid, AnchorVisuals.Anchored, Transform(uid).Anchored);
}
private void OnAnchorOnStation(Entity<AnchorOnlyOnStationComponent> ent, ref AnchorAttemptEvent args)
{
var entityParent = Comp<TransformComponent>(ent).ParentUid;
var isOnStation = _stationSystem.GetStations()
.Select(stationEnt => _stationSystem.GetLargestGrid(stationEnt))
.Contains(entityParent);
if (isOnStation)
return;
// TODO: fix the popup
// _popup.PopupClient(Loc.GetString(ent.Comp.PopupMessageAnchorFail), ent, args.User);
args.Cancel();
}
private void OnAnchorStateChange(EntityUid uid, AnchorableComponent comp, AnchorStateChangedEvent args)
{
_appearance.SetData(uid, AnchorVisuals.Anchored, args.Anchored);
-5
View File
@@ -27,11 +27,6 @@ public abstract partial class Node
/// </summary>
[ViewVariables] public EntityUid Owner { get; private set; } = default!;
public void SetNodeGroupId(NodeGroupID newId)
{
NodeGroupID = newId;
}
/// <summary>
/// If this node should be considered for connection by other nodes.
/// </summary>
-3
View File
@@ -86,9 +86,6 @@ namespace Content.Shared.Verbs
public static readonly VerbCategory PowerLevel = new("verb-categories-power-level", null);
public static readonly VerbCategory VoltageLevel =
new("verb-categories-voltage-level", "/Textures/Interface/VerbIcons/zap.svg.192dpi.png");
public static readonly VerbCategory Adjust =
new("verb-categories-adjust", "/Textures/Interface/VerbIcons/screwdriver.png");
}
+25 -15
View File
@@ -3741,8 +3741,31 @@
url: https://github.com/space-wizards/space-station-14/pull/42909
- author: sowelipililimute
changes:
- message: Internal code changes to damage handling may result in slightly different
numbers for some medicines and/or some attacks.
- message: Underlying technical work for future medical improvements have resulted
in the following changes to better accomodate future development. Please note
that these changes are not representative of the final product and that the
medical balance will receive a major overhaul once limb and organ damage are
fully implemented.
type: Tweak
- message: Species now regenerate -0.05 of brute types individually (from -0.02).
type: Tweak
- message: Several mobs and weapons previously dealing split brute damage now deal singular damage types.
type: Tweak
- message: Several reagents previously dealing split brute damage now deals singular damage types.
type: Tweak
- message: Several reagents previously healing split brute damage now evenly heals instead.
type: Tweak
- message: Spiders now regenerate -0.03 of brute and burn types individually (from -0.02).
type: Tweak
- message: Skeletons now evenly heal when using milk.
type: Tweak
- message: Tomato killers now heal evenly when splashed with water, blood, or robust harvest.
type: Tweak
- message: Tricordrazine now evenly heals both brute, burn and toxin.
type: Tweak
- message: Desoxyephedrine now deals slighlty more blunt damage (to offset tricordazine changes).
type: Tweak
- message: Crusher mark leech hits now heal 5 of each brute category on hit (was 7).
type: Tweak
id: 9549
time: '2026-02-27T06:33:44.0000000+00:00'
@@ -3754,19 +3777,6 @@
id: 9550
time: '2026-02-27T16:02:04.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/42960
- author: Samuka
changes:
- message: 'EXPERIMENTAL: Added the xenoborg crystal!'
type: Add
- message: 'EXPERIMENTAL: Added the xenoborg extractor which can produce the xenoborg
crystal.'
type: Add
- message: 'EXPERIMENTAL: The recipes to make xenoborg chassis and xenoborg modules
now uses xenoborg crystals instead of normal materials.'
type: Tweak
id: 9551
time: '2026-02-28T01:08:13.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/42796
- author: kontakt
changes:
- message: Throwing croissants no longer have a throwing knife in-hand sprite.
-10
View File
@@ -1045,16 +1045,6 @@
id: 127
time: '2026-02-28T06:56:45.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/43061
- author: Samuka
changes:
- message: Removed recycler and conveyor from the xenoborg mothership.
type: Remove
- message: Changed the starting materials of the xenoborg mothership to include
xenoborg crystals.
type: Tweak
id: 128
time: '2026-03-04T09:08:04.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/43007
- author: TytosB
changes:
- message: several changes to Serpentcrest, salv area rework.
@@ -1,5 +1,3 @@
anchorable-anchored = Anchored
anchorable-unanchored = Unanchored
anchorable-occupied = Tile occupied
anchorable-fail-not-on-station = Can't anchor anywhere but the station
@@ -30,7 +30,6 @@ materials-coal = coal
materials-diamond = diamond
materials-gunpowder = gunpowder
materials-cotton = cotton
materials-xenoborg-crystal = xenoborg crystal
# Ores
materials-raw-iron = raw iron
@@ -1,3 +0,0 @@
power-voltage-low = Low voltage
power-voltage-medium = Medium voltage
power-voltage-high = High voltage
@@ -16,4 +16,3 @@ borg-slot-modules-empty = Modules
borg-slot-powercell-empty = Powercells
borg-slot-inflatable-door-empty = Inflatable Door
borg-slot-inflatable-wall-empty = Inflatable Wall
borg-slot-xenoborg-crystal-empty = Xenoborg crystals
-4
View File
@@ -80,10 +80,6 @@ stack-artifact-fragment = artifact {$amount ->
[1] fragment
*[other] fragments
}
stack-xenoborg-circuit = dvanced xenoborg {$amount ->
[1] circuitboard
*[other] circuitboards
}
# best materials
stack-ground-tobacco = ground tobacco
@@ -28,7 +28,6 @@ verb-categories-lever = Lever
verb-categories-select-type = Select Type
verb-categories-fax = Set Destination
verb-categories-power-level = Power Level
verb-categories-voltage-level = Voltage Level
verb-categories-adjust = Adjust
verb-common-toggle-light = Toggle light
+288 -17
View File
@@ -1,11 +1,11 @@
meta:
format: 7
category: Grid
engineVersion: 272.0.0
engineVersion: 270.1.0
forkId: ""
forkVersion: ""
time: 02/23/2026 18:44:56
entityCount: 567
time: 01/16/2026 03:06:16
entityCount: 591
maps: []
grids:
- 1
@@ -160,8 +160,6 @@ entities:
- type: GasTileOverlay
- type: RadiationGridResistance
- type: ExplosionAirtightGrid
- type: TileHistory
chunkHistory: {}
- proto: AirlockGlassShuttleXenoborgLocked
entities:
- uid: 107
@@ -1466,6 +1464,16 @@ entities:
- type: Transform
pos: 2.5,-6.5
parent: 1
- proto: CableApcStack
entities:
- uid: 345
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: CableHV
entities:
- uid: 139
@@ -1518,6 +1526,16 @@ entities:
- type: Transform
pos: -9.5,0.5
parent: 1
- proto: CableHVStack
entities:
- uid: 343
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: CableMV
entities:
- uid: 149
@@ -1885,6 +1903,16 @@ entities:
- type: Transform
pos: 6.5,-0.5
parent: 1
- proto: CableMVStack
entities:
- uid: 339
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: CableTerminal
entities:
- uid: 138
@@ -1971,13 +1999,73 @@ entities:
- type: Transform
pos: 1.5,2.5
parent: 1
- proto: CrateXenoborgStartingSupplies
- proto: ConveyorBelt
entities:
- uid: 111
- uid: 243
components:
- type: Transform
pos: 0.5,-8.5
parent: 1
- uid: 244
components:
- type: Transform
pos: 0.5,-7.5
parent: 1
- uid: 245
components:
- type: Transform
pos: 0.5,-6.5
parent: 1
- uid: 247
components:
- type: Transform
pos: 0.5,-4.5
parent: 1
- uid: 250
components:
- type: Transform
pos: 0.5,-9.5
parent: 1
- uid: 251
components:
- type: Transform
pos: 0.5,-10.5
parent: 1
- proto: CrateGenericSteel
entities:
- uid: 425
components:
- type: Transform
pos: -0.5,-1.5
parent: 1
- type: ContainerContainer
containers:
entity_storage: !type:Container
showEnts: False
occludes: True
ents:
- 455
- 453
- 370
- 340
- 346
- 341
- 344
- 342
- 456
- 586
- 587
- 588
- 589
- 345
- 343
- 339
- 590
- 591
paper_label: !type:ContainerSlot
showEnts: False
occludes: True
ent: null
- proto: DisposalBend
entities:
- uid: 377
@@ -2273,11 +2361,6 @@ entities:
- type: Transform
pos: 2.5,-7.5
parent: 1
- uid: 244
components:
- type: Transform
pos: 0.5,-5.5
parent: 1
- uid: 254
components:
- type: Transform
@@ -2394,6 +2477,141 @@ entities:
- type: Transform
pos: 6.5,3.5
parent: 1
- proto: Recycler
entities:
- uid: 111
components:
- type: Transform
pos: 0.5,-5.5
parent: 1
- proto: SheetGlass
entities:
- uid: 586
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 589
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: SheetPlasteel
entities:
- uid: 340
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 342
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: SheetPlastic
entities:
- uid: 341
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 344
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: SheetSteel
entities:
- uid: 346
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 370
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 453
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 455
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 456
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 587
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 588
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 590
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- uid: 591
components:
- type: Transform
parent: 425
- type: Physics
canCollide: False
- type: InsideEntityStorage
storage: 425
- proto: SignalButton
entities:
- uid: 584
@@ -2735,6 +2953,64 @@ entities:
parent: 1
- proto: TwoWayLever
entities:
- uid: 249
components:
- type: MetaData
name: conveyor
- type: Transform
pos: -0.5,-4.5
parent: 1
- type: DeviceLinkSource
linkedPorts:
247:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
111:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
245:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
244:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
243:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
251:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
250:
- - Left
- Reverse
- - Right
- Forward
- - Middle
- Off
- uid: 328
components:
- type: MetaData
@@ -3462,11 +3738,6 @@ entities:
- type: Transform
pos: 1.5,6.5
parent: 1
- uid: 243
components:
- type: Transform
pos: 0.5,-5.5
parent: 1
- uid: 349
components:
- type: Transform
@@ -1,17 +0,0 @@
- type: entity
parent: CrateGenericSteel
id: CrateXenoborgStartingSupplies
name: xenoborg supplies crate
description: Contains starting materials for the mothership to make more xenoborgs.
components:
- type: EntityTableContainerFill
containers:
entity_storage: !type:AllSelector
children:
- id: SheetSteel
amount: 2
- id: MaterialXenoborgCrystal
amount: 2
- id: CableApcStack
- id: CableMVStack
- id: CableHVStack
@@ -145,7 +145,6 @@
- ConstructionMaterial
- RawMaterial
- Ingot
- XenoborgCrystal
components:
- Circuitboard
- Flatpack
@@ -41,14 +41,14 @@
idleState: core-idle
runningState: core-active
staticPacks:
- XenoborgMachines
- EmptyXenoborgs
- XenoborgUpgradeModules
- type: MaterialStorage
whitelist:
tags:
- XenoborgCrystal
- Sheet
- RawMaterial
- Ingot
- type: PointLight
color: "#0033ff"
enabled: true
@@ -146,7 +146,7 @@
laws: NutimovLawset
- type: entity
id: XenoborgLawsetCircuitBoard
id: XenoborgCircuitBoard
parent: BaseSiliconLawboard
name: law board (Xenoborg)
suffix: Admeme
@@ -156,7 +156,7 @@
laws: XenoborgLawset
- type: entity
id: MothershipLawsetCircuitBoard
id: MothershipCircuitBoard
parent: BaseSiliconLawboard
name: law board (Mothership Core)
suffix: Admeme
@@ -280,18 +280,3 @@
- type: GuideHelp
guides:
- FoodRecipes
- type: entity
parent: [ BaseFlatpack, BaseXenoborgContraband ]
id: XenoborgExtractorFlatpack
name: xenoborg extractor flatpack
description: A flatpack used for constructing a xenoborg extractor.
components:
- type: Item
size: Normal
- type: Flatpack
entity: XenoborgExtractor
- type: GuideHelp
guides:
- Xenoborgs
@@ -1,46 +0,0 @@
- type: entity
parent: [ MaterialBase, BaseXenoborgContraband ]
id: MaterialXenoborgCrystal
name: xenoborg crystal
description: A special crystal created from nuclear fusion. It's used to make xenoborgs.
suffix: 10
components:
- type: Item
storedRotation: 0
- type: Appearance
- type: Stack
stackType: XenoborgCrystal
count: 10
baseLayer: base
layerStates:
- crystal-1
- crystal-2
- crystal-3
- type: Sprite
sprite: Objects/Materials/xenoborg_crystal.rsi
layers:
- state: crystal-3
map: [ "base" ]
- type: Material
- type: PhysicalComposition
materialComposition:
XenoborgCrystal: 100
- type: Tag
tags:
- XenoborgCrystal
- type: entity
parent: MaterialXenoborgCrystal
id: MaterialXenoborgCrystal5
suffix: 5
components:
- type: Stack
count: 5
- type: entity
parent: MaterialXenoborgCrystal
id: MaterialXenoborgCrystal1
suffix: 1
components:
- type: Stack
count: 1
@@ -1429,12 +1429,6 @@
whitelist:
components:
- BorgModule
- hand:
emptyRepresentative: MaterialXenoborgCrystal
emptyLabel: borg-slot-xenoborg-crystal-empty
whitelist:
tags:
- XenoborgCrystal
- hand:
emptyRepresentative: BorgModuleConstructionMaterialPlaceholder
emptyLabel: borg-slot-construction-empty
@@ -1463,12 +1457,6 @@
- state: icon-xenoborg-basic
- type: ItemBorgModule
hands:
- hand:
emptyRepresentative: MaterialXenoborgCrystal
emptyLabel: borg-slot-xenoborg-crystal-empty
whitelist:
tags:
- XenoborgCrystal
- hand:
emptyRepresentative: BorgModuleConstructionMaterialPlaceholder
emptyLabel: borg-slot-construction-empty
@@ -1,111 +0,0 @@
- type: entity
parent: [BaseMachine, BaseXenoborgContraband]
id: XenoborgExtractor
name: xenoborg extractor
description: Drains electricity from the grid to produce xenoborg crystals via nuclear fusion.
suffix: Unanchored
placement:
mode: PlaceFree
components:
- type: Physics
bodyType: Dynamic
- type: Transform
anchored: false
- type: AnchorOnlyOnStation
- type: Sprite
sprite: Structures/Machines/xenoborg_extractor.rsi
snapCardinals: true
layers:
- state: icon
map: ["base"]
- state: running
map: ["running"]
- state: light
shader: unshaded
map: ["light"]
- type: Appearance
- type: GenericVisualizer
visuals:
enum.PowerDeviceVisuals.Powered:
base:
True: { visible: false }
False: { visible: true }
running:
True: { visible: true }
False: { visible: false }
light:
True: { visible: true }
False: { visible: false }
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 100
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:PlaySoundBehavior
sound:
collection: MetalGlassBreak
- !type:ExplodeBehavior
- !type:SpawnEntitiesBehavior
spawn:
MachineFrameDestroyed:
min: 1
max: 1
- type: Explosive # small explosion when destroyed
explosionType: Default
maxIntensity: 20
totalIntensity: 10
intensitySlope: 5
canCreateVacuum: false
- type: NodeContainer
examinable: true
nodes:
input:
!type:CableDeviceNode
nodeGroupID: Apc
- type: LightningTarget
priority: 1
- type: Electrified
onHandInteract: false
onInteractUsing: false
onBump: false
requirePower: true
highVoltageNode: input
mediumVoltageNode: input
lowVoltageNode: input
- type: Battery
maxCharge: 2000000 # 2MJ
netsync: false
- type: ExaminableBattery
- type: PowerConsumerBatteryCharger
- type: PowerConsumer
voltage: Apc
drawRate: 10000
- type: VoltageToggler
settings:
- voltage: Apc
wattage: 16000 # 16kW - 125 seconds to spawn one
name: power-voltage-low
- voltage: Medium
wattage: 50000 # 50kW - 40 seconds to spawn one
name: power-voltage-medium
- voltage: High
wattage: 200000 # 200kW - 10 seconds to spawn one # sets off the rogue power consuming device alert!
name: power-voltage-high
- type: SpawnOnBatteryLevel
prototype: MaterialXenoborgCrystal1
charge: 2000000 # 2MJ
- type: entity
parent: XenoborgExtractor
id: XenoborgExtractorAnchored
suffix: Anchored
placement:
mode: SnapgridCenter
components:
- type: Physics
bodyType: Static
- type: Transform
anchored: true
@@ -17,30 +17,3 @@
responseType: "General Feedback"
responseLink: "https://forum.spacestation14.com/c/development/feedback/51"
showRoundEnd: false
- type: feedbackPopup
id: PlayingAsMothershipCoreFeedback
popupOrigin: wizden_master
title: "[bold]Playing as [color=deepskyblue]mothership[/color] core[/bold]"
description: >-
If you played mothership core this round or maybe in a previous round, feel free to respond this feedback thread about your experiences and issues with playing as the mothership core.
responseType: "Feedback Thread"
responseLink: "https://forum.spacestation14.com/t/playing-as-a-mothership-core/26688/2"
showRoundEnd: true
ruleWhitelist:
components:
- XenoborgsRule
- type: feedbackPopup
id: XenoborgExtractorFeedback
popupOrigin: wizden_master
title: "[bold]The [color=deepskyblue]xenoborg[/color] extractor [scramble chars=\"xenoborg-##][{}||,.<>\" rate=40 length=5][/bold]"
description: >-
Please share feedback on the new xenoborg extractor and crystal, and how these additions affect xenoborg gameplay.
responseType: "Feedback Thread"
responseLink: "https://forum.spacestation14.com/t/xenoborg-extractor/26689"
showRoundEnd: true
ruleWhitelist:
components:
- XenoborgsRule
@@ -141,12 +141,3 @@
icon: { sprite: Objects/Materials/materials.rsi, state: diamond }
color: "#80ffff"
price: 20 # big diamond gaslit us so hard diamonds actually became extremely rare
- type: material
id: XenoborgCrystal
stackEntity: MaterialXenoborgCrystal1
name: materials-xenoborg-crystal
unit: materials-unit-piece
icon: { sprite: Objects/Materials/xenoborg_crystal.rsi, state: crystal-1 }
color: "#3d94ff"
price: 2 # $200 for 1 unit # crystal pretty!
@@ -1,10 +1,5 @@
## Static
- type: latheRecipePack
id: XenoborgMachines
recipes:
- XenoborgExtractorRecipe
- type: latheRecipePack
id: EmptyXenoborgs
recipes:
@@ -1,12 +1,5 @@
# Base prototypes
- type: latheRecipe
abstract: true
id: BaseXenoborgMachineRecipe
categories:
- Machines
completetime: 2
- type: latheRecipe
abstract: true
id: BaseXenoborgRecipe
@@ -21,15 +14,6 @@
- Modules
completetime: 2
# machines
- type: latheRecipe
parent: BaseXenoborgMachineRecipe
id: XenoborgExtractorRecipe
result: XenoborgExtractorFlatpack
materials:
Steel: 1000
# xenoborgs
- type: latheRecipe
@@ -37,28 +21,31 @@
id: XenoborgEngiRecipe
result: XenoborgEngiPrinted
materials:
XenoborgCrystal: 100
Steel: 3000
- type: latheRecipe
parent: BaseXenoborgRecipe
id: XenoborgHeavyRecipe
result: XenoborgHeavyPrinted
materials:
XenoborgCrystal: 100
Steel: 2000
Plasteel: 1000
- type: latheRecipe
parent: BaseXenoborgRecipe
id: XenoborgScoutRecipe
result: XenoborgScoutPrinted
materials:
XenoborgCrystal: 100
Steel: 2000
Plastic: 1000
- type: latheRecipe
parent: BaseXenoborgRecipe
id: XenoborgStealthRecipe
result: XenoborgStealthPrinted
materials:
XenoborgCrystal: 100
Steel: 2000
Glass: 1000
# modules
@@ -69,7 +56,8 @@
id: XenoborgModuleDoorControlRecipe
result: XenoborgModuleDoorControl
materials:
XenoborgCrystal: 100
Steel: 1500
Glass: 1500
## heavy xenoborg modules
@@ -78,7 +66,8 @@
id: XenoborgModuleHeavyLaserRecipe
result: XenoborgModuleHeavyLaser
materials:
XenoborgCrystal: 100
Steel: 1500
Glass: 1500
## scout xenoborg modules
@@ -87,7 +76,8 @@
id: XenoborgModuleEnergySwordRecipe
result: XenoborgModuleEnergySword
materials:
XenoborgCrystal: 100
Steel: 1500
Glass: 1500
## stealth xenoborg modules
@@ -96,4 +86,4 @@
id: XenoborgModuleSuperCloakDeviceRecipe
result: XenoborgModuleSuperCloakDevice
materials:
XenoborgCrystal: 100
Glass: 3000
@@ -1,6 +0,0 @@
- type: stack
parent: BaseSmallStack
id: XenoborgCrystal
name: stack-xenoborg-circuit
icon: { sprite: "/Textures/Objects/Materials/xenoborg_crystal.rsi", state: crystal-3 }
spawn: MaterialXenoborgCrystal1
-3
View File
@@ -1566,9 +1566,6 @@
## X ##
- type: Tag
id: XenoborgCrystal # MaterialStorage whitelist: Mothership core
- type: Tag
id: XenoborgGhostrole # spawn whitelist : SpawnPointGhostRoleXenoborg
@@ -16,9 +16,7 @@
## Objectives
Your main objective is to kill and harvest all sentient brains in the station and bring them to the mothership core. These can be both real brains, and positronic brains.
Steal power from the station using xenoborg extractors to produce xenoborg crystals to create more xenoborg bodies.
Collect materials to create more xenoborg bodies.
Protect the Mothership at all costs.
## The Mothership Core
@@ -76,11 +74,6 @@
<GuideEntityEmbed Entity="BorgModuleCable" Caption="cable cyborg module"/>
</Box>
[bold]Upgrade exclusive modules:[/bold]
<Box>
<GuideEntityEmbed Entity="XenoborgModuleDoorControl" Caption="door control xenoborg module"/>
</Box>
### The Heavy Xenoborg
<Box>
<GuideEntityEmbed Entity="XenoborgHeavy" Caption=""/>
@@ -95,7 +88,7 @@
[bold]Upgrade exclusive modules:[/bold]
<Box>
<GuideEntityEmbed Entity="XenoborgModuleHeavyLaser" Caption="laser cannon xenoborg module"/>
<GuideEntityEmbed Entity="XenoborgModuleHeavyLaser" Caption="heavy laser xenoborg module"/>
</Box>
### The Scout Xenoborg
@@ -132,41 +125,19 @@
[bold]Upgrade exclusive modules:[/bold]
<Box>
<GuideEntityEmbed Entity="XenoborgModuleSuperCloakDevice" Caption="invisibility device xenoborg module"/>
<GuideEntityEmbed Entity="XenoborgModuleSuperCloakDevice" Caption="cloaking device xenoborg module"/>
</Box>
## Xenoborg extractors
<Box>
<GuideEntityEmbed Entity="XenoborgExtractor" Caption="xenoborg extractor"/>
<GuideEntityEmbed Entity="MaterialXenoborgCrystal" Caption="xenoborg crystal"/>
</Box>
Its a machine necessary for the xenoborgs to grow their army. It can steal power from cables connected to it and then produce xenoborg crystals.
The mothership core can produce a xenoborg extractor flatpack for 10 steel.
Once its anchored on top of a cable it needs to be set to that cable voltage to start draining power.
Once it's battery is full it will produce one xenoborg crystal.
It drains different amounts of power depending on the voltage.
- low voltage - 16kW - 2 minutes and 5 seconds to produce one xenoborg circuit.
- medium voltage - 50kW - 40 seconds to produce one xenoborg circuit.
- high voltage - 200kW - 10 seconds to produce one xenoborg circuit.
Attention! at the highest voltage it will trigger the rogue power consuming device alert! and anyone using the power monitor device will know something is wrong.
## Preparation and Tactics
Before FTLing near the station, make sure the IFF is off.
Before launching an attack, xenoborgs should discuss strategy and decide which targets to strike first.
Xenoborgs should try to collect sentient brains without being detected. The longer the threat is unknown, the more dangerous the xenoborgs become.
## Mothership and Xenoborg lawsets
The Mothership and Xenoborgs have unique laws that define their purpose to self replicate and protect the Mothership.
<Box>
<GuideEntityEmbed Entity="XenoborgLawsetCircuitBoard" Caption=""/>
<GuideEntityEmbed Entity="XenoborgCircuitBoard" Caption=""/>
</Box>
The Mothership Core's laws are as follows::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 688 B

@@ -1,20 +0,0 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "made by samuka-C (github)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "crystal-1"
},
{
"name": "crystal-2"
},
{
"name": "crystal-3"
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 969 B

@@ -1,40 +0,0 @@
{
"version": 1,
"license":"CC-BY-SA-3.0",
"copyright":"Made by Samuka-C (github)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "light",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "running",
"delays": [
[
0.2,
0.2,
0.2,
0.2
]
]
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 828 B