# SPDX-FileCopyrightText: 2018 Pieter-Jan Briers <pieterjan.briers@gmail.com>
# SPDX-FileCopyrightText: 2019 Swept <49448379+SweptWasTaken@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 AJCM-git <60196617+AJCM-git@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 Exp <theexp111@gmail.com>
# SPDX-FileCopyrightText: 2020 Hugo Laloge <hugo.laloge@gmail.com>
# SPDX-FileCopyrightText: 2020 Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
# SPDX-FileCopyrightText: 2020 Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 py01 <60152240+collinlunn@users.noreply.github.com>
# SPDX-FileCopyrightText: 2020 py01 <pyronetics01@gmail.com>
# SPDX-FileCopyrightText: 2021 DrSmugleaf <DrSmugleaf@users.noreply.github.com>
# SPDX-FileCopyrightText: 2021 Julian Giebel <j.giebel@netrocks.info>
# SPDX-FileCopyrightText: 2021 Swept <sweptwastaken@protonmail.com>
# SPDX-FileCopyrightText: 2022 Flipp Syder <76629141+vulppine@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Jack Fox <35575261+DubiousDoggo@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Julian Giebel <juliangiebel@live.de>
# SPDX-FileCopyrightText: 2022 Martin Petkovski <63034378+martin69420@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Morb <14136326+Morb0@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 Peptide90 <78795277+Peptide90@users.noreply.github.com>
# SPDX-FileCopyrightText: 2022 eoineoineoin <eoin.mcloughlin+gh@gmail.com>
# SPDX-FileCopyrightText: 2022 vulppine <vulppine@gmail.com>
# SPDX-FileCopyrightText: 2023 08A <git@08a.re>
# SPDX-FileCopyrightText: 2023 20kdc <asdd2808@gmail.com>
# SPDX-FileCopyrightText: 2023 ChilbroBaggins <107660393+ChilbroBaggins@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Jeff <velcroboy333@hotmail.com>
# SPDX-FileCopyrightText: 2023 Kevin Zheng <kevinz5000@gmail.com>
# SPDX-FileCopyrightText: 2023 ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Skarletto <122584947+Skarletto@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Slava0135 <40753025+Slava0135@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 Tom Leys <tom@crump-leys.com>
# SPDX-FileCopyrightText: 2023 avery <51971268+graevy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 brainfood1183 <113240905+brainfood1183@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 deltanedas <39013340+deltanedas@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 deltanedas <@deltanedas:kde.org>
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
# SPDX-FileCopyrightText: 2023 metalgearsloth <comedian_vs_clown@hotmail.com>
# SPDX-FileCopyrightText: 2024 Hreno <hrenor@gmail.com>
# SPDX-FileCopyrightText: 2024 Ilya246 <57039557+Ilya246@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 NazrinNya <137837419+NazrinNya@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 Piras314 <p1r4s@proton.me>
# SPDX-FileCopyrightText: 2024 Plykiya <58439124+Plykiya@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 chromiumboy <50505512+chromiumboy@users.noreply.github.com>
# SPDX-FileCopyrightText: 2024 plykiya <plykiya@protonmail.com>
# SPDX-FileCopyrightText: 2024 slarticodefast <161409025+slarticodefast@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
# SPDX-FileCopyrightText: 2025 justdie12 <125140938+justdie12@users.noreply.github.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# SURVEILLANCE
- type: construction
  id: camera
  graph: SurveillanceCamera
  startNode: start
  targetNode: camera
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter

- type: construction
  id: WallmountTelescreen
  graph: WallmountTelescreen
  startNode: start
  targetNode: Telescreen
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: true

- type: construction
  id: StationMap
  graph: StationMap
  startNode: start
  targetNode: station_map
  category: construction-category-structures
  placementMode: SnapgridCenter
  objectType: Structure
  canRotate: true
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition {}

# POWER
- type: construction
  id: APC
  graph: APC
  startNode: start
  targetNode: apc
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: true

- type: construction
  id: CableTerminal
  graph: CableTerminal
  startNode: start
  targetNode: cable_terminal
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: WallmountSubstation
  graph: WallmountSubstation
  startNode: start
  targetNode: substation
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: true

- type: construction
  id: WallmountGenerator
  graph: WallmountGenerator
  startNode: start
  targetNode: generator
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: true

- type: construction
  id: WallmountGeneratorAPU
  graph: WallmountGenerator
  startNode: start
  targetNode: APU
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: true

