From a698a85f3489b32df81ce5f6c62a2ad86465fea4 Mon Sep 17 00:00:00 2001 From: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:20:24 -0600 Subject: [PATCH] Make shuttle walls/windows constructable (#19255) --- Content.Client/Wall/ShuttleWallVisuals.cs | 6 + Content.Shared/Wall/ShuttleWallVisuals.cs | 8 + .../Entities/Structures/Walls/girders.yml | 2 +- .../Entities/Structures/Walls/walls.yml | 76 ++++++--- .../Entities/Structures/Windows/shuttle.yml | 8 +- .../Construction/Graphs/structures/girder.yml | 158 +++++++++++++++++- .../Construction/Graphs/structures/window.yml | 39 +++++ .../Recipes/Construction/structures.yml | 74 ++++++++ .../Structures/Walls/shuttle.rsi/meta.json | 20 ++- .../Walls/shuttle.rsi/shuttle_construct-0.png | Bin 0 -> 632 bytes .../Walls/shuttle.rsi/shuttle_construct-1.png | Bin 0 -> 652 bytes .../Walls/shuttle.rsi/shuttle_construct-2.png | Bin 0 -> 689 bytes .../Walls/shuttle.rsi/shuttle_construct-3.png | Bin 0 -> 690 bytes .../Walls/shuttle.rsi/shuttle_construct-4.png | Bin 0 -> 675 bytes .../Walls/shuttle.rsi/shuttle_construct-5.png | Bin 0 -> 671 bytes .../Walls/shuttleinterior.rsi/full.png | Bin 0 -> 1746 bytes .../Walls/shuttleinterior.rsi/meta.json | 46 +++++ .../Walls/shuttleinterior.rsi/state0.png | Bin 0 -> 881 bytes .../Walls/shuttleinterior.rsi/state1.png | Bin 0 -> 651 bytes .../Walls/shuttleinterior.rsi/state2.png | Bin 0 -> 881 bytes .../Walls/shuttleinterior.rsi/state3.png | Bin 0 -> 628 bytes .../Walls/shuttleinterior.rsi/state4.png | Bin 0 -> 627 bytes .../Walls/shuttleinterior.rsi/state5.png | Bin 0 -> 704 bytes .../Walls/shuttleinterior.rsi/state6.png | Bin 0 -> 704 bytes .../Walls/shuttleinterior.rsi/state7.png | Bin 0 -> 388 bytes 25 files changed, 407 insertions(+), 30 deletions(-) create mode 100644 Content.Client/Wall/ShuttleWallVisuals.cs create mode 100644 Content.Shared/Wall/ShuttleWallVisuals.cs create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-0.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-1.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-2.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-3.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-4.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-5.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/full.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/meta.json create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state0.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state1.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state2.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state3.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state4.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state5.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state6.png create mode 100644 Resources/Textures/Structures/Walls/shuttleinterior.rsi/state7.png diff --git a/Content.Client/Wall/ShuttleWallVisuals.cs b/Content.Client/Wall/ShuttleWallVisuals.cs new file mode 100644 index 0000000000..9060e892a8 --- /dev/null +++ b/Content.Client/Wall/ShuttleWallVisuals.cs @@ -0,0 +1,6 @@ +namespace Content.Client.Wall; + +public enum ShuttleWallVisualLayers : byte +{ + Deconstruction, +} diff --git a/Content.Shared/Wall/ShuttleWallVisuals.cs b/Content.Shared/Wall/ShuttleWallVisuals.cs new file mode 100644 index 0000000000..31fef9f399 --- /dev/null +++ b/Content.Shared/Wall/ShuttleWallVisuals.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Wall; +using Robust.Shared.Serialization; + +[Serializable, NetSerializable] +public enum ShuttleWallVisuals +{ + DeconstructionStage, +} diff --git a/Resources/Prototypes/Entities/Structures/Walls/girders.yml b/Resources/Prototypes/Entities/Structures/Walls/girders.yml index 04b2aa1af0..a1ed2332b9 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/girders.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/girders.yml @@ -6,7 +6,7 @@ components: - type: Transform anchored: true - noRot: true + noRot: false - type: Physics bodyType: Static - type: Fixtures diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 9059fd06d7..37c2b27f89 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -514,10 +514,15 @@ !type:DamageTrigger damage: 600 behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg - !type:ChangeConstructionNodeBehavior node: girder - !type:DoActsBehavior acts: ["Destruction"] + destroySound: + path: /Audio/Effects/metalbreak.ogg - type: IconSmooth key: walls base: reinf_over @@ -642,10 +647,11 @@ key: walls base: silver +#shuttle walls - type: entity id: WallShuttleDiagonal name: shuttle wall - suffix: diagonal + suffix: Diagonal description: Keeps the air in and the greytide out. placement: mode: SnapgridCenter @@ -671,7 +677,7 @@ state: state0 - type: Damageable damageContainer: Inorganic - damageModifierSet: Metallic + damageModifierSet: StrongMetallic - type: Physics bodyType: Static - type: Reflect @@ -707,6 +713,8 @@ !type:DamageTrigger damage: 300 behaviors: + - !type:ChangeConstructionNodeBehavior + node: girder - !type:PlaySoundBehavior sound: path: /Audio/Effects/metalbreak.ogg @@ -714,44 +722,60 @@ acts: ["Destruction"] destroySound: path: /Audio/Effects/metalbreak.ogg + - type: Construction + graph: Girder + node: diagonalshuttleWall - type: entity - parent: BaseWall + parent: WallReinforced id: WallShuttle name: shuttle wall + suffix: Reinforced, Exterior components: - - type: Tag - tags: - - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/shuttle.rsi - type: Icon sprite: Structures/Walls/shuttle.rsi - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 1000 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 500 - behaviors: - - !type:PlaySoundBehavior - sound: - path: /Audio/Effects/metalbreak.ogg - - !type:DoActsBehavior - acts: ["Destruction"] - destroySound: - path: /Audio/Effects/metalbreak.ogg + state: full + - type: Construction + graph: Girder + node: shuttleWall + - type: IconSmooth + key: walls + base: state + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ShuttleWallVisuals.DeconstructionStage: + ShuttleWallVisualLayers.Deconstruction: + -1: { visible: false } + 0: { state: shuttle_construct-0, visible: true} + 1: { state: shuttle_construct-1, visible: true} + 2: { state: shuttle_construct-2, visible: true} + 3: { state: shuttle_construct-3, visible: true} + 4: { state: shuttle_construct-4, visible: true} + 5: { state: shuttle_construct-5, visible: true} - type: Reflect reflectProb: 1 + +- type: entity + parent: WallSolid + id: WallShuttleInterior + name: shuttle wall + suffix: Interior + components: + - type: Sprite + sprite: Structures/Walls/shuttleinterior.rsi + - type: Icon + sprite: Structures/Walls/shuttleinterior.rsi + - type: Construction + graph: Girder + node: shuttleInteriorWall - type: IconSmooth key: walls base: state + - type: Reflect + reflectProb: 1 - type: entity parent: BaseWall diff --git a/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml b/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml index 826f9b09f4..8d7d1c8180 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml @@ -8,6 +8,9 @@ sprite: Structures/Windows/shuttle_window.rsi - type: Icon sprite: Structures/Windows/shuttle_window.rsi + - type: Repairable + fuelCost: 15 + doAfterDelay: 3 - type: Damageable damageContainer: Inorganic damageModifierSet: RGlass @@ -38,6 +41,9 @@ acts: [ "Destruction" ] - type: IconSmooth base: swindow + - type: Construction + graph: Window + node: shuttleWindow - type: Appearance - type: DamageVisuals thresholds: [4, 8, 12] @@ -46,7 +52,7 @@ damageOverlay: sprite: Structures/Windows/cracks.rsi - type: StaticPrice - price: 75 + price: 100 - type: entity parent: ShuttleWindow diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml index e652cfbec8..0ccb303334 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml @@ -43,7 +43,7 @@ - to: reinforcedGirder completed: - !type:SnapToGrid - southRotation: true + southRotation: false conditions: - !type:EntityAnchored {} steps: @@ -145,6 +145,22 @@ amount: 2 doAfter: 2 + - to: shuttleInteriorWall + completed: + - !type:SnapToGrid + southRotation: true + conditions: + - !type:EntityAnchored { } + steps: + - material: MetalRod + amount: 2 + doAfter: 1 + - tool: Screwing + doAfter: 1 + - material: Steel + amount: 2 + doAfter: 1 + - node: wall entity: WallSolid edges: @@ -263,6 +279,23 @@ - tool: Prying doAfter: 5 + - node: shuttleInteriorWall + entity: WallShuttleInterior + edges: + - to: girder + completed: + - !type:SpawnPrototype + prototype: SheetSteel1 + amount: 2 + - !type:SpawnPrototype + prototype: PartRodMetal1 + amount: 2 + steps: + - tool: Welding + doAfter: 10 + - tool: Screwing + doAfter: 1 + - node: reinforcedGirder entity: ReinforcedGirder edges: @@ -277,6 +310,38 @@ amount: 2 doAfter: 1 + - to: shuttleWall + completed: + - !type:SnapToGrid + southRotation: true + conditions: + - !type:EntityAnchored { } + steps: + - material: MetalRod + amount: 4 + doAfter: 1 + - tool: Screwing + doAfter: 2 + - material: Plasteel + amount: 2 + doAfter: 1 + + - to: diagonalshuttleWall + completed: + - !type:SnapToGrid + southRotation: false + conditions: + - !type:EntityAnchored { } + steps: + - material: Steel + amount: 1 + doAfter: 1 + - tool: Welding + doAfter: 4 + - material: Plasteel + amount: 1 + doAfter: 1 + - to: girder completed: - !type:SnapToGrid @@ -342,6 +407,97 @@ - tool: Cutting doAfter: 1 + - node: shuttleWall + entity: WallShuttle + edges: + - to: reinforcedGirder + completed: + - !type:SpawnPrototype + prototype: SheetPlasteel1 + amount: 2 + - !type:SpawnPrototype + prototype: PartRodMetal1 + amount: 4 + steps: + - tool: Welding + doAfter: 10 + - tool: Cutting + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.ShuttleWallVisuals.DeconstructionStage" + data: 5 + - tool: Screwing + doAfter: 2 + - tool: Welding + doAfter: 5 + completed: + - !type:VisualizerDataInt + key: "enum.ShuttleWallVisuals.DeconstructionStage" + data: 4 + - tool: Prying + doAfter: 2 + - tool: Anchoring + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.ShuttleWallVisuals.DeconstructionStage" + data: 3 + - tool: Welding + doAfter: 10 + completed: + - !type:VisualizerDataInt + key: "enum.ShuttleWallVisuals.DeconstructionStage" + data: 2 + - tool: Prying + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.ShuttleWallVisuals.DeconstructionStage" + data: 1 + - tool: Screwing + doAfter: 1 + completed: + - !type:VisualizerDataInt + key: "enum.ShuttleWallVisuals.DeconstructionStage" + data: 0 + - tool: Cutting + doAfter: 4 + + - node: diagonalshuttleWall + entity: WallShuttleDiagonal + edges: + - to: reinforcedGirder + completed: + - !type:SpawnPrototype + prototype: SheetPlasteel1 + amount: 1 + - !type:SpawnPrototype + prototype: SheetSteel1 + amount: 1 + steps: + #To-Do: Add deconstruct visuals + - tool: Welding + doAfter: 5 + - tool: Cutting + doAfter: 1 + - tool: Screwing + doAfter: 1 + - tool: Welding + doAfter: 5 + - tool: Prying + doAfter: 1 + - tool: Anchoring + doAfter: 1 + - tool: Welding + doAfter: 10 + - tool: Prying + doAfter: 1 + - tool: Screwing + doAfter: 1 + - tool: Cutting + doAfter: 1 + - node: wallrust entity: WallSolidRust edges: diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml index d029ee6b90..10284bdca2 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml @@ -46,6 +46,14 @@ amount: 2 doAfter: 3 + - to: shuttleWindow + steps: + - material: Plasteel + amount: 2 + - material: ReinforcedGlass + amount: 2 + doAfter: 4 + - node: window entity: Window edges: @@ -186,3 +194,34 @@ doAfter: 2 - tool: Anchoring doAfter: 3 + + - node: shuttleWindow + entity: ShuttleWindow + edges: + - to: start + completed: + - !type:SpawnPrototype + prototype: SheetRGlass1 + amount: 2 + - !type:SpawnPrototype + prototype: SheetPlasteel1 + amount: 2 + - !type:DeleteEntity {} + steps: + #To-Do: Add deconstruct visuals + - tool: Welding + doAfter: 6 + - tool: Screwing + doAfter: 2 + - tool: Prying + doAfter: 3 + - tool: Welding + doAfter: 5 + - tool: Screwing + doAfter: 1 + - tool: Prying + doAfter: 2 + - tool: Welding + doAfter: 4 + - tool: Anchoring + doAfter: 1 diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index 20343111a0..8e3a3cf2ac 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -178,6 +178,61 @@ conditions: - !type:TileNotBlocked +- type: construction + name: shuttle wall + id: ShuttleWall + graph: Girder + startNode: start + targetNode: shuttleWall + category: construction-category-structures + description: Keeps the air in and the greytide out. + icon: + sprite: Structures/Walls/shuttle.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + name: interior shuttle wall + id: InteriorShuttleWall + graph: Girder + startNode: start + targetNode: shuttleInteriorWall + category: construction-category-structures + description: Keeps the air in and the greytide out. + icon: + sprite: Structures/Walls/shuttleinterior.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + + +- type: construction + name: diagonal shuttle wall + id: DiagonalShuttleWall + graph: Girder + startNode: start + targetNode: diagonalshuttleWall + category: construction-category-structures + description: Keeps the air in and the greytide out. + icon: + sprite: Structures/Walls/shuttle_diagonal.rsi + state: state0 + objectType: Structure + placementMode: SnapgridCenter + canRotate: true + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + - type: construction name: bananium wall id: ClownWall @@ -381,6 +436,25 @@ canRotate: false - type: construction + name: shuttle window + id: ShuttleWindow + graph: Window + startNode: start + targetNode: shuttleWindow + category: construction-category-structures + canBuildInImpassable: true + description: Extra sturdy to resist the pressure of FTL or sustain damage from munitions. + conditions: + - !type:EmptyOrWindowValidInTile + - !type:NoWindowsInTile + icon: + sprite: Structures/Windows/shuttle_window.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + +- type: construction name: diagonal plasma window id: PlasmaWindowDiagonal graph: WindowDiagonal diff --git a/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json b/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json index 97ca2aa3b0..9aff20a66c 100644 --- a/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json +++ b/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json @@ -41,6 +41,24 @@ { "name": "state7", "directions": 4 + }, + { + "name": "shuttle_construct-0" + }, + { + "name": "shuttle_construct-1" + }, + { + "name": "shuttle_construct-2" + }, + { + "name": "shuttle_construct-3" + }, + { + "name": "shuttle_construct-4" + }, + { + "name": "shuttle_construct-5" } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-0.png b/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-0.png new file mode 100644 index 0000000000000000000000000000000000000000..dde7f67085c33178ecb82b20793d7e242ce38b19 GIT binary patch literal 632 zcmV-;0*C#HP)9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyAknMBy-~u_~ z$iXdO;i2Pz*hFA~p{M}&j3ls#77`U@c=!4>LHapbaeM#%1BS)(Aq5=KA%N}xPyqt6 zoDcvx61|Wj$^oE)2viQh5+Sw_09g*Q00clG0s}A~!yHH`1hAF^u#ymz4M6}`2*9EN z*%I{V!50FcY>2ZY1Qo@&902n%C@S{s+{xhL?hX$D7$0Uaz7QbW0kAYc$N_}X0ND

2xG!1~VA9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyAknMBy-~u_~ z$iXdO;i2Pz*hFA~p{M}&%+iIk7@jKfMM}`NC8K52%tNl zv$d9?ytM2Ig0+Ipuj?Af^!ZikDzJ401* z4$crlcL3IM09F!$vLOhdI{+jGN=%^Q`rYf-49}5jHA!F%DkLfjE@H7|S!4%*vLVir z5L6Tsa)73mCIiSqbO(U=*RNe4bpT}{fG-hJD-D3MA9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyAknMBy-~u_~ z$iXdO;i2Pz*hFA~p{M}&%+iIk7@jKfMM}`NC8K52%tNl zv$d9?ytM2IT{Kn5>bxe;Dcg7~1)EiT+2 zY$vu5LU#bxasXBmg0dk9pgRC021-nz;u>VxmD`UQ&Ye5QU}R*(pra}ab`+?H#g=7} z9RSLPI7>oMQB24IAPZs>62O*rPME<^UXTHH%;E(Lzz(E~13*Fk99XY|EC)G464-_S z72$Mq0L?-GUm~Pd8USTOoRtxBQB2ERKvYpo_i_MK8zP4QdR;(CNjNm?f&rk^x&qAOLGlW7I@w0%SGGV3pB;HA)ApSq|$N4OquyP;|{eX=p$@r^tzz-raKm X_sHm<;lFx500000NkvXXu0mjf_TU|m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-3.png b/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-3.png new file mode 100644 index 0000000000000000000000000000000000000000..7098ec309a42368ab631fc9bca706b12cd0010e4 GIT binary patch literal 690 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 Hu0mjflUj{* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/shuttleinterior.rsi/state1.png b/Resources/Textures/Structures/Walls/shuttleinterior.rsi/state1.png new file mode 100644 index 0000000000000000000000000000000000000000..3041fa3daf8ab5adf7c2a638d55da8e43f6791bc GIT binary patch literal 651 zcmV;60(AX}P)< z7+_#(;rO2tC!9X9pOF&%6ltc!Vwm2rsAP%)VAZm@6#0Q7&D02hV`neJ13+3zoG2ro zK6?pQXJxEQksm11Oq6R0C@QaR1_yw)o*qfYUA=S(tiH3gmLfk;q?sfa<52wb=U0ld z06RN3MSh@2^JoB2Ap{;ie??IWke3vrC=w~sOa=cljQ9Y6Rf9hMe(>;w6>zu$7`ecV z3-_le5-HM5jT8W@20;$_56TQs7lHX83y{RH**D~?!4cmO8V!Jv-V`290i!8ki1!8u zItf!+6;s>}7!7~{&cmZAfWion#Aj60+1CYn`$O%kJJ2T|iiL8g>EU;+hM)-gR zDc#sD8#jU7LFuUOfCs=p4`_@A0EHnyaTXZpQC$lC4;z0W-=X7`}giKP&&Uq z8UPfA0L6tMt}+0W0`AEHm=*i zkd>2;kp)If3K$K5(G)P61xCw&(L!*v78t?R;Am4AOJ86_^#-w}fMFK^6!u0LKm#g@ zN=gi%-Xo~x*i=^pHuA;0uVDJ%q2uu0BR0Dzomio`J3JZy6ovqD3IJu9@Bo*QnF2sV zXQ1Sc9stv(%!Ci24eKm08UUjyU^EMimI0%M;Akx{S`Cgighp&j5H^)Iq5}Y1ZxA$v l2AgRf)=gnt-C003XIWHzz0$^8v|C;{p>61q+9azF^8gW1f0Fd&vYE?~4 zP3j(7w`>mm`|m$~`Oo(5*v`^{CA^*hK>4#5O6tqPg6i$-(^oXyw`%nK){Sc{9azHa z0l?1P2Ufj8L6t^Is`6~cSN`;wQ>trIhxHZh?Hw!~Si;uP#pqxHu((*&UmnU+vw`3Y z0Jq0)st5NUHYpziKb6mQvOXe9IL-iVeaHd`fU(hw>gVreo0$LHDFEKgy;DPjhqQ78 z0;~e9R{N$ruiL*rTs)%hPYe}VACV;-`!hv!G%X+u04R?rfrdzd_M-A!UsKNmYyeyu zxuTUvq-fQg2LLWG`)XD;03btT@7y{+{rmRlpNP_qj@?nkql2nEUe>caH=pN*Vm1%R00^-Fnz%r5 zO$(Twd8vAO3hr9~05CH<|umc5(-U}a@F z(gMuoEhvx7&M6*X1Ar16QXbsEDJp#V>UC`awhav0?7$U~0#V|_{Jg5yzq08#Cm&$H z{OzaDz6-?J&N@GQ&R^Ye0)VJwDC)~Vd9>7902VcqnBY>Q(bPQyAnkL2coz^q35pMc z;)#$A0OzT&_+%&v08XaE;ul1S2Z&t~3nN0br!QtvG?)*FUltd?F(Q6z3@(xF4olb` zPqG-&s&BAXICTXQ830TKg2mEei=;r9!YV~Yl*vT_Ai7X8E0z7bpD4OmT2#3_lofqo zLiCXtDwY;|XiDs{IXXEi_TXf8boSrranXmT&3x*AAD{mNS_f)wlOvt^00000NkvXX Hu0mjflUj{* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/shuttleinterior.rsi/state3.png b/Resources/Textures/Structures/Walls/shuttleinterior.rsi/state3.png new file mode 100644 index 0000000000000000000000000000000000000000..1263f7a1badc82ace2097096bfeef82eb9bfde68 GIT binary patch literal 628 zcmV-)0*n2LP)< z7+_#(;rO2tC!9X9pOF&%6ltc!Vwm2rsAP%)VAZm@6#0Q7&D02hV`neJ13+3zoG2ro zK6?pQXJxEQksm11Oq6R0C@QaR1_yw)o*qfYUA=S(tiH3gmLfk;q?sfa<52wb=U0ld z06RN3MSh@2^JoB2Ap{;ie??IWke3vrC=w~sOa=cljQ9Y6Rf9hMe(>;w6>zu$7`ecV z3-_le5-HM5jTC@f4U%KtkgoCN;w-ReH?>VAq-z(7xJ4R`>I_=eCxPj3&}6i`rHz%ZeA z0z-FiJJ^j9Lfl}wuBnf~KPUh!cmLi!21@7mM+1Pu5TLja#8n1>Qox-%_ZaN$EKyRx z$_;xMR8*8kMhd_c0H8oAEv_8?SzyEmz{YhO7_xHGF|xpjNdcn)Fq#5Jv%qK>Fj@$X z)&e8A8XRp3W9bWwsNNv96fo=pfWqD=186`+QAvpb)O!TA9GmKjz(&4!_Z3VZJaio1 zd&FiJr4uU@cZWvkWdY&|ovo!@4Pqt2<2V0002qQI%igt5B~1 O0000< z7+_#(;rL%sNr|DLxPW2fx(y6Xbwywoy?FN(OqUi{g5@UkPQdEYRmhO%{rZBGF;E3r94A}q(i%R~Fty>IB()M>fNC?g-297U^D=5qyX4d*RXF1f@X9;>H-iH}TThQ9cU--639P=ewU%NxkYq8MVu~&Q`SUA9WdJ)nH^puk4FC#4 zfa1`9`1}<`DL`IQjAA!X;C}{+Eg$g#uxRB*cnW|OY`9_sxuD##aT8eCu&M^hNs2?h z8pJg*LTq3R`4li3061obMpFQhAuyT+C|vDLWH{qgMsYh}#Fqh-#=t-aAjK(QGyo_J zfzcE&z}4tz7N9T%Q>=Z&X946fMRG!u($3VN$pSw9esKSj(yfjQ_ov7Y6lo?W#?bW) z^nl7}08k?qDKTT9N0kRW1&sIr80d+W0Z#z~J+(IA0WjhlLIXX$4geW*m0wPP08sz{ N002ovPDHLkV1len0ptJx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/shuttleinterior.rsi/state5.png b/Resources/Textures/Structures/Walls/shuttleinterior.rsi/state5.png new file mode 100644 index 0000000000000000000000000000000000000000..430bab8398bf04435db77a64a4786cfa6442d08f GIT binary patch literal 704 zcmV;x0zdtUP)Y5ZzQM(piXBCX!A}W2J@u0WqC|g^h(E7QrAQVv2}}NF;>_7B&`wb`k%87FyXv z?1Irsv9L>#D)J5|T*4)}bHFpRvrTee+`hLnZ|7!qBPQfFzqs5;B;sZ)l`_xevdQPx zogRIB)y&E9si{_9O(vT$#X`}ur&kwe5e@{_!<-k>vzyzy4g3et!@|CEdT1clBml%D zlcRD8IKM14Zc5i?Ha+KnpP8O);q~_JK{f%ffYr4X1EADE0?eOAALqroK)qgTz~9k8 z0)Z#r?*<;%`d$M-0Er%c-NM%kya)o`-aj1zegj?v0W=Gc4nXn!j69Ln_bz}qfM$T8 z;6+%#{o_;91%iycC<|zr_yZn@aDjlBTW(hZ`u$q~BB&O?U_f0UY!?XIgc-);Jj%`o zC;=ghm|6gn0d)Z;fkrhTpavkr>uysM<7_MB3?lpGK`em4S1K<~pOFmZ1~MG*e>x4i z!BgH39XQzAVGja_1oq4QSO9@XW;cKN?`Q3s^6L5IK-w>KRLl}om2}@3*aqx z58Va09SGZn*czY&Fd0w_2v}Tg=bJl=s0%PHnEkl*E})C0ZC@^L{e}tax6D|-Y0CO- mbJlO1)UC6&Z=Mc&`}{Y=WkFx@XB{N~0000< z7+_#(;rL%sNr|DLxPW2fx(y6Xbwywoy?FN(OqUf`g5~;qCt!8ys%3K-De(eDnklgu zrk9ui$Oi_%gpm*cckbL{2oG>UNdX5B9cNHcQ3M9S#NnL+x_jFhK%T`6fMX1*D$2t@ z3*ZX?6<`1i`z(Mf0H#iv$q*0}FmeN6+T@uG{=xnuw+xsDO##Ec8pM?arcIf_;2#t? zg0lcH1^5R7%YeRN-Vnl<0s??3V8mvD5nl_8m;eBEcyKp`m4<&Ih^sdU=?jeH05}K? z0M$Vp0AW$d|FLz`U`g8E&JrvwA;b-)>zew2^*W?!d;i`&hSMkZ4``R1V#`MZfW#EA za>E{Yo*woo05rsvm6MK=1wa7+$`+--p{~&Y817}jXbKq30;6TXXdyUS3ykDy5Y)Rv zZwim7cED%=;79?m?(MK|34(fjps~IY+Z!Aa0RWobrevCY*p3Gf8z_`6a3IzmTr(6nqAbOsh+@mjtDC_ApslAzk~^+mx&&6=*;-4n z8%VMkO)ow09dqg zBRmDb3N~CZf?QB;*|-U;Y*@i*I zL;66)>9c+mj>ixneJo|3Zs^S$>D02V0WoegvVu)rod05Kpe z&^rVVAwZUbPJw`F_Z?sk*gFFZLc8w(6ohsT!J4T1p907Nn~K79CyHoOQ&CMgYdjiW zPuJz?$LsO_=F1SHIB#LPktX-h_h}UXdDsrX6xRY!0T}=VEJ9ESf_r*@h_bYUWdK!B z2FL&zkiDzDx{vPj)WSlLDkubnpb!*-gd ze|nPcGY1%iOoBWLQxCRIl6V(T0H}Z+(0G^70