Revert "Xenoborg extractor (#42796)"

This reverts commit 7f15e77954.
This commit is contained in:
ScarKy0 2026-03-17 00:02:36 +01:00 committed by Coryler
parent c2c3ff8c1a
commit a1b69294b2
39 changed files with 22 additions and 625 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}
}

View File

@ -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;
}
}
}

View File

@ -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";
}

View File

@ -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);

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>

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");

View File

@ -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

View File

@ -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

View File

@ -1,3 +0,0 @@
power-voltage-low = Low voltage
power-voltage-medium = Medium voltage
power-voltage-high = High voltage

View File

@ -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

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

View File

@ -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

View File

@ -145,7 +145,6 @@
- ConstructionMaterial
- RawMaterial
- Ingot
- XenoborgCrystal
components:
- Circuitboard
- Flatpack

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1524,12 +1524,6 @@
whitelist:
components:
- BorgModule
- hand:
emptyRepresentative: MaterialXenoborgCrystal
emptyLabel: borg-slot-xenoborg-crystal-empty
whitelist:
tags:
- XenoborgCrystal
- hand:
emptyRepresentative: BorgModuleConstructionMaterialPlaceholder
emptyLabel: borg-slot-construction-empty
@ -1558,12 +1552,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

View File

@ -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

View File

@ -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

View File

@ -240,12 +240,3 @@
hard: 7
density: 6
chemical: 5
- 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!

View File

@ -1,10 +1,5 @@
## Static
- type: latheRecipePack
id: XenoborgMachines
recipes:
- XenoborgExtractorRecipe
- type: latheRecipePack
id: EmptyXenoborgs
recipes:

View File

@ -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

View File

@ -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

View File

@ -1564,9 +1564,6 @@
## X ##
- type: Tag
id: XenoborgCrystal # MaterialStorage whitelist: Mothership core
- type: Tag
id: XenoborgGhostrole # spawn whitelist : SpawnPointGhostRoleXenoborg

View File

@ -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

View File

@ -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

View File

@ -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