# DISPOSALS
- type: construction
  id: DisposalUnit
  graph: DisposalMachine
  startNode: start
  targetNode: disposal_unit
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: MailingUnit
  graph: DisposalMachine
  startNode: start
  targetNode: mailing_unit
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalPipe
  graph: DisposalPipe
  startNode: start
  targetNode: pipe
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalTagger
  graph: DisposalPipe
  startNode: start
  targetNode: tagger
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalSignaller
  graph: DisposalPipe
  startNode: start
  targetNode: signaller
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalTrunk
  graph: DisposalPipe
  startNode: start
  targetNode: trunk
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalRouter
  graph: DisposalPipe
  startNode: start
  targetNode: router
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: DisposalRouterFlipped

- type: construction
  hide: true
  id: DisposalRouterFlipped
  graph: DisposalPipe
  startNode: start
  targetNode: routerflipped
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: DisposalRouter

- type: construction
  id: DisposalSignalRouter
  graph: DisposalPipe
  startNode: start
  targetNode: signal_router
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: DisposalSignalRouterFlipped

- type: construction
  hide: true
  id: DisposalSignalRouterFlipped
  graph: DisposalPipe
  startNode: start
  targetNode: signal_router_flipped
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: DisposalSignalRouter

- type: construction
  id: DisposalJunction
  graph: DisposalPipe
  startNode: start
  targetNode: junction
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: DisposalJunctionFlipped

- type: construction
  hide: true
  id: DisposalJunctionFlipped
  graph: DisposalPipe
  startNode: start
  targetNode: junctionflipped
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: DisposalJunction

- type: construction
  id: DisposalYJunction
  graph: DisposalPipe
  startNode: start
  targetNode: yJunction
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalXJunction
  graph: DisposalPipe
  startNode: start
  targetNode: xJunction
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: DisposalBend
  graph: DisposalPipe
  startNode: start
  targetNode: bend
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

# ATMOS
- type: construction
  id: AirAlarmFixture
  graph: AirAlarm
  startNode: start
  targetNode: air_alarm
  category: construction-category-structures
  placementMode: SnapgridCenter
  objectType: Structure
  canRotate: true
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition {}

- type: construction
  id: FireAlarm
  graph: FireAlarm
  startNode: start
  targetNode: fire_alarm
  category: construction-category-structures
  placementMode: SnapgridCenter
  objectType: Structure
  canRotate: true
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition {}

- type: construction
  id: AirSensor
  graph: AirSensor
  startNode: start
  targetNode: sensor
  category: construction-category-structures
  placementMode: SnapgridCenter
  objectType: Structure
  canRotate: true

- type: construction
  id: GasPipeSensor
  graph: GasPipeSensor
  startNode: start
  targetNode: sensor
  category: construction-category-structures
  placementMode: AlignAtmosPipeLayers
  objectType: Structure
  canRotate: true
  alternativePrototypes:
  - GasPipeSensor
  - GasPipeSensorAlt1
  - GasPipeSensorAlt2

- type: construction
  id: GasPipeSensorAlt1
  hide: true
  graph: GasPipeSensor
  startNode: start
  targetNode: sensorAlt1
  category: construction-category-structures
  placementMode: AlignAtmosPipeLayers
  objectType: Structure
  canRotate: true
  alternativePrototypes:
  - GasPipeSensor
  - GasPipeSensorAlt1
  - GasPipeSensorAlt2

- type: construction
  id: GasPipeSensorAlt2
  hide: true
  graph: GasPipeSensor
  startNode: start
  targetNode: sensorAlt2
  category: construction-category-structures
  placementMode: AlignAtmosPipeLayers
  objectType: Structure
  canRotate: true
  alternativePrototypes:
  - GasPipeSensor
  - GasPipeSensorAlt1
  - GasPipeSensorAlt2

# ATMOS PIPES
- type: construction
  id: GasPipeHalf
  name: construction-recipe-gas-pipe-half
  graph: GasPipe
  startNode: start
  targetNode: half
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeHalf
  - GasPipeHalfAlt1
  - GasPipeHalfAlt2

- type: construction
  id: GasPipeHalfAlt1
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: halfAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeHalf
  - GasPipeHalfAlt1
  - GasPipeHalfAlt2

- type: construction
  id: GasPipeHalfAlt2
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: halfAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeHalf
  - GasPipeHalfAlt1
  - GasPipeHalfAlt2

- type: construction
  id: GasPipeStraight
  graph: GasPipe
  startNode: start
  targetNode: straight
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeStraight
  - GasPipeStraightAlt1
  - GasPipeStraightAlt2

- type: construction
  id: GasPipeStraightAlt1
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: straightAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeStraight
  - GasPipeStraightAlt1
  - GasPipeStraightAlt2

