Borg type switching. (#32586)

* Borg type switching.

This allows borgs (new spawn or constructed) to select their chassis type on creation, like in SS13. This removes the need for the many different chassis types, and means round-start borgs can actually play the game immediately instead of waiting for science to unlock everything.

New borgs have an additional action that allows them to select their type. This opens a nice window with basic information about the borgs and a select button. Once a type has been selected it is permanent for that borg chassis.

These borg types also immediately start the borg with specific modules, so they do not need to be printed. Additional modules can still be inserted for upgrades, though this is now less critical. The built-in modules cannot be removed, but are shown in the UI.

The modules that each borg type starts with:

* Generic: tools
* Engineering: advanced tools, construction, RCD, cable
* Salvage: Grappling gun, appraisal, mining
* Janitor: cleaning, light replacer
* Medical: treatment
* Service: music, service, clowning

Specialized borgs have 3 additional module slots available on top of the ones listed above, generic borgs have 5.

Borg types are specified in a new BorgTypePrototype. These prototypes specify all information about the borg type. It is assigned to the borg entity through a mix of client side, server, and shared code. Some of the involved components were made networked, others are just ensured they're set on both sides of the wire.

The most gnarly change is the inventory template prototype, which needs to change purely to modify the borg hat offset. I managed to bodge this in with an API that *probably* won't explode for specifically for this use case, but it's still not the most clean of API designs.

Parts for specific borg chassis have been removed (so much deleted YAML) and specialized borg modules that are in the base set of a type have been removed from the exosuit fab as there's no point to printing those.

The ability to "downgrade" a borg so it can select a new chassis, like in SS13, is something that would be nice, but was not high enough priority for me to block the feature on. I did keep it in mind with some of the code, so it may be possible in the future.

There is no fancy animation when selecting borg types like in SS13, because I didn't think it was high priority, and it would add a lot of complex code.

* Fix sandbox failure due to collection expression.

* Module tweak

Fix salvage borg modules still having research/lathe recipes

Engie borg has regular tool module, not advanced.

* Fix inventory system breakage

* Fix migrations

Some things were missing

* Guidebook rewordings & review

* MinWidth on confirm selection button
This commit is contained in:
Pieter-Jan Briers
2024-11-14 18:08:35 +01:00
committed by GitHub
parent 669bc148f9
commit 1bebb3390c
49 changed files with 1337 additions and 1534 deletions

View File

@@ -10,3 +10,15 @@
state: state-laws
event: !type:ToggleLawsScreenEvent
useDelay: 0.5
- type: entity
id: ActionSelectBorgType
name: Select Cyborg Type
components:
- type: InstantAction
itemIconStyle: NoItem
icon:
sprite: Interface/Actions/actions_borg.rsi
state: select-type
event: !type:BorgToggleSelectTypeEvent
useDelay: 0.5

View File

@@ -28,82 +28,105 @@
- Robotics
- type: entity
id: BaseBorgArmLeft
id: LeftArmBorg
parent: PartSilicon
name: cyborg left arm
abstract: true
components:
- type: BodyPart
partType: Hand
symmetry: Left
- type: Sprite
state: borg_l_arm
- type: Icon
state: borg_l_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgLArm
- type: entity
id: BaseBorgArmRight
id: RightArmBorg
parent: PartSilicon
name: cyborg right arm
abstract: true
components:
- type: BodyPart
partType: Hand
symmetry: Right
- type: Sprite
state: borg_r_arm
- type: Icon
state: borg_r_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgRArm
- type: entity
id: BaseBorgLegLeft
id: LeftLegBorg
parent: PartSilicon
name: cyborg left leg
abstract: true
components:
- type: BodyPart
partType: Leg
symmetry: Left
- type: Sprite
state: borg_l_leg
- type: Icon
state: borg_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgLLeg
- type: entity
id: BaseBorgLegRight
id: RightLegBorg
parent: PartSilicon
name: cyborg right leg
abstract: true
components:
- type: BodyPart
partType: Leg
symmetry: Right
- type: Sprite
state: borg_r_leg
- type: Icon
state: borg_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgRLeg
- type: entity
id: BaseBorgHead
id: LightHeadBorg
parent: PartSilicon
name: cyborg head
abstract: true
components:
- type: BodyPart
partType: Head
- type: Sprite
state: borg_head
- type: Icon
state: borg_head
- type: Tag
tags:
- Trash
- BorgHead
- type: entity
id: BaseBorgTorso
id: TorsoBorg
parent: PartSilicon
name: cyborg torso
abstract: true
components:
- type: BodyPart
partType: Torso
- type: Sprite
state: borg_chest
- type: Icon
state: borg_chest
- type: Tag
tags:
- Trash
- BorgTorso

View File

@@ -69,6 +69,9 @@
type: BorgBoundUserInterface
enum.StrippingUiKey.Key:
type: StrippableBoundUserInterface
# Only used for NT borgs that can switch type, defined here to avoid copy-pasting the rest of this component.
enum.BorgSwitchableTypeUiKey.SelectBorgType:
type: BorgSelectTypeUserInterface
- type: ActivatableUI
key: enum.BorgUiKey.Key
- type: SiliconLawBound
@@ -157,6 +160,7 @@
collection: FootstepBorg
- type: Construction
graph: Cyborg
node: cyborg
containers:
- part-container
- cell_slot
@@ -285,6 +289,9 @@
- type: AccessReader
access: [["Command"], ["Research"]]
- type: ShowJobIcons
- type: InteractionPopup
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: entity
id: BaseBorgChassisSyndicate

View File

@@ -1,23 +1,22 @@
- type: entity
id: BorgChassisGeneric
id: BorgChassisSelectable
parent: BaseBorgChassisNT
components:
- type: Sprite
layers:
- state: robot
map: ["enum.BorgVisualLayers.Body", "movement"]
- state: robot_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: robot_l
shader: unshaded
map: ["light"]
map: ["light","enum.BorgVisualLayers.LightStatus"]
visible: false
- type: BorgChassis
maxModules: 6
moduleWhitelist:
tags:
- BorgModuleGeneric
# Default borg can take no modules until selected type.
maxModules: 0
hasMindState: robot_e
noMindState: robot_e_r
- type: BorgTransponder
@@ -25,308 +24,62 @@
sprite: Mobs/Silicon/chassis.rsi
state: robot
name: cyborg
- type: Construction
node: cyborg
- type: Speech
speechVerb: Robotic
- type: InteractionPopup
interactSuccessString: petting-success-generic-cyborg
interactFailureString: petting-failure-generic-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: BorgSwitchableType
inherentRadioChannels:
- Common
- Binary
- type: entity
id: BorgChassisGeneric
parent: BorgChassisSelectable
name: generic cyborg
suffix: type picked
components:
- type: BorgSwitchableType
selectedBorgType: generic
- type: entity
id: BorgChassisMining
parent: BaseBorgChassisNT
parent: BorgChassisSelectable
name: salvage cyborg
components:
- type: Sprite
layers:
- state: miner
map: ["movement"]
- state: miner_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: miner_l
shader: unshaded
map: ["light"]
visible: false
- type: SpriteMovement
movementLayers:
movement:
state: miner_moving
noMovementLayers:
movement:
state: miner
- type: BorgChassis
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleCargo
hasMindState: miner_e
noMindState: miner_e_r
- type: BorgTransponder
sprite:
sprite: Mobs/Silicon/chassis.rsi
state: miner
name: salvage cyborg
- type: Construction
node: mining
- type: IntrinsicRadioTransmitter
channels:
- Supply
- Binary
- Common
- Science
- type: ActiveRadio
channels:
- Supply
- Binary
- Common
- Science
- type: AccessReader
access: [["Cargo"], ["Salvage"], ["Command"], ["Research"]]
- type: Inventory
templateId: borgTall
- type: InteractionPopup
interactSuccessString: petting-success-salvage-cyborg
interactFailureString: petting-failure-salvage-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: BorgSwitchableType
selectedBorgType: mining
- type: entity
id: BorgChassisEngineer
parent: BaseBorgChassisNT
parent: BorgChassisSelectable
name: engineer cyborg
components:
- type: Sprite
layers:
- state: engineer
- state: engineer_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: engineer_l
shader: unshaded
map: ["light"]
visible: false
- type: BorgChassis
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleEngineering
hasMindState: engineer_e
noMindState: engineer_e_r
- type: BorgTransponder
sprite:
sprite: Mobs/Silicon/chassis.rsi
state: engineer
name: engineer cyborg
- type: Construction
node: engineer
- type: IntrinsicRadioTransmitter
channels:
- Engineering
- Binary
- Common
- Science
- type: ActiveRadio
channels:
- Engineering
- Binary
- Common
- Science
- type: AccessReader
access: [["Engineering"], ["Command"], ["Research"]]
- type: Inventory
templateId: borgShort
- type: InteractionPopup
interactSuccessString: petting-success-engineer-cyborg
interactFailureString: petting-failure-engineer-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: BorgSwitchableType
selectedBorgType: engineering
- type: entity
id: BorgChassisJanitor
parent: BaseBorgChassisNT
parent: BorgChassisSelectable
name: janitor cyborg
components:
- type: Sprite
layers:
- state: janitor
map: ["movement"]
- state: janitor_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: janitor_l
shader: unshaded
map: ["light"]
visible: false
- type: SpriteMovement
movementLayers:
movement:
state: janitor_moving
noMovementLayers:
movement:
state: janitor
- type: BorgChassis
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleJanitor
hasMindState: janitor_e
noMindState: janitor_e_r
- type: BorgTransponder
sprite:
sprite: Mobs/Silicon/chassis.rsi
state: janitor
name: janitor cyborg
- type: Construction
node: janitor
- type: IntrinsicRadioTransmitter
channels:
- Service
- Binary
- Common
- Science
- type: ActiveRadio
channels:
- Service
- Binary
- Common
- Science
- type: AccessReader
access: [["Service"], ["Command"], ["Research"]]
- type: Inventory
templateId: borgShort
- type: InteractionPopup
interactSuccessString: petting-success-janitor-cyborg
interactFailureString: petting-failure-janitor-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: BorgSwitchableType
selectedBorgType: janitor
- type: entity
id: BorgChassisMedical
parent: [BaseBorgChassisNT, ShowMedicalIcons]
parent: BorgChassisSelectable
name: medical cyborg
components:
- type: Sprite
layers:
- state: medical
map: ["movement"]
- state: medical_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: medical_l
shader: unshaded
map: ["light"]
visible: false
- type: SpriteMovement
movementLayers:
movement:
state: medical_moving
noMovementLayers:
movement:
state: medical
- type: BorgChassis
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleMedical
hasMindState: medical_e
noMindState: medical_e_r
- type: BorgTransponder
sprite:
sprite: Mobs/Silicon/chassis.rsi
state: medical
name: medical cyborg
- type: Construction
node: medical
- type: IntrinsicRadioTransmitter
channels:
- Medical
- Binary
- Common
- Science
- type: ActiveRadio
channels:
- Medical
- Binary
- Common
- Science
- type: AccessReader
access: [["Medical"], ["Command"], ["Research"]]
- type: Inventory
templateId: borgDutch
- type: FootstepModifier
footstepSoundCollection:
collection: FootstepHoverBorg
- type: SolutionScanner
- type: InteractionPopup
interactSuccessString: petting-success-medical-cyborg
interactFailureString: petting-failure-medical-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: BorgSwitchableType
selectedBorgType: medical
- type: entity
id: BorgChassisService
parent: BaseBorgChassisNT
parent: BorgChassisSelectable
name: service cyborg
components:
- type: Sprite
layers:
- state: service
- state: service_e_r
map: ["enum.BorgVisualLayers.Light"]
shader: unshaded
visible: false
- state: service_l
shader: unshaded
map: ["light"]
visible: false
- type: BorgChassis
maxModules: 4
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleService
hasMindState: service_e
noMindState: service_e_r
- type: BorgTransponder
sprite:
sprite: Mobs/Silicon/chassis.rsi
state: service
name: service cyborg
- type: Construction
node: service
- type: IntrinsicRadioTransmitter
channels:
- Service
- Binary
- Common
- Science
- type: ActiveRadio
channels:
- Service
- Binary
- Common
- Science
- type: AccessReader
access: [["Service"], ["Command"], ["Research"]]
- type: Inventory
templateId: borgTall
- type: InteractionPopup
interactSuccessString: petting-success-service-cyborg
interactFailureString: petting-failure-service-cyborg
interactSuccessSound:
path: /Audio/Ambience/Objects/periodic_beep.ogg
- type: BorgSwitchableType
selectedBorgType: service
- type: entity
id: BorgChassisSyndicateAssault
@@ -354,8 +107,6 @@
- BorgModuleSyndicateAssault
hasMindState: synd_sec_e
noMindState: synd_sec
- type: Construction
node: syndicateassault
- type: InteractionPopup
interactSuccessString: petting-success-syndicate-cyborg
interactFailureString: petting-failure-syndicate-cyborg
@@ -388,8 +139,6 @@
- BorgModuleSyndicate
hasMindState: synd_medical_e
noMindState: synd_medical
- type: Construction
node: syndicatemedical
- type: ShowHealthBars
- type: InteractionPopup
interactSuccessString: petting-success-syndicate-cyborg
@@ -429,8 +178,6 @@
- BorgModuleSyndicate
hasMindState: synd_engi_e
noMindState: synd_engi
- type: Construction
node: syndicatesaboteur
- type: ShowHealthBars
damageContainers:
- Inorganic

View File

@@ -429,28 +429,9 @@
map: ["base"]
# Borgs
- type: entity
id: PlayerBorgGeneric
parent: BorgChassisGeneric
suffix: Battery, Tools
components:
- type: ContainerFill
containers:
borg_brain:
- PositronicBrain
borg_module:
- BorgModuleTool
- type: ItemSlots
slots:
cell_slot:
name: power-cell-slot-component-slot-name-default
startingItem: PowerCellMedium
- type: RandomMetadata
nameSegments: [names_borg]
- type: entity
id: PlayerBorgBattery
parent: BorgChassisGeneric
parent: BorgChassisSelectable
suffix: Battery
components:
- type: ContainerFill

View File

@@ -1,503 +0,0 @@
# generic parts
- type: entity
id: LeftArmBorg
parent: BaseBorgArmLeft
components:
- type: Sprite
state: borg_l_arm
- type: Icon
state: borg_l_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgGenericLArm
- type: entity
id: RightArmBorg
parent: BaseBorgArmRight
components:
- type: Sprite
state: borg_r_arm
- type: Icon
state: borg_r_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgGenericRArm
- type: entity
id: LeftLegBorg
parent: BaseBorgLegLeft
components:
- type: Sprite
state: borg_l_leg
- type: Icon
state: borg_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgGenericLLeg
- type: entity
id: RightLegBorg
parent: BaseBorgLegRight
components:
- type: Sprite
state: borg_r_leg
- type: Icon
state: borg_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgGenericRLeg
- type: entity
id: LightHeadBorg
parent: BaseBorgHead
components:
- type: Sprite
state: borg_head
- type: Icon
state: borg_head
- type: Tag
tags:
- Trash
- BorgHead
- BorgGenericHead
- type: entity
id: TorsoBorg
parent: BaseBorgTorso
components:
- type: Sprite
state: borg_chest
- type: Icon
state: borg_chest
- type: Tag
tags:
- Trash
- BorgGenericTorso
# engineer parts
- type: entity
id: LeftArmBorgEngineer
parent: BaseBorgArmLeft
name: engineer cyborg left arm
components:
- type: Sprite
state: engineer_l_arm
- type: Icon
state: engineer_l_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgEngineerLArm
- type: entity
id: RightArmBorgEngineer
parent: BaseBorgArmRight
name: engineer cyborg right arm
components:
- type: Sprite
state: engineer_r_arm
- type: Icon
state: engineer_r_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgEngineerRArm
- type: entity
id: LeftLegBorgEngineer
parent: BaseBorgLegLeft
name: engineer cyborg left leg
components:
- type: Sprite
state: engineer_l_leg
- type: Icon
state: engineer_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgEngineerLLeg
- type: entity
id: RightLegBorgEngineer
parent: BaseBorgLegRight
name: engineer cyborg right leg
components:
- type: Sprite
state: engineer_r_leg
- type: Icon
state: engineer_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgEngineerRLeg
- type: entity
id: HeadBorgEngineer
parent: BaseBorgHead
name: engineer cyborg head
components:
- type: Sprite
state: engineer_head
- type: Icon
state: engineer_head
- type: Tag
tags:
- Trash
- BorgHead
- BorgEngineerHead
- type: entity
id: TorsoBorgEngineer
parent: BaseBorgTorso
name: engineer cyborg torso
components:
- type: Sprite
state: engineer_chest
- type: Icon
state: engineer_chest
- type: Tag
tags:
- Trash
- BorgEngineerTorso
# janitor parts
- type: entity
id: LeftLegBorgJanitor
parent: BaseBorgLegLeft
name: janitor cyborg left leg
components:
- type: Sprite
state: janitor_l_leg
- type: Icon
state: janitor_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgJanitorLLeg
- type: entity
id: RightLegBorgJanitor
parent: BaseBorgLegRight
name: janitor cyborg right leg
components:
- type: Sprite
state: janitor_r_leg
- type: Icon
state: janitor_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgJanitorRLeg
- type: entity
id: HeadBorgJanitor
parent: BaseBorgHead
name: janitor cyborg head
components:
- type: Sprite
state: janitor_head
- type: Icon
state: janitor_head
- type: Tag
tags:
- Trash
- BorgHead
- BorgJanitorHead
- type: entity
id: TorsoBorgJanitor
parent: BaseBorgTorso
name: janitor cyborg torso
components:
- type: Sprite
state: janitor_chest
- type: Icon
state: janitor_chest
- type: Tag
tags:
- Trash
- BorgJanitorTorso
# medical parts
- type: entity
id: LeftArmBorgMedical
parent: BaseBorgArmLeft
name: medical cyborg left arm
components:
- type: Sprite
state: medical_l_arm
- type: Icon
state: medical_l_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgMedicalLArm
- type: entity
id: RightArmBorgMedical
parent: BaseBorgArmRight
name: medical cyborg right arm
components:
- type: Sprite
state: medical_r_arm
- type: Icon
state: medical_r_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgMedicalRArm
- type: entity
id: LeftLegBorgMedical
parent: BaseBorgLegLeft
name: medical cyborg left leg
components:
- type: Sprite
state: medical_l_leg
- type: Icon
state: medical_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgMedicalLLeg
- type: entity
id: RightLegBorgMedical
parent: BaseBorgLegRight
name: medical cyborg right leg
components:
- type: Sprite
state: medical_r_leg
- type: Icon
state: medical_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgMedicalRLeg
- type: entity
id: HeadBorgMedical
parent: BaseBorgHead
name: medical cyborg head
components:
- type: Sprite
state: medical_head
- type: Icon
state: medical_head
- type: Tag
tags:
- Trash
- BorgHead
- BorgMedicalHead
- type: entity
id: TorsoBorgMedical
parent: BaseBorgTorso
name: medical cyborg torso
components:
- type: Sprite
state: medical_chest
- type: Icon
state: medical_chest
- type: Tag
tags:
- Trash
- BorgMedicalTorso
# mining parts
- type: entity
id: LeftArmBorgMining
parent: BaseBorgArmLeft
name: mining cyborg left arm
components:
- type: Sprite
state: mining_l_arm
- type: Icon
state: mining_l_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgMiningLArm
- type: entity
id: RightArmBorgMining
parent: BaseBorgArmRight
name: mining cyborg right arm
components:
- type: Sprite
state: mining_r_arm
- type: Icon
state: mining_r_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgMiningRArm
- type: entity
id: LeftLegBorgMining
parent: BaseBorgLegLeft
name: mining cyborg left leg
components:
- type: Sprite
state: mining_l_leg
- type: Icon
state: mining_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgMiningLLeg
- type: entity
id: RightLegBorgMining
parent: BaseBorgLegRight
name: mining cyborg right leg
components:
- type: Sprite
state: mining_r_leg
- type: Icon
state: mining_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgMiningRLeg
- type: entity
id: HeadBorgMining
parent: BaseBorgHead
name: mining cyborg head
components:
- type: Sprite
state: mining_head
- type: Icon
state: mining_head
- type: Tag
tags:
- Trash
- BorgHead
- BorgMiningHead
- type: entity
id: TorsoBorgMining
parent: BaseBorgTorso
name: mining cyborg torso
components:
- type: Sprite
state: mining_chest
- type: Icon
state: mining_chest
- type: Tag
tags:
- Trash
- BorgMiningTorso
# service parts
- type: entity
id: LeftArmBorgService
parent: BaseBorgArmLeft
name: service cyborg left arm
components:
- type: Sprite
state: service_l_arm
- type: Icon
state: service_l_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgServiceLArm
- type: entity
id: RightArmBorgService
parent: BaseBorgArmRight
name: service cyborg right arm
components:
- type: Sprite
state: service_r_arm
- type: Icon
state: service_r_arm
- type: Tag
tags:
- Trash
- BorgArm
- BorgServiceRArm
- type: entity
id: LeftLegBorgService
parent: BaseBorgLegLeft
name: service cyborg left leg
components:
- type: Sprite
state: service_l_leg
- type: Icon
state: service_l_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgServiceLLeg
- type: entity
id: RightLegBorgService
parent: BaseBorgLegRight
name: service cyborg right leg
components:
- type: Sprite
state: service_r_leg
- type: Icon
state: service_r_leg
- type: Tag
tags:
- Trash
- BorgLeg
- BorgServiceRLeg
- type: entity
id: HeadBorgService
parent: BaseBorgHead
name: service cyborg head
components:
- type: Sprite
state: service_head
- type: Icon
state: service_head
- type: Tag
tags:
- Trash
- BorgHead
- BorgServiceHead
- type: entity
id: TorsoBorgService
parent: BaseBorgTorso
name: service cyborg torso
components:
- type: Sprite
state: service_chest
- type: Icon
state: service_chest
- type: Tag
tags:
- Trash
- BorgServiceTorso

View File

@@ -33,139 +33,27 @@
borg_l_arm+o:
whitelist:
tags:
- BorgGenericLArm
- BorgLArm
borg_r_arm+o:
whitelist:
tags:
- BorgGenericRArm
- BorgRArm
borg_l_leg+o:
whitelist:
tags:
- BorgGenericLLeg
- BorgLLeg
borg_r_leg+o:
whitelist:
tags:
- BorgGenericRLeg
- BorgRLeg
borg_head+o:
whitelist:
tags:
- BorgGenericHead
- BorgHead
borg_chest+o:
whitelist:
tags:
- BorgGenericTorso
service_l_arm+o:
whitelist:
tags:
- BorgServiceLArm
service_r_arm+o:
whitelist:
tags:
- BorgServiceRArm
service_l_leg+o:
whitelist:
tags:
- BorgServiceLLeg
service_r_leg+o:
whitelist:
tags:
- BorgServiceRLeg
service_head+o:
whitelist:
tags:
- BorgServiceHead
service_chest+o:
whitelist:
tags:
- BorgServiceTorso
engineer_l_arm+o:
whitelist:
tags:
- BorgEngineerLArm
engineer_r_arm+o:
whitelist:
tags:
- BorgEngineerRArm
engineer_l_leg+o:
whitelist:
tags:
- BorgEngineerLLeg
engineer_r_leg+o:
whitelist:
tags:
- BorgEngineerRLeg
engineer_head+o:
whitelist:
tags:
- BorgEngineerHead
engineer_chest+o:
whitelist:
tags:
- BorgEngineerTorso
mining_l_arm+o:
whitelist:
tags:
- BorgMiningLArm
mining_r_arm+o:
whitelist:
tags:
- BorgMiningRArm
mining_l_leg+o:
whitelist:
tags:
- BorgMiningLLeg
mining_r_leg+o:
whitelist:
tags:
- BorgMiningRLeg
mining_head+o:
whitelist:
tags:
- BorgMiningHead
mining_chest+o:
whitelist:
tags:
- BorgMiningTorso
medical_l_arm+o:
whitelist:
tags:
- BorgMedicalLArm
medical_r_arm+o:
whitelist:
tags:
- BorgMedicalRArm
medical_l_leg+o:
whitelist:
tags:
- BorgMedicalLLeg
medical_r_leg+o:
whitelist:
tags:
- BorgMedicalRLeg
medical_head+o:
whitelist:
tags:
- BorgMedicalHead
medical_chest+o:
whitelist:
tags:
- BorgMedicalTorso
janitor_l_leg+o:
whitelist:
tags:
- BorgJanitorLLeg
janitor_r_leg+o:
whitelist:
tags:
- BorgJanitorRLeg
janitor_head+o:
whitelist:
tags:
- BorgJanitorHead
janitor_chest+o:
whitelist:
tags:
- BorgJanitorTorso
- BorgTorso
- type: ContainerContainer
containers:
part-container: !type:Container
@@ -173,45 +61,12 @@
- type: PartAssembly
parts:
generic:
- BorgGenericLArm
- BorgGenericRArm
- BorgGenericLLeg
- BorgGenericRLeg
- BorgGenericHead
- BorgGenericTorso
service:
- BorgServiceLArm
- BorgServiceRArm
- BorgServiceLLeg
- BorgServiceRLeg
- BorgServiceHead
- BorgServiceTorso
engineer:
- BorgEngineerLArm
- BorgEngineerRArm
- BorgEngineerLLeg
- BorgEngineerRLeg
- BorgEngineerHead
- BorgEngineerTorso
medical:
- BorgMedicalLArm
- BorgMedicalRArm
- BorgMedicalLLeg
- BorgMedicalRLeg
- BorgMedicalHead
- BorgMedicalTorso
janitor:
- BorgJanitorLLeg
- BorgJanitorRLeg
- BorgJanitorHead
- BorgJanitorTorso
mining:
- BorgMiningLArm
- BorgMiningRArm
- BorgMiningLLeg
- BorgMiningRLeg
- BorgMiningHead
- BorgMiningTorso
- BorgLArm
- BorgRArm
- BorgLLeg
- BorgRLeg
- BorgHead
- BorgTorso
- type: Construction
graph: Cyborg
node: start

View File

@@ -572,11 +572,6 @@
- BorgModuleFireExtinguisher
- BorgModuleRadiationDetection
- BorgModuleTool
- BorgModuleAppraisal
- BorgModuleConstruction
- BorgModuleService
- BorgModuleTreatment
- BorgModuleCleaning
- CyborgEndoskeleton
- LeftArmBorg
- RightArmBorg
@@ -584,50 +579,15 @@
- RightLegBorg
- LightHeadBorg
- TorsoBorg
- LeftArmBorgEngineer
- RightArmBorgEngineer
- LeftLegBorgEngineer
- RightLegBorgEngineer
- HeadBorgEngineer
- TorsoBorgEngineer
- LeftLegBorgJanitor
- RightLegBorgJanitor
- HeadBorgJanitor
- TorsoBorgJanitor
- LeftArmBorgMedical
- RightArmBorgMedical
- LeftLegBorgMedical
- RightLegBorgMedical
- HeadBorgMedical
- TorsoBorgMedical
- LeftArmBorgMining
- RightArmBorgMining
- LeftLegBorgMining
- RightLegBorgMining
- HeadBorgMining
- TorsoBorgMining
- LeftArmBorgService
- RightArmBorgService
- LeftLegBorgService
- RightLegBorgService
- HeadBorgService
- TorsoBorgService
dynamicRecipes:
- ProximitySensor
- BorgModuleLightReplacer
- BorgModuleAdvancedCleaning
- BorgModuleMining
- BorgModuleGrapplingGun
- BorgModuleAdvancedTool
- BorgModuleGPS
- BorgModuleRCD
- BorgModuleArtifact
- BorgModuleAnomaly
- BorgModuleGardening
- BorgModuleHarvesting
- BorgModuleMusique
- BorgModuleClowning
- BorgModuleDiagnosis
- BorgModuleDefibrillator
- BorgModuleAdvancedTreatment
- RipleyHarness

View File

@@ -26,8 +26,7 @@
- name: head
slotTexture: head
slotFlags: HEAD
slotGroup: MainHotbar
uiWindowPos: 0,0
uiWindowPos: 1,0
strippingWindowPos: 0,0
displayName: Head
offset: 0.015625, 0

View File

@@ -5,18 +5,6 @@
- node: start
entity: CyborgEndoskeleton
edges:
# empty the parts via prying
- to: start
conditions:
- !type:ContainerNotEmpty
container: part-container
steps:
- tool: Prying
doAfter: 0.5
completed:
- !type:EmptyAllContainers
- to: cyborg
steps:
- assemblyId: generic
@@ -43,165 +31,6 @@
- tool: Screwing
doAfter: 0.5
- to: engineer
steps:
- assemblyId: engineer
guideString: borg-construction-guide-string
- material: Cable
amount: 1
doAfter: 1
store: part-container
- component: Flash
name: flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- component: Flash
name: second flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- tool: Screwing
doAfter: 0.5
- to: janitor
steps:
- assemblyId: janitor
guideString: borg-construction-guide-string
- material: Cable
amount: 1
doAfter: 1
store: part-container
- component: Flash
name: flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- component: Flash
name: second flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- tool: Screwing
doAfter: 0.5
- to: medical
steps:
- assemblyId: medical
guideString: borg-construction-guide-string
- material: Cable
amount: 1
doAfter: 1
store: part-container
- component: Flash
name: flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- component: Flash
name: second flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- tool: Screwing
doAfter: 0.5
- to: mining
steps:
- assemblyId: mining
guideString: borg-construction-guide-string
- material: Cable
amount: 1
doAfter: 1
store: part-container
- component: Flash
name: flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- component: Flash
name: second flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- tool: Screwing
doAfter: 0.5
- to: service
steps:
- assemblyId: service
guideString: borg-construction-guide-string
- material: Cable
amount: 1
doAfter: 1
store: part-container
- component: Flash
name: flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- component: Flash
name: second flash
store: part-container
icon:
sprite: Objects/Weapons/Melee/flash.rsi
state: flash
- tool: Screwing
doAfter: 0.5
- node: cyborg
entity: BorgChassisGeneric
- node: engineer
entity: BorgChassisEngineer
- node: janitor
entity: BorgChassisJanitor
- node: mining
entity: BorgChassisMining
- node: medical
entity: BorgChassisMedical
- node: service
entity: BorgChassisService
- node: syndicateassault
entity: BorgChassisSyndicateAssault
- node: syndicatemedical
entity: BorgChassisSyndicateMedical
- node: syndicatesaboteur
entity: BorgChassisSyndicateSaboteur
entity: BorgChassisSelectable

View File

@@ -61,8 +61,6 @@
materials:
Steel: 1500
# Generic
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftArmBorg
@@ -93,162 +91,6 @@
id: TorsoBorg
result: TorsoBorg
# Engineer
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftArmBorgEngineer
result: LeftArmBorgEngineer
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightArmBorgEngineer
result: RightArmBorgEngineer
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftLegBorgEngineer
result: LeftLegBorgEngineer
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightLegBorgEngineer
result: RightLegBorgEngineer
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: HeadBorgEngineer
result: HeadBorgEngineer
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: TorsoBorgEngineer
result: TorsoBorgEngineer
# Medical
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftArmBorgMedical
result: LeftArmBorgMedical
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightArmBorgMedical
result: RightArmBorgMedical
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftLegBorgMedical
result: LeftLegBorgMedical
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightLegBorgMedical
result: RightLegBorgMedical
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: HeadBorgMedical
result: HeadBorgMedical
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: TorsoBorgMedical
result: TorsoBorgMedical
# Mining
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftArmBorgMining
result: LeftArmBorgMining
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightArmBorgMining
result: RightArmBorgMining
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftLegBorgMining
result: LeftLegBorgMining
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightLegBorgMining
result: RightLegBorgMining
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: HeadBorgMining
result: HeadBorgMining
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: TorsoBorgMining
result: TorsoBorgMining
# Service
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftArmBorgService
result: LeftArmBorgService
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightArmBorgService
result: RightArmBorgService
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftLegBorgService
result: LeftLegBorgService
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightLegBorgService
result: RightLegBorgService
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: HeadBorgService
result: HeadBorgService
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: TorsoBorgService
result: TorsoBorgService
# Janitor
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: LeftLegBorgJanitor
result: LeftLegBorgJanitor
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: RightLegBorgJanitor
result: RightLegBorgJanitor
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: HeadBorgJanitor
result: HeadBorgJanitor
materials:
Steel: 500
Glass: 200
- type: latheRecipe
parent: BaseBorgLimbRecipe
id: TorsoBorgJanitor
result: TorsoBorgJanitor
materials:
Steel: 500
Glass: 200
# Parts
- type: latheRecipe
@@ -304,23 +146,6 @@
id: BorgModuleTool
result: BorgModuleTool
# Mining Modules
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleAppraisal
result: BorgModuleAppraisal
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleMining
result: BorgModuleMining
- type: latheRecipe
parent: BaseGoldBorgModuleRecipe
id: BorgModuleGrapplingGun
result: BorgModuleGrapplingGun
# Engineering Modules
- type: latheRecipe
@@ -328,28 +153,8 @@
id: BorgModuleAdvancedTool
result: BorgModuleAdvancedTool
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleConstruction
result: BorgModuleConstruction
- type: latheRecipe
parent: BaseGoldBorgModuleRecipe
id: BorgModuleRCD
result: BorgModuleRCD
# Janitor Modules
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleLightReplacer
result: BorgModuleLightReplacer
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleCleaning
result: BorgModuleCleaning
- type: latheRecipe
parent: BaseGoldBorgModuleRecipe
id: BorgModuleAdvancedCleaning
@@ -357,16 +162,6 @@
# Medical Modules
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleDiagnosis
result: BorgModuleDiagnosis
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleTreatment
result: BorgModuleTreatment
- type: latheRecipe
parent: BaseGoldBorgModuleRecipe
id: BorgModuleAdvancedTreatment
@@ -391,16 +186,6 @@
# Service Modules
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleService
result: BorgModuleService
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleMusique
result: BorgModuleMusique
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleGardening
@@ -410,8 +195,3 @@
parent: BaseBorgModuleRecipe
id: BorgModuleHarvesting
result: BorgModuleHarvesting
- type: latheRecipe
parent: BaseBorgModuleRecipe
id: BorgModuleClowning
result: BorgModuleClowning

View File

@@ -66,8 +66,6 @@
recipeUnlocks:
- ComputerTelevisionCircuitboard
- SynthesizerInstrument
- BorgModuleMusique
- BorgModuleClowning
- DawInstrumentMachineCircuitboard
- MassMediaCircuitboard
- JukeboxCircuitBoard
@@ -82,7 +80,6 @@
tier: 1
cost: 5000
recipeUnlocks:
- BorgModuleLightReplacer
- BorgModuleAdvancedCleaning
- type: technology

View File

@@ -12,8 +12,6 @@
recipeUnlocks:
- MiningDrill
- MineralScannerEmpty
- BorgModuleMining
- BorgModuleGrapplingGun
- OreProcessorIndustrialMachineCircuitboard
- ClothingMaskWeldingGas
@@ -168,7 +166,6 @@
- PowerDrill
- JawsOfLife
- BorgModuleAdvancedTool
- BorgModuleRCD
- type: technology
id: MassExcavation

View File

@@ -25,5 +25,5 @@
canBeAntag: false
icon: JobIconBorg
supervisors: job-supervisors-rd
jobEntity: PlayerBorgGeneric
jobEntity: PlayerBorgBattery
applyTraits: false

View File

@@ -0,0 +1,218 @@
# Generic borg
- type: borgType
id: generic
# Description
dummyPrototype: BorgChassisGeneric
# Functional
extraModuleCount: 5
moduleWhitelist:
tags:
- BorgModuleGeneric
defaultModules:
- BorgModuleTool
radioChannels:
- Science
# Visual
inventoryTemplateId: borgShort
spriteBodyState: robot
spriteHasMindState: robot_e
spriteNoMindState: robot_e_r
spriteToggleLightState: robot_l
# Pet
petSuccessString: petting-success-generic-cyborg
petFailureString: petting-failure-generic-cyborg
# Engineering borg
- type: borgType
id: engineering
# Description
dummyPrototype: BorgChassisEngineer
# Functional
extraModuleCount: 3
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleEngineering
defaultModules:
- BorgModuleTool
- BorgModuleConstruction
- BorgModuleRCD
- BorgModuleCable
radioChannels:
- Engineering
- Science
# Visual
inventoryTemplateId: borgShort
spriteBodyState: engineer
spriteHasMindState: engineer_e
spriteNoMindState: engineer_e_r
spriteToggleLightState: engineer_l
# Pet
petSuccessString: petting-success-engineer-cyborg
petFailureString: petting-failure-engineer-cyborg
# Salvage borg
- type: borgType
id: mining
# Description
dummyPrototype: BorgChassisMining
# Functional
extraModuleCount: 3
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleCargo
defaultModules:
- BorgModuleGrapplingGun
- BorgModuleMining
- BorgModuleAppraisal
radioChannels:
- Supply
- Science
# Visual
inventoryTemplateId: borgTall
spriteBodyState: miner
spriteBodyMovementState: miner_moving
spriteHasMindState: miner_e
spriteNoMindState: miner_e_r
spriteToggleLightState: miner_l
# Pet
petSuccessString: petting-success-salvage-cyborg
petFailureString: petting-failure-salvage-cyborg
# Janitor borg
- type: borgType
id: janitor
# Description
dummyPrototype: BorgChassisJanitor
# Functional
extraModuleCount: 3
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleJanitor
defaultModules:
- BorgModuleLightReplacer
- BorgModuleCleaning
radioChannels:
- Science
- Service
# Visual
inventoryTemplateId: borgShort
spriteBodyState: janitor
spriteBodyMovementState: janitor_moving
spriteHasMindState: janitor_e
spriteNoMindState: janitor_e_r
spriteToggleLightState: janitor_l
# Pet
petSuccessString: petting-success-janitor-cyborg
petFailureString: petting-failure-janitor-cyborg
# Medical borg
- type: borgType
id: medical
# Description
dummyPrototype: BorgChassisMedical
# Functional
extraModuleCount: 3
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleMedical
defaultModules:
- BorgModuleTreatment
radioChannels:
- Science
- Medical
addComponents:
- type: SolutionScanner
- type: ShowHealthBars
damageContainers:
- Biological
- type: ShowHealthIcons
damageContainers:
- Biological
# Visual
inventoryTemplateId: borgDutch
spriteBodyState: medical
spriteBodyMovementState: medical_moving
spriteHasMindState: medical_e
spriteNoMindState: medical_e_r
spriteToggleLightState: medical_l
# Pet
petSuccessString: petting-success-medical-cyborg
petFailureString: petting-failure-medical-cyborg
# Sounds
footstepCollection:
collection: FootstepHoverBorg
# Service borg
- type: borgType
id: service
# Description
dummyPrototype: BorgChassisService
# Functional
extraModuleCount: 3
moduleWhitelist:
tags:
- BorgModuleGeneric
- BorgModuleService
defaultModules:
- BorgModuleMusique
- BorgModuleService
- BorgModuleClowning
radioChannels:
- Science
- Service
# Visual
inventoryTemplateId: borgTall
spriteBodyState: service
spriteHasMindState: service_e
spriteNoMindState: service_e_r
spriteToggleLightState: service_l
# Pet
petSuccessString: petting-success-service-cyborg
petFailureString: petting-failure-service-cyborg

View File

@@ -75,96 +75,27 @@
- type: Tag
id: BorgArm
- type: Tag
id: BorgEngineerHead
- type: Tag
id: BorgEngineerLArm
- type: Tag
id: BorgEngineerLLeg
- type: Tag
id: BorgEngineerRArm
- type: Tag
id: BorgEngineerRLeg
- type: Tag
id: BorgEngineerTorso
- type: Tag
id: BorgGenericHead
- type: Tag
id: BorgGenericLArm
- type: Tag
id: BorgGenericLLeg
- type: Tag
id: BorgGenericRArm
- type: Tag
id: BorgGenericRLeg
- type: Tag
id: BorgGenericTorso
- type: Tag
id: BorgHead
- type: Tag
id: BorgJanitorHead
id: BorgLArm
- type: Tag
id: BorgJanitorLLeg
id: BorgLLeg
- type: Tag
id: BorgJanitorRLeg
id: BorgRArm
- type: Tag
id: BorgJanitorTorso
id: BorgRLeg
- type: Tag
id: BorgTorso
- type: Tag
id: BorgLeg
- type: Tag
id: BorgMedicalHead
- type: Tag
id: BorgMedicalLArm
- type: Tag
id: BorgMedicalLLeg
- type: Tag
id: BorgMedicalRArm
- type: Tag
id: BorgMedicalRLeg
- type: Tag
id: BorgMedicalTorso
- type: Tag
id: BorgMiningHead
- type: Tag
id: BorgMiningLArm
- type: Tag
id: BorgMiningLLeg
- type: Tag
id: BorgMiningRArm
- type: Tag
id: BorgMiningRLeg
- type: Tag
id: BorgMiningTorso
- type: Tag
id: BorgModuleCargo
@@ -189,24 +120,6 @@
- type: Tag
id: BorgModuleSyndicateAssault
- type: Tag
id: BorgServiceHead
- type: Tag
id: BorgServiceLArm
- type: Tag
id: BorgServiceLLeg
- type: Tag
id: BorgServiceRArm
- type: Tag
id: BorgServiceRLeg
- type: Tag
id: BorgServiceTorso
- type: Tag
id: Bot