From 09346f8805387bb90798680f5df9b5cea9650128 Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Mon, 23 Oct 2023 19:05:47 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BD=D0=B0=D1=81=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=B8=20(#505)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru-RU/white/structures/wallmounts.ftl | 2 + .../White/Construction/Wallmount/graphs.yml | 144 +++++++ .../Construction/Wallmount/structures.yml | 17 + .../Circuitboards/wallmount_consoles.yml | 70 ++++ .../Structures/Wallmounts/consoles.yml | 377 ++++++++++++++++++ Resources/Prototypes/White/tags.yml | 3 + .../wall_consoles.rsi/artifact_layer.png | Bin 0 -> 652 bytes .../wall_consoles.rsi/comp_wall_0.png | Bin 0 -> 392 bytes .../wall_consoles.rsi/comp_wall_broken.png | Bin 0 -> 572 bytes .../wall_consoles.rsi/comp_wall_frame_0.png | Bin 0 -> 339 bytes .../wall_consoles.rsi/comp_wall_frame_0_1.png | Bin 0 -> 339 bytes .../wall_consoles.rsi/comp_wall_frame_1.png | Bin 0 -> 539 bytes .../wall_consoles.rsi/comp_wall_frame_1_2.png | Bin 0 -> 539 bytes .../wall_consoles.rsi/comp_wall_frame_2.png | Bin 0 -> 313 bytes .../wall_consoles.rsi/energy_layer.png | Bin 0 -> 601 bytes .../Machines/wall_consoles.rsi/meta.json | 104 +++++ .../wall_consoles.rsi/miner_layer.png | Bin 0 -> 621 bytes .../wall_consoles.rsi/no_board_layer.png | Bin 0 -> 350 bytes .../wall_consoles.rsi/request_layer.png | Bin 0 -> 552 bytes .../wall_consoles.rsi/research_layer.png | Bin 0 -> 504 bytes .../wall_consoles.rsi/scanner_layer.png | Bin 0 -> 566 bytes .../wall_consoles.rsi/service_layer.png | Bin 0 -> 429 bytes 22 files changed, 717 insertions(+) create mode 100644 Resources/Locale/ru-RU/white/structures/wallmounts.ftl create mode 100644 Resources/Prototypes/White/Construction/Wallmount/graphs.yml create mode 100644 Resources/Prototypes/White/Construction/Wallmount/structures.yml create mode 100644 Resources/Prototypes/White/Entities/Objects/Devices/Circuitboards/wallmount_consoles.yml create mode 100644 Resources/Prototypes/White/Entities/Structures/Wallmounts/consoles.yml create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/artifact_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_0.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_broken.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_0.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_0_1.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_1.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_1_2.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_2.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/energy_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/meta.json create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/miner_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/no_board_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/request_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/research_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/scanner_layer.png create mode 100644 Resources/Textures/White/Structures/Machines/wall_consoles.rsi/service_layer.png diff --git a/Resources/Locale/ru-RU/white/structures/wallmounts.ftl b/Resources/Locale/ru-RU/white/structures/wallmounts.ftl new file mode 100644 index 0000000000..3d70ab1702 --- /dev/null +++ b/Resources/Locale/ru-RU/white/structures/wallmounts.ftl @@ -0,0 +1,2 @@ +ent-ComputerWall = настенная консоль + .desc = Форма для сборки настенной консоли \ No newline at end of file diff --git a/Resources/Prototypes/White/Construction/Wallmount/graphs.yml b/Resources/Prototypes/White/Construction/Wallmount/graphs.yml new file mode 100644 index 0000000000..29252ced77 --- /dev/null +++ b/Resources/Prototypes/White/Construction/Wallmount/graphs.yml @@ -0,0 +1,144 @@ +- type: constructionGraph + id: ComputerWall + start: start + graph: + - node: start + edges: + - to: frameUnsecured + completed: + - !type:SetAnchor + value: true + steps: + - material: Steel + amount: 5 + + - node: frameUnsecured + entity: ComputerWallFrame + actions: + - !type:AppearanceChange + edges: + - to: boardUnsecured + conditions: + - !type:EntityAnchored { } + steps: + - tag: WallMountConsoleElectronics + store: board + name: любую плату настенной консоли + icon: + sprite: "Objects/Misc/module.rsi" + state: "id_mod" + + - to: start + conditions: + - !type:EntityAnchored + anchored: false + completed: + - !type:SpawnPrototype + prototype: SheetSteel1 + amount: 5 + - !type:DeleteEntity { } + steps: + - tool: Welding + doAfter: 2 + + - node: boardUnsecured + entity: ComputerWallFrame + actions: + - !type:AppearanceChange + edges: + - to: missingWires + conditions: + - !type:EntityAnchored { } + steps: + - tool: Screwing + + - to: frameUnsecured + conditions: + - !type:EntityAnchored { } + completed: + - !type:EmptyAllContainers { } + steps: + - tool: Prying + + - node: missingWires + entity: ComputerWallFrame + actions: + - !type:AppearanceChange + edges: + - to: monitorMissing + conditions: + - !type:EntityAnchored { } + steps: + - material: Cable + amount: 5 + + - to: boardUnsecured + conditions: + - !type:EntityAnchored { } + steps: + - tool: Screwing + + - node: monitorMissing + entity: ComputerWallFrame + actions: + - !type:SetAnchor { } + - !type:AppearanceChange + edges: + - to: monitorUnsecured + conditions: + - !type:EntityAnchored { } + steps: + - material: Glass + amount: 2 + + - to: missingWires + conditions: + - !type:EntityAnchored { } + completed: + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 5 + steps: + - tool: Cutting + + - node: monitorUnsecured + entity: ComputerWallFrame + actions: + - !type:AppearanceChange + edges: + - to: computer + conditions: + - !type:EntityAnchored { } + steps: + - tool: Screwing + + - to: monitorMissing + conditions: + - !type:EntityAnchored { } + completed: + - !type:SpawnPrototype + prototype: SheetGlass1 + amount: 2 + steps: + - tool: Prying + + - node: computer + entity: !type:BoardNodeEntity { container: board } + edges: + - to: monitorUnsecured + steps: + - tool: Screwing + + - node: monitorBroken + entity: ComputerWallBroken + edges: + - to: monitorMissing + conditions: + - !type:EntityAnchored { } + completed: + - !type:SpawnPrototype + prototype: ShardGlass + amount: 2 + steps: + - tool: Prying + doAfter: 2 diff --git a/Resources/Prototypes/White/Construction/Wallmount/structures.yml b/Resources/Prototypes/White/Construction/Wallmount/structures.yml new file mode 100644 index 0000000000..a2e064494c --- /dev/null +++ b/Resources/Prototypes/White/Construction/Wallmount/structures.yml @@ -0,0 +1,17 @@ +- type: construction + name: wall mount console + id: ComputerWall + graph: ComputerWall + startNode: start + targetNode: computer + category: construction-category-machines + description: Форма для сборки настенной консоли + placementMode: SnapgridCenter + objectType: Structure + canRotate: true + canBuildInImpassable: true + icon: + sprite: White/Structures/Machines/wall_consoles.rsi + state: comp_wall_0 + conditions: + - !type:WallmountCondition {} \ No newline at end of file diff --git a/Resources/Prototypes/White/Entities/Objects/Devices/Circuitboards/wallmount_consoles.yml b/Resources/Prototypes/White/Entities/Objects/Devices/Circuitboards/wallmount_consoles.yml new file mode 100644 index 0000000000..8646398838 --- /dev/null +++ b/Resources/Prototypes/White/Entities/Objects/Devices/Circuitboards/wallmount_consoles.yml @@ -0,0 +1,70 @@ +# board +- type: entity + parent: BaseComputerCircuitboard + id: SalvageConsoleWallMountCircuitboard + name: плата настенной консоли экспедиций + description: Плата для создания настенной консоли экспедиций. + components: + - type: Sprite + state: cpu_supply + - type: ComputerBoard + prototype: SalvageConsoleWallMount + - type: Tag + tags: + - WallMountConsoleElectronics + +- type: entity + parent: BaseComputerCircuitboard + id: MediaConsoleWallMountCircuitboard + name: плата настенной консоли СМИ + description: Плата для создания настенной консоли СМИ. + components: + - type: Sprite + state: cpu_service + - type: ComputerBoard + prototype: MassMediaConsoleWallMount + - type: Tag + tags: + - WallMountConsoleElectronics + +- type: entity + parent: BaseComputerCircuitboard + id: OrdersConsoleWallMountCircuitboard + name: плата настенной консоли заказа грузов + description: Плата для создания настенной консоли заказа грузов. + components: + - type: Sprite + state: cpu_supply + - type: ComputerBoard + prototype: OrdersConsoleWallMount + - type: Tag + tags: + - WallMountConsoleElectronics + +- type: entity + parent: BaseComputerCircuitboard + id: RadarConsoleWallMountCircuitboard + name: плата настенной консоли сканера массы + description: Плата для создания настенной консоли сканера массы. + components: + - type: Sprite + state: cpu_supply + - type: ComputerBoard + prototype: RadarConsoleWallMount + - type: Tag + tags: + - WallMountConsoleElectronics + +- type: entity + parent: BaseComputerCircuitboard + id: PowerConsoleWallMountCircuitboard + name: плата настенной консоли контроля питания + description: Плата для создания настенной консоли контроля питания. + components: + - type: Sprite + state: cpu_engineering + - type: ComputerBoard + prototype: PowerConsoleWallMount + - type: Tag + tags: + - WallMountConsoleElectronics diff --git a/Resources/Prototypes/White/Entities/Structures/Wallmounts/consoles.yml b/Resources/Prototypes/White/Entities/Structures/Wallmounts/consoles.yml new file mode 100644 index 0000000000..5f598b19cd --- /dev/null +++ b/Resources/Prototypes/White/Entities/Structures/Wallmounts/consoles.yml @@ -0,0 +1,377 @@ +# Base structure +- type: entity + id: BaseStructureWallMountConsole + parent: BaseStructure + abstract: true + components: + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.35,0.25,0.35" + density: 190 + mask: + - MachineMask + layer: + - MachineLayer + - type: InteractionOutline + - type: Rotatable + - type: WallMount + arc: 360 + - type: Construction + graph: ComputerWall + node: frameUnsecured + - type: Transform + anchored: true + - type: Sprite + drawdepth: Objects + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:ChangeConstructionNodeBehavior + node: monitorBroken + - !type:DoActsBehavior + acts: [ "Destruction" ] + +# Base console +- type: entity + parent: BaseStructureWallMountConsole + id: BaseWallConsole + name: настенная консоль + placement: + mode: SnapgridCenter + components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" + - type: Construction + graph: ComputerWall + node: computer + containers: + - board + - type: Computer + - type: ApcPowerReceiver + powerLoad: 200 + - type: ExtensionCableReceiver + - type: ActivatableUIRequiresPower + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - map: [ "computerLayerBody" ] + state: comp_wall_0 + - map: [ "computerLayerScreen" ] + state: no_board_layer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true, shader: shaded } + - type: LitOnPowered + - type: PointLight + radius: 1.5 + energy: 1.6 + enabled: false + mask: /Textures/Effects/LightMasks/cone.png + autoRot: true + offset: "0, 0.4" # shine from the top, not bottom of the computer + castShadows: false + - type: EmitSoundOnUIOpen + sound: + collection: Keyboard + - type: ContainerContainer + containers: + board: !type:Container + ents: [ ] + +# Broken +- type: entity + parent: BaseStructureWallMountConsole + id: ComputerWallBroken + name: разбитая настенная консоль + description: Эта консоль видала лучшие времена. + components: + - type: Construction + graph: ComputerWall + node: monitorBroken + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + state: comp_wall_broken + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + +# Frame +- type: entity + id: ComputerWallFrame + parent: BaseStructureWallMountConsole + name: рамка настенной консоли + description: Рамка для сборки настенной консоли. + components: + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - state: comp_wall_frame_1 + map: [ "enum.ConstructionVisuals.Layer" ] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ConstructionVisuals.Key: + enum.ConstructionVisuals.Layer: + frameUnsecured: { state: comp_wall_frame_0 } + boardUnsecured: { state: comp_wall_frame_0_1 } + missingWires: { state: comp_wall_frame_1 } + monitorMissing: { state: comp_wall_frame_1_2 } + monitorUnsecured: { state: comp_wall_frame_2 } + +# Salvage console +- type: entity + id: SalvageConsoleWallMount + parent: BaseWallConsole + name: настенная консоль экспедиций + description: Настенная версия консоли экспедиций. + components: + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - map: [ "computerLayerBody" ] + state: comp_wall_0 + - map: [ "computerLayerScreen" ] + state: miner_layer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true } + - type: SalvageExpeditionConsole + - type: ActivatableUI + key: enum.SalvageConsoleUiKey.Expedition + - type: ActivatableUIRequiresPower + - type: UserInterface + interfaces: + - key: enum.SalvageConsoleUiKey.Expedition + type: SalvageExpeditionConsoleBoundUserInterface + - type: Construction + board: SalvageConsoleWallMountCircuitboard + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#b89f25" + - type: AccessReader + access: [ [ "Salvage" ] ] + +# Order console +- type: entity + id: OrdersConsoleWallMount + parent: BaseWallConsole + name: настенная консоль заказа грузов + description: Настенная консоли заказа грузов. + components: + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - map: [ "computerLayerBody" ] + state: comp_wall_0 + - map: [ "computerLayerScreen" ] + state: request_layer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true } + - type: CargoOrderConsole + - type: ActivatableUI + key: enum.CargoConsoleUiKey.Orders + - type: UserInterface + interfaces: + - key: enum.CargoConsoleUiKey.Orders + type: CargoOrderConsoleBoundUserInterface + - type: Computer + board: OrdersConsoleWallMountCircuitboard + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#b89f25" + - type: AccessReader + access: [ [ "Cargo" ] ] + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: BasicDevice + - type: WirelessNetworkConnection + range: 200 + - type: DeviceLinkSource + range: 200 + ports: + - OrderSender + - type: GuideHelp + guides: + - Cargo + +# MassMedia console +- type: entity + id: MassMediaConsoleWallMount + parent: BaseWallConsole + name: настенная консоль СМИ + description: Настенная версия новостной консоли. + components: + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - map: [ "computerLayerBody" ] + state: comp_wall_0 + - map: [ "computerLayerScreen" ] + state: service_layer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true } + - type: Computer + board: MediaConsoleWallMountCircuitboard + - type: DeviceNetworkRequiresPower + - type: NewsWrite + - type: AccessReader + access: [ [ "Command" ] ] + - type: ActivatableUI + key: enum.NewsWriteUiKey.Key + - type: ActivatableUIRequiresVision + - type: Transform + anchored: true + - type: UserInterface + interfaces: + - key: enum.NewsWriteUiKey.Key + type: NewsWriteBoundUserInterface + +# Radar console +- type: entity + id: RadarConsoleWallMount + parent: BaseWallConsole + name: настенный сканер масс + description: Настенная версия консоли сканера массы. + components: + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - map: [ "computerLayerBody" ] + state: comp_wall_0 + - map: [ "computerLayerScreen" ] + state: scanner_layer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true } + - type: RadarConsole + - type: ActivatableUI + key: enum.RadarConsoleUiKey.Key + - type: UserInterface + interfaces: + - key: enum.RadarConsoleUiKey.Key + type: RadarConsoleBoundUserInterface + - type: Computer + board: RadarConsoleWallMountCircuitboard + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#e6e227" + +# Power console +- type: entity + id: PowerConsoleWallMount + parent: BaseWallConsole + name: настенная консоль контроля питания + description: Настенная версия консоли контроля питания. + components: + - type: Sprite + sprite: White/Structures/Machines/wall_consoles.rsi + layers: + - map: [ "computerLayerBody" ] + state: comp_wall_0 + - map: [ "computerLayerScreen" ] + state: energy_layer + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true } + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#c9c042" + - type: Computer + board: PowerConsoleWallMountCircuitboard + - type: PowerMonitoringConsole + - type: NodeContainer + examinable: true + nodes: + hv: + !type:CableDeviceNode + nodeGroupID: HVPower + - type: ActivatableUI + key: enum.PowerMonitoringConsoleUiKey.Key + - type: UserInterface + interfaces: + - key: enum.PowerMonitoringConsoleUiKey.Key + type: PowerMonitoringConsoleBoundUserInterface diff --git a/Resources/Prototypes/White/tags.yml b/Resources/Prototypes/White/tags.yml index ca8ed97f0e..9f9dc74ea5 100644 --- a/Resources/Prototypes/White/tags.yml +++ b/Resources/Prototypes/White/tags.yml @@ -39,3 +39,6 @@ - type: Tag id: DeleteWithWindows + +- type: Tag + id: WallMountConsoleElectronics diff --git a/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/artifact_layer.png b/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/artifact_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..2239ef0a88dd9afb39d95230006ad429681ef266 GIT binary patch literal 652 zcmV;70(1R|P)P7Et_#I(N;igGA-fn%W|>eF0Lb>=Yx0NNsZ_TS&IZ}fBPIamEByKew*OM=c?LZX zL$Lk$${?c40A$aDY(nS5Tyy2aHyD$uG_vPG2BY&|aTqaxFsb$v%mV1Xcy;e1x)2Iq zM}UjrEQ$#AIbRq=FbsXoX#^JYCeePP1AvgnVJ;#y24MOK(bznVO%JK|6P*PL&TL1q z51kK_1f>8F=;7&v2~maCtDB2r4mux}1z`50D8|DfIt75tz~yO>T)F6O5Jhqx1ZyIa zK=(AVHdq!QH3bkI0LE#MssL2NBeP+S0L1_Z=l~02P#K_CZ3tn2MJXp>c7ja8<_2=@ zCs+-F>*1OB+X0|zXn_MH=_efc1`Gr)a7vggSV*0A0EPDBs|JY*07~MI8Vw;z?WZUJ zD6xF7=*1TRMArg?#WSS31E1$XX5q~OU?ariFaw7xJ?ygpp@~b#hq8@%Aj1#eM$PfC$dC0+57a zQMBUnbMbopN$$z7!bR>}wRuzpZy7TRNRF+(mMEiuYY|gjqk!y3MoDFQqX7E~vj6Ea zTTiu&_W*#KbtLio-JbGF^I8G8!ElrP$8@(K>Q+9ClmeiPCL-1*qrtVD2PyQq(UNN# zLaIp!04o585HaX=L>Pv`aU9mac^`7(At!4f=ZFcX{RRLsk>eajPbxRZ9}_uX+719v m~y1GWRI4*UQRV~H^MKelcF0000k}@P)|e>PDv~lNpky*Bmge z=yw6i%j?ppT`Cv~@)^>KqmPGkuA2J1(*fEF5%^jJzZm_~${`vRbOS=*K$36@KoJt_ zWOEB8RUa+gz&u4HAqU1OAP64ixzkbgCrW?7$l<;IuYh5f_PW!6fit8s%r4Z zLSh!CJFq*KFMK!)$UR7lP-7b_0DrJX^eb*udxyby zn7G(801(O1B6JZLGtVzYj^QE)F4h46l59m1BGgJFbs%-XT&7;9Wyb*o)&in8z(JTY$G9UdP)oZvpSUbqhWm;8BNb02wU;l~n|}QSm6L zA0vRQ9Z3SL$z;yCK9(`-keUX-1QSG5nZ<;@m>Ld-EMcNCTR;E^^bEdx!neeMb1MKq lPb+$az!f7Z5EalW@CMNT&7;9Wyb*o)&in8z(JTY$G9UdP)oZvpSUbqhWm;8BNb02wU;l~n|}QSm6L zA0vRQ9Z3SL$z;yCK9(`-keUX-1QSG5nZ<;@m>Ld-EMcNCTR;E^^bEdx!neeMb1MKq lPb+$az!f7Z5EalW@CMN%Bl?f_YAE3RRXS>J2`V7J=|I2SYL!;I3-{r z*ZF*-M(vOHDg2Yx={bEAV~I`<9!1fV#P!F?%{^W2ZO_2tI9BU4P3PjxIe>(KMx#Ml zmZ_n3J3P#jV+$VwA|wH8MZ6FoZNeUioFi}6avhI8Xiow&PKvcEIhXMvnAvPtBP%G2 z&3;Y5>BXxU1I>t@fDp+R7V!46m1F2+XgIj0PWNzzyLHy0ey>lMP2(#Fzu6=3l?u=aumQ$C7KgPLdrE|N z>?w@vqf~%?tx$V^^GVg(OgV4?1vA$WB21hqOfIO2nymHU!t147P6EuXw?)HE2yTNM z!-g^a;?+Ug>h(HdBuQfKS!j(G8U<4 z%k)X72ZvPvUP1&DVJ#W|V@fy(vIS-?YY7;@rQo$~)=$rvvf#iKW&i+}Qn&;HS7lWO dstiaO_yz#%#q`kRcl-bV002ovPDHLkV1nNy@D~68 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_1_2.png b/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..aab0b1c19d3dbd8ae31627a2d03dc0a558a60ee1 GIT binary patch literal 539 zcmV+$0_6RPP)%Bl?f_YAE3RRXS>J2`V7J=|I2SYL!;I3-{r z*ZF*-M(vOHDg2Yx={bEAV~I`<9!1fV#P!F?%{^W2ZO_2tI9BU4P3PjxIe>(KMx#Ml zmZ_n3J3P#jV+$VwA|wH8MZ6FoZNeUioFi}6avhI8Xiow&PKvcEIhXMvnAvPtBP%G2 z&3;Y5>BXxU1I>t@fDp+R7V!46m1F2+XgIj0PWNzzyLHy0ey>lMP2(#Fzu6=3l?u=aumQ$C7KgPLdrE|N z>?w@vqf~%?tx$V^^GVg(OgV4?1vA$WB21hqOfIO2nymHU!t147P6EuXw?)HE2yTNM z!-g^a;?+Ug>h(HdBuQfKS!j(G8U<4 z%k)X72ZvPvUP1&DVJ#W|V@fy(vIS-?YY7;@rQo$~)=$rvvf#iKW&i+}Qn&;HS7lWO dstiaO_yz#%#q`kRcl-bV002ovPDHLkV1nNy@D~68 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_2.png b/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/comp_wall_frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..648e81b8e75885e84c7802316064bc03dbecf339 GIT binary patch literal 313 zcmV-90mlA`P)_Mbbj}|?M-}eiignG1C#6$gqGKGOsGBGVhL3S@mcPBfOZIX4)%qsBD z6*zA9ub=IYoc6dGT_2og`mnxzg9me=Cay?-MaonMi&wPYM#{UuFk~ zToln=Bn1En@+3*RYkGYn2Sg|f3gDulBI>$k3OPu zHpWvN68H0FAYD@f;9mbhihST zdufF4{o|(?XXlROb9VjawT~u^Z%qJ^oZlIBYl?q+@3t$d`!&g(_sPe%x!^yaK8ekC zBNhHAGfl)q3=L#ShaD0&?t^(gl1QR~Ea@`gd$l-@*cQDI%+X2b1n3BnT?R3x0(78h z?3^^8?~CvB75I7h7V5);puSoG>bQ@tVw0{mj?b$_^;31H3h2N0@7;Cd^B{IMbet*xgh=ASniwM;$$*59uLMT7b1d*+O^lIF zxYfV&AoB{43rBk$z^DMy5dH zG)4J{*7g$&0FaLytdcN1MvTD9?d8NMBdCU!_7e;M$fhvU{lF9D`JC#5$Im>S%30T{=V53=ne60u`9J09`smxGblKI6lvV?8ln|zzRTJ z;wU7iK7q1jpfnQy!zq>jO{XE^y#lx4eE?YXg=7lROpsnu?XLqiPxx;WXFtIJAljuv zRN=7C0)*maGyn*N&~TR@O##C_h6(v^GzAa}q2Vq+;!^+suSzI5y}qYL00000NkvXX Hu0mjfgn<9x literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/no_board_layer.png b/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/no_board_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..6516228235907385c1093fe5d19a671e891dddf4 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=%;U|>}Bba4#HV0}BymhX@OPb=>u zrnizaZr-pI7LsXdG%ig~e#UcF&@1+;DwiUk?_#B2O#yFioGjkA%-$tKfq@B*POEIV zv@Lc@YI51uY0rAazfbasT`hI*lS zdwc!1{M&Ps?Y`TXZ>_x~E*l-3^(11+zB-$o4HMNH^4`AFzGUh&!RYns?FRyGr*4Ql zw$ofy?VonC)#+;=ZmtVT(fxJxWDV<`UHAW-`Snq~L0kA!j&b70+~}k`{x@@UBd^OA z*Pi75(rwT9nqiJ>%a!N_zh^xB{b#^CAd=d#Wzp$P!nLYtrf literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/request_layer.png b/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/request_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..c8795bfea682a701940b74b2156717b34b54f775 GIT binary patch literal 552 zcmV+@0@wYCP)wHf`N^J9f^fkfR(L?S3nGO=)wprd5M6Nnz+Z^ z*_S3MN)o9$*XQ{2_r;goMOl_XpRbKRlSl4@07D1#T!G#%0l=?->z5?S%Kd>kT=^w` z8~70x;ku$Ia!m#KeHgw(ZQ!@E1nMH<6RYanX4M-*@B6PJhyuiMoLx-PKYVZQW3c&o zAjYI=y3#so8ebFuNuC~aT4b00orC4~$j38rPT}&F;;W5KxvMPzE~}OD0#$G34np~*%*iX8jWXU=F7rt|0cv} z3STY2FJp_*1Yr|~i*C-Xf-eey-*N!l2b53!?F*pvo8^@MH8Ewh-E!q{`FR#ijCdBn zjR;Q~YS*z53dQ8{i0?a#_$O;R4Do{2VfzG7?*rCRcpaEN@|fS-0eJv+!Gx9axv;kv zBl~}Tx0_w<16;rSyd$>WX+I2j5RwXE2uo&uhzh``o3;3&0F02&)f%*HdR0sPz6*0RX`O`1yq6mslbfy*oMr&7~@;! zoKMq~hCeUEx%qo=(tK}l9n%?5QWPT5d~=ibH`eT;EX$~ycBygJp!RW_>S^7}DDoc4 zuddXroArL*@*mD`Y5Q>3%bzQP^IT#Q>lA&y;jpsxUO(hzDYoQ-$JcCw`Mj`aS#Od2 zAOZN0+!vi{t5%^=Ns3m7&E>iB8a68MW${aZqey;`0C~j`Ho!bCvo7th1twMj0CL8qjbNbq>GBQCk!;w3 z68>CV83Xuy3&d7{_X!>P6uv&F*rT@YM0SRSGp)D4Px-UH1mRsC(~tpV3}qR+*TsqT z5zF^h06s)qfrXBh@gWq-a;+Pe@A9c*e@OxFEf90qtJR%BulH`ZTrNG9>N_M3@Oj%+_8NPz6*0RX`O`1yq4wp};3JWW(BvS2X7U0000sn6X97w zcZA0}cfQA}qugB(t2nuWT19{1TCepn!`a(y1sE>X+=ugF3}WpkIslM84YP!vG_t3W z?FD&WuSJpJ&;n)#fjf7QrHEn^6##$F{~>4?$Pw6Lf}lns6cDl>WUn32euf$%3`0{w zQ~=o4-$m2Lz;L)x8AS{h6SN2fko~W>NHK`|JcHBN>_>4BksP7|fJn2zDFBobz~Jx) zVzm*i4ipF=0HSZ4C0ZL^g%k$>Mqxt(kHdU`Ed^lM4^vDeO|U6U>w1`wJE>tmzNR?A z0BDfsz};CODJ^%m! literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/service_layer.png b/Resources/Textures/White/Structures/Machines/wall_consoles.rsi/service_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..9daa2b0cbde5a2d1b031b92834b6283a18b5a5d3 GIT binary patch literal 429 zcmV;e0aE^nP)<3-%Na_`ndxY1MSAp}7NB&%%Qjl79Znvkxp{0s`d zz);=wD)p+r1Ttp2L_h>YKmd@)qByS zxA}K+*Zv2dIW!z_d9=usHI9Z`n#_Ii^sfDj0Mb!c)yvQJu|D6fnZurI7TvGUxSS=X z{ppX!$dC081Gum!tLxgTs@j_IMCl;un)+NZ=a2sMWgOxe2Ee9((7nX9+>HJ*p3Mg5BaN{!|? zWd8WA;(2&lsjqYqFq`y0y$kTVIo&XKw|JekH~V_=xBb1@q=|qCh=2%)fCz}dpCj-E Xl+2y~W}Ro~00000NkvXXu0mjfEZEgA literal 0 HcmV?d00001