- type: construction
  id: GasPipeStraightAlt2
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: straightAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeStraight
  - GasPipeStraightAlt1
  - GasPipeStraightAlt2

- type: construction
  id: GasPipeBend
  name: construction-recipe-gas-pipe-bend
  graph: GasPipe
  startNode: start
  targetNode: bend
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeBend
  - GasPipeBendAlt1
  - GasPipeBendAlt2

- type: construction
  id: GasPipeBendAlt1
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: bendAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeBend
  - GasPipeBendAlt1
  - GasPipeBendAlt2

- type: construction
  id: GasPipeBendAlt2
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: bendAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeBend
  - GasPipeBendAlt1
  - GasPipeBendAlt2

- type: construction
  id: GasPipeTJunction
  name: construction-recipe-gas-pipe-t-junction
  graph: GasPipe
  startNode: start
  targetNode: tjunction
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeTJunction
  - GasPipeTJunctionAlt1
  - GasPipeTJunctionAlt2

- type: construction
  id: GasPipeTJunctionAlt1
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: tjunctionAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeTJunction
  - GasPipeTJunctionAlt1
  - GasPipeTJunctionAlt2

- type: construction
  id: GasPipeTJunctionAlt2
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: tjunctionAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeTJunction
  - GasPipeTJunctionAlt1
  - GasPipeTJunctionAlt2

- type: construction
  id: GasPipeFourway
  name: construction-recipe-gas-pipe-fourway
  graph: GasPipe
  startNode: start
  targetNode: fourway
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeFourway
  - GasPipeFourwayAlt1
  - GasPipeFourwayAlt2

- type: construction
  id: GasPipeFourwayAlt1
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: fourwayAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeFourway
  - GasPipeFourwayAlt1
  - GasPipeFourwayAlt2

- type: construction
  id: GasPipeFourwayAlt2
  hide: true
  graph: GasPipe
  startNode: start
  targetNode: fourwayAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: true
  alternativePrototypes:
  - GasPipeFourway
  - GasPipeFourwayAlt1
  - GasPipeFourwayAlt2

- type: construction
  id: GasPipeManifold
  graph: GasPipe
  startNode: start
  targetNode: manifold
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: true

# ATMOS UNARY
- type: construction
  id: GasVentPump
  graph: GasUnary
  startNode: start
  targetNode: ventpump
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile

- type: construction
  id: GasPassiveVent
  graph: GasUnary
  startNode: start
  targetNode: passivevent
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile

- type: construction
  id: GasVentScrubber
  graph: GasUnary
  startNode: start
  targetNode: ventscrubber
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile

- type: construction
  id: GasOutletInjector
  graph: GasUnary
  startNode: start
  targetNode: outletinjector
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile

# ATMOS BINARY
- type: construction
  id: GasPressurePump
  graph: GasBinary
  startNode: start
  targetNode: pressurepump
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPressurePump
  - GasPressurePumpAlt1
  - GasPressurePumpAlt2

- type: construction
  id: GasPressurePumpAlt1
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: pressurepumpAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPressurePump
  - GasPressurePumpAlt1
  - GasPressurePumpAlt2

- type: construction
  id: GasPressurePumpAlt2
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: pressurepumpAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPressurePump
  - GasPressurePumpAlt1
  - GasPressurePumpAlt2

- type: construction
  id: GasVolumePump
  graph: GasBinary
  startNode: start
  targetNode: volumepump
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasVolumePump
  - GasVolumePumpAlt1
  - GasVolumePumpAlt2

- type: construction
  id: GasVolumePumpAlt1
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: volumepumpAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasVolumePump
  - GasVolumePumpAlt1
  - GasVolumePumpAlt2

- type: construction
  id: GasVolumePumpAlt2
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: volumepumpAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasVolumePump
  - GasVolumePumpAlt1
  - GasVolumePumpAlt2

- type: construction
  id: GasPassiveGate
  graph: GasBinary
  startNode: start
  targetNode: passivegate
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPassiveGate
  - GasPassiveGateAlt1
  - GasPassiveGateAlt2

- type: construction
  id: GasPassiveGateAlt1
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: passivegateAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPassiveGate
  - GasPassiveGateAlt1
  - GasPassiveGateAlt2

- type: construction
  id: GasPassiveGateAlt2
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: passivegateAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPassiveGate
  - GasPassiveGateAlt1
  - GasPassiveGateAlt2

- type: construction
  id: GasPressureRegulator
  graph: GasBinary
  startNode: start
  targetNode: pressureregulator
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPressureRegulator
  - GasPressureRegulatorAlt1
  - GasPressureRegulatorAlt2

