Data-oriented Construction System (#2152)

- Powerful
- Data-oriented
- Approved by PJB
- Powered by node graphs and AI pathfinding
- Coded by the same nerd who brought you atmos

Co-authored-by: Exp <theexp111@gmail.com>
This commit is contained in:
Víctor Aguilera Puerto
2020-10-08 17:41:23 +02:00
committed by GitHub
parent a6647e8de1
commit 745401a41e
261 changed files with 3886 additions and 11986 deletions

View File

@@ -0,0 +1,148 @@
- type: constructionGraph
id: computer
start: start
graph:
- node: start
edges:
- to: frameUnsecured
completed:
- !type:SetAnchor
value: false
steps:
- material: Metal
amount: 5
- node: frameUnsecured
actions:
- !type:SpriteStateChange
state: "0"
entity: ComputerFrame
edges:
- to: boardUnsecured
conditions:
- !type:EntityAnchored {}
steps:
- component: ComputerBoard
store: board
name: a computer circuit board
icon:
sprite: "Constructible/Misc/module.rsi"
state: "id_mod"
- to: start
conditions:
- !type:EntityAnchored
anchored: false
completed:
- !type:SpawnPrototype
prototype: SteelSheet1
amount: 5
- !type:DeleteEntity {}
steps:
- tool: Welding
doAfter: 2
- node: boardUnsecured
actions:
- !type:SpriteStateChange
state: "1"
edges:
- to: missingWires
conditions:
- !type:EntityAnchored {}
steps:
- tool: Screwing
- to: frameUnsecured
conditions:
- !type:EntityAnchored { }
completed:
- !type:EmptyContainer
container: board
- !type:SpriteStateChange
state: 0
steps:
- tool: Prying
- node: missingWires
actions:
- !type:SpriteStateChange
state: "2"
edges:
- to: monitorMissing
conditions:
- !type:EntityAnchored {}
steps:
- material: Cable
amount: 5
- to: boardUnsecured
conditions:
- !type:EntityAnchored { }
steps:
- tool: Screwing
- node: monitorMissing
entity: ComputerFrame
actions:
- !type:SetAnchor { }
- !type:SpriteStateChange
state: "3"
edges:
- to: monitorUnsecured
conditions:
- !type:EntityAnchored {}
steps:
- material: Glass
amount: 2
- to: missingWires
conditions:
- !type:EntityAnchored { }
steps:
- tool: Cutting
- node: monitorUnsecured
actions:
- !type:SpriteStateChange
state: "4"
entity: ComputerFrame
edges:
- to: computer
conditions:
- !type:EntityAnchored {}
completed:
- !type:BuildComputer
container: board
steps:
- tool: Screwing
- to: monitorMissing
conditions:
- !type:EntityAnchored { }
completed:
- !type:SpawnPrototype
prototype: GlassSheet1
amount: 2
steps:
- tool: Prying
- node: computer
edges:
- to: monitorUnsecured
steps:
- tool: Screwing
- node: monitorBroken
entity: ComputerBroken
edges:
- to: monitorMissing
conditions:
- !type:EntityAnchored {}
completed:
- !type:SpawnPrototype
prototype: GlassSheet1 # TODO: Replace with glass shard.
amount: 1
steps:
- tool: Prying
doAfter: 2

View File

@@ -0,0 +1,138 @@
- type: constructionGraph
id: girder
start: start
graph:
- node: start
edges:
- to: girder
completed:
- !type:SnapToGrid { }
steps:
- material: Metal
amount: 2
doAfter: 1
- node: girder
entity: Girder
actions:
- !type:SpriteChange
specifier:
sprite: /Textures/Constructible/Structures/Walls/solid.rsi
state: wall_girder
edges:
- to: start
completed:
- !type:SpawnPrototype
prototype: SteelSheet1
amount: 2
- !type:DeleteEntity {}
conditions:
- !type:EntityAnchored
anchored: false
steps:
- tool: Screwing
doAfter: 2
- to: wall
completed:
- !type:SnapToGrid {}
conditions:
- !type:EntityAnchored {}
steps:
- material: Metal
amount: 2
- to: reinforcedGirder
completed:
- !type:SnapToGrid { }
conditions:
- !type:EntityAnchored {}
steps:
- material: Plasteel
amount: 2
- node: wall
entity: solid_wall
edges:
- to: girder
completed:
- !type:SpawnPrototype
prototype: SteelSheet1
amount: 2
steps:
- tool: Welding
doAfter: 2
- node: reinforcedGirder
actions:
- !type:SpriteChange
specifier:
sprite: /Textures/Constructible/Structures/Walls/solid.rsi
state: reinforced_wall_girder
edges:
- to: reinforcedWall
completed:
- !type:SnapToGrid { }
conditions:
- !type:EntityAnchored { }
steps:
- material: Plasteel
amount: 2
doAfter: 1
- to: girder
completed:
- !type:SnapToGrid { }
conditions:
- !type:EntityAnchored { }
steps:
- tool: Welding
doAfter: 2
- node: reinforcedWall
entity: reinforced_wall
edges:
- to: girder
steps:
- tool: Cutting
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.ReinforcedWallVisuals.DeconstructionStage"
data: 5
- tool: Screwing
doAfter: 1
- tool: Welding
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.ReinforcedWallVisuals.DeconstructionStage"
data: 4
- tool: Prying
doAfter: 1
- tool: Anchoring
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.ReinforcedWallVisuals.DeconstructionStage"
data: 3
- tool: Welding
doAfter: 2
completed:
- !type:VisualizerDataInt
key: "enum.ReinforcedWallVisuals.DeconstructionStage"
data: 2
- tool: Prying
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.ReinforcedWallVisuals.DeconstructionStage"
data: 1
- tool: Screwing
doAfter: 1
completed:
- !type:VisualizerDataInt
key: "enum.ReinforcedWallVisuals.DeconstructionStage"
data: 0
- tool: Cutting
doAfter: 1

View File

@@ -0,0 +1,33 @@
- type: constructionGraph
id: lowWall
start: start
graph:
- node: start
conditions:
- !type:ComponentInTile
value: false
component: Window
actions:
- !type:SpawnPrototype
prototype: SteelSheet1
amount: 3
- !type:DeleteEntity { }
edges:
- to: lowWall
steps:
- material: Metal
amount: 3
doAfter: 5
- node: lowWall
entity: LowWall
edges:
- to: start
conditions:
# We fail the condition if there are any windows on the tile.
- !type:ComponentInTile
hasEntity: false
component: Window
steps:
- tool: Welding
doAfter: 5

View File

@@ -0,0 +1,17 @@
- type: constructionGraph
id: spear
start: start
graph:
- node: start
edges:
- to: spear
steps:
- material: Metal
amount: 2
doAfter: 2
- material: Glass
amount: 2
doAfter: 2
- node: spear
entity: Spear

View File

@@ -0,0 +1,93 @@
- type: constructionGraph
id: window
start: start
graph:
- node: start
edges:
- to: phoronWindow
steps:
- material: Metal
amount: 2
doAfter: 2
- material: Glass
amount: 2
- material: Phoron
amount: 2
doAfter: 3
- to: reinforcedWindow
steps:
- material: Metal
amount: 2
doAfter: 2
- material: Glass
amount: 2
doAfter: 2
- to: window
steps:
- material: Glass
amount: 2
doAfter: 3
- node: window
entity: Window
edges:
- to: start
completed:
- !type:SpawnPrototype
prototype: GlassSheet1
amount: 2
- !type:DeleteEntity {}
steps:
- tool: Screwing
doAfter: 1
- tool: Anchoring
doAfter: 2
- node: reinforcedWindow
entity: ReinforcedWindow
edges:
- to: start
completed:
- !type:SpawnPrototype
prototype: GlassSheet1
amount: 2
- !type:SpawnPrototype
prototype: MetalSheet1
amount: 2
- !type:DeleteEntity {}
steps:
- tool: Screwing
doAfter: 1
- tool: Prying
doAfter: 2
- tool: Screwing
doAfter: 1
- tool: Anchoring
doAfter: 2
- node: phoronWindow
entity: PhoronWindow
edges:
- to: start
completed:
- !type:SpawnPrototype
prototype: GlassSheet1
amount: 2
- !type:SpawnPrototype
prototype: MetalSheet1
amount: 2
- !type:SpawnPrototype
prototype: PhoronSheet1
amount: 2
- !type:DeleteEntity {}
steps:
- tool: Screwing
doAfter: 2
- tool: Prying
doAfter: 3
- tool: Screwing
doAfter: 2
- tool: Anchoring
doAfter: 3

View File

@@ -1,19 +0,0 @@
- type: construction
name: conveyor belt
id: ConveyorBelt
category: Machines/Conveyor
keywords: [conveyor, belt]
placementMode: SnapgridCenter
description: A conveyor belt, commonly used to transport large numbers of items elsewhere quite quickly.
icon:
sprite: Constructible/Power/conveyor.rsi
state: conveyor_stopped_cw
result: ConveyorBelt
steps:
- material: Metal
amount: 1
icon:
sprite: Constructible/Power/conveyor.rsi
state: conveyor_stopped_cw
- material: Cable
amount: 1

View File

@@ -1,18 +0,0 @@
- type: construction
name: meat spike
id: KitchenSpike
category: Items/Kitchen
keywords: [kitchen]
description:
icon: Constructible/Misc/kitchen.rsi/spike.png
result: KitchenSpike
objectType: Structure
steps:
# Replace with Metal Rods whenever
# also this should be done with a Welding tool if that is specifiable
- material: Metal
amount: 3
reverse:
# logic here: BOLT_TURNING -> Wrench -> Anchoring
tool: Anchoring

View File

@@ -1,25 +1,12 @@
- type: construction
name: wall light
id: WallLight
keywords: [fixture, lamp]
name: computer
id: Computer
graph: computer
startNode: start
targetNode: computer
category: Machines
description: A simple wall-mounted light fixture.
placementMode: SnapgridBorder
canBuildInImpassable: true
placementMode: SnapgridCenter
canBuildInImpassable: false
icon:
sprite: Constructible/Lighting/lighting.rsi
state: on
result: Poweredlight
steps:
- material: Metal
amount: 1
icon:
sprite: Constructible/Lighting/lighting.rsi
state: construct
- material: Cable
amount: 1
icon:
sprite: Constructible/Lighting/lighting.rsi
state: empty
- material: Glass
amount: 1
sprite: Constructible/Misc/stock_parts.rsi
state: 4

View File

@@ -1,29 +0,0 @@
- type: construction
name: skub
id: skub
category: Items/Misc
keywords: [misc]
description: In the end, there is only Skub.
icon: Objects/Misc/skub.rsi/icon.png
result: Skub
objectType: Item
steps:
- material: Metal
amount: 1
- type: construction
id: ExtinguisherCabinet
name: extinguisher cabinet
category: Items/Misc
keywords: [misc]
placementMode: SnapgridCenter
canBuildInImpassable: true
description: A small wall mounted cabinet designed to hold a fire extinguisher.
icon: Constructible/Misc/extinguisher_cabinet.rsi/extinguisher_closed.png
result: ExtinguisherCabinet
steps:
- material: Metal
amount: 2
icon:
sprite: Constructible/Misc/extinguisher_cabinet.rsi
state: extinguisher_closed

View File

@@ -1,57 +0,0 @@
- type: construction
name: SMES
id: smes
category: Machines/Power
keywords: [battery, cell, storage]
placementMode: SnapgridCenter
description: A SMES is a large battery capable of connecting directly to a power grid.
icon:
sprite: Constructible/Power/smes.rsi
state: smes
result: SMES
steps:
- material: Metal
amount: 2
icon:
sprite: Constructible/Power/smes.rsi
state: smes
- material: Cable
amount: 2
- type: construction
name: generator
id: generator
category: Machines/Power
placementMode: SnapgridCenter
description: A portable generator capable of producing power from thin air.
icon: Constructible/Power/generator.png
result: Generator
steps:
- material: Metal
amount: 2
icon: Constructible/Power/generator.png
- material: Cable
amount: 2
- type: construction
name: APC
id: APC
category: Machines/Power
placementMode: SnapgridCenter
description: Provides power from the grid wirelessly to other machines in the area.
canBuildInImpassable: true
icon:
sprite: Constructible/Power/apc.rsi
state: apc0
result: APC
steps:
- material: Metal
amount: 2
icon:
sprite: Constructible/Power/apc.rsi
state: apcmaint
- material: Cable
amount: 2

View File

@@ -1,97 +1,105 @@
- type: construction
name: girder
id: girder
graph: girder
startNode: start
targetNode: girder
category: Structures
description: A large structural assembly made out of metal.
icon:
sprite: /Textures/Constructible/Structures/Walls/solid.rsi
state: wall_girder
objectType: Structure
placementMode: SnapgridCenter
- type: construction
name: wall
id: wall
graph: girder
startNode: start
targetNode: wall
category: Structures
description: Keeps the air in and the greytide out.
icon:
sprite: Constructible/Structures/Walls/solid.rsi
state: full
objectType: Structure
result: solid_wall
placementMode: SnapgridCenter
steps:
- material: Metal
amount: 2
icon: Constructible/Structures/Walls/wall_girder.png
reverse:
tool: Anchoring
- material: Metal
amount: 2
reverse:
tool: Anchoring
- type: construction
name: table
id: Table
name: reinforced wall
id: reinforcedWall
graph: girder
startNode: start
targetNode: reinforcedWall
category: Structures
description: Keeps the air in and the greytide out.
icon:
sprite: Constructible/Structures/Tables/generic.rsi
state: plain_preview
result: Table
placementMode: SnapgridCenter
steps:
- material: Metal
amount: 2
- type: construction
name: window
id: Window
category: Structures
description: Clear.
icon:
sprite: Constructible/Structures/Windows/window.rsi
state: full
sprite: Constructible/Structures/Walls/solid.rsi
state: rgeneric
objectType: Structure
result: Window
placementMode: SnapgridCenter
steps:
- material: Glass
amount: 2
reverse:
tool: Screwing
- type: construction
name: low wall
id: LowWall
graph: lowWall
startNode: start
targetNode: lowWall
category: Structures
description: A low wall used for mounting windows.
conditions:
- !type:NoWindowsInTile { }
icon:
sprite: Constructible/Structures/Walls/low_wall.rsi
state: metal
objectType: Structure
result: LowWall
placementMode: SnapgridCenter
steps:
- material: Metal
amount: 2
icon: Constructible/Structures/Walls/wall_girder.png
reverse:
tool: Anchoring
- material: Metal
amount: 2
reverse:
tool: Anchoring
- type: construction
name: rein window
id: ReinforcedWindow
name: window
id: Window
graph: window
startNode: start
targetNode: window
category: Structures
description: Clear but tough.
description: Clear. Must be built on top of a low wall.
conditions:
- !type:LowWallInTile {}
icon:
sprite: Constructible/Structures/Windows/window.rsi
state: full
objectType: Structure
placementMode: SnapgridCenter
- type: construction
name: reinforced window
id: ReinforcedWindow
graph: window
startNode: start
targetNode: reinforcedWindow
category: Structures
description: Clear but tough. Must be built on top of a low wall.
conditions:
- !type:LowWallInTile {}
icon:
sprite: Constructible/Structures/Windows/reinforced_window.rsi
state: full
objectType: Structure
result: ReinforcedWindow
placementMode: SnapgridCenter
steps:
- material: Glass
amount: 2
reverse:
tool: Anchoring
# Should be replaced with Metal Rods when someone puts them in.
- material: Metal
amount: 2
reverse:
# Should be replaced with Wirecutter when someone makes it work.
tool: Anchoring
- type: construction
name: phoron window
id: PhoronWindow
graph: window
startNode: start
targetNode: phoronWindow
category: Structures
description: Clear and even tougher, with an orange tint. Must be built on top of a low wall.
conditions:
- !type:LowWallInTile {}
icon:
sprite: Constructible/Structures/Windows/phoron_window.rsi
state: full
objectType: Structure
placementMode: SnapgridCenter

View File

@@ -1,25 +1,10 @@
- type: construction
name: crude spear
id: spear
graph: spear
startNode: start
targetNode: spear
category: Items/Weapons
keywords: [melee]
description: A crude spear for when you need to put holes in somebody.
icon: Objects/Weapons/Melee/spear.rsi/spear.png
result: Spear
objectType: Item
steps:
- material: Metal
amount: 1
reverse:
tool: Screwing
- material: Cable
amount: 3
reverse:
tool: Screwing
# Should probably use a shard but y'know.
- material: Glass
amount: 1
reverse:
tool: Screwing