--- /dev/null
+- type: entity
+ parent: ComputerSurveillanceWirelessCameraMonitor
+ id: ComputerTelevision
+ name: wooden television
+ description: Finally, some decent reception around here...
+ components:
+ - type: Sprite
+ noRot: true
+ drawdepth: SmallObjects
+ layers:
+ - map: ["computerLayerBody"]
+ state: television
+ - map: ["computerLayerScreen"]
+ state: detective_television
+ - type: Computer
+ board: ComputerTelevisionCircuitboard
+ - type: PointLight
+ radius: 1.5
+ energy: 1.6
+ color: "#b89f25"
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.25,-0.25,0.25,0.25"
+ density: 200
+ mask:
+ - TabletopMachineMask
+ layer:
+ - TabletopMachineLayer
+# base
+
- type: entity
id: VendingMachine
parent: BaseMachinePowered
- type: Appearance
- type: WiresVisuals
+- type: entity
+ id: VendingMachineWallmount
+ parent: BaseWallmountMachine
+ name: vending machine
+ abstract: true
+ components:
+ - type: StationAiWhitelist
+ - type: AmbientOnPowered
+ - type: AmbientSound
+ volume: -9
+ range: 3
+ enabled: false
+ sound:
+ path: /Audio/Ambience/Objects/vending_machine_hum.ogg
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Breakage"]
+ - !type:EjectVendorItems
+ - trigger:
+ !type:DamageTrigger
+ damage: 200
+ behaviors:
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ SheetSteel1:
+ min: 1
+ max: 1
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalGlassBreak
+ - type: Repairable
+ doAfterDelay: 8
+ - type: ActivatableUI
+ key: enum.VendingMachineUiKey.Key
+ - type: ActivatableUIRequiresPower
+ - type: UserInterface
+ interfaces:
+ enum.VendingMachineUiKey.Key:
+ type: VendingMachineBoundUserInterface
+ enum.WiresUiKey.Key:
+ type: WiresBoundUserInterface
+ - type: WiresPanel
+ - type: Wires
+ boardName: wires-board-name-vendingmachine
+ layoutId: Vending
+ - type: PointLight
+ enabled: false
+ castShadows: false
+ radius: 1.5
+ - type: LitOnPowered
+ - type: Appearance
+ - type: WiresVisuals
+ - type: Electrified
+ enabled: false
+ usesApcPower: true
+ - type: Rotatable
+
+# Vending machines
+
- type: entity
parent: VendingMachine
id: VendingMachineCondiments
energy: 1.6
color: "#d4ab33"
-# wallmounted machines
-
-- type: entity
- id: VendingMachineWallmount
- parent: VendingMachine
- name: vending machine
- abstract: true
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
- components:
- - type: Sprite
- drawdepth: WallMountedItems
- snapCardinals: false
- - type: Rotatable
- - type: WallMount
- arc: 175
- - type: Transform
- noRot: false
-
-- type: entity
- parent: VendingMachineWallmount
- id: VendingMachineWallMedical
- name: NanoMed
- description: "It's a wall-mounted medical equipment dispenser. Natural chemicals only!"
- components:
- - type: VendingMachine
- pack: NanoMedInventory
- offState: off
- brokenState: broken
- normalState: normal-unshaded
- denyState: deny-unshaded
- - type: Sprite
- sprite: Structures/Machines/VendingMachines/wallmed.rsi
- layers:
- - state: "off"
- map: ["enum.VendingMachineVisualLayers.Base"]
- - state: "off"
- map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
- shader: unshaded
- - texture: Structures/Machines/VendingMachines/maintenance_panel.png
- map: ["enum.WiresVisualLayers.MaintenancePanel"]
- - type: PointLight
- radius: 1.3
- energy: 1.6
- color: "#43ccb5"
- - type: AccessReader
- access: [["Medical"]]
- - type: GuideHelp
- guides:
- - Medical
-
# job clothing
- type: entity
- type: AccessReader
access: [["SyndicateAgent"]]
+# wallmount
+- type: entity
+ parent: VendingMachineWallmount
+ id: VendingMachineWallMedical
+ name: NanoMed
+ description: "It's a wall-mounted medical equipment dispenser. Natural chemicals only!"
+ components:
+ - type: VendingMachine
+ pack: NanoMedInventory
+ offState: off
+ brokenState: broken
+ normalState: normal-unshaded
+ denyState: deny-unshaded
+ - type: Sprite
+ sprite: Structures/Machines/VendingMachines/wallmed.rsi
+ layers:
+ - state: "off"
+ map: ["enum.VendingMachineVisualLayers.Base"]
+ - state: "off"
+ map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
+ shader: unshaded
+ - texture: Structures/Machines/VendingMachines/maintenance_panel.png
+ map: ["enum.WiresVisualLayers.MaintenancePanel"]
+ - type: PointLight
+ radius: 1.3
+ energy: 1.6
+ color: "#43ccb5"
+ - type: AccessReader
+ access: [["Medical"]]
+ - type: GuideHelp
+ guides:
+ - Medical
- type: entity
abstract: true
id: BaseGeneratorWallmount
- parent: BaseGenerator
+ parent: [ BaseGenerator, BaseWallmount ]
name: wallmount generator
description: A high efficiency thermoelectric generator stuffed in a wall cabinet.
- placement:
- mode: SnapgridCenter
components:
- type: AmbientOnPowered
- type: AmbientSound
color: "#3db83b"
castShadows: false
netsync: false
- - type: Fixtures
- - type: Transform
- anchored: true
- - type: Physics
- bodyType: Static
- canCollide: false
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Power/Generation/wallmount_generator.rsi
supplyRate: 3000
supplyRampRate: 500
supplyRampTolerance: 500
- - type: WallMount
- type: GuideHelp
guides:
- ShuttleCraft
# Construction Frames
- type: entity
+ parent: BaseWallmountMetallic
categories: [ HideSpawnMenu ]
id: BaseGeneratorWallmountFrame
name: wallmount generator frame
description: A construction frame for a wallmount generator.
- placement:
- mode: SnapgridCenter
components:
- - type: Clickable
- - type: InteractionOutline
- - type: Physics
- canCollide: false
- - type: Fixtures
- - type: Transform
- anchored: true
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Power/Generation/wallmount_generator.rsi
- type: Construction
graph: WallmountGenerator
node: frame
- - type: WallMount
# Generators in use
- type: entity
+ parent: BaseWallmount
categories: [ HideSpawnMenu ]
id: BaseAPC
name: APC
color: "#3db83b"
castShadows: false
netsync: false
- - type: Clickable
- type: AccessReader
access: [["Engineering"]]
- - type: InteractionOutline
- - type: Transform
- anchored: true
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Power/apc.rsi
# APC under construction
- type: entity
+ parent: BaseWallmountMetallic
categories: [ HideSpawnMenu ]
id: APCFrame
name: APC frame
placement:
mode: SnapgridCenter
components:
- - type: Clickable
- - type: InteractionOutline
- - type: Transform
- anchored: true
- type: Sprite
- drawdepth: WallMountedItems
sprite: Structures/Power/apc.rsi
state: frame
- type: Construction
graph: APC
node: apcFrame
- - type: WallMount
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: StructuralMetallic
- type: Destructible
thresholds:
- trigger:
- PotatoBattery
- type: entity
- parent: BaseItemRecharger
+ parent: [ BaseItemRecharger, BaseWallmount ]
id: WallWeaponCapacitorRecharger
name: wall recharger
components:
- map: ["enum.PowerChargerVisualLayers.Light"]
state: "light-off"
shader: "unshaded"
- - type: WallMount
- type: Charger
chargeRate: 25
- type: ItemSlots
#Wall Closet
- type: entity
+ parent: BaseWallmountMetallic
id: BaseWallCloset
- placement:
- mode: SnapgridCenter
abstract: true
name: wall closet
description: A standard-issue Nanotrasen storage unit, now on walls.
components:
- - type: InteractionOutline
- - type: Clickable
- type: ResistLocker
- type: Weldable
- - type: WallMount
- arc: 175
- type: StaticPrice
price: 75
- - type: Transform
- noRot: false
- type: Sprite
drawdepth: WallMountedItems
noRot: false
containers:
entity_storage: !type:Container
ents: []
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
- type: entity
+ parent: BaseWallmountMetallic
id: BoxingBell
name: boxing bell
description: Ding ding!
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- - type: Transform
- anchored: true
- - type: WallMount
- type: Sprite
sprite: Structures/Wallmounts/bell.rsi
layers:
successChance: 1
interactSuccessSound:
path: /Audio/Weapons/boxingbell.ogg
- - type: Clickable
- type: MeleeSound
soundGroups:
Brute:
path:
"/Audio/Weapons/boxingbell.ogg"
- type: Appearance
- - type: Rotatable
- - type: CollisionWake
- enabled: false
- - type: Physics
- canCollide: false
- bodyType: Static
- - type: Fixtures
- - type: Damageable
- damageContainer: Inorganic
- type: Destructible
thresholds:
- trigger:
- type: entity
+ parent: BaseWallmountGlass
id: Mirror
name: mirror
description: 'Mirror mirror on the wall , who''s the most robust of them all?'
placement:
mode: SnapgridCenter
components:
- - type: WallMount
- type: Sprite
sprite: Structures/Wallmounts/mirror.rsi
state: mirror
- - type: InteractionOutline
- - type: Clickable
- - type: Transform
- anchored: true
- type: MagicMirror #instant and silent
changeHairSound: null
addSlotTime: 0
interfaces:
enum.MagicMirrorUiKey.Key:
type: MagicMirrorBoundUserInterface
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 200
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalGlassBreak
- type: entity
parent: Mirror
- type: entity
+ parent: BaseWallmount
id: NoticeBoard
name: notice board
description: Is there a job for a witcher?
- placement:
- mode: SnapgridCenter
components:
- - type: WallMount
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Wallmounts/noticeboard.rsi
maxFillLevels: 6
fillBaseName: notice
- type: Appearance
- - type: InteractionOutline
- - type: Clickable
- - type: Transform
- anchored: true
- type: Damageable
damageModifierSet: Wood
damageContainer: StructuralInorganic
- type: entity
id: BaseBarSign
- parent: BaseStructure
+ parent: [ BaseWallmountGlass, BaseWallmountMetallic ]
name: bar sign
abstract: true
components:
- - type: MeleeSound
- soundGroups:
- Brute:
- collection: GlassSmash
- type: WallMount
arc: 360
- type: Sprite
- drawdepth: WallMountedItems
sprite: Structures/Wallmounts/barsign.rsi
state: empty
- - type: ApcPowerReceiver
- - type: ExtensionCableReceiver
- type: BarSign
- - type: InteractionOutline
- type: AccessReader
access: [["Bar"]]
- type: ActivatableUIRequiresPower
enum.WiresUiKey.Key:
type: WiresBoundUserInterface
- type: Appearance
- - type: Damageable
- damageContainer: StructuralInorganic
- type: Destructible
thresholds:
- trigger:
- type: entity
+ parent: BaseWallmountMetallic
id: BaseSign
name: base sign
abstract: true
- placement:
- mode: SnapgridCenter
components:
- type: WallMount
arc: 360
- - type: Clickable
- - type: InteractionOutline
- type: Rotatable
- - type: Physics
- bodyType: Static
- canCollide: false
- - type: Fixtures
- fixtures:
- fix1:
- shape:
- !type:PhysShapeAabb {}
- - type: Damageable
- damageContainer: Inorganic
- damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Sprite
- drawdepth: WallMountedItems
sprite: Structures/Wallmounts/signs.rsi
snapCardinals: true
- type: StaticPrice
id: BaseFlag
abstract: true
components:
- - type: WallMount
- arc: 360
- type: Sprite
- drawdepth: WallMountedItems
sprite: Structures/Wallmounts/flags.rsi
- type: entity
components:
- type: Sprite
state: syndie_flag
-
+
- type: entity
parent: BaseFlag
id: LGBTQFlag
components:
- type: Sprite
state: lgbtq_flag
-
+
- type: entity
parent: BaseFlag
id: PirateFlag
description: Raise the jolly roger, scallywags!
components:
- type: Sprite
- state: pirate_flag
\ No newline at end of file
+ state: pirate_flag
id: PaintingBase
abstract: true
components:
- - type: WallMount
- arc: 360
- type: Sprite
- drawdepth: WallMountedItems
sprite: Structures/Wallmounts/paintings.rsi
- type: entity
description: This painting is a sad clown! It sparks joy.
components:
- type: Sprite
- state: painting19
+ state: painting19
id: PosterBase
abstract: true
components:
- - type: WallMount
- arc: 360
- type: Sprite
- drawdepth: WallMountedItems
sprite: Structures/Wallmounts/posters.rsi
- snapCardinals: true
- type: Destructible
thresholds:
- trigger: # Excess damage, don't spawn entities
--- /dev/null
+- type: entity
+ parent: [BaseWallmountMetallic, BaseItemCabinet]
+ id: BaseWallmountCabinet
+ abstract: true
+
+- type: entity
+ parent: [BaseWallmountGlass, BaseItemCabinetGlass]
+ id: BaseWallmountCabinetGlass
+ abstract: true
# TODO: same as other wallmount cabinets they should use a base structure prototype
- type: entity
- parent: BaseItemCabinet
+ parent: BaseWallmountCabinet
id: DefibrillatorCabinet
name: defibrillator cabinet
description: A small wall mounted cabinet designed to hold a defibrillator.
placement:
mode: SnapgridCenter
components:
- - type: WallMount
- arc: 175
- - type: Transform
- anchored: true
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
sprite: Structures/Wallmounts/defib_cabinet.rsi
noRot: false
whitelist:
components:
- Defibrillator
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger: !type:DamageTrigger
-# TODO: this could probably use some kind of base structure prototype
-# every wallmount cabinet copypastes placement and like 8 components
- type: entity
- parent: BaseItemCabinet
+ parent: BaseWallmountCabinet
id: ExtinguisherCabinet
name: extinguisher cabinet
description: A small wall mounted cabinet designed to hold a fire extinguisher.
- placement:
- mode: SnapgridCenter
components:
- - type: WallMount
- arc: 360
- - type: Transform
- anchored: true
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
sprite: Structures/Wallmounts/extinguisher_cabinet.rsi
snapCardinals: true
whitelist:
components:
- SpraySafety
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
-# TODO: same as fire extinguisher make it use a base structure theres lots of copy paste
- type: entity
- parent: BaseItemCabinetGlass
+ parent: BaseWallmountCabinetGlass
id: FireAxeCabinet
name: fire axe cabinet
description: There is a small label that reads "For Emergency use only" along with details for safe use of the axe. As if.
placement:
mode: SnapgridCenter
components:
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: Glass
- type: Destructible
thresholds:
- trigger:
- !type:PlaySoundBehavior
sound:
collection: MetalGlassBreak
- - type: MeleeSound
- soundGroups:
- Brute:
- collection: GlassSmash
- - type: WallMount
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
sprite: Structures/Wallmounts/fireaxe_cabinet.rsi
layers:
# Parents
- type: entity
- abstract: true
+ parent: BaseWallmount
id: ShelfBase
+ abstract: true
name: shelf
description: A strange place to place, well, anything really. You feel like you shouldn't be seeing this.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- - type: Clickable
- - type: Tag
- tags:
- - Structure
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Storage/Shelfs/wood.rsi
state: base
- - type: Transform
- type: Damageable
damageModifierSet: Wood
damageContainer: StructuralInorganic
collection: WoodDestroyHeavy
- !type:DoActsBehavior
acts: ["Destruction"]
- - type: WallMount
- type: Storage
grid:
- 0,0,3,1
interfaces:
enum.StorageUiKey.Key:
type: StorageBoundUserInterface
- - type: InteractionOutline
- type: ContainerContainer
containers:
storagebase: !type:Container
- type: entity
- id: CleanerDispenser
- name: space cleaner dispenser
- description: Wallmount reagent dispenser.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
+ parent: BaseWallmountMetallic
+ id: BaseDispenser
+ abstract: true
components:
- - type: WallMount
- arc: 175
- type: Sprite
sprite: Structures/Storage/tanks.rsi
state: cleanerdispenser
- type: Appearance
- - type: InteractionOutline
- - type: Clickable
- - type: Transform
- anchored: true
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
collection: MetalBreak
- !type:DoActsBehavior
acts: ["Destruction"]
- - type: SolutionContainerManager
- solutions:
- tank:
- reagents:
- - ReagentId: SpaceCleaner
- Quantity: 5000
- type: DrainableSolution
solution: tank
- type: ReagentTank
solution: tank
- type: entity
- parent: CleanerDispenser
+ parent: BaseDispenser
id: FuelDispenser
name: fuel dispenser
components:
weldingDamage:
types:
Heat: 20
+
+- type: entity
+ parent: BaseDispenser
+ id: CleanerDispenser
+ name: space cleaner dispenser
+ components:
+ - type: SolutionContainerManager
+ solutions:
+ tank:
+ reagents:
+ - ReagentId: SpaceCleaner
+ Quantity: 5000
+ - type: ReagentTank
- type: entity
+ parent: BaseWallmountMetallic
id: SignalSwitch
name: signal switch
description: It's a switch for toggling power to things.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- - type: StationAiWhitelist
- type: WallMount
arc: 360
- - type: Clickable
- - type: InteractionOutline
- - type: Physics
- canCollide: false
+ - type: StationAiWhitelist
- type: Sprite
drawdepth: SmallObjects
sprite: Structures/Wallmounts/switch.rsi
- type: Construction
graph: SignalSwitchGraph
node: SignalSwitchNode
- - type: Fixtures
- type: DeviceNetwork
deviceNetId: Wireless
- type: WirelessNetworkConnection
- Status
lastSignals:
Status: false
- - type: Tag
- tags:
- - Structure
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 80
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 40
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalBreak
+ params:
+ volume: -8
- type: entity
+ parent: BaseWallmountMetallic
id: SignalButton
name: signal button
description: It's a button for activating something.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- - type: StationAiWhitelist
- type: WallMount
arc: 360
- - type: Clickable
- - type: InteractionOutline
- - type: Physics
- canCollide: false
+ - type: StationAiWhitelist
- type: Sprite
drawdepth: SmallObjects
sprite: Structures/Wallmounts/switch.rsi
- type: Construction
graph: SignalButtonGraph
node: SignalButtonNode
- - type: Fixtures
- type: DeviceNetwork
deviceNetId: Wireless
- type: WirelessNetworkConnection
- type: DeviceLinkSource
ports:
- Pressed
- - type: Damageable
- damageContainer: Inorganic
- damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
collection: MetalBreak
params:
volume: -8
- - type: Tag
- tags:
- - Structure
- type: entity
+ parent: BaseWallmountMetallic
id: ApcNetSwitch
name: apc net switch
description: It's a switch for toggling lights that are connected to the same apc.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
- components:
- - type: WallMount
- arc: 360
- - type: Clickable
- - type: InteractionOutline
- - type: Physics
- canCollide: false
- - type: Transform
- anchored: true
- - type: Sprite
- drawdepth: SmallObjects
- sprite: Structures/Wallmounts/switch.rsi
- state: on
- - type: Rotatable
- - type: ExtensionCableReceiver
- - type: DeviceNetwork
- deviceNetId: Apc
- transmitFrequencyId: SmartLight # assuming people want to use it for light switches.
- - type: ApcNetworkConnection
- - type: ApcNetSwitch
- - type: Construction
- graph: LightSwitchGraph
- node: LightSwitchNode
- - type: Fixtures
- - type: Tag
- tags:
- - Structure
-
-- type: entity
- id: TwoWayLever
- name: two way lever
- description: A two way lever.
- placement:
- mode: SnapgridCenter
components:
- - type: StationAiWhitelist
- - type: Clickable
- - type: InteractionOutline
- - type: Sprite
- drawdepth: HighFloorObjects
- sprite: Structures/conveyor.rsi
- noRot: true
- layers:
- - state: switch-off
- map: ["enabled", "enum.TwoWayLeverState.Middle"]
- - type: TwoWayLever
- - type: UseDelay
- delay: 0.2 # prevent light-toggling auto-clickers.
- - type: Appearance
- - type: GenericVisualizer
- visuals:
- enum.TwoWayLeverVisuals.State:
- enabled:
- Right: { state: switch-fwd }
- Middle: { state: switch-off }
- Left: { state: switch-rev }
- - type: Damageable
- damageContainer: Inorganic
- damageModifierSet: Metallic
- - type: Destructible
- thresholds:
- - trigger:
- !type:DamageTrigger
- damage: 100
- behaviors:
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
- - type: Construction
- graph: LeverGraph
- node: LeverNode
- - type: DeviceNetwork
- deviceNetId: Wireless
- - type: WirelessNetworkConnection
- range: 200
- - type: DeviceLinkSource
- ports:
- - Left
- - Right
- - Middle
- - type: Tag
- tags:
- - Structure
+ - type: WallMount
+ arc: 360
+ - type: Sprite
+ drawdepth: SmallObjects
+ sprite: Structures/Wallmounts/switch.rsi
+ state: on
+ - type: Rotatable
+ - type: ExtensionCableReceiver
+ - type: DeviceNetwork
+ deviceNetId: Apc
+ transmitFrequencyId: SmartLight # assuming people want to use it for light switches.
+ - type: ApcNetworkConnection
+ - type: ApcNetSwitch
+ - type: Construction
+ graph: LightSwitchGraph
+ node: LightSwitchNode
#directional
--- /dev/null
+- type: entity
+ parent: BaseWallmountMachine
+ id: WallmountTelescreen
+ suffix: camera monitor
+ name: telescreen
+ description: Finally, some decent reception around here...
+ components:
+ - type: Sprite
+ sprite: Structures/Machines/computers.rsi
+ layers:
+ - map: ["computerLayerBody"]
+ state: telescreen_frame
+ - map: ["computerLayerScreen"]
+ state: telescreen
+ - type: Construction
+ graph: WallmountTelescreen
+ node: Telescreen
+ - type: PointLight
+ radius: 1.5
+ energy: 1.6
+ color: "#b89f25"
+ - type: DeviceNetwork
+ deviceNetId: Wired
+ receiveFrequencyId: SurveillanceCamera
+ transmitFrequencyId: SurveillanceCamera
+ - type: WiredNetworkConnection
+ - type: DeviceNetworkRequiresPower
+ - type: SurveillanceCameraMonitor
+ - type: ActivatableUI
+ key: enum.SurveillanceCameraMonitorUiKey.Key
+ - type: ActivatableUIRequiresPower
+ - type: ActivatableUIRequiresVision
+ - type: UserInterface
+ interfaces:
+ enum.SurveillanceCameraMonitorUiKey.Key:
+ type: SurveillanceCameraMonitorBoundUserInterface
+
+- type: entity
+ parent: BaseWallmountMetallic
+ id: WallmountTelescreenFrame
+ name: telescreen frame
+ description: Finally, some decent reception around here...
+ components:
+ - type: Construction
+ graph: WallmountTelescreen
+ node: TelescreenFrame
+ - type: Sprite
+ sprite: Structures/Machines/computers.rsi
+ layers:
+ - map: ["computerLayerBody"]
+ state: telescreen_frame
+ - map: ["computerLayerScreen"]
+ state: telescreen
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 200
+ behaviors: #excess damage, don't spawn entities.
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 50
+ behaviors:
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ SheetSteel1:
+ min: 1
+ max: 1
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
--- /dev/null
+- type: entity
+ parent: BaseWallmountMachine
+ id: WallmountTelevision
+ suffix: entertainment
+ name: television
+ description: Finally, some decent reception around here...
+ components:
+ - type: Construction
+ graph: WallmountTelevision
+ node: Television
+ - type: Sprite
+ sprite: Structures/Wallmounts/flatscreentv.rsi
+ layers:
+ - map: ["computerLayerBody"]
+ state: television_wall
+ - map: ["computerLayerScreen"]
+ state: television_wallscreen
+ - type: DeviceNetwork
+ deviceNetId: Wireless
+ receiveFrequencyId: SurveillanceCamera
+ transmitFrequencyId: SurveillanceCamera
+ - type: WirelessNetworkConnection
+ range: 200
+ - type: DeviceNetworkRequiresPower
+ - type: Speech
+ - type: SurveillanceCameraSpeaker
+ - type: SurveillanceCameraMonitor
+ - type: ActivatableUI
+ key: enum.SurveillanceCameraMonitorUiKey.Key
+ - type: ActivatableUIRequiresPower
+ - type: ActivatableUIRequiresVision
+ - type: UserInterface
+ interfaces:
+ enum.SurveillanceCameraMonitorUiKey.Key:
+ type: SurveillanceCameraMonitorBoundUserInterface
+ - type: PointLight
+ radius: 1.5
+ energy: 1.6
+ color: "#b89f25"
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 200
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalGlassBreak
+ params:
+ volume: -4
+ - type: StationAiWhitelist
+
+- type: entity
+ parent: BaseWallmountGlass
+ id: WallmountTelevisionFrame
+ name: television frame
+ description: Finally, some decent reception around here...
+ components:
+ - type: Construction
+ graph: WallmountTelevision
+ node: TelevisionFrame
+ - type: Sprite
+ drawdepth: WallMountedItems
+ sprite: Structures/Wallmounts/flatscreentv.rsi
+ layers:
+ - map: ["computerLayerBody"]
+ state: television_wall
+ - map: ["computerLayerScreen"]
+ state: television_wallscreen
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 20
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalGlassBreak
+ params:
+ volume: -4
- type: entity
+ parent: BaseWallmountMachine
id: AirAlarm
name: air alarm
description: An air alarm. Alarms... air?
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- type: StationAiWhitelist
- - type: WallMount
- - type: ApcPowerReceiver
- type: Electrified
enabled: false
usesApcPower: true
- - type: ExtensionCableReceiver
- type: DeviceNetwork
deviceNetId: AtmosDevices
receiveFrequencyId: AtmosMonitor
map: ["airAlarmState"] # TODO: fire alarm enum
- state: alarmx
map: ["enum.WiresVisualLayers.MaintenancePanel"]
- - type: Transform
- anchored: true
- type: Construction
graph: AirAlarm
node: air_alarm
- DeviceMonitoringAndControl
- type: entity
+ parent: BaseWallmountMetallic
id: AirAlarmAssembly
name: air alarm assembly
description: An air alarm. Doesn't look like it'll be alarming air any time soon.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- - type: WallMount
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
sprite: Structures/Wallmounts/air_monitors.rsi
layers:
node: assembly
- type: Transform
anchored: true
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 20
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalGlassBreak
+ params:
+ volume: -4
- type: entity
id: AirAlarmXeno
- type: entity
+ parent: BaseWallmountMachine
id: FireAlarm
name: fire alarm
description: A fire alarm. Spicy!
components:
- - type: WallMount
- - type: ApcPowerReceiver
+ - type: LightningTarget
+ priority: 0
- type: Electrified
enabled: false
usesApcPower: true
- type: Tag
tags:
- FireAlarm
- - type: Clickable
- - type: InteractionOutline
- type: FireAlarm
- type: AtmosAlertsDevice
group: FireAlarm
params:
volume: -4
- type: StationAiWhitelist
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
- type: entity
+ parent: BaseWallmountMetallic
id: FireAlarmAssembly
name: fire alarm assembly
description: A fire alarm assembly. Very mild.
components:
- - type: WallMount
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
sprite: Structures/Wallmounts/air_monitors.rsi
layers:
- type: Construction
graph: FireAlarm
node: assembly
- - type: Transform
- anchored: true
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 20
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - trigger:
+ !type:DamageTrigger
+ damage: 15
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MetalGlassBreak
+ params:
+ volume: -4
- type: entity
id: FireAlarmXeno
- type: entity
+ parent: BaseWallmountMachine
id: BaseIntercom
name: intercom
description: An intercom. For when the station just needs to know something.
abstract: true
components:
- type: StationAiWhitelist
- - type: WallMount
- - type: ApcPowerReceiver
- type: Electrified
enabled: false
usesApcPower: true
- type: VoiceOverride # This is for the wire that makes an electricity zapping noise.
speechVerbOverride: Electricity
enabled: false
- - type: ExtensionCableReceiver
- - type: Clickable
- - type: InteractionOutline
- type: Appearance
- type: WiresVisuals
- type: WiresPanelSecurity
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
visible: false
- - type: Transform
- noRot: false
- anchored: true
- type: WiresPanel
- type: Wires
boardName: wires-board-name-intercom
containers:
- board
- key_slots
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: StructuralMetallic
- type: Destructible
thresholds:
- trigger:
enum.RadioDeviceVisualLayers.Speaker:
True: { visible: true }
False: { visible: false }
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
- type: entity
id: IntercomAssembly
name: intercom assembly
description: An intercom. It doesn't seem very helpful right now.
components:
- - type: WallMount
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
drawdepth: SmallObjects
sprite: Structures/Wallmounts/intercom.rsi
- type: Construction
graph: Intercom
node: assembly
- - type: Transform
- anchored: true
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
# this weird inheritance BS exists for construction shitcode
- type: entity
- type: entity
+ parent: BaseWallmountMachine
id: Screen
name: screen
description: Displays text or time.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- - type: Transform
- anchored: true
- - type: WallMount
- arc: 360
- - type: InteractionOutline
- - type: Clickable
- - type: Appearance
- type: Rotatable
- type: TextScreenVisuals
textOffset: 0,3
sprite: Structures/Wallmounts/screen.rsi
state: screen
noRot: true
- - type: Construction
- graph: Timer
- node: screen
- type: ApcPowerReceiver
powerLoad: 100
- - type: Electrified
- enabled: false
- usesApcPower: true
- type: ExtensionCableReceiver
- type: Screen
- type: DeviceNetwork
id: ArrivalsShuttleTimer
parent: Screen
name: arrivals screen
+ description: Displays time of arrivals shuttle ETA.
components:
- type: DeviceNetwork
deviceNetId: Private
- type: entity
+ parent: BaseWallmountMetallic
id: StationMapBroken
name: station map
description: A virtual map of the surrounding station.
suffix: Wall broken
- placement:
- mode: SnapgridCenter
components:
- - type: InteractionOutline
- - type: Clickable
- - type: Transform
- anchored: true
- type: Sprite
sprite: Structures/Machines/station_map.rsi
drawdepth: WallMountedItems
layers:
- state: station_map_broken
- - type: Damageable
- damageContainer: StructuralInorganic
- type: Destructible
thresholds:
- trigger:
acts: [ "Destruction" ]
- type: entity
+ parent: BaseWallmountMachine
id: StationMap
name: station map
- parent: BaseComputer
description: A virtual map of the surrounding station.
suffix: Wall
- placement:
- mode: SnapgridCenter
components:
+ - type: WallMount
+ arc: 360
+ - type: Appearance
- type: StationMap
- - type: Transform
- anchored: true
- type: Sprite
sprite: Structures/Machines/station_map.rsi
layers:
board: !type:Container
- type: ApcPowerReceiver
powerLoad: 200
- - type: WallMount
- arc: 360
- - type: ExtensionCableReceiver
- type: Construction
graph: StationMap
node: station_map
interfaces:
enum.StationMapUiKey.Key:
type: StationMapBoundUserInterface
+ - type: EmitSoundOnUIOpen
+ sound:
+ collection: Keyboard
+ params:
+ volume: -1
+ variation: 0.10
+ pitch: 1.10 # low pitch keyboard sounds feel kinda weird
+ blacklist:
+ tags:
+ - NoConsoleSound
- type: entity
+ parent: BaseWallmountMetallic
id: StationMapAssembly
name: station map assembly
description: A station map assembly.
components:
- type: WallMount
- - type: Clickable
- - type: InteractionOutline
+ arc: 360
- type: Sprite
sprite: Structures/Machines/station_map.rsi
layers:
- type: Construction
graph: StationMap
node: assembly
- - type: Transform
- anchored: true
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
- type: entity
+ parent: BaseWallmountMachine
id: SignalTimer
name: signal timer
description: It's a timer for sending timed signals to things.
- placement:
- mode: SnapgridCenter
- snap:
- - Wallmount
components:
- type: StationAiWhitelist
- - type: Transform
- anchored: true
- type: WallMount
arc: 360
- - type: Clickable
- - type: InteractionOutline
- type: Sprite
drawdepth: SmallObjects
sprite: Structures/Wallmounts/switch.rsi
interfaces:
enum.SignalTimerUiKey.Key:
type: SignalTimerBoundUserInterface
- - type: ApcPowerReceiver
- powerLoad: 100
- type: Electrified
enabled: false
usesApcPower: true
- - type: ExtensionCableReceiver
- type: ActivatableUIRequiresPower
- type: Construction
graph: Timer
# Construction Frame
- type: entity
- categories: [ HideSpawnMenu ]
id: TimerFrame
name: timer frame
description: A construction frame for a timer.
- placement:
- mode: SnapgridCenter
components:
- - type: Clickable
- - type: InteractionOutline
- - type: Transform
- anchored: true
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Wallmounts/signalscreen.rsi
graph: Timer
node: frame
- type: WallMount
+ arc: 360
--- /dev/null
+- type: entity
+ id: BaseWallmount
+ abstract: true
+ placement:
+ mode: SnapgridCenter
+ snap:
+ - Wallmount
+ components:
+ - type: Clickable
+ - type: WallMount
+ - type: InteractionOutline
+ - type: Transform
+ anchored: true
+ - type: Tag
+ tags:
+ - Structure
+ - type: Sprite
+ drawdepth: WallMountedItems
+
+- type: entity
+ parent: BaseWallmount
+ id: BaseWallmountGlass
+ abstract: true
+ components:
+ - type: MeleeSound
+ soundGroups:
+ Brute:
+ collection: GlassSmash
+ - type: Damageable
+ damageContainer: StructuralInorganic
+ damageModifierSet: Glass
+
+- type: entity
+ parent: BaseWallmount
+ id: BaseWallmountMetallic
+ abstract: true
+ components:
+ - type: Damageable
+ damageContainer: StructuralInorganic
+ damageModifierSet: StructuralMetallic
+
+- type: entity
+ parent: BaseWallmountMetallic
+ id: BaseWallmountMachine
+ abstract: true
+ components:
+ - type: ApcPowerReceiver
+ powerLoad: 100
+ - type: ExtensionCableReceiver
+ - type: LightningTarget
+ priority: 1
+++ /dev/null
-- type: entity
- parent: ComputerSurveillanceWirelessCameraMonitor
- id: ComputerTelevision
- name: wooden television
- description: Finally, some decent reception around here...
- components:
- - type: Sprite
- noRot: true
- drawdepth: SmallObjects
- layers:
- - map: ["computerLayerBody"]
- state: television
- - map: ["computerLayerScreen"]
- state: detective_television
- - type: Computer
- board: ComputerTelevisionCircuitboard
- - type: PointLight
- radius: 1.5
- energy: 1.6
- color: "#b89f25"
- - type: Fixtures
- fixtures:
- fix1:
- shape:
- !type:PhysShapeAabb
- bounds: "-0.25,-0.25,0.25,0.25"
- density: 200
- mask:
- - TabletopMachineMask
- layer:
- - TabletopMachineLayer
-
-- type: entity
- parent: BaseComputer
- id: WallmountTelescreenFrame
- name: telescreen frame
- description: Finally, some decent reception around here...
- components:
- - type: Construction
- graph: WallmountTelescreen
- node: TelescreenFrame
- - type: Sprite
- drawdepth: WallMountedItems
- sprite: Structures/Machines/computers.rsi
- layers:
- - map: ["computerLayerBody"]
- state: telescreen_frame
- - map: ["computerLayerScreen"]
- state: telescreen
- - type: Fixtures
- fixtures:
- fix1:
- shape:
- !type:PhysShapeAabb
- bounds: "-0.20,-0.10,0.25,0.35"
- density: 250
- mask:
- - FullTileMask
- layer:
- - WallLayer
- - type: WallMount
- - type: Damageable
- damageContainer: StructuralInorganic
- damageModifierSet: Metallic
- - type: Destructible
- thresholds:
- - trigger:
- !type:DamageTrigger
- damage: 200
- behaviors: #excess damage, don't spawn entities.
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
- - trigger:
- !type:DamageTrigger
- damage: 50
- behaviors:
- - !type:SpawnEntitiesBehavior
- spawn:
- SheetSteel1:
- min: 1
- max: 1
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
- - type: Transform
- anchored: true
-
-- type: entity
- parent: WallmountTelescreenFrame
- id: WallmountTelescreen
- suffix: camera monitor
- name: telescreen
- description: Finally, some decent reception around here...
- components:
- - type: Construction
- graph: WallmountTelescreen
- node: Telescreen
- - type: PointLight
- radius: 1.5
- energy: 1.6
- color: "#b89f25"
- - type: DeviceNetwork
- deviceNetId: Wired
- receiveFrequencyId: SurveillanceCamera
- transmitFrequencyId: SurveillanceCamera
- - type: WiredNetworkConnection
- - type: DeviceNetworkRequiresPower
- - type: SurveillanceCameraMonitor
- - type: ActivatableUI
- key: enum.SurveillanceCameraMonitorUiKey.Key
- - type: ActivatableUIRequiresPower
- - type: ActivatableUIRequiresVision
- - type: UserInterface
- interfaces:
- enum.SurveillanceCameraMonitorUiKey.Key:
- type: SurveillanceCameraMonitorBoundUserInterface
-
-# Wall Televisions
-
-- type: entity
- parent: WallmountTelescreenFrame
- id: WallmountTelevisionFrame
- name: television frame
- description: Finally, some decent reception around here...
- components:
- - type: Fixtures
- fixtures:
- fix1:
- shape:
- !type:PhysShapeAabb
- bounds: "-0.75,-0.10,0.75,0.35"
- density: 75
- mask:
- - FullTileMask
- layer:
- - WallLayer
- - type: Construction
- graph: WallmountTelevision
- node: TelevisionFrame
- - type: Sprite
- drawdepth: WallMountedItems
- sprite: Structures/Wallmounts/flatscreentv.rsi
- layers:
- - map: ["computerLayerBody"]
- state: television_wall
- - map: ["computerLayerScreen"]
- state: television_wallscreen
-
-- type: entity
- parent: WallmountTelevisionFrame
- id: WallmountTelevision
- suffix: entertainment
- name: television
- description: Finally, some decent reception around here...
- components:
- - type: Construction
- graph: WallmountTelevision
- node: Television
- - type: DeviceNetwork
- deviceNetId: Wireless
- receiveFrequencyId: SurveillanceCamera
- transmitFrequencyId: SurveillanceCamera
- - type: WirelessNetworkConnection
- range: 200
- - type: DeviceNetworkRequiresPower
- - type: Speech
- - type: SurveillanceCameraSpeaker
- - type: SurveillanceCameraMonitor
- - type: ActivatableUI
- key: enum.SurveillanceCameraMonitorUiKey.Key
- - type: ActivatableUIRequiresPower
- - type: ActivatableUIRequiresVision
- - type: UserInterface
- interfaces:
- enum.SurveillanceCameraMonitorUiKey.Key:
- type: SurveillanceCameraMonitorBoundUserInterface
- - type: PointLight
- radius: 1.5
- energy: 1.6
- color: "#b89f25"
--- /dev/null
+- type: entity
+ id: TwoWayLever
+ name: two way lever
+ description: A two way lever.
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: StationAiWhitelist
+ - type: Clickable
+ - type: InteractionOutline
+ - type: Sprite
+ drawdepth: FloorObjects
+ sprite: Structures/conveyor.rsi
+ layers:
+ - state: switch-off
+ map: ["enabled", "enum.TwoWayLeverState.Middle"]
+ - type: TwoWayLever
+ - type: UseDelay
+ delay: 0.2 # prevent light-toggling auto-clickers.
+ - type: Appearance
+ - type: GenericVisualizer
+ visuals:
+ enum.TwoWayLeverVisuals.State:
+ enabled:
+ Right: { state: switch-fwd }
+ Middle: { state: switch-off }
+ Left: { state: switch-rev }
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Metallic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: Construction
+ graph: LeverGraph
+ node: LeverNode
+ - type: DeviceNetwork
+ deviceNetId: Wireless
+ - type: WirelessNetworkConnection
+ range: 200
+ - type: DeviceLinkSource
+ ports:
+ - Left
+ - Right
+ - Middle
+ - type: Tag
+ tags:
+ - Structure