From cf96679d0bcfe65061d0d220af15575832423425 Mon Sep 17 00:00:00 2001 From: Ubaser <134914314+UbaserB@users.noreply.github.com> Date: Sat, 16 Nov 2024 06:18:44 +1100 Subject: [PATCH 01/41] New ruin variant (#33332) add --- Resources/Maps/Ruins/abandoned_outpost.yml | 2786 +++++++++++++++++ .../Prototypes/Entities/Stations/base.yml | 1 + 2 files changed, 2787 insertions(+) create mode 100644 Resources/Maps/Ruins/abandoned_outpost.yml diff --git a/Resources/Maps/Ruins/abandoned_outpost.yml b/Resources/Maps/Ruins/abandoned_outpost.yml new file mode 100644 index 0000000000..3c091f7dc6 --- /dev/null +++ b/Resources/Maps/Ruins/abandoned_outpost.yml @@ -0,0 +1,2786 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 18: FloorBlueCircuit + 32: FloorDark + 37: FloorDarkMono + 68: FloorMetalDiamond + 83: FloorReinforced + 97: FloorSteel + 1: FloorSteelBurnt + 4: FloorSteelDamaged + 108: FloorSteelMono + 116: FloorWhite + 121: FloorWhiteMono + 3: Lattice + 130: Plating + 5: PlatingBurnt + 2: PlatingDamaged +entities: +- proto: "" + entities: + - uid: 2 + components: + - type: MetaData + name: grid + - type: Transform + pos: 6.7773275,4.1394477 + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: YQAAAAADbAAAAAADAQAAAAABYQAAAAABYQAAAAACbAAAAAABggAAAAAAggAAAAAAYQAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAABQAAAAAAAwAAAAAAAwAAAAAAAQAAAAABBAAAAAABYQAAAAABYQAAAAAAeQAAAAACeQAAAAACggAAAAAAeQAAAAAAdAAAAAACeQAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAgAAAAABYQAAAAAAeQAAAAADdAAAAAAAdAAAAAACggAAAAAAeQAAAAABdAAAAAABeQAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABBQAAAAAAYQAAAAACggAAAAAAdAAAAAACdAAAAAADggAAAAAAdAAAAAABeQAAAAABggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAABQAAAAAAAQAAAAABggAAAAAAeQAAAAACdAAAAAAAdAAAAAACdAAAAAADdAAAAAABeQAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAggAAAAAABAAAAAAEggAAAAAAeQAAAAADdAAAAAADdAAAAAAAdAAAAAAAdAAAAAAAeQAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAwAAAAAAAgAAAAACggAAAAAAdAAAAAABdAAAAAADdAAAAAACdAAAAAACdAAAAAACdAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAwAAAAAABQAAAAAAggAAAAAAdAAAAAAAdAAAAAADdAAAAAABdAAAAAACdAAAAAADdAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAwAAAAAAAwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAABQAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAABQAAAAAAAgAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACBAAAAAAEAQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAgAAAAAAYQAAAAAAggAAAAAAYQAAAAADYQAAAAADYQAAAAABYQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAYQAAAAADBAAAAAAAYQAAAAACggAAAAAAYQAAAAADYQAAAAACYQAAAAABYQAAAAAAggAAAAAAYQAAAAABggAAAAAAYQAAAAADYQAAAAADYQAAAAAAggAAAAAAAAAAAAAAYQAAAAAAYQAAAAADAQAAAAABggAAAAAAYQAAAAACYQAAAAABYQAAAAAAYQAAAAABggAAAAAAYQAAAAACggAAAAAAYQAAAAADJQAAAAAAYQAAAAADggAAAAAAAAAAAAAAYQAAAAADYQAAAAABYQAAAAACggAAAAAAYQAAAAADYQAAAAABYQAAAAABYQAAAAADYQAAAAACYQAAAAACggAAAAAAYQAAAAACYQAAAAADYQAAAAACggAAAAAAAAAAAAAAYQAAAAAAYQAAAAADYQAAAAACYQAAAAADYQAAAAABYQAAAAADYQAAAAACYQAAAAACYQAAAAACYQAAAAABYQAAAAACYQAAAAAAYQAAAAAAYQAAAAAAggAAAAAAAAAAAAAAYQAAAAAAbAAAAAADYQAAAAADYQAAAAADYQAAAAACYQAAAAAAYQAAAAADYQAAAAAAYQAAAAACYQAAAAACggAAAAAAYQAAAAADYQAAAAABYQAAAAABggAAAAAAAAAAAAAAYQAAAAADbAAAAAACYQAAAAABYQAAAAABYQAAAAACbAAAAAACggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAYQAAAAABbAAAAAAAYQAAAAAAYQAAAAABYQAAAAADYQAAAAABYQAAAAAAYQAAAAADAQAAAAABAgAAAAACggAAAAAAAwAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAbAAAAAAAbAAAAAACbAAAAAADbAAAAAACYQAAAAACYQAAAAAAAQAAAAAAYQAAAAAABAAAAAABAgAAAAABggAAAAAAggAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAYQAAAAAAbAAAAAABYQAAAAADYQAAAAADYQAAAAADYQAAAAADAQAAAAAAYQAAAAAABAAAAAACAwAAAAAABQAAAAAABQAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAYQAAAAACYQAAAAADYQAAAAAAYQAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAgAAAAACBAAAAAABAQAAAAAAggAAAAAAYQAAAAADggAAAAAAYQAAAAADYQAAAAADYQAAAAAAYQAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAQAAAAAABQAAAAAAYQAAAAABggAAAAAAYQAAAAACggAAAAAAYQAAAAABYQAAAAADYQAAAAAAYQAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYQAAAAABYQAAAAABBAAAAAAEggAAAAAAYQAAAAADYQAAAAACYQAAAAABYQAAAAABYQAAAAACYQAAAAADggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYQAAAAABYQAAAAADYQAAAAACYQAAAAACYQAAAAADYQAAAAAAYQAAAAAAYQAAAAACYQAAAAACYQAAAAADYQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAYQAAAAADYQAAAAACYQAAAAABggAAAAAAYQAAAAABYQAAAAAAYQAAAAADYQAAAAABYQAAAAAAYQAAAAAAYQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAbAAAAAAAYQAAAAACYQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAwAAAAAAAwAAAAAABQAAAAAAAgAAAAABAQAAAAABYQAAAAABYQAAAAADYQAAAAABYQAAAAACYQAAAAADYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAggAAAAAABQAAAAAAAgAAAAAABAAAAAADAQAAAAABAQAAAAAAYQAAAAACAQAAAAAAYQAAAAAAbAAAAAABbAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAwAAAAAABQAAAAAAAwAAAAAAAgAAAAAAYQAAAAACBAAAAAAAYQAAAAACYQAAAAACYQAAAAACYQAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAJQAAAAADIAAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAJQAAAAAAJQAAAAABJQAAAAADggAAAAAAJQAAAAADJQAAAAADIAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAJQAAAAADJQAAAAAAJQAAAAAAggAAAAAAIAAAAAADIAAAAAACJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAJQAAAAAAggAAAAAAggAAAAAAIAAAAAAAIAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAJQAAAAACIAAAAAABJQAAAAADJQAAAAAAIAAAAAABJQAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAIAAAAAABIAAAAAABIAAAAAABIAAAAAACIAAAAAACIAAAAAABggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAUwAAAAAAUwAAAAAAIAAAAAADIAAAAAABIAAAAAABEgAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAUwAAAAAAUwAAAAAAIAAAAAACIAAAAAABIAAAAAABEgAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,0: + ind: 1,0 + tiles: AwAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,-1: + ind: 1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: SpreaderGrid + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 29: -5,7 + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 14: -5,4 + 15: -4,4 + 16: -2,4 + 17: -7,4 + 145: 12,-8 + - node: + angle: 3.141592653589793 rad + color: '#52B4E996' + id: BotGreyscale + decals: + 130: 4,4 + 131: 4,5 + 132: 9,7 + 133: 9,6 + - node: + angle: 3.141592653589793 rad + color: '#EFB34196' + id: BotGreyscale + decals: + 136: 7,2 + 137: 7,1 + - node: + color: '#D381C996' + id: BrickTileWhiteCornerNw + decals: + 7: -5,7 + 8: -7,5 + - node: + color: '#D381C996' + id: BrickTileWhiteInnerNw + decals: + 2: -5,5 + - node: + color: '#EFB34196' + id: BrickTileWhiteInnerSe + decals: + 97: 6,4 + - node: + color: '#52B4E996' + id: BrickTileWhiteInnerSw + decals: + 109: 6,4 + - node: + color: '#D381C996' + id: BrickTileWhiteLineE + decals: + 13: -2,5 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineN + decals: + 110: 4,6 + 111: 5,6 + 112: 6,6 + 113: 7,6 + - node: + color: '#D381C915' + id: BrickTileWhiteLineN + decals: + 64: -5,2 + 65: -6,2 + 66: -6,2 + 67: -5,2 + - node: + color: '#D381C996' + id: BrickTileWhiteLineN + decals: + 3: -6,5 + 11: -3,7 + 12: -4,7 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineS + decals: + 107: 4,4 + 108: 5,4 + - node: + color: '#D381C996' + id: BrickTileWhiteLineS + decals: + 9: -6,4 + 10: -3,4 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineS + decals: + 94: 7,4 + 95: 8,4 + 96: 9,4 + - node: + color: '#D381C996' + id: BrickTileWhiteLineW + decals: + 5: -5,6 + - node: + color: '#52B4E996' + id: CheckerNESW + decals: + 103: 4,2 + 104: 5,2 + 105: 5,3 + 106: 4,3 + 114: 4,7 + 115: 5,7 + 116: 6,7 + 117: 7,7 + 124: 8,6 + 125: 8,7 + 126: 9,7 + 127: 9,6 + - node: + color: '#D381C915' + id: CheckerNESW + decals: + 60: -2,2 + 61: -2,3 + 62: -3,3 + 63: -3,2 + - node: + color: '#EFB34196' + id: CheckerNESW + decals: + 89: 8,2 + 90: 8,1 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 26: -7,1 + 27: -7,2 + 98: -3,0 + 99: -3,-4 + 100: 5,-4 + 101: 5,0 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Delivery + decals: + 73: 2,3 + 75: 6,-1 + 76: 6,-2 + 77: 6,-3 + 78: -4,-1 + 79: -4,-2 + 80: -4,-3 + 81: 0,-7 + 82: 1,-7 + 83: 2,-7 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavy + decals: + 154: -7,-5 + 155: -6,-7 + 156: -3,-6 + 157: -3,-8 + 158: -4,-8 + 159: -3,-9 + 160: -7,-9 + 161: -9,-8 + 162: -11,-7 + 163: -9,-5 + 164: -9,-9 + 165: -11,-8 + 166: -7,-2 + 167: -5,-2 + 168: -5,-3 + 169: -1,-1 + 170: -1,-3 + 173: 2,-1 + 175: 5,-3 + 176: 7,-1 + 177: 7,-3 + 178: 9,-2 + 179: 2,-5 + 180: 0,-6 + 181: 2,-10 + 182: 2,-11 + 183: 0,-9 + 184: -1,-6 + 185: -1,-4 + 186: 3,-5 + 187: 3,-4 + 188: 5,2 + 189: 5,3 + 190: 5,5 + 191: 4,7 + 192: 7,5 + 193: 8,7 + 194: 8,4 + 195: 8,1 + 196: 8,2 + 197: -2,2 + 198: -3,3 + 199: -3,5 + 200: -4,6 + 201: -4,5 + 202: -6,5 + 203: -6,5 + 241: 8,-7 + 242: 6,-6 + 243: 4,-4 + 244: 5,-9 + 245: 4,-9 + 317: 11,-8 + 318: 11,-9 + 319: 12,-9 + 320: 12,-7 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtHeavyMonotile + decals: + 204: -6,-1 + 205: -4,-3 + 206: -3,-2 + 207: 0,-2 + 208: 3,-2 + 209: 4,-2 + 210: 0,-1 + 211: 2,1 + 212: 2,3 + 213: 2,4 + 214: 8,-2 + 215: 6,-3 + 216: 6,-1 + 217: 2,-3 + 218: 0,-4 + 219: 2,-6 + 220: 1,-6 + 221: 0,-8 + 222: 2,-9 + 223: 2,-11 + 224: 4,-10 + 225: 6,-10 + 226: 6,-9 + 227: 5,-9 + 228: 5,-7 + 229: 5,-6 + 230: 7,-5 + 231: 7,-7 + 232: 9,-6 + 233: 9,-8 + 234: 9,-9 + 237: 12,-8 + 239: 13,-5 + 248: -6,-6 + 249: -10,-7 + 250: -9,-6 + 251: -6,-1 + 252: -5,1 + 253: -6,2 + 254: -6,1 + 255: -6,1 + 256: -5,2 + 257: -4,5 + 258: -4,7 + 259: -3,6 + 260: -3,5 + 261: -8,7 + 262: -8,7 + 263: -3,1 + 264: -2,1 + 265: 5,1 + 266: 4,1 + 267: 2,-2 + 268: 2,0 + 269: 0,-3 + 270: 2,4 + 271: 0,3 + 272: 1,4 + 273: 2,6 + 274: 2,7 + 275: 7,5 + 276: 8,5 + 277: 8,2 + 278: 9,1 + 279: 9,2 + 280: 12,-2 + 281: 11,-2 + 282: 9,-7 + 283: 9,-9 + 284: 4,-10 + 312: 12,-8 + 313: 12,-8 + 314: 11,-7 + 315: 13,-7 + 316: 13,-9 + 338: 1,-5 + 339: 1,-3 + 340: 1,-1 + 341: 1,0 + 342: 1,0 + 343: 6,4 + 344: 5,4 + 345: 4,5 + 346: 4,4 + 347: 4,4 + 348: 9,2 + 349: 9,2 + 350: 9,5 + 351: 8,7 + 352: 9,7 + - node: + cleanable: True + color: '#FFFFFFFF' + id: DirtMedium + decals: + 285: 2,-4 + 286: 4,-3 + 287: 4,-1 + 288: -2,-1 + 289: -2,-3 + 290: -6,-5 + 291: -3,-7 + 292: -3,-9 + 293: -3,-10 + 294: -3,-10 + 295: -9,-8 + 296: -9,-5 + 297: -6,4 + 298: -3,6 + 299: 5,2 + 300: 5,6 + 301: 5,6 + 302: 8,5 + 303: 8,1 + 304: 9,-5 + 305: 5,-6 + 306: 5,-5 + 307: 5,-9 + 308: 4,-10 + 309: 11,-6 + 310: 11,-5 + 311: 11,-6 + 321: 11,-9 + 322: 13,-8 + - node: + color: '#52B4E996' + id: FullTileOverlayGreyscale + decals: + 118: 5,5 + 119: 6,5 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 28: -5,6 + - node: + color: '#FFFFFFFF' + id: LoadingArea + decals: + 102: -3,1 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 68: -2,3 + - node: + color: '#52B4E996' + id: LoadingAreaGreyscale + decals: + 128: 5,1 + - node: + angle: 3.141592653589793 rad + color: '#52B4E996' + id: LoadingAreaGreyscale + decals: + 129: 4,3 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale + decals: + 122: 6,4 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale180 + decals: + 121: 5,6 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale270 + decals: + 120: 6,6 + - node: + color: '#52B4E996' + id: QuarterTileOverlayGreyscale90 + decals: + 123: 5,4 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign1 + decals: + 331: -2,-2 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign2 + decals: + 332: -1,-2 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign3 + decals: + 333: 0,-2 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign4 + decals: + 334: 1,-2 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign5 + decals: + 335: 2,-2 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign6 + decals: + 336: 3,-2 + - node: + color: '#FFFFFFFF' + id: SpaceStationSign7 + decals: + 337: 4,-2 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNE + decals: + 21: -3,5 + 329: 11,-9 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNW + decals: + 330: 13,-9 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSE + decals: + 328: 11,-7 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSW + decals: + 327: 13,-7 + - node: + color: '#FFFFFFFF' + id: WarnLineE + decals: + 19: -3,6 + 20: -3,7 + 324: 11,-8 + - node: + color: '#FFFFFFFF' + id: WarnLineN + decals: + 0: -7,-9 + 1: 9,-9 + 325: 12,-7 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 24: -7,6 + 25: -7,7 + 323: 13,-8 + - node: + color: '#FFFFFFFF' + id: WarnLineW + decals: + 18: -2,5 + 326: 12,-9 + - type: GridAtmosphere + version: 2 + data: + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: AirlockAssemblyCargo + entities: + - uid: 331 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 2 +- proto: AirlockAssemblyEngineering + entities: + - uid: 1 + components: + - type: Transform + pos: 9.5,-7.5 + parent: 2 + - uid: 6 + components: + - type: Transform + pos: 10.5,-5.5 + parent: 2 +- proto: AirlockAssemblyMedical + entities: + - uid: 25 + components: + - type: Transform + pos: 3.5,2.5 + parent: 2 +- proto: AirlockAssemblyScienceGlass + entities: + - uid: 31 + components: + - type: Transform + pos: -5.5,3.5 + parent: 2 +- proto: AirlockAssemblyShuttle + entities: + - uid: 10 + components: + - type: Transform + pos: -11.5,-7.5 + parent: 2 +- proto: AirlockCargoLocked + entities: + - uid: 175 + components: + - type: Transform + pos: -7.5,-5.5 + parent: 2 + - uid: 201 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 2 +- proto: AirlockChemistryGlassLocked + entities: + - uid: 219 + components: + - type: Transform + pos: 8.5,3.5 + parent: 2 +- proto: AirlockEngineeringLocked + entities: + - uid: 38 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 2 +- proto: AirlockExternalShuttleLocked + entities: + - uid: 192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-5.5 + parent: 2 +- proto: AirlockScienceLocked + entities: + - uid: 36 + components: + - type: Transform + pos: -0.5,2.5 + parent: 2 +- proto: Bed + entities: + - uid: 131 + components: + - type: Transform + pos: 4.5,7.5 + parent: 2 + - uid: 190 + components: + - type: Transform + pos: 8.5,7.5 + parent: 2 +- proto: BlastDoorOpen + entities: + - uid: 41 + components: + - type: Transform + pos: -7.5,7.5 + parent: 2 +- proto: BluespaceBeaker + entities: + - uid: 112 + components: + - type: Transform + parent: 111 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BrokenBottle + entities: + - uid: 42 + components: + - type: Transform + pos: -3.2567945,-8.612661 + parent: 2 +- proto: CablecuffsBroken + entities: + - uid: 107 + components: + - type: Transform + pos: 6.54331,-5.628286 + parent: 2 +- proto: CargoPallet + entities: + - uid: 302 + components: + - type: Transform + pos: -6.5,-9.5 + parent: 2 + - uid: 316 + components: + - type: Transform + pos: 9.5,-9.5 + parent: 2 +- proto: Chair + entities: + - uid: 280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,6.5 + parent: 2 +- proto: ChairOfficeDark + entities: + - uid: 262 + components: + - type: Transform + pos: -1.5,1.5 + parent: 2 + - uid: 263 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 2 + - uid: 264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-4.5 + parent: 2 + - uid: 265 + components: + - type: Transform + pos: 4.5,1.5 + parent: 2 + - uid: 309 + components: + - type: Transform + pos: 8.5,1.5 + parent: 2 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 357 + components: + - type: Transform + pos: 8.5,8.5 + parent: 2 + - uid: 358 + components: + - type: Transform + pos: -5.5,8.5 + parent: 2 +- proto: ClosetWallFireFilledRandom + entities: + - uid: 359 + components: + - type: Transform + pos: -6.5,8.5 + parent: 2 + - uid: 360 + components: + - type: Transform + pos: 9.5,8.5 + parent: 2 +- proto: ComputerBroken + entities: + - uid: 49 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,6.5 + parent: 2 + - uid: 54 + components: + - type: Transform + pos: 4.5,3.5 + parent: 2 + - uid: 103 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 2 + - uid: 106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-7.5 + parent: 2 + - uid: 373 + components: + - type: Transform + pos: -9.5,-4.5 + parent: 2 +- proto: ComputerFrame + entities: + - uid: 55 + components: + - type: Transform + pos: -1.5,3.5 + parent: 2 + - uid: 370 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-6.5 + parent: 2 +- proto: ComputerTechnologyDiskTerminal + entities: + - uid: 288 + components: + - type: Transform + pos: -1.5,6.5 + parent: 2 +- proto: CrateArtifactContainer + entities: + - uid: 281 + components: + - type: Transform + pos: -6.5,4.5 + parent: 2 +- proto: CrateFilledSpawner + entities: + - uid: 57 + components: + - type: Transform + pos: -9.5,-5.5 + parent: 2 +- proto: DefibrillatorCabinetFilled + entities: + - uid: 346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,4.5 + parent: 2 +- proto: DisposalMachineFrame + entities: + - uid: 371 + components: + - type: Transform + pos: 6.5,-4.5 + parent: 2 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 356 + components: + - type: Transform + pos: -6.5,3.5 + parent: 2 +- proto: FirelockFrame + entities: + - uid: 171 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 2 + - uid: 172 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 2 +- proto: FirelockGlass + entities: + - uid: 39 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 2 + - uid: 46 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 2 + - uid: 47 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 2 + - uid: 48 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 2 + - uid: 50 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 2 + - uid: 51 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - uid: 52 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 53 + components: + - type: Transform + pos: -0.5,1.5 + parent: 2 + - uid: 235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,0.5 + parent: 2 +- proto: FloodlightBroken + entities: + - uid: 124 + components: + - type: Transform + pos: 1.7209082,4.5385127 + parent: 2 +- proto: FloorDrain + entities: + - uid: 336 + components: + - type: Transform + pos: 8.5,2.5 + parent: 2 + - type: Fixtures + fixtures: {} +- proto: FoodBowlBigTrash + entities: + - uid: 194 + components: + - type: Transform + pos: 4.691658,6.395677 + parent: 2 +- proto: FoodPlateSmallTrash + entities: + - uid: 317 + components: + - type: Transform + pos: -4.4774685,2.551927 + parent: 2 +- proto: GasCanisterBrokenBase + entities: + - uid: 191 + components: + - type: Transform + pos: -2.5,7.5 + parent: 2 +- proto: GasOutletInjector + entities: + - uid: 290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,7.5 + parent: 2 +- proto: GasPipeStraight + entities: + - uid: 291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,7.5 + parent: 2 +- proto: GasPort + entities: + - uid: 304 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,7.5 + parent: 2 +- proto: GasVolumePump + entities: + - uid: 289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,7.5 + parent: 2 +- proto: Girder + entities: + - uid: 246 + components: + - type: Transform + pos: 8.5,-3.5 + parent: 2 + - uid: 286 + components: + - type: Transform + pos: -11.5,-3.5 + parent: 2 + - uid: 305 + components: + - type: Transform + pos: -9.5,-9.5 + parent: 2 + - uid: 314 + components: + - type: Transform + pos: 11.5,-3.5 + parent: 2 + - uid: 315 + components: + - type: Transform + pos: 12.5,-3.5 + parent: 2 +- proto: Grille + entities: + - uid: 8 + components: + - type: Transform + pos: 3.5,-9.5 + parent: 2 + - uid: 33 + components: + - type: Transform + pos: -0.5,-9.5 + parent: 2 + - uid: 60 + components: + - type: Transform + pos: 11.5,0.5 + parent: 2 + - uid: 97 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 2 + - uid: 99 + components: + - type: Transform + pos: 3.5,-8.5 + parent: 2 + - uid: 104 + components: + - type: Transform + pos: 3.5,6.5 + parent: 2 + - uid: 105 + components: + - type: Transform + pos: -0.5,5.5 + parent: 2 + - uid: 127 + components: + - type: Transform + pos: 6.5,2.5 + parent: 2 + - uid: 130 + components: + - type: Transform + pos: -3.5,2.5 + parent: 2 + - uid: 237 + components: + - type: Transform + pos: -6.5,0.5 + parent: 2 + - uid: 238 + components: + - type: Transform + pos: -5.5,0.5 + parent: 2 + - uid: 240 + components: + - type: Transform + pos: 7.5,0.5 + parent: 2 + - uid: 241 + components: + - type: Transform + pos: 9.5,0.5 + parent: 2 + - uid: 278 + components: + - type: Transform + pos: -7.5,6.5 + parent: 2 + - uid: 294 + components: + - type: Transform + pos: -4.5,3.5 + parent: 2 +- proto: GrilleBroken + entities: + - uid: 59 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 2 + - uid: 67 + components: + - type: Transform + pos: -0.5,10.5 + parent: 2 + - uid: 334 + components: + - type: Transform + pos: -11.5,-2.5 + parent: 2 + - uid: 369 + components: + - type: Transform + pos: 13.5,0.5 + parent: 2 +- proto: GrilleSpawner + entities: + - uid: 70 + components: + - type: Transform + pos: 12.5,0.5 + parent: 2 +- proto: KitchenReagentGrinder + entities: + - uid: 332 + components: + - type: Transform + pos: 9.5,5.5 + parent: 2 +- proto: LockerChemistry + entities: + - uid: 111 + components: + - type: Transform + pos: 4.5,5.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 112 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerMedical + entities: + - uid: 114 + components: + - type: Transform + pos: 4.5,4.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 116 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerScientist + entities: + - uid: 120 + components: + - type: Transform + pos: -4.5,1.5 + parent: 2 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 225 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: LockerWallMedicalFilled + entities: + - uid: 355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,4.5 + parent: 2 +- proto: LootSpawnerRandomCrateEngineering + entities: + - uid: 58 + components: + - type: Transform + pos: 7.5,-7.5 + parent: 2 +- proto: MachineAnomalyVessel + entities: + - uid: 223 + components: + - type: Transform + pos: -6.5,2.5 + parent: 2 +- proto: MachineFrame + entities: + - uid: 37 + components: + - type: Transform + pos: -3.5,4.5 + parent: 2 + - uid: 40 + components: + - type: Transform + pos: -6.5,1.5 + parent: 2 + - uid: 44 + components: + - type: Transform + pos: 7.5,2.5 + parent: 2 + - uid: 372 + components: + - type: Transform + pos: -10.5,-4.5 + parent: 2 +- proto: MachineFrameDestroyed + entities: + - uid: 43 + components: + - type: Transform + pos: 7.5,1.5 + parent: 2 + - uid: 45 + components: + - type: Transform + pos: -1.5,4.5 + parent: 2 + - uid: 136 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 173 + components: + - type: Transform + pos: -1.5,7.5 + parent: 2 +- proto: MedicalBed + entities: + - uid: 321 + components: + - type: Transform + pos: 6.5,7.5 + parent: 2 +- proto: MedkitFilled + entities: + - uid: 138 + components: + - type: Transform + pos: 9.52752,4.7223573 + parent: 2 +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 165 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,5.5 + parent: 2 + - uid: 274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,5.5 + parent: 2 + - uid: 275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,6.5 + parent: 2 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 23 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-3.5 + parent: 2 + - uid: 26 + components: + - type: Transform + pos: 5.5,0.5 + parent: 2 + - uid: 27 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 2 + - uid: 29 + components: + - type: Transform + pos: -2.5,0.5 + parent: 2 +- proto: PlushieLizardMirrored + entities: + - uid: 125 + components: + - type: MetaData + desc: Something about this lizard plushie feels off... + - type: Transform + pos: 12.5,-7.5 + parent: 2 +- proto: PosterBroken + entities: + - uid: 167 + components: + - type: Transform + pos: -2.5,8.5 + parent: 2 + - uid: 169 + components: + - type: Transform + pos: -3.5,8.5 + parent: 2 + - uid: 176 + components: + - type: Transform + pos: 6.5,3.5 + parent: 2 + - uid: 182 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 2 + - uid: 185 + components: + - type: Transform + pos: -0.5,3.5 + parent: 2 + - uid: 189 + components: + - type: Transform + pos: 3.5,3.5 + parent: 2 +- proto: PosterContrabandWehWatches + entities: + - uid: 347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 2 +- proto: PosterLegitScience + entities: + - uid: 178 + components: + - type: Transform + pos: -3.5,3.5 + parent: 2 +- proto: PottedPlantRandom + entities: + - uid: 319 + components: + - type: Transform + pos: 7.5,6.5 + parent: 2 +- proto: Poweredlight + entities: + - uid: 242 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-2.5 + parent: 2 + - uid: 247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,4.5 + parent: 2 + - uid: 249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 2 + - uid: 250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 2 + - uid: 251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,4.5 + parent: 2 + - uid: 253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-6.5 + parent: 2 + - uid: 254 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-7.5 + parent: 2 + - uid: 255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,5.5 + parent: 2 + - uid: 257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,5.5 + parent: 2 +- proto: PoweredlightEmpty + entities: + - uid: 144 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 2 + - uid: 147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-2.5 + parent: 2 + - uid: 150 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 2 + - uid: 152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,4.5 + parent: 2 + - uid: 156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-7.5 + parent: 2 + - uid: 158 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-6.5 + parent: 2 + - uid: 159 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,4.5 + parent: 2 +- proto: PoweredSmallLight + entities: + - uid: 258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,2.5 + parent: 2 + - uid: 259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,2.5 + parent: 2 + - uid: 261 + components: + - type: Transform + pos: 12.5,-4.5 + parent: 2 +- proto: PoweredSmallLightEmpty + entities: + - uid: 160 + components: + - type: Transform + pos: -9.5,-4.5 + parent: 2 +- proto: Rack + entities: + - uid: 224 + components: + - type: Transform + pos: -4.5,2.5 + parent: 2 +- proto: RandomArtifactSpawner20 + entities: + - uid: 166 + components: + - type: Transform + pos: -5.5,6.5 + parent: 2 +- proto: RandomEngineerCorpseSpawner + entities: + - uid: 93 + components: + - type: Transform + pos: 7.5,-6.5 + parent: 2 +- proto: RandomPosterLegit + entities: + - uid: 337 + components: + - type: Transform + pos: 5.5,8.5 + parent: 2 + - uid: 338 + components: + - type: Transform + pos: 6.5,8.5 + parent: 2 +- proto: RandomScienceCorpseSpawner + entities: + - uid: 354 + components: + - type: Transform + pos: -2.5,2.5 + parent: 2 +- proto: ReinforcedGirder + entities: + - uid: 62 + components: + - type: Transform + pos: 3.5,9.5 + parent: 2 + - uid: 206 + components: + - type: Transform + pos: -0.5,8.5 + parent: 2 + - uid: 215 + components: + - type: Transform + pos: -7.5,0.5 + parent: 2 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 277 + components: + - type: Transform + pos: -7.5,6.5 + parent: 2 +- proto: ReinforcedWindow + entities: + - uid: 9 + components: + - type: Transform + pos: -4.5,3.5 + parent: 2 + - uid: 96 + components: + - type: Transform + pos: -5.5,0.5 + parent: 2 + - uid: 110 + components: + - type: Transform + pos: -4.5,0.5 + parent: 2 + - uid: 113 + components: + - type: Transform + pos: 9.5,0.5 + parent: 2 + - uid: 115 + components: + - type: Transform + pos: -0.5,6.5 + parent: 2 + - uid: 117 + components: + - type: Transform + pos: 3.5,6.5 + parent: 2 + - uid: 118 + components: + - type: Transform + pos: 3.5,5.5 + parent: 2 + - uid: 123 + components: + - type: Transform + pos: 3.5,-8.5 + parent: 2 + - uid: 126 + components: + - type: Transform + pos: -0.5,-9.5 + parent: 2 + - uid: 221 + components: + - type: Transform + pos: -3.5,2.5 + parent: 2 + - uid: 222 + components: + - type: Transform + pos: 6.5,2.5 + parent: 2 +- proto: SalvageCanisterSpawner + entities: + - uid: 350 + components: + - type: Transform + pos: -4.5,-7.5 + parent: 2 + - uid: 352 + components: + - type: Transform + pos: -4.5,-8.5 + parent: 2 + - uid: 353 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 2 +- proto: SalvageLootSpawner + entities: + - uid: 71 + components: + - type: Transform + pos: -4.5,5.5 + parent: 2 +- proto: SalvageMaterialCrateSpawner + entities: + - uid: 32 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 2 + - uid: 91 + components: + - type: Transform + pos: -5.5,1.5 + parent: 2 + - uid: 322 + components: + - type: Transform + pos: 8.5,6.5 + parent: 2 + - uid: 339 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 2 +- proto: SalvageMobSpawner + entities: + - uid: 349 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 2 +- proto: SalvageMobSpawner75 + entities: + - uid: 348 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 2 +- proto: SalvageSpawnerMobMagnet + entities: + - uid: 361 + components: + - type: Transform + pos: 8.5,-5.5 + parent: 2 + - uid: 362 + components: + - type: Transform + pos: 6.5,-7.5 + parent: 2 +- proto: SalvageSpawnerScrapCommon + entities: + - uid: 344 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 2 +- proto: SalvageSpawnerScrapCommon75 + entities: + - uid: 56 + components: + - type: Transform + pos: 9.5,7.5 + parent: 2 + - uid: 79 + components: + - type: Transform + pos: 6.5,6.5 + parent: 2 + - uid: 83 + components: + - type: Transform + pos: 7.5,-5.5 + parent: 2 + - uid: 87 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 2 + - uid: 90 + components: + - type: Transform + pos: 7.5,-9.5 + parent: 2 +- proto: SalvageSpawnerScrapValuable + entities: + - uid: 121 + components: + - type: Transform + pos: 6.5,-6.5 + parent: 2 +- proto: SalvageSpawnerScrapValuable75 + entities: + - uid: 163 + components: + - type: Transform + pos: -4.5,4.5 + parent: 2 + - uid: 340 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 2 +- proto: SalvageSpawnerTreasure + entities: + - uid: 74 + components: + - type: Transform + pos: -6.5,-8.5 + parent: 2 + - uid: 75 + components: + - type: Transform + pos: 8.5,2.5 + parent: 2 + - uid: 78 + components: + - type: Transform + pos: -6.5,5.5 + parent: 2 +- proto: SalvageSpawnerTreasureValuable + entities: + - uid: 72 + components: + - type: Transform + pos: 9.5,-8.5 + parent: 2 +- proto: ShardGlass + entities: + - uid: 328 + components: + - type: Transform + pos: -1.0626283,1.741735 + parent: 2 + - uid: 333 + components: + - type: Transform + pos: 3.4061213,0.19485998 + parent: 2 +- proto: ShardGlassReinforced + entities: + - uid: 141 + components: + - type: Transform + pos: 3.7342463,-0.008265018 + parent: 2 + - uid: 330 + components: + - type: Transform + pos: 0.2028017,1.4173388 + parent: 2 +- proto: SheetGlass + entities: + - uid: 298 + components: + - type: Transform + pos: -1.4880872,5.502641 + parent: 2 +- proto: SheetPlastic + entities: + - uid: 299 + components: + - type: Transform + pos: -1.5037122,5.346391 + parent: 2 +- proto: SheetSteel + entities: + - uid: 297 + components: + - type: Transform + pos: -1.4724622,5.643266 + parent: 2 +- proto: SignCargo + entities: + - uid: 73 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-6.5 + parent: 2 +- proto: SignDirectionalMed + entities: + - uid: 351 + components: + - type: Transform + pos: 3.5,7.5 + parent: 2 +- proto: SignDirectionalSci + entities: + - uid: 295 + components: + - type: Transform + pos: -0.5,7.5 + parent: 2 +- proto: SinkWide + entities: + - uid: 335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,2.5 + parent: 2 +- proto: SmartFridge + entities: + - uid: 218 + components: + - type: Transform + pos: 7.5,3.5 + parent: 2 +- proto: SpawnMobBearSalvage + entities: + - uid: 368 + components: + - type: Transform + pos: -3.5,7.5 + parent: 2 +- proto: SpawnMobCobraSalvage + entities: + - uid: 364 + components: + - type: Transform + pos: 7.5,4.5 + parent: 2 + - uid: 367 + components: + - type: Transform + pos: -3.5,5.5 + parent: 2 +- proto: SpawnMobSpiderSalvage + entities: + - uid: 345 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 2 + - uid: 363 + components: + - type: Transform + pos: 6.5,5.5 + parent: 2 +- proto: StationMapBroken + entities: + - uid: 95 + components: + - type: Transform + pos: -3.5,0.5 + parent: 2 + - uid: 101 + components: + - type: Transform + pos: 6.5,0.5 + parent: 2 +- proto: SubstationBasic + entities: + - uid: 228 + components: + - type: Transform + pos: -6.5,-9.5 + parent: 2 + - uid: 229 + components: + - type: Transform + pos: 9.5,-9.5 + parent: 2 +- proto: SyringeBluespace + entities: + - uid: 116 + components: + - type: Transform + parent: 114 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: TableFrame + entities: + - uid: 193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,7.5 + parent: 2 +- proto: TableGlass + entities: + - uid: 320 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,7.5 + parent: 2 +- proto: TableReinforced + entities: + - uid: 3 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 2 + - uid: 4 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 2 + - uid: 13 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 2 + - uid: 14 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 2 + - uid: 15 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 16 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 2 + - uid: 17 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 2 + - uid: 18 + components: + - type: Transform + pos: 4.5,0.5 + parent: 2 + - uid: 19 + components: + - type: Transform + pos: 3.5,1.5 + parent: 2 + - uid: 20 + components: + - type: Transform + pos: 3.5,0.5 + parent: 2 + - uid: 21 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - uid: 22 + components: + - type: Transform + pos: -0.5,1.5 + parent: 2 + - uid: 122 + components: + - type: Transform + pos: 8.5,0.5 + parent: 2 + - uid: 296 + components: + - type: Transform + pos: -1.5,5.5 + parent: 2 + - uid: 310 + components: + - type: Transform + pos: 9.5,1.5 + parent: 2 + - uid: 311 + components: + - type: Transform + pos: 9.5,2.5 + parent: 2 + - uid: 323 + components: + - type: Transform + pos: 9.5,4.5 + parent: 2 + - uid: 324 + components: + - type: Transform + pos: 9.5,5.5 + parent: 2 +- proto: WallReinforced + entities: + - uid: 7 + components: + - type: Transform + pos: -7.5,3.5 + parent: 2 + - uid: 11 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,0.5 + parent: 2 + - uid: 24 + components: + - type: Transform + pos: -7.5,5.5 + parent: 2 + - uid: 28 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,4.5 + parent: 2 + - uid: 145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,3.5 + parent: 2 + - uid: 146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,7.5 + parent: 2 + - uid: 148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,8.5 + parent: 2 + - uid: 149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,8.5 + parent: 2 + - uid: 151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,8.5 + parent: 2 + - uid: 153 + components: + - type: Transform + pos: -3.5,8.5 + parent: 2 + - uid: 154 + components: + - type: Transform + pos: -0.5,7.5 + parent: 2 + - uid: 155 + components: + - type: Transform + pos: -1.5,8.5 + parent: 2 + - uid: 157 + components: + - type: Transform + pos: -3.5,0.5 + parent: 2 + - uid: 161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,2.5 + parent: 2 + - uid: 162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,3.5 + parent: 2 + - uid: 164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,4.5 + parent: 2 + - uid: 168 + components: + - type: Transform + pos: -4.5,8.5 + parent: 2 + - uid: 170 + components: + - type: Transform + pos: -5.5,8.5 + parent: 2 + - uid: 270 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,6.5 + parent: 2 + - uid: 271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,7.5 + parent: 2 + - uid: 272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,8.5 + parent: 2 + - uid: 303 + components: + - type: Transform + pos: -0.5,3.5 + parent: 2 +- proto: WallReinforcedRust + entities: + - uid: 61 + components: + - type: Transform + pos: 3.5,8.5 + parent: 2 + - uid: 195 + components: + - type: Transform + pos: -7.5,4.5 + parent: 2 + - uid: 197 + components: + - type: Transform + pos: 6.5,0.5 + parent: 2 + - uid: 202 + components: + - type: Transform + pos: -7.5,2.5 + parent: 2 + - uid: 204 + components: + - type: Transform + pos: 10.5,1.5 + parent: 2 + - uid: 207 + components: + - type: Transform + pos: 6.5,8.5 + parent: 2 + - uid: 212 + components: + - type: Transform + pos: 9.5,8.5 + parent: 2 + - uid: 213 + components: + - type: Transform + pos: -0.5,9.5 + parent: 2 + - uid: 216 + components: + - type: Transform + pos: -0.5,4.5 + parent: 2 + - uid: 226 + components: + - type: Transform + pos: -7.5,1.5 + parent: 2 + - uid: 227 + components: + - type: Transform + pos: 10.5,5.5 + parent: 2 + - uid: 230 + components: + - type: Transform + pos: -6.5,8.5 + parent: 2 + - uid: 231 + components: + - type: Transform + pos: -7.5,8.5 + parent: 2 + - uid: 236 + components: + - type: Transform + pos: -2.5,8.5 + parent: 2 + - uid: 239 + components: + - type: Transform + pos: 10.5,8.5 + parent: 2 + - uid: 366 + components: + - type: Transform + pos: -8.5,0.5 + parent: 2 +- proto: WallSolid + entities: + - uid: 5 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 2 + - uid: 12 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 2 + - uid: 30 + components: + - type: Transform + pos: 6.5,-3.5 + parent: 2 + - uid: 34 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 2 + - uid: 35 + components: + - type: Transform + pos: -6.5,3.5 + parent: 2 + - uid: 98 + components: + - type: Transform + pos: 9.5,-3.5 + parent: 2 + - uid: 100 + components: + - type: Transform + pos: -5.5,-3.5 + parent: 2 + - uid: 102 + components: + - type: Transform + pos: 6.5,1.5 + parent: 2 + - uid: 108 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 2 + - uid: 109 + components: + - type: Transform + pos: -4.5,-3.5 + parent: 2 + - uid: 119 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 2 + - uid: 128 + components: + - type: Transform + pos: -3.5,1.5 + parent: 2 + - uid: 129 + components: + - type: Transform + pos: -3.5,3.5 + parent: 2 + - uid: 132 + components: + - type: Transform + pos: 10.5,-4.5 + parent: 2 + - uid: 133 + components: + - type: Transform + pos: 4.5,-10.5 + parent: 2 + - uid: 134 + components: + - type: Transform + pos: 5.5,-10.5 + parent: 2 + - uid: 135 + components: + - type: Transform + pos: 6.5,-10.5 + parent: 2 + - uid: 137 + components: + - type: Transform + pos: 8.5,-10.5 + parent: 2 + - uid: 139 + components: + - type: Transform + pos: 10.5,-10.5 + parent: 2 + - uid: 140 + components: + - type: Transform + pos: 10.5,-9.5 + parent: 2 + - uid: 143 + components: + - type: Transform + pos: 10.5,-6.5 + parent: 2 + - uid: 174 + components: + - type: Transform + pos: -7.5,-4.5 + parent: 2 + - uid: 177 + components: + - type: Transform + pos: -7.5,-7.5 + parent: 2 + - uid: 179 + components: + - type: Transform + pos: -7.5,-9.5 + parent: 2 + - uid: 180 + components: + - type: Transform + pos: -7.5,-10.5 + parent: 2 + - uid: 181 + components: + - type: Transform + pos: -6.5,-10.5 + parent: 2 + - uid: 183 + components: + - type: Transform + pos: -4.5,-10.5 + parent: 2 + - uid: 184 + components: + - type: Transform + pos: -3.5,-10.5 + parent: 2 + - uid: 186 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 2 + - uid: 187 + components: + - type: Transform + pos: -8.5,-3.5 + parent: 2 + - uid: 188 + components: + - type: Transform + pos: -9.5,-3.5 + parent: 2 + - uid: 196 + components: + - type: Transform + pos: 14.5,-8.5 + parent: 2 + - uid: 198 + components: + - type: Transform + pos: -5.5,-9.5 + parent: 2 + - uid: 199 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 2 + - uid: 200 + components: + - type: Transform + pos: -5.5,-7.5 + parent: 2 + - uid: 203 + components: + - type: Transform + pos: 8.5,-7.5 + parent: 2 + - uid: 205 + components: + - type: Transform + pos: 8.5,-9.5 + parent: 2 + - uid: 208 + components: + - type: Transform + pos: -8.5,-9.5 + parent: 2 + - uid: 209 + components: + - type: Transform + pos: 14.5,-7.5 + parent: 2 + - uid: 210 + components: + - type: Transform + pos: 14.5,-6.5 + parent: 2 + - uid: 211 + components: + - type: Transform + pos: 14.5,-4.5 + parent: 2 + - uid: 214 + components: + - type: Transform + pos: 13.5,-3.5 + parent: 2 + - uid: 217 + components: + - type: Transform + pos: 6.5,3.5 + parent: 2 + - uid: 220 + components: + - type: Transform + pos: 9.5,3.5 + parent: 2 + - uid: 232 + components: + - type: Transform + pos: 11.5,-9.5 + parent: 2 + - uid: 233 + components: + - type: Transform + pos: 13.5,-9.5 + parent: 2 +- proto: WallSolidRust + entities: + - uid: 243 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 2 + - uid: 244 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 2 + - uid: 245 + components: + - type: Transform + pos: 10.5,-3.5 + parent: 2 + - uid: 248 + components: + - type: Transform + pos: 3.5,-10.5 + parent: 2 + - uid: 252 + components: + - type: Transform + pos: 7.5,-3.5 + parent: 2 + - uid: 256 + components: + - type: Transform + pos: 7.5,-10.5 + parent: 2 + - uid: 260 + components: + - type: Transform + pos: 9.5,-10.5 + parent: 2 + - uid: 267 + components: + - type: Transform + pos: 10.5,-8.5 + parent: 2 + - uid: 273 + components: + - type: Transform + pos: 10.5,-7.5 + parent: 2 + - uid: 276 + components: + - type: Transform + pos: -7.5,-3.5 + parent: 2 + - uid: 279 + components: + - type: Transform + pos: -7.5,-6.5 + parent: 2 + - uid: 282 + components: + - type: Transform + pos: -7.5,-8.5 + parent: 2 + - uid: 283 + components: + - type: Transform + pos: -5.5,-10.5 + parent: 2 + - uid: 284 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 2 + - uid: 285 + components: + - type: Transform + pos: -10.5,-3.5 + parent: 2 + - uid: 287 + components: + - type: Transform + pos: -11.5,-4.5 + parent: 2 + - uid: 292 + components: + - type: Transform + pos: -11.5,-6.5 + parent: 2 + - uid: 293 + components: + - type: Transform + pos: 14.5,-9.5 + parent: 2 + - uid: 300 + components: + - type: Transform + pos: 12.5,-9.5 + parent: 2 + - uid: 301 + components: + - type: Transform + pos: 8.5,-8.5 + parent: 2 + - uid: 307 + components: + - type: Transform + pos: 14.5,-3.5 + parent: 2 + - uid: 308 + components: + - type: Transform + pos: 14.5,-5.5 + parent: 2 + - uid: 365 + components: + - type: Transform + pos: -0.5,-11.5 + parent: 2 +- proto: WeaponPistolCHIMP + entities: + - uid: 225 + components: + - type: Transform + parent: 120 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: WindoorAssemblySecure + entities: + - uid: 142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,3.5 + parent: 2 + - uid: 318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-3.5 + parent: 2 + - uid: 325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 2 + - uid: 326 + components: + - type: Transform + pos: -1.5,0.5 + parent: 2 + - uid: 327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,0.5 + parent: 2 +- proto: WindoorAssemblySecurePlasma + entities: + - uid: 329 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,7.5 + parent: 2 +- proto: WindoorSecureCargoLocked + entities: + - uid: 76 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 2 +- proto: WindoorSecureChemistryLocked + entities: + - uid: 234 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,0.5 + parent: 2 + - uid: 343 + components: + - type: Transform + pos: 7.5,3.5 + parent: 2 +- proto: WindoorSecureEngineeringLocked + entities: + - uid: 86 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-4.5 + parent: 2 + - uid: 92 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-4.5 + parent: 2 +- proto: WindoorSecureMedicalLocked + entities: + - uid: 88 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,1.5 + parent: 2 + - uid: 89 + components: + - type: Transform + pos: 4.5,0.5 + parent: 2 +- proto: WindoorSecureScienceLocked + entities: + - uid: 94 + components: + - type: Transform + pos: -2.5,1.5 + parent: 2 + - uid: 266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 2 + - uid: 312 + components: + - type: Transform + pos: 8.5,6.5 + parent: 2 +- proto: WindowReinforcedDirectional + entities: + - uid: 63 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 2 + - uid: 64 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 2 + - uid: 65 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,0.5 + parent: 2 + - uid: 66 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-3.5 + parent: 2 + - uid: 68 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 2 + - uid: 69 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,1.5 + parent: 2 + - uid: 77 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 2 + - uid: 80 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,0.5 + parent: 2 + - uid: 81 + components: + - type: Transform + pos: -0.5,0.5 + parent: 2 + - uid: 82 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,0.5 + parent: 2 + - uid: 84 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 2 + - uid: 85 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 2 + - uid: 268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,3.5 + parent: 2 + - uid: 269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,3.5 + parent: 2 + - uid: 313 + components: + - type: Transform + pos: 9.5,6.5 + parent: 2 + - uid: 341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,6.5 + parent: 2 + - uid: 342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,7.5 + parent: 2 +- proto: Wrench + entities: + - uid: 306 + components: + - type: Transform + pos: -1.691124,5.257793 + parent: 2 +... diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index 2197629980..effb391404 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -60,6 +60,7 @@ maxCount: 2 stationGrid: false paths: + - /Maps/Ruins/abandoned_outpost.yml - /Maps/Ruins/chunked_tcomms.yml - /Maps/Ruins/biodome_satellite.yml - /Maps/Ruins/derelict.yml From 4fc7a4c56e4a27a15bc1c4598d91eb6ef2542a28 Mon Sep 17 00:00:00 2001 From: RedBookcase Date: Fri, 15 Nov 2024 12:52:19 -0800 Subject: [PATCH 02/41] Edited Snow White reaction to output proper amount of drink. (#33331) Co-authored-by: RedBookcase --- Resources/Prototypes/Recipes/Reactions/drinks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml index 2353099df5..64668b1089 100644 --- a/Resources/Prototypes/Recipes/Reactions/drinks.yml +++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml @@ -953,7 +953,7 @@ LemonLime: amount: 1 products: - SnowWhite: 3 + SnowWhite: 2 - type: reaction id: SodaWater From 3a6ae975660450595138bd9b07604e51de9d6642 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 15 Nov 2024 20:53:26 +0000 Subject: [PATCH 03/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b9235ab83d..8ed9d36722 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Erisfiregamer1 - changes: - - message: New chemical, Sedin. It restores seeds on plants 20% of the time with - other adverse effects included. - type: Add - id: 7111 - time: '2024-08-15T00:38:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27110 - author: PoorMansDreams changes: - message: Added Star sticker in loadouts for Secoffs @@ -3945,3 +3937,10 @@ id: 7610 time: '2024-11-15T06:54:53.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33315 +- author: RedBookcase + changes: + - message: Mixing up a Snow White no longer creates extra liquid out of thin air. + type: Fix + id: 7611 + time: '2024-11-15T20:52:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33331 From 089f190266ed309652fb12d3ee8bca261657e406 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:21:08 +0100 Subject: [PATCH 04/41] Add succumb action 10 sec delay (#32985) * Add succumb action 10 sec delay * add somthing * add delay to last words as well --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Resources/Prototypes/Actions/crit.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Actions/crit.yml b/Resources/Prototypes/Actions/crit.yml index c5712844bf..aaad27d2b7 100644 --- a/Resources/Prototypes/Actions/crit.yml +++ b/Resources/Prototypes/Actions/crit.yml @@ -12,6 +12,8 @@ sprite: Mobs/Ghosts/ghost_human.rsi state: icon event: !type:CritSuccumbEvent + startDelay: true + useDelay: 10 - type: entity id: ActionCritFakeDeath @@ -41,3 +43,5 @@ sprite: Interface/Actions/actions_crit.rsi state: lastwords event: !type:CritLastWordsEvent + startDelay: true + useDelay: 10 From 6683dc9037fd56f29036d142587a25ea1d203304 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 15 Nov 2024 21:22:14 +0000 Subject: [PATCH 05/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8ed9d36722..1c796d8b45 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: PoorMansDreams - changes: - - message: Added Star sticker in loadouts for Secoffs - type: Add - id: 7112 - time: '2024-08-15T01:50:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29767 - author: FATFSAAM2 changes: - message: added 7 new figurine voice lines. @@ -3944,3 +3937,10 @@ id: 7611 time: '2024-11-15T20:52:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33331 +- author: lzk228 + changes: + - message: Added 10 seconds delay to Succumb action + type: Add + id: 7612 + time: '2024-11-15T21:21:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32985 From 09d0565413062763279907fe4220b4e1e2b82e46 Mon Sep 17 00:00:00 2001 From: SpaceRox1244 <138547931+SpaceRox1244@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:48:28 -0500 Subject: [PATCH 06/41] Adds gorilla gauntlet storage sprite and updates hit sound (#33167) * Adds storage sprite for gorilla gauntlet * Specifies a heavier hitsound for gorilla gauntlet * Modifies gauntlet icon and storage sprite * Updates credit to my new username --- .../Objects/Specific/Research/anomaly.yml | 5 +++++ .../Objects/Weapons/Melee/gorilla.rsi/icon.png | Bin 753 -> 775 bytes .../Objects/Weapons/Melee/gorilla.rsi/meta.json | 7 +++++-- .../Weapons/Melee/gorilla.rsi/storage.png | Bin 0 -> 624 bytes 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/storage.png diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 516bd0f6bd..efbd7c2db4 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -126,6 +126,9 @@ state: icon - type: Item size: Large + storedSprite: + state: storage + sprite: Objects/Weapons/Melee/gorilla.rsi - type: MeleeWeapon attackRate: 0.5 angle: 0 @@ -134,6 +137,8 @@ damage: types: Blunt: 20 + soundHit: + path: "/Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg" - type: CorePoweredThrower - type: MeleeThrowOnHit unanchorOnHit: true diff --git a/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/icon.png index a57ce53cc4633590e7be46bbe293c5bd7cace1f4..9ce8603d2a68d0c78a8f09a9f95844ea5ca986b7 100644 GIT binary patch delta 752 zcmV3vclDCr!X4)Ld}VS9q4K56`pgeC<}|o zk!ZGGSy%+f_Nh5humg_`ZwQsupwsDyeGM^7h=vQbT%QSp4Ll1Dz^WRj=p1-AKE>=z zh=#^m%;qYrHh&8MFFspote#U{U$6rf%OULcx7Un*EB$-U5k0Tbt;jpvubDa-FxIKDn$0W?#0iWA1mh01P zgW&)GwRKLW-oFLF;jj}9M_7n15sSrCVFlEEq-U|#9_2rJ>}*5DJc;c zjTR!|d6LOgmi$TJu4*yLxf1%^ezELMx38>i0Pygj9<5dnKs>G>%LzsU0f3yya~9z3 z=oB|gD*<@rs!NNgNE7!b6|`DC@wmeCXRq-MbmvvxRVQywxXjL<9<>2*aXwva`YTJB zoS4p=Tz^$ShCGvOuyyCDJ73asb9{XM#9x!p<#LHfBlk2GOHG%_WTK*?9IaN*_^QH@ z=r>NrQ@mVDFs4k?_25Rquj;l7Jsyu39v;q)ZFVAa-uvz+(qjegJcBKzSdt{+bUN{P zJlRLYH_)w_oR~(I6U5^R0LyOh6DWpzdjT1=wrRF*5iuGFAj^sDb<6dtrw1{9Z_?w8`z>XG5k|dg&n*kUc9AtB1{wwVG81?n_ iX#fH23i%%P0PqW$ha}q5Nokw_0000Px%t4TybR9J=WmETKKVI0Ok{$M6f-a>Sz4B_v)*sMC9P2_D6q%tZMA~d@7dvPo ztg|0EmGyS9&ajy7mvqyft8-r7@AEwG^ZoL^P)8mAI~q=tY=3%SM%W}906ulJEbhiy zMFZZT2zZ0S_#b`PQ7}_ZeRD11(*rZ&-t8Qc%LxQULQkN_;w1DWj~-veCIv;QB&tqe zdSFJ3-26dO+eVMY3+qX38=$aODv7EScquIsX}*ZXVj=Y{!Uhrg?sW5HJqk`3(cD01 zNuHW#;KR}?8-ME&`ue+(Wjmct2LPeXPWn5-CF`qBz~MNL%XOLkgF|HdS!CHxG#bNV zvC!#+7x6bFHm;TAX{tutH#RA5^j-%*wmS%a`AjyupKnJhh1=~S_w$fX#CSIU^u!^o zIDvpSD0X}E-;&e@KzGkARzJQ6!0mPsjmFU8JET&nl7D;^CEy#I6w+Wj!>eI-u3W%u zwqi21(AX%j*&M{8U&&_o3*xWT=Or(rvJC{hK_Lyc1F+d{=l=IBYbG$6TK+Jx_-=`V zgM+ffq0AQe#wNvXFAT4SdF$x`z)yyWGgkcRBxbV}fR*L7vV{$l+C<3o?+r#2mWmS diff --git a/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/meta.json index 97a5fdbd2e..55417c2e71 100644 --- a/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/meta.json @@ -1,14 +1,17 @@ { "version": 1, "license": "CC0-1.0", - "copyright": "Design and inhands by ricemar (discord) and icon by EmoGarbage404 (github)", + "copyright": "Design, inhands, and storage sprite by SpaceRox1244 (github) and icon by EmoGarbage404 (github)", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "icon" + "name": "icon" + }, + { + "name": "storage" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/storage.png b/Resources/Textures/Objects/Weapons/Melee/gorilla.rsi/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..e21fc82b971ece07b67423bb0e0603cb217392c6 GIT binary patch literal 624 zcmV-$0+0QPP)U0K2E}v08zbeqOF0w zXqu?Co26QN#MN4Bf{jdu;gMm}`doI2EAL)&`}hb@GUA4TR4Qd!AVdXKHUGy>@hJ-H z>uFO=k|f3pV?13n&+WJZLR0`K6PSr5u#!wuTz|j=>YehluXxfUthP=6X$jRU_ZI6%G~Hl4&9h;GVxap0GvH{Sr24~ zn3{AMvAsqb>Dq4tj~?8y0Y4s`U-Mgsuv2O!j_QpMj)jHAf6I6B;@<@Dy8w0o0000< KMNUMnLSTZDXB*xC literal 0 HcmV?d00001 From da4fa9bea958529dda252f7fd03379ae820de078 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:46:01 -0800 Subject: [PATCH 07/41] Clumsy system refactor (#31147) * First commit * Fixes * Added the noise * Renames * Timespan * Fixed space * entity -> ent * This shouldn't work * opps.... * Datafield name change * Better comments * small comment * Personal skill issue * Event renames and stuff * Couple fixes * Defib ref fixes (Silly me) * Added clumsy back! * no hard code clumsy! * Identity fix * Event name change * Comment change * Function name change * opp * Update names * Damage stuff! * Fixes! * Fixes * opps * This was hidden away!! * negative diff feeds me --- .../Systems/AdminVerbSystem.Smites.cs | 1 + .../Administration/Systems/SuperBonkSystem.cs | 22 +-- .../EntitySystems/HypospraySystem.cs | 41 ++++- Content.Server/Cluwne/CluwneSystem.cs | 1 + Content.Server/Medical/DefibrillatorSystem.cs | 72 +++++++-- .../Weapons/Ranged/Systems/GunSystem.cs | 30 +--- .../Components/HyposprayComponent.cs | 5 - .../Chemistry/Events/HyposprayEvents.cs | 38 +++++ .../Climbing/Components/BonkableComponent.cs | 34 +--- .../Climbing/Events/BeforeClimbEvents.cs | 36 +++++ Content.Shared/Climbing/Systems/BonkSystem.cs | 130 ---------------- .../Climbing/Systems/ClimbSystem.cs | 12 ++ Content.Shared/Clumsy/ClumsyComponent.cs | 61 ++++++++ Content.Shared/Clumsy/ClumsySystem.cs | 146 ++++++++++++++++++ .../Interaction/Components/ClumsyComponent.cs | 24 --- .../SharedInteractionSystem.Clumsy.cs | 26 ---- .../Inventory/InventorySystem.Relay.cs | 9 +- Content.Shared/Medical/DefibrillatorEvents.cs | 39 +++++ .../Medical/TargetDefibrillatedEvent.cs | 4 - .../Ranged/Events/BeforeGunShootEvent.cs | 20 +++ .../bonk/components/bonkable-component.ftl | 6 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 4 +- .../Entities/Mobs/Player/guardian.yml | 2 +- .../Furniture/Tables/base_structuretables.yml | 2 - .../Prototypes/Roles/Jobs/Civilian/clown.yml | 2 +- 25 files changed, 485 insertions(+), 282 deletions(-) create mode 100644 Content.Shared/Chemistry/Events/HyposprayEvents.cs create mode 100644 Content.Shared/Climbing/Events/BeforeClimbEvents.cs delete mode 100644 Content.Shared/Climbing/Systems/BonkSystem.cs create mode 100644 Content.Shared/Clumsy/ClumsyComponent.cs create mode 100644 Content.Shared/Clumsy/ClumsySystem.cs delete mode 100644 Content.Shared/Interaction/Components/ClumsyComponent.cs delete mode 100644 Content.Shared/Interaction/SharedInteractionSystem.Clumsy.cs create mode 100644 Content.Shared/Medical/DefibrillatorEvents.cs delete mode 100644 Content.Shared/Medical/TargetDefibrillatedEvent.cs create mode 100644 Content.Shared/Weapons/Ranged/Events/BeforeGunShootEvent.cs diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 2187cbd68f..4cd1f95288 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -22,6 +22,7 @@ using Content.Shared.Administration; using Content.Shared.Administration.Components; using Content.Shared.Body.Components; using Content.Shared.Body.Part; +using Content.Shared.Clumsy; using Content.Shared.Clothing.Components; using Content.Shared.Cluwne; using Content.Shared.Damage; diff --git a/Content.Server/Administration/Systems/SuperBonkSystem.cs b/Content.Server/Administration/Systems/SuperBonkSystem.cs index 5488a8d6f4..5cd62d8357 100644 --- a/Content.Server/Administration/Systems/SuperBonkSystem.cs +++ b/Content.Server/Administration/Systems/SuperBonkSystem.cs @@ -1,27 +1,27 @@ using Content.Server.Administration.Components; using Content.Shared.Climbing.Components; -using Content.Shared.Climbing.Events; -using Content.Shared.Climbing.Systems; -using Content.Shared.Interaction.Components; +using Content.Shared.Clumsy; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; +using Robust.Shared.Audio.Systems; namespace Content.Server.Administration.Systems; -public sealed class SuperBonkSystem: EntitySystem +public sealed class SuperBonkSystem : EntitySystem { [Dependency] private readonly SharedTransformSystem _transformSystem = default!; - [Dependency] private readonly BonkSystem _bonkSystem = default!; + [Dependency] private readonly ClumsySystem _clumsySystem = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnBonkShutdown); SubscribeLocalEvent(OnMobStateChanged); + SubscribeLocalEvent(OnBonkShutdown); } - public void StartSuperBonk(EntityUid target, float delay = 0.1f, bool stopWhenDead = false ) + public void StartSuperBonk(EntityUid target, float delay = 0.1f, bool stopWhenDead = false) { //The other check in the code to stop when the target dies does not work if the target is already dead. @@ -31,7 +31,6 @@ public sealed class SuperBonkSystem: EntitySystem return; } - var hadClumsy = EnsureComp(target, out _); var tables = EntityQueryEnumerator(); @@ -79,16 +78,17 @@ public sealed class SuperBonkSystem: EntitySystem private void Bonk(SuperBonkComponent comp) { var uid = comp.Tables.Current.Key; - var bonkComp = comp.Tables.Current.Value; // It would be very weird for something without a transform component to have a bonk component // but just in case because I don't want to crash the server. - if (!HasComp(uid)) + if (!HasComp(uid) || !TryComp(comp.Target, out var clumsyComp)) return; _transformSystem.SetCoordinates(comp.Target, Transform(uid).Coordinates); - _bonkSystem.TryBonk(comp.Target, uid, bonkComp); + _clumsySystem.HitHeadClumsy((comp.Target, clumsyComp), uid); + + _audioSystem.PlayPvs(clumsyComp.TableBonkSound, comp.Target); } private void OnMobStateChanged(EntityUid uid, SuperBonkComponent comp, MobStateChangedEvent args) diff --git a/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs b/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs index 9b78e81aa0..8345aa3c3d 100644 --- a/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs +++ b/Content.Server/Chemistry/EntitySystems/HypospraySystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.Hypospray.Events; using Content.Shared.Chemistry; using Content.Shared.Database; using Content.Shared.FixedPoint; @@ -85,14 +86,44 @@ public sealed class HypospraySystem : SharedHypospraySystem string? msgFormat = null; - if (target == user) - msgFormat = "hypospray-component-inject-self-message"; - else if (EligibleEntity(user, EntityManager, component) && _interaction.TryRollClumsy(user, component.ClumsyFailChance)) + // Self event + var selfEvent = new SelfBeforeHyposprayInjectsEvent(user, entity.Owner, target); + RaiseLocalEvent(user, selfEvent); + + if (selfEvent.Cancelled) { - msgFormat = "hypospray-component-inject-self-clumsy-message"; - target = user; + _popup.PopupEntity(Loc.GetString(selfEvent.InjectMessageOverride ?? "hypospray-cant-inject", ("owner", Identity.Entity(target, EntityManager))), target, user); + return false; } + target = selfEvent.TargetGettingInjected; + + if (!EligibleEntity(target, EntityManager, component)) + return false; + + // Target event + var targetEvent = new TargetBeforeHyposprayInjectsEvent(user, entity.Owner, target); + RaiseLocalEvent(target, targetEvent); + + if (targetEvent.Cancelled) + { + _popup.PopupEntity(Loc.GetString(targetEvent.InjectMessageOverride ?? "hypospray-cant-inject", ("owner", Identity.Entity(target, EntityManager))), target, user); + return false; + } + + target = targetEvent.TargetGettingInjected; + + if (!EligibleEntity(target, EntityManager, component)) + return false; + + // The target event gets priority for the overriden message. + if (targetEvent.InjectMessageOverride != null) + msgFormat = targetEvent.InjectMessageOverride; + else if (selfEvent.InjectMessageOverride != null) + msgFormat = selfEvent.InjectMessageOverride; + else if (target == user) + msgFormat = "hypospray-component-inject-self-message"; + if (!_solutionContainers.TryGetSolution(uid, component.SolutionName, out var hypoSpraySoln, out var hypoSpraySolution) || hypoSpraySolution.Volume == 0) { _popup.PopupEntity(Loc.GetString("hypospray-component-empty-message"), target, user); diff --git a/Content.Server/Cluwne/CluwneSystem.cs b/Content.Server/Cluwne/CluwneSystem.cs index f24f0143f3..1fbb0c7269 100644 --- a/Content.Server/Cluwne/CluwneSystem.cs +++ b/Content.Server/Cluwne/CluwneSystem.cs @@ -16,6 +16,7 @@ using Content.Shared.Cluwne; using Content.Shared.Interaction.Components; using Robust.Shared.Audio.Systems; using Content.Shared.NameModifier.EntitySystems; +using Content.Shared.Clumsy; namespace Content.Server.Cluwne; diff --git a/Content.Server/Medical/DefibrillatorSystem.cs b/Content.Server/Medical/DefibrillatorSystem.cs index c9cb6cc58d..fa0ea26385 100644 --- a/Content.Server/Medical/DefibrillatorSystem.cs +++ b/Content.Server/Medical/DefibrillatorSystem.cs @@ -77,7 +77,20 @@ public sealed class DefibrillatorSystem : EntitySystem Zap(uid, target, args.User, component); } - public bool CanZap(EntityUid uid, EntityUid target, EntityUid? user = null, DefibrillatorComponent? component = null) + /// + /// Checks if you can actually defib a target. + /// + /// Uid of the defib + /// Uid of the target getting defibbed + /// Uid of the entity using the defibrillator + /// Defib component + /// + /// If true, the target can be alive. If false, the function will check if the target is alive and will return false if they are. + /// + /// + /// Returns true if the target is valid to be defibed, false otherwise. + /// + public bool CanZap(EntityUid uid, EntityUid target, EntityUid? user = null, DefibrillatorComponent? component = null, bool targetCanBeAlive = false) { if (!Resolve(uid, ref component)) return false; @@ -98,15 +111,25 @@ public sealed class DefibrillatorSystem : EntitySystem if (!_powerCell.HasActivatableCharge(uid, user: user)) return false; - if (_mobState.IsAlive(target, mobState)) + if (!targetCanBeAlive && _mobState.IsAlive(target, mobState)) return false; - if (!component.CanDefibCrit && _mobState.IsCritical(target, mobState)) + if (!targetCanBeAlive && !component.CanDefibCrit && _mobState.IsCritical(target, mobState)) return false; return true; } + /// + /// Tries to start defibrillating the target. If the target is valid, will start the defib do-after. + /// + /// Uid of the defib + /// Uid of the target getting defibbed + /// Uid of the entity using the defibrillator + /// Defib component + /// + /// Returns true if the defibrillation do-after started, otherwise false. + /// public bool TryStartZap(EntityUid uid, EntityUid target, EntityUid user, DefibrillatorComponent? component = null) { if (!Resolve(uid, ref component)) @@ -118,27 +141,44 @@ public sealed class DefibrillatorSystem : EntitySystem _audio.PlayPvs(component.ChargeSound, uid); return _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.DoAfterDuration, new DefibrillatorZapDoAfterEvent(), uid, target, uid) - { - NeedHand = true, - BreakOnMove = !component.AllowDoAfterMovement - }); + { + NeedHand = true, + BreakOnMove = !component.AllowDoAfterMovement + }); } - public void Zap(EntityUid uid, EntityUid target, EntityUid user, DefibrillatorComponent? component = null, MobStateComponent? mob = null, MobThresholdsComponent? thresholds = null) + /// + /// Tries to defibrillate the target with the given defibrillator. + /// + public void Zap(EntityUid uid, EntityUid target, EntityUid user, DefibrillatorComponent? component = null) { - if (!Resolve(uid, ref component) || !Resolve(target, ref mob, ref thresholds, false)) + if (!Resolve(uid, ref component)) return; - // clowns zap themselves - if (HasComp(user) && user != target) - { - Zap(uid, user, user, component); - return; - } - if (!_powerCell.TryUseActivatableCharge(uid, user: user)) return; + var selfEvent = new SelfBeforeDefibrillatorZapsEvent(user, uid, target); + RaiseLocalEvent(user, selfEvent); + + target = selfEvent.DefibTarget; + + // Ensure thet new target is still valid. + if (selfEvent.Cancelled || !CanZap(uid, target, user, component, true)) + return; + + var targetEvent = new TargetBeforeDefibrillatorZapsEvent(user, uid, target); + RaiseLocalEvent(target, targetEvent); + + target = targetEvent.DefibTarget; + + if (targetEvent.Cancelled || !CanZap(uid, target, user, component, true)) + return; + + if (!TryComp(target, out var mob) || + !TryComp(target, out var thresholds)) + return; + _audio.PlayPvs(component.ZapSound, uid); _electrocution.TryDoElectrocution(target, null, component.ZapDamage, component.WritheDuration, true, ignoreInsulation: true); component.NextZapTime = _timing.CurTime + component.ZapDelay; diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index 701753a8ce..d22b5ec2af 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -1,15 +1,12 @@ using System.Linq; using System.Numerics; using Content.Server.Cargo.Systems; -using Content.Server.Interaction; using Content.Server.Power.EntitySystems; -using Content.Server.Stunnable; using Content.Server.Weapons.Ranged.Components; using Content.Shared.Damage; using Content.Shared.Damage.Systems; using Content.Shared.Database; using Content.Shared.Effects; -using Content.Shared.Interaction.Components; using Content.Shared.Projectiles; using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Ranged; @@ -33,16 +30,13 @@ public sealed partial class GunSystem : SharedGunSystem [Dependency] private readonly IComponentFactory _factory = default!; [Dependency] private readonly BatterySystem _battery = default!; [Dependency] private readonly DamageExamineSystem _damageExamine = default!; - [Dependency] private readonly InteractionSystem _interaction = default!; [Dependency] private readonly PricingSystem _pricing = default!; [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly StaminaSystem _stamina = default!; - [Dependency] private readonly StunSystem _stun = default!; [Dependency] private readonly SharedContainerSystem _container = default!; private const float DamagePitchVariation = 0.05f; - public const float GunClumsyChance = 0.5f; public override void Initialize() { @@ -71,26 +65,14 @@ public sealed partial class GunSystem : SharedGunSystem { userImpulse = true; - // Try a clumsy roll - // TODO: Who put this here - if (TryComp(user, out var clumsy) && gun.ClumsyProof == false) + if (user != null) { - for (var i = 0; i < ammo.Count; i++) + var selfEvent = new SelfBeforeGunShotEvent(user.Value, (gunUid, gun), ammo); + RaiseLocalEvent(user.Value, selfEvent); + if (selfEvent.Cancelled) { - if (_interaction.TryRollClumsy(user.Value, GunClumsyChance, clumsy)) - { - // Wound them - Damageable.TryChangeDamage(user, clumsy.ClumsyDamage, origin: user); - _stun.TryParalyze(user.Value, TimeSpan.FromSeconds(3f), true); - - // Apply salt to the wound ("Honk!") - Audio.PlayPvs(new SoundPathSpecifier("/Audio/Weapons/Guns/Gunshots/bang.ogg"), gunUid); - Audio.PlayPvs(clumsy.ClumsySound, gunUid); - - PopupSystem.PopupEntity(Loc.GetString("gun-clumsy"), user.Value); - userImpulse = false; - return; - } + userImpulse = false; + return; } } diff --git a/Content.Shared/Chemistry/Components/HyposprayComponent.cs b/Content.Shared/Chemistry/Components/HyposprayComponent.cs index 05ef84bbaf..17d52f0ad9 100644 --- a/Content.Shared/Chemistry/Components/HyposprayComponent.cs +++ b/Content.Shared/Chemistry/Components/HyposprayComponent.cs @@ -11,11 +11,6 @@ public sealed partial class HyposprayComponent : Component [DataField] public string SolutionName = "hypospray"; - // TODO: This should be on clumsycomponent. - [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public float ClumsyFailChance = 0.5f; - [DataField] [ViewVariables(VVAccess.ReadWrite)] public FixedPoint2 TransferAmount = FixedPoint2.New(5); diff --git a/Content.Shared/Chemistry/Events/HyposprayEvents.cs b/Content.Shared/Chemistry/Events/HyposprayEvents.cs new file mode 100644 index 0000000000..e8ed081a57 --- /dev/null +++ b/Content.Shared/Chemistry/Events/HyposprayEvents.cs @@ -0,0 +1,38 @@ +using Content.Shared.Inventory; + +namespace Content.Shared.Chemistry.Hypospray.Events; + +public abstract partial class BeforeHyposprayInjectsTargetEvent : CancellableEntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET; + public EntityUid EntityUsingHypospray; + public readonly EntityUid Hypospray; + public EntityUid TargetGettingInjected; + public string? InjectMessageOverride; + + public BeforeHyposprayInjectsTargetEvent(EntityUid user, EntityUid hypospray, EntityUid target) + { + EntityUsingHypospray = user; + Hypospray = hypospray; + TargetGettingInjected = target; + InjectMessageOverride = null; + } +} + +/// +/// This event is raised on the user using the hypospray before the hypospray is injected. +/// The event is triggered on the user and all their clothing. +/// +public sealed class SelfBeforeHyposprayInjectsEvent : BeforeHyposprayInjectsTargetEvent +{ + public SelfBeforeHyposprayInjectsEvent(EntityUid user, EntityUid hypospray, EntityUid target) : base(user, hypospray, target) { } +} + +/// +/// This event is raised on the target before the hypospray is injected. +/// The event is triggered on the target itself and all its clothing. +/// +public sealed class TargetBeforeHyposprayInjectsEvent : BeforeHyposprayInjectsTargetEvent +{ + public TargetBeforeHyposprayInjectsEvent (EntityUid user, EntityUid hypospray, EntityUid target) : base(user, hypospray, target) { } +} diff --git a/Content.Shared/Climbing/Components/BonkableComponent.cs b/Content.Shared/Climbing/Components/BonkableComponent.cs index 5e97396fba..cb4839cae7 100644 --- a/Content.Shared/Climbing/Components/BonkableComponent.cs +++ b/Content.Shared/Climbing/Components/BonkableComponent.cs @@ -1,5 +1,4 @@ using Content.Shared.Damage; -using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared.Climbing.Components; @@ -8,39 +7,18 @@ namespace Content.Shared.Climbing.Components; /// Makes entity do damage and stun entities with ClumsyComponent /// upon DragDrop or Climb interactions. /// -[RegisterComponent, NetworkedComponent, Access(typeof(Systems.BonkSystem))] +[RegisterComponent, NetworkedComponent] public sealed partial class BonkableComponent : Component { /// - /// Chance of bonk triggering if the user is clumsy. + /// How long to stun players on bonk, in seconds. /// - [DataField("bonkClumsyChance")] - public float BonkClumsyChance = 0.5f; + [DataField] + public TimeSpan BonkTime = TimeSpan.FromSeconds(2); /// - /// Sound to play when bonking. + /// How much damage to apply on bonk. /// - /// - [DataField("bonkSound")] - public SoundSpecifier? BonkSound; - - /// - /// How long to stun players on bonk, in seconds. - /// - /// - [DataField("bonkTime")] - public float BonkTime = 2; - - /// - /// How much damage to apply on bonk. - /// - /// - [DataField("bonkDamage")] + [DataField] public DamageSpecifier? BonkDamage; - - /// - /// How long it takes to bonk. - /// - [DataField("bonkDelay")] - public float BonkDelay = 1.5f; } diff --git a/Content.Shared/Climbing/Events/BeforeClimbEvents.cs b/Content.Shared/Climbing/Events/BeforeClimbEvents.cs new file mode 100644 index 0000000000..85c40f9427 --- /dev/null +++ b/Content.Shared/Climbing/Events/BeforeClimbEvents.cs @@ -0,0 +1,36 @@ +using Content.Shared.Inventory; +using Content.Shared.Climbing.Components; + +namespace Content.Shared.Climbing.Events; + +public abstract partial class BeforeClimbEvent : CancellableEntityEventArgs +{ + public readonly EntityUid GettingPutOnTable; + public readonly EntityUid PuttingOnTable; + public readonly Entity BeingClimbedOn; + + public BeforeClimbEvent(EntityUid gettingPutOntable, EntityUid puttingOnTable, Entity beingClimbedOn) + { + GettingPutOnTable = gettingPutOntable; + PuttingOnTable = puttingOnTable; + BeingClimbedOn = beingClimbedOn; + } +} + +/// +/// This event is raised on the the person either getting put on or going on the table. +/// The event is also called on their clothing as well. +/// +public sealed class SelfBeforeClimbEvent : BeforeClimbEvent, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET; + public SelfBeforeClimbEvent(EntityUid gettingPutOntable, EntityUid puttingOnTable, Entity beingClimbedOn) : base(gettingPutOntable, puttingOnTable, beingClimbedOn) { } +} + +/// +/// This event is raised on the thing being climbed on. +/// +public sealed class TargetBeforeClimbEvent : BeforeClimbEvent +{ + public TargetBeforeClimbEvent(EntityUid gettingPutOntable, EntityUid puttingOnTable, Entity beingClimbedOn) : base(gettingPutOntable, puttingOnTable, beingClimbedOn) { } +} diff --git a/Content.Shared/Climbing/Systems/BonkSystem.cs b/Content.Shared/Climbing/Systems/BonkSystem.cs deleted file mode 100644 index f59fe92573..0000000000 --- a/Content.Shared/Climbing/Systems/BonkSystem.cs +++ /dev/null @@ -1,130 +0,0 @@ -using Content.Shared.CCVar; -using Content.Shared.Climbing.Components; -using Content.Shared.Climbing.Events; -using Content.Shared.Damage; -using Content.Shared.DoAfter; -using Content.Shared.DragDrop; -using Content.Shared.Hands.Components; -using Content.Shared.IdentityManagement; -using Content.Shared.Interaction; -using Content.Shared.Interaction.Components; -using Content.Shared.Popups; -using Content.Shared.Stunnable; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Configuration; -using Robust.Shared.Player; -using Robust.Shared.Serialization; - -namespace Content.Shared.Climbing.Systems; - -public sealed partial class BonkSystem : EntitySystem -{ - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; - [Dependency] private readonly SharedStunSystem _stunSystem = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnBonkDoAfter); - SubscribeLocalEvent(OnAttemptClimb); - } - - private void OnBonkDoAfter(EntityUid uid, BonkableComponent component, BonkDoAfterEvent args) - { - if (args.Handled || args.Cancelled || args.Args.Used == null) - return; - - TryBonk(args.Args.Used.Value, uid, component, source: args.Args.User); - - args.Handled = true; - } - - - public bool TryBonk(EntityUid user, EntityUid bonkableUid, BonkableComponent? bonkableComponent = null, EntityUid? source = null) - { - if (!Resolve(bonkableUid, ref bonkableComponent, false)) - return false; - - // BONK! - var userName = Identity.Entity(user, EntityManager); - var bonkableName = Identity.Entity(bonkableUid, EntityManager); - - if (user == source) - { - // Non-local, non-bonking players - var othersMessage = Loc.GetString("bonkable-success-message-others", ("user", userName), ("bonkable", bonkableName)); - // Local, bonking player - var selfMessage = Loc.GetString("bonkable-success-message-user", ("user", userName), ("bonkable", bonkableName)); - - _popupSystem.PopupPredicted(selfMessage, othersMessage, user, user); - } - else if (source != null) - { - // Local, non-bonking player (dragger) - _popupSystem.PopupClient(Loc.GetString("bonkable-success-message-others", ("user", userName), ("bonkable", bonkableName)), user, source.Value); - // Non-local, non-bonking players - _popupSystem.PopupEntity(Loc.GetString("bonkable-success-message-others", ("user", userName), ("bonkable", bonkableName)), user, Filter.Pvs(user).RemoveWhereAttachedEntity(e => e == user || e == source.Value), true); - // Non-local, bonking player - _popupSystem.PopupEntity(Loc.GetString("bonkable-success-message-user", ("user", userName), ("bonkable", bonkableName)), user, user); - } - - - - if (source != null) - _audioSystem.PlayPredicted(bonkableComponent.BonkSound, bonkableUid, source); - else - _audioSystem.PlayPvs(bonkableComponent.BonkSound, bonkableUid); - - _stunSystem.TryParalyze(user, TimeSpan.FromSeconds(bonkableComponent.BonkTime), true); - - if (bonkableComponent.BonkDamage is { } bonkDmg) - _damageableSystem.TryChangeDamage(user, bonkDmg, true, origin: user); - - return true; - - } - - private bool TryStartBonk(EntityUid uid, EntityUid user, EntityUid climber, BonkableComponent? bonkableComponent = null) - { - if (!Resolve(uid, ref bonkableComponent, false)) - return false; - - if (!HasComp(climber) || !HasComp(user)) - return false; - - if (!_cfg.GetCVar(CCVars.GameTableBonk)) - { - // Not set to always bonk, try clumsy roll. - if (!_interactionSystem.TryRollClumsy(climber, bonkableComponent.BonkClumsyChance)) - return false; - } - - var doAfterArgs = new DoAfterArgs(EntityManager, user, bonkableComponent.BonkDelay, new BonkDoAfterEvent(), uid, target: uid, used: climber) - { - BreakOnMove = true, - BreakOnDamage = true, - DuplicateCondition = DuplicateConditions.SameTool | DuplicateConditions.SameTarget - }; - - return _doAfter.TryStartDoAfter(doAfterArgs); - } - - private void OnAttemptClimb(EntityUid uid, BonkableComponent component, ref AttemptClimbEvent args) - { - if (args.Cancelled) - return; - - if (TryStartBonk(uid, args.User, args.Climber, component)) - args.Cancelled = true; - } - - [Serializable, NetSerializable] - private sealed partial class BonkDoAfterEvent : SimpleDoAfterEvent - { - } -} diff --git a/Content.Shared/Climbing/Systems/ClimbSystem.cs b/Content.Shared/Climbing/Systems/ClimbSystem.cs index da194706f8..9bf481002a 100644 --- a/Content.Shared/Climbing/Systems/ClimbSystem.cs +++ b/Content.Shared/Climbing/Systems/ClimbSystem.cs @@ -251,6 +251,18 @@ public sealed partial class ClimbSystem : VirtualController if (!Resolve(climbable, ref comp, false)) return; + var selfEvent = new SelfBeforeClimbEvent(uid, user, (climbable, comp)); + RaiseLocalEvent(uid, selfEvent); + + if (selfEvent.Cancelled) + return; + + var targetEvent = new TargetBeforeClimbEvent(uid, user, (climbable, comp)); + RaiseLocalEvent(climbable, targetEvent); + + if (targetEvent.Cancelled) + return; + if (!ReplaceFixtures(uid, climbing, fixtures)) return; diff --git a/Content.Shared/Clumsy/ClumsyComponent.cs b/Content.Shared/Clumsy/ClumsyComponent.cs new file mode 100644 index 0000000000..c71f5d0008 --- /dev/null +++ b/Content.Shared/Clumsy/ClumsyComponent.cs @@ -0,0 +1,61 @@ +using Content.Shared.Damage; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Clumsy; + +/// +/// A simple clumsy tag-component. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ClumsyComponent : Component +{ + + // Standard options. Try to fit these in if you can! + + /// + /// Sound to play when clumsy interactions fail. + /// + [DataField] + public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); + + /// + /// Default chance to fail a clumsy interaction. + /// If a system needs to use something else, add a new variable in the component, do not modify this percentage. + /// + [DataField, AutoNetworkedField] + public float ClumsyDefaultCheck = 0.5f; + + /// + /// Default stun time. + /// If a system needs to use something else, add a new variable in the component, do not modify this number. + /// + [DataField, AutoNetworkedField] + public TimeSpan ClumsyDefaultStunTime = TimeSpan.FromSeconds(2.5); + + // Specific options + + /// + /// Sound to play after hitting your head on a table. Ouch! + /// + [DataField] + public SoundCollectionSpecifier TableBonkSound = new SoundCollectionSpecifier("TrayHit"); + + /// + /// Stun time after failing to shoot a gun. + /// + [DataField, AutoNetworkedField] + public TimeSpan GunShootFailStunTime = TimeSpan.FromSeconds(3); + + /// + /// Stun time after failing to shoot a gun. + /// + [DataField, AutoNetworkedField] + public DamageSpecifier? GunShootFailDamage; + + /// + /// Noise to play after failing to shoot a gun. Boom! + /// + [DataField] + public SoundSpecifier GunShootFailSound = new SoundPathSpecifier("/Audio/Weapons/Guns/Gunshots/bang.ogg"); +} diff --git a/Content.Shared/Clumsy/ClumsySystem.cs b/Content.Shared/Clumsy/ClumsySystem.cs new file mode 100644 index 0000000000..e034458197 --- /dev/null +++ b/Content.Shared/Clumsy/ClumsySystem.cs @@ -0,0 +1,146 @@ +using Content.Shared.CCVar; +using Content.Shared.Chemistry.Hypospray.Events; +using Content.Shared.Climbing.Components; +using Content.Shared.Climbing.Events; +using Content.Shared.Damage; +using Content.Shared.IdentityManagement; +using Content.Shared.Medical; +using Content.Shared.Popups; +using Content.Shared.Stunnable; +using Content.Shared.Weapons.Ranged.Events; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Configuration; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Shared.Clumsy; + +public sealed class ClumsySystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + + public override void Initialize() + { + SubscribeLocalEvent(BeforeHyposprayEvent); + SubscribeLocalEvent(BeforeDefibrillatorZapsEvent); + SubscribeLocalEvent(BeforeGunShotEvent); + SubscribeLocalEvent(OnBeforeClimbEvent); + } + + // If you add more clumsy interactions add them in this section! + #region Clumsy interaction events + private void BeforeHyposprayEvent(Entity ent, ref SelfBeforeHyposprayInjectsEvent args) + { + // Clumsy people sometimes inject themselves! Apparently syringes are clumsy proof... + if (!_random.Prob(ent.Comp.ClumsyDefaultCheck)) + return; + + args.TargetGettingInjected = args.EntityUsingHypospray; + args.InjectMessageOverride = "hypospray-component-inject-self-clumsy-message"; + _audio.PlayPvs(ent.Comp.ClumsySound, ent); + } + + private void BeforeDefibrillatorZapsEvent(Entity ent, ref SelfBeforeDefibrillatorZapsEvent args) + { + // Clumsy people sometimes defib themselves! + if (!_random.Prob(ent.Comp.ClumsyDefaultCheck)) + return; + + args.DefibTarget = args.EntityUsingDefib; + _audio.PlayPvs(ent.Comp.ClumsySound, ent); + + } + + private void BeforeGunShotEvent(Entity ent, ref SelfBeforeGunShotEvent args) + { + // Clumsy people sometimes can't shoot :( + + if (args.Gun.Comp.ClumsyProof) + return; + + if (!_random.Prob(ent.Comp.ClumsyDefaultCheck)) + return; + + if (ent.Comp.GunShootFailDamage != null) + _damageable.TryChangeDamage(ent, ent.Comp.GunShootFailDamage, origin: ent); + + _stun.TryParalyze(ent, ent.Comp.GunShootFailStunTime, true); + + // Apply salt to the wound ("Honk!") (No idea what this comment means) + _audio.PlayPvs(ent.Comp.GunShootFailSound, ent); + _audio.PlayPvs(ent.Comp.ClumsySound, ent); + + _popup.PopupEntity(Loc.GetString("gun-clumsy"), ent, ent); + args.Cancel(); + } + + private void OnBeforeClimbEvent(Entity ent, ref SelfBeforeClimbEvent args) + { + // This event is called in shared, thats why it has all the extra prediction stuff. + var rand = new System.Random((int)_timing.CurTick.Value); + + // If someone is putting you on the table, always get past the guard. + if (!_cfg.GetCVar(CCVars.GameTableBonk) && args.PuttingOnTable == ent.Owner && !rand.Prob(ent.Comp.ClumsyDefaultCheck)) + return; + + HitHeadClumsy(ent, args.BeingClimbedOn); + + _audio.PlayPredicted(ent.Comp.ClumsySound, ent, ent); + + _audio.PlayPredicted(ent.Comp.TableBonkSound, ent, ent); + + var gettingPutOnTableName = Identity.Entity(args.GettingPutOnTable, EntityManager); + var puttingOnTableName = Identity.Entity(args.PuttingOnTable, EntityManager); + + if (args.PuttingOnTable == ent.Owner) + { + // You are slamming yourself onto the table. + _popup.PopupPredicted( + Loc.GetString("bonkable-success-message-user", ("bonkable", args.BeingClimbedOn)), + Loc.GetString("bonkable-success-message-others", ("victim", gettingPutOnTableName), ("bonkable", args.BeingClimbedOn)), + ent, + ent); + } + else + { + // Someone else slamed you onto the table. + // This is only run in server so you need to use popup entity. + _popup.PopupPredicted( + Loc.GetString("forced-bonkable-success-message", + ("bonker", puttingOnTableName), + ("victim", gettingPutOnTableName), + ("bonkable", args.BeingClimbedOn)), + ent, + null); + } + + args.Cancel(); + } + #endregion + + #region Helper functions + /// + /// "Hits" an entites head against the given table. + /// + // Oh this fucntion is public le- NO!! This is only public for the one admin command if you use this anywhere else I will cry. + public void HitHeadClumsy(Entity target, EntityUid table) + { + var stunTime = target.Comp.ClumsyDefaultStunTime; + + if (TryComp(table, out var bonkComp)) + { + stunTime = bonkComp.BonkTime; + if (bonkComp.BonkDamage != null) + _damageable.TryChangeDamage(target, bonkComp.BonkDamage, true); + } + + _stun.TryParalyze(target, stunTime, true); + } + #endregion +} diff --git a/Content.Shared/Interaction/Components/ClumsyComponent.cs b/Content.Shared/Interaction/Components/ClumsyComponent.cs deleted file mode 100644 index 824696c838..0000000000 --- a/Content.Shared/Interaction/Components/ClumsyComponent.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Content.Shared.Damage; -using Robust.Shared.Audio; -using Robust.Shared.GameStates; - -namespace Content.Shared.Interaction.Components; - -/// -/// A simple clumsy tag-component. -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class ClumsyComponent : Component -{ - /// - /// Damage dealt to a clumsy character when they try to fire a gun. - /// - [DataField(required: true), AutoNetworkedField] - public DamageSpecifier ClumsyDamage = default!; - - /// - /// Sound to play when clumsy interactions fail. - /// - [DataField] - public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); -} diff --git a/Content.Shared/Interaction/SharedInteractionSystem.Clumsy.cs b/Content.Shared/Interaction/SharedInteractionSystem.Clumsy.cs deleted file mode 100644 index 9e45847e07..0000000000 --- a/Content.Shared/Interaction/SharedInteractionSystem.Clumsy.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Content.Shared.Interaction.Components; -using Robust.Shared.Random; - -namespace Content.Shared.Interaction -{ - public partial class SharedInteractionSystem - { - public bool RollClumsy(ClumsyComponent component, float chance) - { - return component.Running && _random.Prob(chance); - } - - /// - /// Rolls a probability chance for a "bad action" if the target entity is clumsy. - /// - /// The entity that the clumsy check is happening for. - /// - /// The chance that a "bad action" happens if the user is clumsy, between 0 and 1 inclusive. - /// - /// True if a "bad action" happened, false if the normal action should happen. - public bool TryRollClumsy(EntityUid entity, float chance, ClumsyComponent? component = null) - { - return Resolve(entity, ref component, false) && RollClumsy(component, chance); - } - } -} diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index c910a9ae77..9573f9b43d 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -1,4 +1,7 @@ +using Content.Shared.Chat; using Content.Shared.Chemistry; +using Content.Shared.Chemistry.Hypospray.Events; +using Content.Shared.Climbing.Events; using Content.Shared.Damage; using Content.Shared.Electrocution; using Content.Shared.Explosion; @@ -15,7 +18,7 @@ using Content.Shared.Slippery; using Content.Shared.Strip.Components; using Content.Shared.Temperature; using Content.Shared.Verbs; -using Content.Shared.Chat; +using Content.Shared.Weapons.Ranged.Events; namespace Content.Shared.Inventory; @@ -33,6 +36,10 @@ public partial class InventorySystem SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); // by-ref events SubscribeLocalEvent(RefRelayInventoryEvent); diff --git a/Content.Shared/Medical/DefibrillatorEvents.cs b/Content.Shared/Medical/DefibrillatorEvents.cs new file mode 100644 index 0000000000..54a21a40d4 --- /dev/null +++ b/Content.Shared/Medical/DefibrillatorEvents.cs @@ -0,0 +1,39 @@ +using Content.Shared.Inventory; + +namespace Content.Shared.Medical; + +[ByRefEvent] +public readonly record struct TargetDefibrillatedEvent(EntityUid User, Entity Defibrillator); + +public abstract class BeforeDefibrillatorZapsEvent : CancellableEntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET; + public EntityUid EntityUsingDefib; + public readonly EntityUid Defib; + public EntityUid DefibTarget; + + public BeforeDefibrillatorZapsEvent(EntityUid entityUsingDefib, EntityUid defib, EntityUid defibTarget) + { + EntityUsingDefib = entityUsingDefib; + Defib = defib; + DefibTarget = defibTarget; + } +} + +/// +/// This event is raised on the user using the defibrillator before is actually zaps someone. +/// The event is triggered on the user and all their clothing. +/// +public sealed class SelfBeforeDefibrillatorZapsEvent : BeforeDefibrillatorZapsEvent +{ + public SelfBeforeDefibrillatorZapsEvent(EntityUid entityUsingDefib, EntityUid defib, EntityUid defibtarget) : base(entityUsingDefib, defib, defibtarget) { } +} + +/// +/// This event is raised on the target before it gets zapped with the defibrillator. +/// The event is triggered on the target itself and all its clothing. +/// +public sealed class TargetBeforeDefibrillatorZapsEvent : BeforeDefibrillatorZapsEvent +{ + public TargetBeforeDefibrillatorZapsEvent(EntityUid entityUsingDefib, EntityUid defib, EntityUid defibtarget) : base(entityUsingDefib, defib, defibtarget) { } +} diff --git a/Content.Shared/Medical/TargetDefibrillatedEvent.cs b/Content.Shared/Medical/TargetDefibrillatedEvent.cs deleted file mode 100644 index 60d1a21584..0000000000 --- a/Content.Shared/Medical/TargetDefibrillatedEvent.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace Content.Shared.Medical; - -[ByRefEvent] -public readonly record struct TargetDefibrillatedEvent(EntityUid User, Entity Defibrillator); diff --git a/Content.Shared/Weapons/Ranged/Events/BeforeGunShootEvent.cs b/Content.Shared/Weapons/Ranged/Events/BeforeGunShootEvent.cs new file mode 100644 index 0000000000..1d3317c840 --- /dev/null +++ b/Content.Shared/Weapons/Ranged/Events/BeforeGunShootEvent.cs @@ -0,0 +1,20 @@ +using Content.Shared.Inventory; +using Content.Shared.Weapons.Ranged.Components; + +namespace Content.Shared.Weapons.Ranged.Events; +/// +/// This event is triggered on an entity right before they shoot a gun. +/// +public sealed partial class SelfBeforeGunShotEvent : CancellableEntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET; + public readonly EntityUid Shooter; + public readonly Entity Gun; + public readonly List<(EntityUid? Entity, IShootable Shootable)> Ammo; + public SelfBeforeGunShotEvent(EntityUid shooter, Entity gun, List<(EntityUid? Entity, IShootable Shootable)> ammo) + { + Shooter = shooter; + Gun = gun; + Ammo = ammo; + } +} diff --git a/Resources/Locale/en-US/bonk/components/bonkable-component.ftl b/Resources/Locale/en-US/bonk/components/bonkable-component.ftl index 560b10c46e..1a79da3509 100644 --- a/Resources/Locale/en-US/bonk/components/bonkable-component.ftl +++ b/Resources/Locale/en-US/bonk/components/bonkable-component.ftl @@ -1,2 +1,4 @@ -bonkable-success-message-others = { CAPITALIZE(THE($user)) } bonks { POSS-ADJ($user) } head against { THE($bonkable) } -bonkable-success-message-user = You bonk your head against { THE($bonkable) } +forced-bonkable-success-message = { CAPITALIZE($bonker) } bonks {$victim}s head against { THE($bonkable) }! + +bonkable-success-message-user = You bonk your head against { THE($bonkable) }! +bonkable-success-message-others = {$victim} bonks their head against { THE($bonkable) }! diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 2280c3fecb..48c83c8d1e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1360,7 +1360,7 @@ rules: ghost-role-information-nonantagonist-rules - type: GhostTakeoverAvailable - type: Clumsy - clumsyDamage: + gunShootFailDamage: types: Blunt: 5 Piercing: 4 @@ -1536,7 +1536,7 @@ description: Cousins to the sentient race of lizard people, kobolds blend in with their natural habitat and are as nasty as monkeys; ready to pull out your hair and stab you to death. components: - type: Clumsy - clumsyDamage: + gunShootFailDamage: types: Blunt: 2 Piercing: 7 diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index b21f19edd3..dca47e1c83 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -231,7 +231,7 @@ - type: Hands - type: ComplexInteraction - type: Clumsy - clumsyDamage: + gunShootFailDamage: types: Blunt: 5 Piercing: 4 diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml index 2862980dad..4b3b4c1874 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml @@ -32,8 +32,6 @@ bonkDamage: types: Blunt: 4 - bonkSound: !type:SoundCollectionSpecifier - collection: TrayHit - type: Clickable - type: FootstepModifier footstepSoundCollection: diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index 29232d9dbb..b8f289e70e 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -13,7 +13,7 @@ - !type:AddComponentSpecial components: - type: Clumsy - clumsyDamage: + gunShootFailDamage: types: #literally just picked semi random valus. i tested this once and tweaked it. Blunt: 5 Piercing: 4 From abdefbd622d4e4a47b1ef7c5f11a499a71fdd9e7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 15 Nov 2024 23:47:08 +0000 Subject: [PATCH 08/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1c796d8b45..a31e83355d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: FATFSAAM2 - changes: - - message: added 7 new figurine voice lines. - type: Add - - message: changed a hos figurine voice line to not include a typo. - type: Fix - id: 7113 - time: '2024-08-15T12:34:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30865 - author: to4no_fix changes: - message: Added a new electropack that shocks when a trigger is triggered @@ -3944,3 +3935,11 @@ id: 7612 time: '2024-11-15T21:21:08.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32985 +- author: Beck Thompson + changes: + - message: Minor tweaks to clumsiness. Some of the timings and or noises have been + changed slightly! + type: Tweak + id: 7613 + time: '2024-11-15T23:46:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31147 From e7e1d9605137ea916eb0931e8076d2b67181613a Mon Sep 17 00:00:00 2001 From: Saphire Lattice Date: Sat, 16 Nov 2024 10:25:06 +0700 Subject: [PATCH 09/41] Improve crayon UI to not be stuck in 1996 (#33101) * Improve crayon UI to not be stuck in 1996 * Make a horrifying crayon spaghetti * Crayon * Undeprecate the crayon, describe the crayon --- .../Crayon/UI/CrayonBoundUserInterface.cs | 12 +- Content.Client/Crayon/UI/CrayonWindow.xaml | 11 +- Content.Client/Crayon/UI/CrayonWindow.xaml.cs | 138 ++++- Content.Server/Crayon/CrayonSystem.cs | 2 + .../Crayon/SharedCrayonComponent.cs | 44 +- .../Locale/en-US/crayon/crayon-component.ftl | 7 + Resources/Prototypes/Decals/crayons.yml | 586 +++++++++--------- 7 files changed, 466 insertions(+), 334 deletions(-) diff --git a/Content.Client/Crayon/UI/CrayonBoundUserInterface.cs b/Content.Client/Crayon/UI/CrayonBoundUserInterface.cs index e5be0b1811..44501767dd 100644 --- a/Content.Client/Crayon/UI/CrayonBoundUserInterface.cs +++ b/Content.Client/Crayon/UI/CrayonBoundUserInterface.cs @@ -31,7 +31,7 @@ namespace Content.Client.Crayon.UI private void PopulateCrayons() { var crayonDecals = _protoManager.EnumeratePrototypes().Where(x => x.Tags.Contains("crayon")); - _menu?.Populate(crayonDecals); + _menu?.Populate(crayonDecals.ToList()); } public override void OnProtoReload(PrototypesReloadedEventArgs args) @@ -44,6 +44,16 @@ namespace Content.Client.Crayon.UI PopulateCrayons(); } + protected override void ReceiveMessage(BoundUserInterfaceMessage message) + { + base.ReceiveMessage(message); + + if (_menu is null || message is not CrayonUsedMessage crayonMessage) + return; + + _menu.AdvanceState(crayonMessage.DrawnDecal); + } + protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); diff --git a/Content.Client/Crayon/UI/CrayonWindow.xaml b/Content.Client/Crayon/UI/CrayonWindow.xaml index 7729318ae7..7acb22551b 100644 --- a/Content.Client/Crayon/UI/CrayonWindow.xaml +++ b/Content.Client/Crayon/UI/CrayonWindow.xaml @@ -1,14 +1,13 @@  + MinSize="450 500" + SetSize="450 500"> - + - - - + + diff --git a/Content.Client/Crayon/UI/CrayonWindow.xaml.cs b/Content.Client/Crayon/UI/CrayonWindow.xaml.cs index 6ef282d219..88475562c6 100644 --- a/Content.Client/Crayon/UI/CrayonWindow.xaml.cs +++ b/Content.Client/Crayon/UI/CrayonWindow.xaml.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; +using System.Linq; using Content.Client.Stylesheets; using Content.Shared.Crayon; using Content.Shared.Decals; using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; @@ -18,7 +20,12 @@ namespace Content.Client.Crayon.UI [GenerateTypedNameReferences] public sealed partial class CrayonWindow : DefaultWindow { - private Dictionary? _decals; + [Dependency] private readonly IEntitySystemManager _entitySystem = default!; + private readonly SpriteSystem _spriteSystem = default!; + + private Dictionary>? _decals; + private List? _allDecals; + private string? _autoSelected; private string? _selected; private Color _color; @@ -28,8 +35,10 @@ namespace Content.Client.Crayon.UI public CrayonWindow() { RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + _spriteSystem = _entitySystem.GetEntitySystem(); - Search.OnTextChanged += _ => RefreshList(); + Search.OnTextChanged += SearchChanged; ColorSelector.OnColorChanged += SelectColor; } @@ -44,51 +53,94 @@ namespace Content.Client.Crayon.UI private void RefreshList() { // Clear - Grid.DisposeAllChildren(); - if (_decals == null) + Grids.DisposeAllChildren(); + + if (_decals == null || _allDecals == null) return; var filter = Search.Text; - foreach (var (decal, tex) in _decals) + var comma = filter.IndexOf(','); + var first = (comma == -1 ? filter : filter[..comma]).Trim(); + + var names = _decals.Keys.ToList(); + names.Sort((a, b) => a == "random" ? 1 : b == "random" ? -1 : a.CompareTo(b)); + + if (_autoSelected != null && first != _autoSelected && _allDecals.Contains(first)) { - if (!decal.Contains(filter)) + _selected = first; + _autoSelected = _selected; + OnSelected?.Invoke(_selected); + } + + foreach (var categoryName in names) + { + var locName = Loc.GetString("crayon-category-" + categoryName); + var category = _decals[categoryName].Where(d => locName.Contains(first) || d.Name.Contains(first)).ToList(); + + if (category.Count == 0) continue; - var button = new TextureButton() + var label = new Label { - TextureNormal = tex, - Name = decal, - ToolTip = decal, - Modulate = _color, + Text = locName }; - button.OnPressed += ButtonOnPressed; - if (_selected == decal) + + var grid = new GridContainer { - var panelContainer = new PanelContainer() + Columns = 6, + Margin = new Thickness(0, 0, 0, 16) + }; + + Grids.AddChild(label); + Grids.AddChild(grid); + + foreach (var (name, texture) in category) + { + var button = new TextureButton() { - PanelOverride = new StyleBoxFlat() - { - BackgroundColor = StyleNano.ButtonColorDefault, - }, - Children = - { - button, - }, + TextureNormal = texture, + Name = name, + ToolTip = name, + Modulate = _color, + Scale = new System.Numerics.Vector2(2, 2) }; - Grid.AddChild(panelContainer); - } - else - { - Grid.AddChild(button); + button.OnPressed += ButtonOnPressed; + + if (_selected == name) + { + var panelContainer = new PanelContainer() + { + PanelOverride = new StyleBoxFlat() + { + BackgroundColor = StyleNano.ButtonColorDefault, + }, + Children = + { + button, + }, + }; + grid.AddChild(panelContainer); + } + else + { + grid.AddChild(button); + } } } } + private void SearchChanged(LineEdit.LineEditEventArgs obj) + { + _autoSelected = ""; // Placeholder to kick off the auto-select in refreshlist() + RefreshList(); + } + private void ButtonOnPressed(ButtonEventArgs obj) { if (obj.Button.Name == null) return; _selected = obj.Button.Name; + _autoSelected = null; OnSelected?.Invoke(_selected); RefreshList(); } @@ -107,12 +159,38 @@ namespace Content.Client.Crayon.UI RefreshList(); } - public void Populate(IEnumerable prototypes) + public void AdvanceState(string drawnDecal) { - _decals = new Dictionary(); + var filter = Search.Text; + if (!filter.Contains(',') || !filter.Contains(drawnDecal)) + return; + + var first = filter[..filter.IndexOf(',')].Trim(); + + if (first.Equals(drawnDecal, StringComparison.InvariantCultureIgnoreCase)) + { + Search.Text = filter[(filter.IndexOf(',') + 1)..].Trim(); + _autoSelected = first; + } + + RefreshList(); + } + + public void Populate(List prototypes) + { + _decals = []; + _allDecals = []; + + prototypes.Sort((a, b) => a.ID.CompareTo(b.ID)); + foreach (var decalPrototype in prototypes) { - _decals.Add(decalPrototype.ID, decalPrototype.Sprite.Frame0()); + var category = "random"; + if (decalPrototype.Tags.Count > 1 && decalPrototype.Tags[1].StartsWith("crayon-")) + category = decalPrototype.Tags[1].Replace("crayon-", ""); + var list = _decals.GetOrNew(category); + list.Add((decalPrototype.ID, _spriteSystem.Frame0(decalPrototype.Sprite))); + _allDecals.Add(decalPrototype.ID); } RefreshList(); diff --git a/Content.Server/Crayon/CrayonSystem.cs b/Content.Server/Crayon/CrayonSystem.cs index 07a13d8a34..4257c436c2 100644 --- a/Content.Server/Crayon/CrayonSystem.cs +++ b/Content.Server/Crayon/CrayonSystem.cs @@ -82,6 +82,8 @@ public sealed class CrayonSystem : SharedCrayonSystem if (component.DeleteEmpty && component.Charges <= 0) UseUpCrayon(uid, args.User); + else + _uiSystem.ServerSendUiMessage(uid, SharedCrayonComponent.CrayonUiKey.Key, new CrayonUsedMessage(component.SelectedState)); } private void OnCrayonUse(EntityUid uid, CrayonComponent component, UseInHandEvent args) diff --git a/Content.Shared/Crayon/SharedCrayonComponent.cs b/Content.Shared/Crayon/SharedCrayonComponent.cs index f8e88b218d..a9c21988ea 100644 --- a/Content.Shared/Crayon/SharedCrayonComponent.cs +++ b/Content.Shared/Crayon/SharedCrayonComponent.cs @@ -3,12 +3,23 @@ using Robust.Shared.Serialization; namespace Content.Shared.Crayon { + + /// + /// Component holding the state of a crayon-like component + /// [NetworkedComponent, ComponentProtoName("Crayon"), Access(typeof(SharedCrayonSystem))] public abstract partial class SharedCrayonComponent : Component { + /// + /// The ID of currently selected decal prototype that will be placed when the crayon is used + /// public string SelectedState { get; set; } = string.Empty; - [DataField("color")] public Color Color; + /// + /// Color with which the crayon will draw + /// + [DataField("color")] + public Color Color; [Serializable, NetSerializable] public enum CrayonUiKey : byte @@ -17,6 +28,9 @@ namespace Content.Shared.Crayon } } + /// + /// Used by the client to notify the server about the selected decal ID + /// [Serializable, NetSerializable] public sealed class CrayonSelectMessage : BoundUserInterfaceMessage { @@ -27,6 +41,9 @@ namespace Content.Shared.Crayon } } + /// + /// Sets the color of the crayon, used by Rainbow Crayon + /// [Serializable, NetSerializable] public sealed class CrayonColorMessage : BoundUserInterfaceMessage { @@ -37,13 +54,25 @@ namespace Content.Shared.Crayon } } + /// + /// Server to CLIENT. Notifies the BUI that a decal with given ID has been drawn. + /// Allows the client UI to advance forward in the client-only ephemeral queue, + /// preventing the crayon from becoming a magic text storage device. + /// [Serializable, NetSerializable] - public enum CrayonVisuals + public sealed class CrayonUsedMessage : BoundUserInterfaceMessage { - State, - Color + public readonly string DrawnDecal; + + public CrayonUsedMessage(string drawn) + { + DrawnDecal = drawn; + } } + /// + /// Component state, describes how many charges are left in the crayon in the near-hand UI + /// [Serializable, NetSerializable] public sealed class CrayonComponentState : ComponentState { @@ -60,10 +89,17 @@ namespace Content.Shared.Crayon Capacity = capacity; } } + + /// + /// The state of the crayon UI as sent by the server + /// [Serializable, NetSerializable] public sealed class CrayonBoundUserInterfaceState : BoundUserInterfaceState { public string Selected; + /// + /// Whether or not the color can be selected + /// public bool SelectableColor; public Color Color; diff --git a/Resources/Locale/en-US/crayon/crayon-component.ftl b/Resources/Locale/en-US/crayon/crayon-component.ftl index 444ffa4c45..e13bf76941 100644 --- a/Resources/Locale/en-US/crayon/crayon-component.ftl +++ b/Resources/Locale/en-US/crayon/crayon-component.ftl @@ -8,3 +8,10 @@ crayon-interact-invalid-location = Can't reach there! ## UI crayon-window-title = Crayon +crayon-window-placeholder = Search, or queue a comma-separated list of names +crayon-category-1-brushes = Brushes +crayon-category-2-alphanum = Numbers and letters +crayon-category-3-symbols = Symbols +crayon-category-4-info = Signs +crayon-category-5-graffiti = Graffiti +crayon-category-random = Random diff --git a/Resources/Prototypes/Decals/crayons.yml b/Resources/Prototypes/Decals/crayons.yml index 3be2ec2426..a15619d483 100644 --- a/Resources/Prototypes/Decals/crayons.yml +++ b/Resources/Prototypes/Decals/crayons.yml @@ -1,6 +1,6 @@ - type: decal id: 0 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -10,7 +10,7 @@ - type: decal id: 1 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -20,7 +20,7 @@ - type: decal id: 2 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -30,7 +30,7 @@ - type: decal id: 3 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -40,7 +40,7 @@ - type: decal id: 4 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -50,7 +50,7 @@ - type: decal id: 5 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -60,7 +60,7 @@ - type: decal id: 6 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -70,7 +70,7 @@ - type: decal id: 7 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -80,7 +80,7 @@ - type: decal id: 8 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -90,7 +90,7 @@ - type: decal id: 9 - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -100,7 +100,7 @@ - type: decal id: Blasto - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -110,7 +110,7 @@ - type: decal id: Clandestine - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -120,7 +120,7 @@ - type: decal id: Cyber - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -130,7 +130,7 @@ - type: decal id: Diablo - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -140,7 +140,7 @@ - type: decal id: Donk - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -150,7 +150,7 @@ - type: decal id: Gene - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -160,7 +160,7 @@ - type: decal id: Gib - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -170,7 +170,7 @@ - type: decal id: Max - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -180,7 +180,7 @@ - type: decal id: Newton - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -190,7 +190,7 @@ - type: decal id: North - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -200,7 +200,7 @@ - type: decal id: Omni - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -210,7 +210,7 @@ - type: decal id: Osiron - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -220,7 +220,7 @@ - type: decal id: Prima - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -230,7 +230,7 @@ - type: decal id: Psyke - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -240,7 +240,7 @@ - type: decal id: Sirius - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -250,7 +250,7 @@ - type: decal id: Tunnel - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -260,7 +260,7 @@ - type: decal id: Waffle - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -268,19 +268,9 @@ sprite: Effects/crayondecals.rsi state: Waffle -- type: decal - id: a - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: a - - type: decal id: ampersand - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -290,7 +280,7 @@ - type: decal id: amyjon - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -300,7 +290,7 @@ - type: decal id: arrow - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -308,16 +298,6 @@ sprite: Effects/crayondecals.rsi state: arrow -- type: decal - id: b - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: b - - type: decal id: beepsky tags: ["crayon"] @@ -330,7 +310,7 @@ - type: decal id: biohazard - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -370,7 +350,7 @@ - type: decal id: brush - tags: ["crayon"] + tags: ["crayon", "crayon-1-brushes"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -378,16 +358,6 @@ sprite: Effects/crayondecals.rsi state: brush -- type: decal - id: c - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: c - - type: decal id: carp tags: ["crayon"] @@ -410,7 +380,7 @@ - type: decal id: chevron - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -440,7 +410,7 @@ - type: decal id: comma - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -460,7 +430,7 @@ - type: decal id: credit - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -470,7 +440,7 @@ - type: decal id: cyka - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -478,19 +448,9 @@ sprite: Effects/crayondecals.rsi state: cyka -- type: decal - id: d - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: d - - type: decal id: danger - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -510,7 +470,7 @@ - type: decal id: dot - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -528,19 +488,9 @@ sprite: Effects/crayondecals.rsi state: dwarf -- type: decal - id: e - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: e - - type: decal id: electricdanger - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -550,7 +500,7 @@ - type: decal id: end - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -560,7 +510,7 @@ - type: decal id: engie - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -570,7 +520,7 @@ - type: decal id: equals - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -580,7 +530,7 @@ - type: decal id: evac - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -590,7 +540,7 @@ - type: decal id: exclamationmark - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -598,16 +548,6 @@ sprite: Effects/crayondecals.rsi state: exclamationmark -- type: decal - id: f - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: f - - type: decal id: face tags: ["crayon"] @@ -630,7 +570,7 @@ - type: decal id: firedanger - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -640,7 +580,7 @@ - type: decal id: food - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -658,16 +598,6 @@ sprite: Effects/crayondecals.rsi state: footprint -- type: decal - id: g - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: g - - type: decal id: ghost tags: ["crayon"] @@ -688,19 +618,9 @@ sprite: Effects/crayondecals.rsi state: guy -- type: decal - id: h - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: h - - type: decal id: heart - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -708,49 +628,9 @@ sprite: Effects/crayondecals.rsi state: heart -- type: decal - id: i - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: i - -- type: decal - id: j - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: j - -- type: decal - id: k - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: k - -- type: decal - id: l - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: l - - type: decal id: largebrush - tags: ["crayon"] + tags: ["crayon", "crayon-1-brushes"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -760,7 +640,7 @@ - type: decal id: like - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -770,7 +650,7 @@ - type: decal id: line - tags: ["crayon"] + tags: ["crayon", "crayon-1-brushes"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -778,19 +658,9 @@ sprite: Effects/crayondecals.rsi state: line -- type: decal - id: m - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: m - - type: decal id: matt - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -800,7 +670,7 @@ - type: decal id: med - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -810,7 +680,7 @@ - type: decal id: minus - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -818,19 +688,9 @@ sprite: Effects/crayondecals.rsi state: minus -- type: decal - id: n - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: n - - type: decal id: nay - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -838,26 +698,6 @@ sprite: Effects/crayondecals.rsi state: nay -- type: decal - id: o - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: o - -- type: decal - id: p - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: p - - type: decal id: pawprint tags: ["crayon"] @@ -870,7 +710,7 @@ - type: decal id: peace - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -880,7 +720,7 @@ - type: decal id: percent - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -890,7 +730,7 @@ - type: decal id: plus - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -900,7 +740,7 @@ - type: decal id: pound - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -910,7 +750,7 @@ - type: decal id: prolizard - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -918,19 +758,9 @@ sprite: Effects/crayondecals.rsi state: prolizard -- type: decal - id: q - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: q - - type: decal id: questionmark - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -938,19 +768,9 @@ sprite: Effects/crayondecals.rsi state: questionmark -- type: decal - id: r - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: r - - type: decal id: radiation - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -960,7 +780,7 @@ - type: decal id: revolution - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -970,7 +790,7 @@ - type: decal id: rune1 - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -980,7 +800,7 @@ - type: decal id: rune2 - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -990,7 +810,7 @@ - type: decal id: rune3 - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1000,7 +820,7 @@ - type: decal id: rune4 - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1010,7 +830,7 @@ - type: decal id: rune5 - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1020,7 +840,7 @@ - type: decal id: rune6 - tags: ["crayon"] + tags: ["crayon", "crayon-5-graffiti"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1028,19 +848,9 @@ sprite: Effects/crayondecals.rsi state: rune6 -- type: decal - id: s - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: s - - type: decal id: safe - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1060,7 +870,7 @@ - type: decal id: shop - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1070,7 +880,7 @@ - type: decal id: shortline - tags: ["crayon"] + tags: ["crayon", "crayon-1-brushes"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1090,7 +900,7 @@ - type: decal id: skull - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1100,7 +910,7 @@ - type: decal id: slash - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1110,7 +920,7 @@ - type: decal id: smallbrush - tags: ["crayon"] + tags: ["crayon", "crayon-1-brushes"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1130,7 +940,7 @@ - type: decal id: space - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1150,7 +960,7 @@ - type: decal id: star - tags: ["crayon"] + tags: ["crayon", "crayon-3-symbols"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1168,16 +978,6 @@ sprite: Effects/crayondecals.rsi state: stickman -- type: decal - id: t - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: t - - type: decal id: taser tags: ["crayon"] @@ -1190,7 +990,7 @@ - type: decal id: thinline - tags: ["crayon"] + tags: ["crayon", "crayon-1-brushes"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1220,7 +1020,7 @@ - type: decal id: trade - tags: ["crayon"] + tags: ["crayon", "crayon-4-info"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1228,16 +1028,6 @@ sprite: Effects/crayondecals.rsi state: trade -- type: decal - id: u - tags: ["crayon"] - defaultCleanable: true - defaultCustomColor: true - defaultSnap: false - sprite: - sprite: Effects/crayondecals.rsi - state: u - - type: decal id: uboa tags: ["crayon"] @@ -1248,9 +1038,219 @@ sprite: Effects/crayondecals.rsi state: uboa +- type: decal + id: a + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: a + +- type: decal + id: b + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: b + +- type: decal + id: c + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: c + +- type: decal + id: d + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: d + +- type: decal + id: e + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: e + +- type: decal + id: f + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: f + +- type: decal + id: g + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: g + +- type: decal + id: h + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: h + +- type: decal + id: i + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: i + +- type: decal + id: j + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: j + +- type: decal + id: k + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: k + +- type: decal + id: l + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: l + +- type: decal + id: m + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: m + +- type: decal + id: n + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: n + +- type: decal + id: o + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: o + +- type: decal + id: p + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: p + +- type: decal + id: q + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: q + +- type: decal + id: r + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: r + +- type: decal + id: s + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: s + +- type: decal + id: t + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: t + +- type: decal + id: u + tags: ["crayon", "crayon-2-alphanum"] + defaultCleanable: true + defaultCustomColor: true + defaultSnap: false + sprite: + sprite: Effects/crayondecals.rsi + state: u + - type: decal id: v - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1260,7 +1260,7 @@ - type: decal id: w - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1270,7 +1270,7 @@ - type: decal id: x - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1280,7 +1280,7 @@ - type: decal id: y - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false @@ -1290,7 +1290,7 @@ - type: decal id: z - tags: ["crayon"] + tags: ["crayon", "crayon-2-alphanum"] defaultCleanable: true defaultCustomColor: true defaultSnap: false From 4426bbe784d51445d5fde307106db3c4f3d9c3a6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 16 Nov 2024 03:26:15 +0000 Subject: [PATCH 10/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a31e83355d..5860700053 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,21 +1,4 @@ Entries: -- author: to4no_fix - changes: - - message: Added a new electropack that shocks when a trigger is triggered - type: Add - - message: Added a new shock collar that shocks when a trigger is triggered - type: Add - - message: Two shock collars and two remote signallers added to the warden's locker - type: Add - - message: Shock collar added as a new target for the thief - type: Add - - message: A new Special Means technology has been added to the Arsenal research - branch at the 1st research level. Its research opens up the possibility of producing - electropacks at security techfab. The cost of technology research is 5000 - type: Add - id: 7114 - time: '2024-08-15T14:30:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30529 - author: Mervill changes: - message: The Gas Analyzer won't spuriously shut down for seemly no reason. @@ -3943,3 +3926,10 @@ id: 7613 time: '2024-11-15T23:46:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31147 +- author: SaphireLattice + changes: + - message: Crayon UI now has categories and queue + type: Add + id: 7614 + time: '2024-11-16T03:25:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33101 From 862c2ac858ce9b88dc2992ca21976e54e16b3953 Mon Sep 17 00:00:00 2001 From: Southbridge <7013162+southbridge-fur@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:26:47 -0500 Subject: [PATCH 11/41] BRB sign in the Bureaucracy Crate (#33341) Added the brb sign to the Bureaucracy Crate --- Resources/Prototypes/Catalog/Fills/Crates/service.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/Fills/Crates/service.yml b/Resources/Prototypes/Catalog/Fills/Crates/service.yml index 6a109fbf8e..995a4218ae 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/service.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/service.yml @@ -130,6 +130,7 @@ - id: BoxFolderYellow - id: NewtonCradle - id: BoxEnvelope + - id: BrbSign - type: entity id: CrateServiceFaxMachine From c4e8751ee6c0ed0a3c3c664703ee87ca3ddb6b26 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 16 Nov 2024 03:27:57 +0000 Subject: [PATCH 12/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5860700053..b030fbbb32 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,20 +1,4 @@ Entries: -- author: Mervill - changes: - - message: The Gas Analyzer won't spuriously shut down for seemly no reason. - type: Tweak - - message: The Gas Analyzer will always switch to the device tab when a new object - is scanned. - type: Tweak - - message: The Gas Analyzer's interaction range is now equal to the standard interaction - range - type: Fix - - message: Clicking the Gas Analyzer when it's in your hand has proper enable/disable - behavior. - type: Fix - id: 7115 - time: '2024-08-15T14:45:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30763 - author: Nimfar11 changes: - message: Adds a gold toilet @@ -3933,3 +3917,10 @@ id: 7614 time: '2024-11-16T03:25:06.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33101 +- author: Southbridge + changes: + - message: The BRB sign is now included in the Bureaucracy Crate + type: Add + id: 7615 + time: '2024-11-16T03:26:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33341 From 1f5eb6a08b5ae97af1f842219d31766b811fcf0d Mon Sep 17 00:00:00 2001 From: Saphire Lattice Date: Sat, 16 Nov 2024 10:39:19 +0700 Subject: [PATCH 13/41] Fix utensils not being thrown away (#33326) --- Content.Server/Nutrition/EntitySystems/UtensilSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Nutrition/EntitySystems/UtensilSystem.cs b/Content.Server/Nutrition/EntitySystems/UtensilSystem.cs index 1f3d5afb43..766c38d561 100644 --- a/Content.Server/Nutrition/EntitySystems/UtensilSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/UtensilSystem.cs @@ -44,7 +44,7 @@ namespace Content.Server.Nutrition.EntitySystems public (bool Success, bool Handled) TryUseUtensil(EntityUid user, EntityUid target, Entity utensil) { if (!EntityManager.TryGetComponent(target, out FoodComponent? food)) - return (false, true); + return (false, false); //Prevents food usage with a wrong utensil if ((food.Utensil & utensil.Comp.Types) == 0) From 6bcfe6fb3dc21ed7528227baa4c161edf2edad77 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 16 Nov 2024 03:40:25 +0000 Subject: [PATCH 14/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b030fbbb32..39adf63968 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: Nimfar11 - changes: - - message: Adds a gold toilet - type: Add - - message: Adds a target for the Thief to steal the golden toilet - type: Add - - message: Corrected the sprite image for the normal toilet. - type: Fix - id: 7116 - time: '2024-08-15T19:23:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31049 - author: themias changes: - message: Raw meat cutlets can be cooked on a grill @@ -3924,3 +3913,10 @@ id: 7615 time: '2024-11-16T03:26:48.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33341 +- author: SaphireLattice + changes: + - message: Utensils can finally go into disposals + type: Fix + id: 7616 + time: '2024-11-16T03:39:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33326 From 11963e50b1efcfb87bcd65d4c0045ca256cabb6c Mon Sep 17 00:00:00 2001 From: MossyGreySlope Date: Sat, 16 Nov 2024 13:57:33 +1000 Subject: [PATCH 15/41] Fix server crash when the seed extractor is used on the dev map (#33312) handle event when using seed extractor Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Server/Botany/Systems/SeedExtractorSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/Botany/Systems/SeedExtractorSystem.cs b/Content.Server/Botany/Systems/SeedExtractorSystem.cs index 93f76473ff..c7e20983a7 100644 --- a/Content.Server/Botany/Systems/SeedExtractorSystem.cs +++ b/Content.Server/Botany/Systems/SeedExtractorSystem.cs @@ -38,6 +38,7 @@ public sealed class SeedExtractorSystem : EntitySystem args.User, PopupType.Medium); QueueDel(args.Used); + args.Handled = true; var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1); var coords = Transform(uid).Coordinates; From 4f659b9d6de85d19e12a2992350fffa0033d1988 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Sat, 16 Nov 2024 16:30:47 +1200 Subject: [PATCH 16/41] Solar assembly crate buff (#33019) * more flatpacks + glass * solar crate price increase * price increase * 1250 spesos * Update Resources/Prototypes/Catalog/Fills/Crates/engines.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Resources/Prototypes/Catalog/Cargo/cargo_engines.yml | 2 +- Resources/Prototypes/Catalog/Fills/Crates/engines.yml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml index 72f9d3a59b..75a1e24cdf 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml @@ -66,7 +66,7 @@ sprite: Objects/Devices/flatpack.rsi state: solar-assembly-part product: CrateEngineeringSolar - cost: 525 + cost: 1250 category: cargoproduct-category-name-engineering group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml index c37b7b7535..638e94080e 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml @@ -120,12 +120,14 @@ id: CrateEngineeringSolar parent: CrateEngineering name: solar assembly crate - description: Parts for constructing solar panels and trackers. + description: A kit with solar flatpacks and glass to construct ten solar panels. components: - type: StorageFill contents: - id: SolarAssemblyFlatpack - amount: 6 + amount: 10 + - id: SheetGlass10 + amount: 2 - type: entity id: CrateEngineeringShuttle From 7077b930f27dc8e9fbe3563ff4c3053b0549f70c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 16 Nov 2024 04:31:53 +0000 Subject: [PATCH 17/41] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 39adf63968..58fe44307b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: themias - changes: - - message: Raw meat cutlets can be cooked on a grill - type: Tweak - id: 7117 - time: '2024-08-15T19:30:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31048 - author: IProduceWidgets changes: - message: Meteor dust should more consistently happen instead of meteors. @@ -3920,3 +3913,12 @@ id: 7616 time: '2024-11-16T03:39:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/33326 +- author: K-Dynamic + changes: + - message: Solar assembly crate now comes with 10 flatpacks and 20 glass to make + expansion and repairs easier, as well as increasing in price from 525 to 1250 + spesos. + type: Tweak + id: 7617 + time: '2024-11-16T04:30:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/33019 From 2c82a2dfc0cf0cf52f6045c2b59d2232e3714897 Mon Sep 17 00:00:00 2001 From: dffdff2423 Date: Sat, 16 Nov 2024 00:09:29 -0500 Subject: [PATCH 18/41] Add admin remarks button to lobby (#31761) --- Content.Client/Lobby/LobbyUIController.cs | 2 +- .../Lobby/UI/CharacterSetupGui.xaml | 6 +++++ .../Lobby/UI/CharacterSetupGui.xaml.cs | 27 +++++++++---------- Content.Client/Lobby/UI/LobbyGui.xaml.cs | 1 - Resources/Locale/en-US/lobby/lobby-gui.ftl | 2 +- .../preferences/ui/character-setup-gui.ftl | 3 ++- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Content.Client/Lobby/LobbyUIController.cs b/Content.Client/Lobby/LobbyUIController.cs index 3cf98c98ab..50a2551998 100644 --- a/Content.Client/Lobby/LobbyUIController.cs +++ b/Content.Client/Lobby/LobbyUIController.cs @@ -279,7 +279,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered { diff --git a/Content.Client/Lobby/UI/CharacterSetupGui.xaml b/Content.Client/Lobby/UI/CharacterSetupGui.xaml index f83be26588..c463987a1f 100644 --- a/Content.Client/Lobby/UI/CharacterSetupGui.xaml +++ b/Content.Client/Lobby/UI/CharacterSetupGui.xaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client" xmlns:style="clr-namespace:Content.Client.Stylesheets" + xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls" VerticalExpand="True"> @@ -10,10 +11,15 @@