- type: construction
  id: GasPressureRegulatorAlt1
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: pressureregulatorAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPressureRegulator
  - GasPressureRegulatorAlt1
  - GasPressureRegulatorAlt2

- type: construction
  id: GasPressureRegulatorAlt2
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: pressureregulatorAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasPressureRegulator
  - GasPressureRegulatorAlt1
  - GasPressureRegulatorAlt2

- type: construction
  id: GasValve
  graph: GasBinary
  startNode: start
  targetNode: valve
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasValve
  - GasValveAlt1
  - GasValveAlt2

- type: construction
  id: GasValveAlt1
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: valveAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasValve
  - GasValveAlt1
  - GasValveAlt2

- type: construction
  id: GasValveAlt2
  hide: true
  graph: GasBinary
  startNode: start
  targetNode: valveAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile
  alternativePrototypes:
  - GasValve
  - GasValveAlt1
  - GasValveAlt2

- type: construction
  id: SignalControlledValve
  graph: GasBinary
  startNode: start
  targetNode: signalvalve
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
  - !type:NoUnstackableInTile
  alternativePrototypes:
  - SignalControlledValve
  - SignalControlledValveAlt1
  - SignalControlledValveAlt2

- type: construction
  id: SignalControlledValveAlt1
  graph: GasBinary
  startNode: start
  targetNode: signalvalveAlt1
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile
  alternativePrototypes:
  - SignalControlledValve
  - SignalControlledValveAlt1
  - SignalControlledValveAlt2

- type: construction
  id: SignalControlledValveAlt2
  graph: GasBinary
  startNode: start
  targetNode: signalvalveAlt2
  category: construction-category-utilities
  placementMode: AlignAtmosPipeLayers
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile
  alternativePrototypes:
  - SignalControlledValve
  - SignalControlledValveAlt1
  - SignalControlledValveAlt2

- type: construction
  id: GasPort
  graph: GasBinary
  startNode: start
  targetNode: port
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile

- type: construction
  id: GasDualPortVentPump
  graph: GasBinary
  startNode: start
  targetNode: dualportventpump
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: HeatExchanger
  graph: GasBinary
  startNode: start
  targetNode: radiator
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

- type: construction
  id: HeatExchangerBend
  name: construction-recipe-heat-exchanger-bend
  graph: GasBinary
  startNode: start
  targetNode: bendradiator
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false

# ATMOS TRINARY
- type: construction
  id: GasFilter
  graph: GasTrinary
  startNode: start
  targetNode: filter
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: GasFilterFlipped
  conditions:
    - !type:NoUnstackableInTile

- type: construction
  id: GasFilterFlipped
  hide: true
  graph: GasTrinary
  startNode: start
  targetNode: filterflipped
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: GasFilter
  conditions:
    - !type:NoUnstackableInTile

- type: construction
  id: GasMixer
  graph: GasTrinary
  startNode: start
  targetNode: mixer
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: GasMixerFlipped
  conditions:
    - !type:NoUnstackableInTile

- type: construction
  id: GasMixerFlipped
  hide: true
  graph: GasTrinary
  startNode: start
  targetNode: mixerflipped
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  mirror: GasMixer
  conditions:
    - !type:NoUnstackableInTile

- type: construction
  id: PressureControlledValve
  graph: GasTrinary
  startNode: start
  targetNode: pneumaticvalve
  category: construction-category-utilities
  placementMode: SnapgridCenter
  canBuildInImpassable: false
  conditions:
    - !type:NoUnstackableInTile

# INTERCOM
- type: construction
  id: IntercomAssembly
  graph: Intercom
  startNode: start
  targetNode: intercom
  category: construction-category-structures
  placementMode: SnapgridCenter
  objectType: Structure
  canRotate: true
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition {}

# TIMERS
- type: construction
  id: SignalTimer
  graph: Timer
  startNode: start
  targetNode: signal
  category: construction-category-utilities
  objectType: Structure
  placementMode: SnapgridCenter
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition

- type: construction
  id: ScreenTimer
  graph: Timer
  startNode: start
  targetNode: screen
  category: construction-category-utilities
  objectType: Structure
  canRotate: false
  placementMode: SnapgridCenter
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition

- type: construction
  id: BrigTimer
  graph: Timer
  startNode: start
  targetNode: brig
  category: construction-category-utilities
  objectType: Structure
  canRotate: false
  placementMode: SnapgridCenter
  canBuildInImpassable: true
  conditions:
  - !type:WallmountCondition